用途
Taxonomic Shift Detection 用于分析纵向内容数据中的兴趣迁移模式,检测某个用户或实体随时间从一个类别子组迁移到另一个子组。其核心观点是:兴趣迁移是类别分布形状的可测量变化,而不仅仅是最频繁类别的变化——一个用户逐渐分散到三个新领域,与突然更换主要兴趣同样具有意义。
主要能力
- 验证时间语料是否满足纵向分析的最低要求(时间跨度、条目数量、类别分布、时间间隔、时间密度)。
- 构建自适应时间窗口,确保每个窗口包含足够条目以形成稳定的类别分布。
- 计算每个窗口的类别概率分布,并对缺失类别进行零填充以保证可比性。
- 计算相邻窗口之间的 Jensen-Shannon 散度(JSD)序列,以及相对于首个窗口的累积 JSD。
- 使用变点检测识别分布发生显著变化的位置,支持两种互补方法:PELT(检测突变)和滑动窗口 JSD 阈值(检测渐变漂移)。
- 将时间线按变点分割为不同时期(era),并标记过短的时期为“短暂探索”。
- 对每个时期计算类别分布、主导类别、香农熵和归一化熵等多样性指标。
- 验证每个变点是永久迁移还是短暂探索,依据持续时间、幅度、是否回归以及类别变化等标准。
- 识别“当前声音”时期,即最能代表用户当前兴趣的最近时期。
使用方式
该技能以工作流清单形式组织,共 10 个步骤:
- 验证时间语料要求
- 构建自适应时间窗口
- 计算每窗口类别分布
- 计算窗口间散度序列(JSD)
- 在散度序列中检测变点
- 将时间线分割为时期
- 描述每个时期的特征
- 验证迁移(永久 vs. 短暂)
- 识别当前声音时期
- 将发现写入 docs/analysis/13-taxonomic-shift-detection.md
使用前必须满足前置条件:语料中的每个条目需带有时间戳,并已通过 taxonomic-interest-classification 分配类别。该技能操作的是类别分布的时间演化,而非原始文本。
关键参数与阈值:
- 最短时间线:3 个月活动
- 最少条目:50+ 已分类条目,100+ 更佳
- 窗口大小:自适应,每窗口至少 15 个条目
- 散度指标:Jensen-Shannon 散度(JSD),使用 base-2 对数时范围为 [0, 1]
- 变点检测:ruptures 库(Python),PELT 或 Binseg,自定义基于 JSD 的成本
- 迁移阈值:相邻窗口 JSD > 0.15 表示有意义的迁移(需按语料验证)
- 漂移阈值:累积 JSD 在 3+ 个窗口上单调递增表示渐变漂移
- 当前声音窗口:最后一个检测到的变点之后的最新时期
- 最小时期长度:3+ 个窗口才可视为稳定时期
适用场景
- 已分类内容语料跨越有意义的时间段(数月至数年),需要检测兴趣迁移。
- 需要识别“当前声音”时期——时间线上哪个时代最能代表用户当前兴趣。
- 调查观察到的类别变化是真实迁移还是暂时探索。
- 将按时期分割的画像输入下游的原型分配或声音建模。
- 从行为数据模式中检测人生转折、职业转向或主题漂移。
限制
不适用于以下情况:
- 单时间点兴趣画像(应使用 taxonomic-interest-classification)
- 检测随时间变化的情感(应使用 vader-sentiment-analysis)
- 单个时间段内的主题发现(应使用 nmf-topic-modeling)
- 没有时间戳或时间排序的语料
- 完全集中在单一类别的语料(没有可迁移的对象)
其他限制:
- 时间线短于 3 个月时只能报告单时期画像。
- 条目少于 50 时无法进行窗口分析。
- 时间间隔超过总跨度 25% 时需标记,并考虑在间隔处分割时间线独立分析。
- 时间密度低于每月 2 条时窗口会很大,可能平滑掉过渡。
- 时期少于 3 个窗口或少于 15 个条目时应标记为“短暂”,考虑与相邻时期合并。
- 短暂迁移应单独报告,不应与确认的迁移同等加权。