paper2skills Playbook

扩散模型冷启动CTR - 新品零交互时的转化潜力预热

Skill-CSDM-Diffusion-ColdStart · 05-推荐系统

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

1. 解决的问题

传统推荐系统采用 Embedding & MLP 范式:每个商品 ID 对应一个向量,该向量通过用户历史交互数据学习。新品没有历史交互 → Embedding 全为随机噪声 → CTR 预测失效,这就是冷启动问题。

2. 核心算法逻辑

传统推荐系统采用 Embedding & MLP 范式:每个商品 ID 对应一个向量,该向量通过用户历史交互数据学习。新品没有历史交互 → Embedding 全为随机噪声 → CTR 预测失效,这就是冷启动问题。

3. 业务应用场景

业务问题 跨境母婴电商每周上新 200-500 个 SKU(Momcozy 双泵吸奶器、有机棉连体衣、婴儿推车配件等)。传统 CTR 模型对新品给出接近随机的预测值(AUC ≈ 0.5),导致: - 新品被排序算法压低权重,得不到曝光 - 潜在热销品在黄金流量窗口期被埋没 - 人工运营需要靠经验手动提权,效率低下

Sankey 图连接点:新品页面是用户旅程 Sankey 图中的"前置节点"——若新品页面的 CTR 预测不准,流量分发决策的 Prior 错误,整个漏斗分析失效。CSDM 生成的 Warmed-Up Embedding 为该节点提供有意义的先验估计。

| 字段 | 示例值 | 说明 | |------|--------|------| | category_id | `maternity_pump` | 一级类目编码 | | price_usd | 39.99 | 上架价格(美元) | | brand_id | `momcozy` | 品牌 ID | | image_embedding | `[0.12, -0.34, ...]` (512维) | 主图 ResNet/CLIP 特征 | | title_embedding | `[0.05, 0.21, ...]` (256维) | 商品标题语义向量 | | shipping_days |

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

10万

7. 代码模板

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

"""
CSDM: Cold-Start Diffusion Model for CTR Prediction
论文: arXiv:2504.06270 (2025), Zhu et al.
场景: 母婴出海跨境电商新品冷启动 CTR 预热

核心流程:
  1. 预训练 CTR backbone (DeepFM) 获得现有商品的 ID Embeddings (z0)
  2. 训练 CSDM: 学习 z0 <-> 侧信息 h 之间的扩散映射
  3. 推断: 新品只提供侧信息 h, 生成 Warmed-Up Embedding
  4. 替换: 将 Warmed-Up Embedding 写入 Embedding Table, 正常 CTR 推断无额外成本
"""

import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import Dataset, DataLoader
from typing import Optional
import math


# ─────────────────────────────────────────────
# 1. 超参数 & 噪声调度
# ─────────────────────────────────────────────

class CSDMConfig:
    """CSDM 超参数配置"""
    # Embedding 维度
    embed_dim: int = 64           # ID Embedding 维度 d
    side_dim: int = 128           # 侧信息原始维度 (类目+价格+图像拼接后)
    hidden_dim: int = 64          # 侧信息投影后的隐层维度 h

    # 扩散过程
    T: int = 1000                 # 总扩散步数
    T_sub: int = 50               # 非马尔可夫子序列步数 (训练加速)
    sigma: float = 0.0            # 随机噪声强度 (0 = DDIM 确定性)
    rho: float = 0.1              # 扩散损失权重

    # 训练
    lr: float = 1e-4
    batch_size: int = 512
    epochs: int = 30

    # 噪声调度: 余弦调度
    @staticmethod
    def cosine_schedule(T: int, s: float = 0.008):
        """余弦噪声调度, 返回 alpha_t 序列 (长度 T+1)"""
        steps = torch.arange(T + 1, dtype=torch.float64)
        f = torch.cos(((steps / T) + s) / (1 + s) * math.pi / 2) ** 2
        alpha = f / f[0]
        return alpha.float()  # shape: [T+1], alpha[0]=1, alpha[T]≈0


# ─────────────────────────────────────────────
# 2. 侧信息编码器
# ─────────────────────────────────────────────

class SideInfoEncoder(nn.Module):
    """
    将商品侧信息 (类目 + 价格 + 图像特征) 映射到隐层向量 h

8. 论文来源

  • 2504.06270