消费预测的难点在于,历史记录是最容易拿到、也最容易被误读的数据。下面按User → Event → Intent → Product → Purchase的顺序,梳理六类常见错误。
把一次已经完成的需求,当成会持续的需求
球衣、年度会员、签名纪念品,这些商品的购买周期很长。用户刚买完一件主场球衣,短期内再买同类的概率其实很低。但基于相似度的推荐逻辑会认为“他喜欢球衣”,于是持续推荐客场球衣、训练服。
判断方法:为每个品类标注典型购买周期,计算用户距上次同类购买处于周期的哪个位置。处于早期的品类应降低权重,除非出现新品发布或限量款这类新的触发事件。更完整的分析可以参考买了球衣不代表还该推荐球衣。
只记录买了什么,不记录在什么情况下买的
同一个用户,在德比前买了一条围巾,在普通联赛前什么都没买。如果模型只记录“买过围巾”,就会在每一场比赛前都推荐围巾。实际上,这次购买是被那场德比触发的。
Event层的缺失会让模型把事件驱动的消费误认为稳定偏好。正确的做法是把购买和当时的赛事背景一起记录:对手、比赛重要程度、是否到场、距离开赛多久。这样模型才能学到“在什么样的比赛前,这类用户会买什么”。
忽略价格,把折扣期的订单当成真实偏好
一位用户在赛季末清仓时买了三件周边,模型可能据此判断他是高消费的周边爱好者。但这三件商品都是在大幅折扣下购买的,恢复原价后他很可能不会再买。
判断方法:给每笔订单记录成交价与原价的比例,把折扣响应作为独立特征,而不是直接混入偏好分数。对于主要在促销期消费的用户,推荐应该在促销节点出现,而不是日常推送高价新品。
把礼物购买算到了购买者自己头上
一位成年用户买了一件儿童尺码的球员球衣,收货地址与常用地址不同。这大概率是一份礼物。如果模型把它记入购买者本人的偏好,就会开始向他推荐童装、儿童门票,甚至误判他喜欢的球员。
尺码、收货地址、下单时间(如节日前后)、是否选择礼品包装,都可以作为识别礼物的辅助信号。识别出的礼物订单可以单独建模,用于在节日前推荐礼品,而不是混进用户本人的画像。在AI球迷画像中,这类订单通常会被单独标注。
用未来的数据评估过去的预测
这是离线评估成绩虚高的最常见原因,也是欧宝体育大模型在消费预测项目中最先排查的问题。如果训练数据里混入了预测时间点之后才发生的信息,比如用户后来的会员状态、赛季最终的累计消费,模型就等于提前知道了答案。离线命中率看起来很高,上线后却明显下降。
判断方法:严格按时间切分训练集和测试集,所有特征只能使用预测时间点之前可获得的数据;对每一个特征检查它的生成时间。如果某个特征贡献异常突出,优先怀疑是否发生了泄漏。
只看点击率,不看后续行为
一条推荐的点击率高,可能只是因为图片吸引人。如果用户点击后不下单、下单后退货,或者之后关闭推送,这次推荐其实是负面的。只以点击率为目标,模型会越来越偏向“看起来有吸引力”的内容,而不是用户真正需要的商品。
评估指标应该覆盖转化率、客单价、退货率、推送关闭率和用户在后续30天内的活跃变化。还要注意推荐对其他品类的挤占:一个模型把球衣转化率提高了,却让门票和会员的推荐位变少,整体收入和用户关系未必变好。
这些错误为什么容易同时出现
上面几类错误很少单独出现。一个只看历史订单、只用点击率评估、训练数据又混入未来信息的模型,会在离线测试中表现得非常好,因为它恰好擅长“复述过去”。上线后,面对新赛季、新球员和新赛程,它的判断会整体滞后。欧宝体育在搭建消费预测时,习惯先问三个问题:这条特征在预测那一刻是否已经存在,这笔订单是在什么比赛背景和价格下发生的,这个指标衡量的是用户需要,还是只是用户被吸引了一下。三个问题都答得上来,模型的结论才值得交给运营团队使用。
每一类错误对应的验证方法
| 错误类型 | 验证方法 |
|---|---|
| 重复推荐已满足的需求 | 按品类统计重复推荐的转化率,与留出组比较 |
| 忽略购买场景 | 按比赛重要程度分组评估推荐效果 |
| 忽略价格 | 区分原价和折扣订单,分别评估预测准确度 |
| 误读礼物购买 | 人工抽查尺码与地址异常的订单 |
| 数据泄漏 | 时间切分评估,检查特征生成时间 |
| 只看点击 | 加入退货、关闭推送和30天活跃指标 |
欧宝体育AI在消费预测中把这些检查放进固定流程:预测模型给出带时间窗口的判断,推荐模型负责排序,分析引擎定期对照留出组计算真实增量,运营人员对异常样本做人工复核。模型不可能一次做对,但只要错误能被及时发现,每一轮迭代都会更接近用户真实的下一次购买。更多内容可以在球迷消费预测页面查看。