paper2skills Playbook

Ad-Aware Recommendation — 广告感知协同排序:有机推荐与赞助商品的联合优化

Skill-Ad-Aware-Recommendation · 05-推荐系统

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

1. 解决的问题

传统电商推荐系统中,广告排序(Sponsored Ranking) 和 有机推荐(Organic Recommendation) 是两个完全独立的系统,分别优化 CTR/ROAS 和个性化相关性,导致用户体验分裂——同一用户可能在广告位看到高竞价但低相关商品,在有机推荐区看到高相关但低转化意图商品。

2. 核心算法逻辑

传统电商推荐系统中,广告排序(Sponsored Ranking) 和 有机推荐(Organic Recommendation) 是两个完全独立的系统,分别优化 CTR/ROAS 和个性化相关性,导致用户体验分裂——同一用户可能在广告位看到高竞价但低相关商品,在有机推荐区看到高相关但低转化意图商品。

3. 业务应用场景

业务背景:某母婴品牌同时运营 Sponsored Products 广告和自然搜索排名。广告团队为"婴儿奶粉"出价 $2.5/click,但广告曝光位常被用于低相关商品(竞品投放),有机推荐又没有利用广告转化信号。

Ad-Aware Recommendation 应用:

数据需求:用户点击日志、广告出价接口(或历史出价数据)、商品 Embedding(可用现有 MF 模型产出)。

4. 输入数据要求

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

5. 输出结果

  • `combined_score`:综合排序分(越高越靠前),已包含广告价值和预算约束
  • `item_type`:`"ad-boosted"` 表示受广告加权影响;`"organic"` 表示纯有机排序
  • 当 `lambda_budget < 0.05` 时,广告商品不参与竞价(避免透支预算)

6. 业务价值 / ROI

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

7. 代码模板

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

"""
Ad-Aware Recommendation: 广告感知协同排序
整合 BPR-MF 个性化推荐 + CTR 预估 + ROAS 约束联合优化
完全使用 mock 数据,无需真实 API
"""

import numpy as np
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Tuple
import ast  # 仅用于验证代码语法,运行时不需要


# ── 数据结构定义 ─────────────────────────────────────────────────────────────

@dataclass
class AdCampaign:
    """广告投放活动"""
    advertiser_id: str
    product_id: str
    bid: float           # 出价(美元/次点击)
    daily_budget: float  # 日预算
    spent: float = 0.0   # 已花费
    target_roas: float = 4.0

    @property
    def budget_ratio(self) -> float:
        """预算剩余系数 λ_budget"""
        remaining = max(0.0, self.daily_budget - self.spent)
        return min(1.0, remaining / self.daily_budget)

    @property
    def is_active(self) -> bool:
        return self.budget_ratio > 0.05  # 剩余5%以上才投放


@dataclass
class UserProfile:
    """用户画像"""
    user_id: str
    click_history: List[str] = field(default_factory=list)
    embedding: Optional[np.ndarray] = None


@dataclass
class Product:
    """商品信息"""
    product_id: str
    category: str
    price: float
    embedding: Optional[np.ndarray] = None
    organic_score: float = 0.0  # 有机推荐分


# ── 核心模型 ─────────────────────────────────────────────────────────────────

class MatrixFactorizationMock:
    """
    BPR-MF 模型(mock版,用随机Embedding模拟训练结果)
    真实场景替换为 implicit 库或 LightFM
    """

8. 论文来源

  • 2402.17289
  • 2405.14382
  • 2501.08341