paper2skills Playbook

Session意图漂移建模 - 跨会话用户购买意图变化检测

Skill-Session-Intent-Shift · 14-用户分析

causalexperimentforecastingoptimizationrecommendationpricing客服与VOC推荐与搜索定价与利润WF-C 客服分诊WF-D 选品扫描WF-E Review监控WF-F 动态定价WF-H 复购增长
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐☆☆☆
业务视角
适用角色运营负责人 / 用户增长负责人 · CMO · 产品经理
适用平台Amazon 买家分层 · DTC 站 LTV 预测 · Klaviyo/Brevo 邮件分群
什么情况下用有大量老客户,但不知道谁是高价值客户、谁快要流失;新客获取成本越来越高,老客复购却上不去
成功是什么样的用户按 RFM/LTV 分层精准触达,高价值用户留存率提升,老客贡献收入占比从 30% 提升到 50%
业务痛点
老客复购率上不去不知道哪些用户要流失了所有用户用同一套活动买过一次就不见了

1. 解决的问题

现有电商推荐系统多依赖商品标题、价格等表层属性推断用户意图,且只关注单次购买或单会话内的短期偏好变化。SessionIntentBench 的核心创新在于:提出意图树(Intention Tree)概念,通过跨会话建模用户意图的时序演化,构建大规模多模态意图基准。

2. 核心算法逻辑

现有电商推荐系统多依赖商品标题、价格等表层属性推断用户意图,且只关注单次购买或单会话内的短期偏好变化。SessionIntentBench 的核心创新在于:提出意图树(Intention Tree)概念,通过跨会话建模用户意图的时序演化,构建大规模多模态意图基准。

3. 业务应用场景

业务问题:桑基图展示了页面间流量(如"首页→分类页→PDP→加购→支付"),但缺少"为什么用户走这条路"的语义信息。例如同样是"PDP → 加购"路径,有的用户是目标型(直接搜索特定型号奶粉来购买),有的是探索型(随机浏览发现心仪产品),有的是比价型(连续访问多个 PDP 后才加购)。意图漂移检测可以为桑基图每条路径的"边"标注语义标签,让运营人员直观理解流量结构。

| 字段 | 类型 | 示例 | |------|------|------| | user_id | string | "usr_abc123" | | session_id | string | "sess_2026042001" | | event_type | category | "view" / "click" / "add_cart" / "purchase" | | page_type | category | "homepage" / "category" / "pdp" / "cart" / "checkout" | | product_id | string | "ASI

最低要求:至少3个连续商品访问构成一个完整会话,有可提取的商品属性信息。

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

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

7. 代码模板

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

"""
Session Intent Shift Detection — 跨会话意图漂移检测
arXiv: 2507.20185 | SessionIntentBench (ACL 2026 Findings)

功能:
  1. 从会话数据构建意图树(规则+embedding模拟LLM意图推断)
  2. 跨会话意图漂移检测(余弦相似度 + 属性变化追踪)
  3. 为桑基图路径标注意图语义标签
  4. 意图演化阶段预测(探索/比较/目标购买)

环境依赖: pip install numpy scikit-learn
可选依赖: pip install openai  # 如需接入真实LLM意图推断
"""

import math
import random
import hashlib
from dataclasses import dataclass, field
from typing import List, Dict, Optional, Tuple
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# ─────────────────────────────────────────────
# 1. 数据结构
# ─────────────────────────────────────────────

@dataclass
class Product:
    """电商商品(母婴品类)"""
    product_id: str
    title: str
    category: str          # 品类:如 "Baby Formula", "Stroller", "Diaper"
    price: float
    attributes: Dict[str, str] = field(default_factory=dict)
    # 例:{"material": "organic", "age_range": "0-6m", "brand": "Similac"}

    def get_embedding(self, dim: int = 32) -> np.ndarray:
        """
        模拟商品向量表示(真实场景可替换为 text-embedding-ada-002 等)
        用商品属性的哈希值生成确定性伪随机向量
        """
        seed_str = f"{self.category}|{self.price:.0f}|" + "|".join(
            f"{k}:{v}" for k, v in sorted(self.attributes.items())
        )
        seed = int(hashlib.md5(seed_str.encode()).hexdigest(), 16) % (2**31)
        rng = np.random.RandomState(seed)
        vec = rng.randn(dim).astype(np.float32)
        return vec / (np.linalg.norm(vec) + 1e-9)


@dataclass
class IntentionEntry:
    """单步意图条目(对应论文中 Intention Tree 的一个节点)"""
    step: int               # 在会话中的时间步
    intent_text: str        # 意图描述,如 "寻找有机奶粉,追求性价比"
    key_attribute: str      # 驱动此意图的关键属性,如 "price: affordable"
    comparison: str         # 与上一商品的比较依据(Task3 输入)
    intent_vector: np.ndarray = field(default_factory=lambda: np.zeros(32))

    def drift_score(self, other: "IntentionEntry") -> float:

8. 论文来源

  • 2507.20185