paper2skills Playbook

Diversity-Aware Reranking with SMMR

Skill-Diversity-Reranking-SMMR · 05-推荐系统

causalexperimentoptimizationrecommendationragpricing供应链与补货推荐与搜索定价与利润WF-A 智能补货WF-F 动态定价WF-G Listing内容优化
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐☆
业务视角
适用角色运营负责人 / 选品负责人 · 产品经理 · 广告优化师
适用平台Amazon · DTC 独立站 · 邮件/SMS 个性化
什么情况下用老客来了只买一件就走,相关产品没被推出去;Bundle 商品连带销售做不起来;站内推荐位点击率低
成功是什么样的老客连带购买率提升 20-35%,客单价提升,品类交叉销售做起来
业务痛点
老客复购率上不去相关产品没有被看到Bundle 凑单没人用新品没有曝光机会

1. 解决的问题

传统推荐系统追求相关性最大化,导致结果高度同质化——用户搜"婴儿奶粉",首页全是同一品牌同一段位。

2. 核心算法逻辑

核心问题:传统推荐系统追求相关性最大化,导致结果高度同质化——用户搜"婴儿奶粉",首页全是同一品牌同一段位。长期看会:

3. 业务应用场景

业务问题:母婴电商首页"猜你喜欢"长期被2-3个爆款奶粉/纸尿裤占据,用户浏览深度下降,新品上架3个月无曝光。

SMMR 应用: 1. 召回层:Top-100候选(按相关性排序) 2. 多样性重排序: - 品类维度:奶粉、纸尿裤、辅食、玩具、童装均衡 - 品牌维度:避免同一品牌连续出现 - 价格维度:高/中/低档搭配 - 年龄段维度:0-6月、6-12月、1-2岁、2岁+ 3. 参数调优:$\lambda=0.7$(重相关性),$t=1.2$(中高多样性)

预期产出: - 首页品类覆盖:3个 → 8个品类 - 平均浏览深度:+25% - 长尾商品点击率:+40% - 整体转化率:维持或微降(<2%),但GMV结构更健康

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI:长尾GMV提升15-30%,新品冷启动周期缩短50%
  • 难度:⭐⭐☆☆☆(2/5)— 轻量后处理,A/B测试友好
  • 优先级:⭐⭐⭐⭐☆(4/5)— 直接替换现有重排模块,落地快

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
Diversity-Aware Reranking — SMMR (Sampling-Based MMR)
用于推荐系统结果列表的多样性重排序
"""

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity


class SMMR:
    """Sampling-Based MMR Reranker"""

    def __init__(self, lambda_param=0.7, temperature=1.0, batch_growth=2):
        self.lambda_param = lambda_param
        self.temperature = temperature
        self.batch_growth = batch_growth

    def rerank(self, item_ids, relevance_scores, item_features, k=10):
        """
        SMMR重排序

        Args:
            item_ids: 候选商品ID列表
            relevance_scores: 相关性分数
            item_features: 商品特征向量 (n_items, dim)
            k: 输出列表长度
        """
        n = len(item_ids)
        selected = []
        selected_features = []
        remaining = set(range(n))

        # 标准化相关性分数
        rel_norm = (relevance_scores - relevance_scores.min()) / \
                   (relevance_scores.max() - relevance_scores.min() + 1e-8)

        while len(selected) < k and remaining:
            # 计算每个剩余商品的MMR分数
            mmr_scores = []
            for i in remaining:
                # 相关性项
                rel_term = self.lambda_param * rel_norm[i]

                # 多样性项:与已选商品的最大相似度
                if selected_features:
                    sims = cosine_similarity(
                        item_features[i:i+1],
                        np.array(selected_features)
                    )[0]
                    max_sim = sims.max()
                else:
                    max_sim = 0

                div_term = (1 - self.lambda_param) * max_sim
                mmr_score = rel_term - div_term
                mmr_scores.append((i, mmr_score))

            # 概率采样(温度参数控制随机性)
            scores = np.array([s for _, s in mmr_scores])
            scores = scores / self.temperature

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。