paper2skills Playbook

Click A Buy B 跨品类归因去偏 - 点击与购买商品不一致的归因修正

Skill-CABB-Cross-Category-Attribution · 13-广告分析

causalexperimentforecastingoptimizationrecommendationragknowledge_graph广告与投放推荐与搜索知识图谱与RAGWF-B 广告优化WF-D 选品扫描WF-F 动态定价WF-G Listing内容优化
年化 ROI100 万元
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐☆
业务视角
适用角色广告优化师 / 投放负责人 · CMO · 运营负责人
适用平台Amazon PPC(SP/SB/SD)· TikTok Ads · Meta 广告 · 多平台归因
什么情况下用广告账户几十个系列,不知道哪个在真正赚钱;ROAS 看起来好看但实际利润没有提升;预算有限想集中打高价值用户
成功是什么样的每分广告预算有明确 ROI 追踪,砍掉低效渠道后同等预算 ROAS 提升 30-50%
业务痛点
ROAS 好看但利润没有涨不知道哪个素材真的有效归因窗口期不同数据打架TikTok/Meta/Amazon 广告数据整合不了

1. 解决的问题

用户点击吸奶器广告,进入品牌店铺后转而购买了储奶袋和奶瓶

2. 核心算法逻辑

电商广告平台大量 Session 存在 CABB(Click A, Buy B) 现象——用户点击了商品 A 的广告,但最终购买的是商品 B。传统的 LastClick 归因模型将这些"点击购买不一致"的会话视为无意义噪声,强行将转化归零,导致系统性学习偏差:模型被迫"奖励那些与购买只是巧合相关、而非真正驱动转化的商品展示"。

3. 业务应用场景

业务问题:用户点击吸奶器广告,进入品牌店铺后转而购买了储奶袋和奶瓶。Last-Click 归因将吸奶器广告标记为"零转化"→ 该广告系列预算在下一轮自动竞价中被砍。但实际上,用户通过吸奶器广告建立了品牌信任,最终在母婴品类内完成了高价值购买。

这是典型的品类内交叉购买 CABB:吸奶器与奶瓶/储奶袋的品类相似度高(同属哺乳周边),应恢复该广告的归因权重。

数据要求: - 用户 Session 数据:`session_id, clicked_product_id, purchased_product_id, timestamp` - 商品 Taxonomy 树:产品类目层级(至少三级:大类 → 中类 → 小类),如"母婴 → 哺乳用品 → 吸奶器" - 共参与日志:用户在同一 session/7 天窗口内共同点击/收藏/购买的商品对,用于训练品类相似度矩阵 - 广告展示日志:`ad_id, product_id, user_id, impression/click/conversion`

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

100 万元

7. 代码模板

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

"""
CABB (Click A, Buy B) 跨品类归因去偏框架
=========================================
基于 arXiv:2507.15113 论文实现:
- Session CABB 识别与分类
- Taxonomy-aware 品类协同过滤相似度学习
- CABA/CABB 双头多任务转化预测
- 归因权重修正

适用场景:母婴出海电商广告归因偏差修正
依赖:numpy, pandas, torch, sklearn
"""

import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.preprocessing import LabelEncoder
from typing import Dict, List, Optional, Tuple
import warnings
warnings.filterwarnings("ignore")


# ============================================================
# 1. 数据结构与 Taxonomy 映射
# ============================================================

class ProductTaxonomy:
    """商品品类树管理器
    
    维护商品 → 品类映射,计算品类路径相似度
    """
    def __init__(self):
        # 母婴品类树示例(三级:大类/中类/小类)
        self.taxonomy = {
            # 哺乳周边品类
            "breast_pump": ["maternal_infant", "nursing", "breast_pump"],
            "milk_bag":    ["maternal_infant", "nursing", "milk_storage"],
            "bottle":      ["maternal_infant", "nursing", "feeding_bottle"],
            "nipple":      ["maternal_infant", "nursing", "nipple_shield"],
            # 出行品类
            "stroller":    ["maternal_infant", "travel", "stroller"],
            "car_seat":    ["maternal_infant", "travel", "car_seat"],
            "baby_carrier":["maternal_infant", "travel", "baby_carrier"],
            # 睡眠品类
            "crib":        ["maternal_infant", "sleep", "crib"],
            "sleep_sack":  ["maternal_infant", "sleep", "sleep_sack"],
            "night_light": ["maternal_infant", "sleep", "night_light"],
            # 喂养品类
            "baby_food":   ["maternal_infant", "feeding", "solid_food"],
            "formula":     ["maternal_infant", "feeding", "formula"],
        }
    
    def get_category(self, product_id: str, level: int = 2) -> str:
        """获取商品指定层级的品类标签"""
        path = self.taxonomy.get(product_id, ["unknown", "unknown", "unknown"])
        return "/".join(path[:level+1])
    

8. 论文来源

  • 2507.15113