付款成功后的两分钟,他最不需要看到什么

这个场景并不罕见。很多体育商城的推荐系统,把“浏览、加购、购买”都当作兴趣信号,而且购买的权重最高。于是一个刚刚买下主场球衣的球迷,在模型眼里就成了“对主场球衣兴趣最强的人”,接下来的每一个推荐位都会优先给他看这件球衣。

问题出在模型不知道一件事:这次购买已经完成了。对于大多数球迷来说,一个赛季买一件主场球衣就足够了,除非他要换号码、送人或者收藏。购买完成之后,他对“这件商品”的需求在短期内几乎归零,但他对“这支球队”“这位球员”“下一场比赛”的兴趣并没有消失,反而可能正处在最高点。

所以推荐系统需要把两类信号分开:一类是“他喜欢什么”,一类是“他现在处在什么状态”。前者回答兴趣,后者回答时机。一个知道用户刚完成购买的系统,会把同款商品从推荐候选里暂时移除,转而寻找和这次购买相关、但不重复的东西。

球衣不是纸巾:不同商品的复购节奏完全不同

判断“买完之后该推什么”,先要理解购买周期(Purchase Cycle)和商品类型(Product Type)。体育商品大致可以按复购节奏分成几类,下面是一组示例划分:

商品类型 示例复购节奏 购买后更适合推荐
主客场球衣按赛季,一年一次左右 印号服务、配套球裤球袜、另一套客场或第三球衣
球鞋、跑鞋 按磨损,半年到一年 袜子、鞋垫、护具,而不是同款第二双
消耗类(能量胶、护具胶布、球袜)几周到两三个月可以在周期接近时提醒补货
配件(围巾、帽子、背包) 不固定,受赛事和季节驱动 与临近主场、天气、客场之旅相关的款式
纪念品、收藏品 事件驱动,几乎不复购同款同系列的其他编号或相关事件的纪念品

这张表的意义在于:同样是“买完就推同款”,对能量胶可能是对的,对球衣几乎一定是错的。一个推荐引擎如果不区分商品类型,就只能用一套规则对待所有商品,结果就是在该提醒的时候沉默,在不该打扰的时候反复出现。

买完球衣以后,兴趣往哪里走

回到那位刚买了主场球衣的球迷。他的下一步兴趣大概率在这几个方向:

  • 补全这次购买:他买的是空白球衣还是印了号码?如果是空白的,印号服务是最自然的下一步;配套的球裤、球袜也在同一个场景里。
  • 跟随球员(Athlete):他印的是哪位球员的号码,就说明他关注这位球员。这位球员的训练服、签名周边、相关内容都比“另一件主场球衣”更有意义。
  • 跟随赛事(Event):如果两周后有一场客场焦点战,客场球衣和便携的观赛配件会变得相关;如果下周就是主场,围巾和门票比任何服装都更贴近需求。
  • 跟随家庭:如果他的历史订单里出现过儿童尺码,儿童款球衣可能是他会为孩子买的第二件,而不是给自己买的第二件。

还有两个细节很影响体验。一是尺码:他刚买的是L码,后续推荐的服装应当默认展示L码的库存和价格,而不是把一个L码已售罄的商品推到他面前。二是价格(Price):他选的是球迷版而不是球员版,说明他对价格有自己的判断,推荐一件价格高出两倍的球员版纪念款,点击率可能不低,但转化往往很差。

什么情况下,再推一次同款反而是对的

说“不要马上推第二件同款”,并不是说同款永远不能再出现。有几种情况,同款再次出现是合理的,而系统需要能识别出来:

  • 送礼信号:他在下单时填写了另一个收货地址,或者选了礼品包装,说明这次购买可能不是给自己的,那么他自己的那一件可能还没有买。
  • 收藏信号:他过去有购买同一赛季多个号码、或者多次购买限量版的记录,说明他是收藏型用户,同系列的其他号码对他确实有吸引力。
  • 家庭信号:历史订单中长期同时出现成人码和儿童码,那么成人款买完以后,儿童款是一个真实的后续需求。
  • 售后信号:他发起了换码或退货,这时重新推荐同款的正确尺码,是在帮他完成购买,而不是重复推销。

这些情况都有一个共同点:推荐同款的理由来自新的证据,而不是来自“他买过所以他喜欢”这条惯性。没有新证据时,默认就应该把已购商品从推荐位里拿掉,并设置一个与该商品复购周期相匹配的冷却期。球衣的冷却期可以长到下一个赛季发售,球袜这样的消耗品则可能只有几周。

连续三年买主场球衣的人,最近开始看跑鞋

再看一个更复杂的模拟场景。某位用户过去三个赛季,每年新球衣发售的第一周都会下单主场球衣,订单记录非常整齐。但最近三个月,他的行为出现了变化:频繁浏览跑鞋和速干服,在APP里报名了两场城市跑步活动,上个月买了一块运动手表,对球队内容的打开次数也在下降。

如果推荐系统只看历史订单,它会得出结论:这是一个忠诚的主队球衣用户,新赛季球衣上架时应该第一个通知他。这个判断不能算错,但它漏掉了更重要的信息——他的生活方式正在变化,跑步正在成为新的兴趣重心。

AI识别这种变化,依靠的不是某一次浏览,而是几类信号同时出现:

  1. 跨品类浏览持续增加:不是偶然点开一次跑鞋,而是连续数周在跑步品类里停留。
  2. 行为从“看”变成“做”:报名跑步活动、购买运动手表,这些行为比浏览更能说明兴趣是真的。
  3. 原有兴趣在变淡:对球队内容的打开频率下降,比赛日的访问不再集中。

识别出来以后,也不意味着要把他从“球迷”改标成“跑者”。更合理的是让两种身份并存:跑步装备进入他的主推荐位,同时保留球队相关的推荐,但形式可以变——比如带有球队配色的跑步帽、球队官方组织的球迷跑活动。新赛季球衣上架时,仍然值得通知他,只是不必在他每次打开商城时都把球衣放在第一屏。反过来,如果系统过度反应,看到他买了一块运动手表就把所有球队商品从推荐里撤掉,也会犯另一种错误:他可能只是在为一场半程赛做准备,赛后兴趣又会回到球队身上。因此兴趣权重的调整最好是渐进的,每隔一两周根据新的行为重新评估一次,而不是一次性切换。这类“下一次更可能买什么”的判断,AI怎么判断球迷下一次买球衣、球鞋还是装备里有更具体的拆解。

动态推荐:用户、球队、球员、赛事、商品和时间一起决定

把前面的内容归纳一下,一个体育电商推荐系统在决定推什么时,至少要同时考虑六个因素,可以写成一个简单的思路:

动态推荐 = User + Team + Athlete + Event + Product + Time

  • User 用户:他的历史订单、尺码、价格带、当前状态(刚买完、正在比较、长期未访问)。
  • Team 球队:他支持哪支球队,球队近期状态如何,是连胜还是低谷。
  • Athlete 球员:他关注哪位球员,这位球员是否刚刚转会、受伤或创造纪录。
  • Event 赛事:接下来有哪些比赛,是主场、客场、德比还是决赛。
  • Product 商品:商品类型、复购周期、库存与尺码余量、是否即将换季。
  • Time 时间:赛季(Season)处在什么阶段,距离新球衣发布还有多久,是否临近节假日。

赛季这个因素尤其容易被忽略。如果新赛季球衣三个月后就要发布,这时候给一位老球迷全价推荐旧赛季球衣,是在消耗他的信任;但如果把旧款放进清仓专区,推给价格敏感、还没有球衣的新球迷,就是合理的库存消化。同一件商品,对不同的人、在不同的时间,推荐价值完全不同。

欧宝体育的Recommendation Engine就是按这个思路组织候选和排序的:先按购买状态和复购周期过滤掉不该出现的商品,再结合球员、赛事和赛季时间给剩下的商品排序,最后用库存和尺码余量做一次校验,避免推出去的东西用户根本买不到。

一个模拟的推荐位对比

还是那位刚买完主场球衣(L码、球迷版、印了某前锋号码)的球迷,下周末有一场主场比赛。以下是示例数据下两种推荐逻辑的首屏对比:

位置 只看历史购买的推荐 考虑状态与场景的推荐
第1位 同款主场球衣 下周末主场比赛门票
第2位 同款主场球衣(其他号码) 主场配套球裤、球袜(默认L码)
第3位 主场球衣儿童款 球队围巾(临近主场,季节转凉)
第4位 球员版主场球衣 该前锋的训练服或签名周边

右侧的推荐不一定每一项都更“准”,但它至少没有把四个位置浪费在一个已经被满足的需求上。

怎么验证推荐不是在重复过去

推荐逻辑改了以后,要用数据确认它是在变好,而不只是在变复杂。建议在A/B测试中重点观察以下几项:

  • 已购商品曝光占比:用户最近30天已买商品在推荐位中出现的比例,应该明显下降。
  • 跨品类转化:购买球衣后30天内,用户在配件、门票、训练装备等其他品类的购买是否增加。
  • 退货与换码率:尺码默认正确以后,服装退货和换码申请是否减少。
  • 推送关闭率:重复推荐减少后,用户关闭推送或取消关注的比例是否下降。

只看点击率是不够的。重复推荐一件用户刚买过的球衣,点击率有时并不低,因为用户会点进去确认“是不是我买的那件”,但这种点击不会带来任何购买。关于为什么单纯的关联购买规则撑不起体育推荐,可以继续看为什么“买了这个的人还买了那个”不够做体育电商推荐

推荐不是重复用户过去买过什么,而是在理解他已经拥有什么之后,找到他接下来真正会需要的东西。下一步值得做的,是把“刚完成购买”这个状态真正接入推荐链路,并单独追踪购买后30天的跨品类表现,这比再优化一轮点击率模型更能看出推荐是否在理解球迷。