4、数据准备与清洗:收藏数据采集、去重、异常值处理、时间窗口划分
收藏画像模型的构建质量,首先取决于输入数据的质量。无论后续采用何种算法(如协同过滤、序列模型或图神经网络),脏数据、重复数据与时间口径不一致的数据都会直接导致模型偏差。本章聚焦收藏行为数据的全链路处理流程,覆盖采集字段设计、去重策略、异常值识别与时间窗口划分四个核心环节,并给出可落地的操作规范与案例复盘。
4.1 收藏数据采集:字段设计与埋点规范
核心原理:收藏行为不同于点击或浏览,它代表用户明确的“兴趣保留”意图,具有低频、高价值、强时效的特征。采集阶段的目标不是“尽可能多”,而是“关键字段完整、语义清晰、可追溯”。
推荐采集字段清单:
| 字段类别 | 字段名 | 类型 | 说明与示例 |
|---|---|---|---|
| 用户标识 | user_id | string | 加密后的用户唯一ID,如 u_8f3a2c |
| 物品标识 | item_id | string | 收藏对象的唯一ID,如 sku_100234 |
| 行为时间 | collect_time | datetime | 精确到毫秒,如 2025-06-18 14:23:05.123 |
| 来源场景 | scene | string | 详情页 / 列表页 / 搜索结果 / 推荐流 / 直播间 |
| 设备信息 | device_type | string | iOS / Android / H5 / PC |
| 上下文 | context | json | 当前页面路径、推荐位ID、关键词等 |
| 收藏类型 | collect_type | int | 1=普通收藏,2=分组收藏,3=稍后看 |
| 是否取消 | is_cancel | int | 0=收藏,1=取消收藏(用于负样本) |
is_cancel 字段。取消收藏行为是画像模型的重要负信号,能帮助区分“短暂兴趣”与“持久偏好”。若只采集正向收藏,模型将无法学习到兴趣衰减规律。
4.2 去重策略:从主键去重到业务去重
操作流程:去重不是简单的“删掉重复行”,而是需要分层处理。
- 主键去重:以
(user_id, item_id, collect_time)为唯一主键,删除完全重复的埋点记录。通常由数据仓库的ROW_NUMBER()窗口函数实现。 - 业务去重:同一用户在同一秒内对同一物品的多次收藏,只保留第一条。使用
(user_id, item_id, date_trunc('second', collect_time))作为去重键。 - 跨端合并:用户可能在APP和H5端重复收藏同一物品。若两端数据未打通,需通过 user_id 映射表合并,保留最早收藏时间。
- 时间窗去重:对于“收藏-取消-再收藏”的反复行为,若间隔小于30秒,视为误操作,仅保留最后一次状态。
WITH deduped AS (
SELECT
user_id, item_id, collect_time, scene,
ROW_NUMBER() OVER (
PARTITION BY user_id, item_id,
DATE_FORMAT(collect_time, 'yyyy-MM-dd HH:mm:ss')
ORDER BY collect_time ASC
) AS rn
FROM raw_collect_log
WHERE is_cancel = 0
)
SELECT user_id, item_id, collect_time, scene
FROM deduped
WHERE rn = 1;
4.3 异常值处理:识别与修复策略
判断方法:收藏数据中的异常值通常表现为以下四类,需要分别处理。
| 异常类型 | 判定规则 | 处理策略 |
|---|---|---|
| 频次异常 | 单用户单日收藏次数 > 99分位数(如 > 200次) | 保留但降权,或标记为“采集型用户” |
| 时间异常 | 收藏时间在未来,或早于账号注册时间 | 修正为服务器时间,无法修正则剔除 |
| 行为序列异常 | 同一用户对同一物品在1分钟内收藏又取消超过3次 | 视为无效行为,整组剔除 |
| 属性冲突 | 收藏的物品ID在物品表中不存在 | 通过物品表外键校验,孤儿数据剔除 |
案例拆解:某电商平台在构建收藏画像时,发现一位用户单日收藏了1,200件商品。经排查,该用户为“比价机器人”账号,其行为模式与真实用户差异极大。若直接纳入训练,会导致画像模型对该用户产生过拟合,并拉低整体推荐精度。
4.4 时间窗口划分:训练集、验证集与时间衰减
核心原理:收藏画像模型必须尊重时间顺序。不能用未来数据预测过去,因此时间窗口划分是防止数据泄漏的关键防线。
推荐划分方案:
- 训练窗口:取当前时间前90天的收藏数据(如 2025-03-01 至 2025-05-31)。
- 验证窗口:取最近7天数据(2025-06-01 至 2025-06-07),用于调参。
- 测试窗口:取最近1天数据(2025-06-08),用于最终效果评估。
时间衰减因子:收藏行为具有时效性,3个月前的收藏与3天前的收藏对当前兴趣的指示强度不同。建议引入指数衰减权重:
weight = exp(-λ * days_since_collect)
# λ 通常取 0.01~0.05,可根据业务周期调整
# 例如:λ=0.02 时,30天前的收藏权重为 exp(-0.6)≈0.55
案例拆解:某内容社区APP在构建“用户兴趣标签画像”时,最初使用全部历史收藏数据训练模型,导致推荐结果偏向用户几个月前的旧兴趣,无法捕捉近期偏好变化。后改为90天滑动窗口 + 时间衰减权重,模型推荐的点击率提升了18%,收藏转化率提升了12%。
- 训练集与测试集之间是否有时间间隙?建议至少留1天空隙,避免邻近效应。
- 是否按用户维度划分?同一用户的收藏数据不能同时出现在训练集和测试集。
- 是否考虑周期性?如电商大促期间收藏行为异常,需单独标注。
- 衰减因子是否经过验证?建议做A/B测试对比有无衰减的模型效果。
4.5 常见误区与总结复盘
误区一:认为去重就是“删重复行”,忽略了业务语义层面的重复(如跨端重复收藏)。
误区二:对异常值一律删除,导致样本量骤减或引入偏差。
误区三:时间窗口划分时未考虑用户维度,导致同一用户的数据同时出现在训练和测试集,造成评估结果虚高。
误区四:忽略收藏与取消收藏的联合建模,只使用正向收藏数据。
总结复盘:数据准备与清洗是收藏画像模型迭代中最耗时但最值得投入的环节。建议建立标准化的数据质量监控看板,每次模型迭代前自动执行数据校验流程,确保输入数据的一致性与稳定性。收藏数据清洗的核心目标可以概括为:去重保语义、异常分类型、时间守顺序、窗口防泄漏。