同一件球衣,四个系统给出了四个答案
先把这个模拟场景说完整。某球队下周六有一场主场比赛,客场球衣本赛季已经卖了三个月。周五晚上,四个系统分别给出了自己的建议:
- 私域CRM:筛出约6000名“近一年活跃会员”(示例数据),建议推送八折专属券,理由是这群人过去的券核销率高。
- 推荐引擎:客场球衣近七天点击率排在商城前三,建议放上首页首屏。
- 预测模型:过去八周日均销量稳定,下周需求标为“平稳”,不触发补货。
- 门店与库存系统:体育场商店客场球衣只剩两箱,M码和L码占大头;线上仓库存充足。
结果并不难推演。折扣券和首页位置叠加,周末两天线上订单冲高,其中M码和L码占比最高;仓配团队为了保证线上履约,把原本准备调往体育场的一批货截留下来。周六主场开门后,现场商店两小时内断了主力尺码。更隐蔽的问题出现在下一周:预测模型看到销量突然上升,把促销带来的增量当作真实需求,调高了后续预测,几周后又形成积压。复盘时还发现,那6000名会员里有相当一部分上赛季已经在体育场现场买过这件球衣,只是现场收银记录从未和会员账号关联,这些人收到折扣券的意义不大,反而拉低了券的整体回报。
矛盾不是模型不够聪明,而是每个系统只看到链条的一段
把一次体育消费拆开,它其实是一条连续的链路:Fan → Profile → Interest → Product → Purchase → Retail → Retention。传统做法是每一段交给一个系统,每个系统在自己那一段里都做得不错:
- Fan 与 Profile:CRM或会员系统知道谁注册了、谁付了年费,却往往不知道他在现场买过什么。
- Interest:推荐引擎知道谁点了什么、停留了多久,却不知道仓库里有没有货。
- Product:预测模型知道商品过去卖了多少,却不知道下周有没有推送计划和比赛。
- Purchase 与 Retail:ERP和POS知道每个门店卖了多少、还剩多少,却不知道买的人是谁。
- Retention:私域运营知道要留住谁,却很难判断一次折扣是在留人还是在透支利润。
每一段的输出都是下一段的输入,但在分散的架构里,这些输入靠导表、邮件和周会传递,时间上有延迟,口径上也不一致。同一个“活跃会员”,CRM按登录算,商城按下单算;同一件“客场球衣”,商城一个编码、门店一个编码、仓库再一个编码。答案互相矛盾,很多时候只是因为大家说的不是同一个人、同一件货、同一个时间点。
把系统连起来的,是四张共享的底表
欧宝体育把私域、推荐、预测和零售放进同一个系统,核心不是把它们合并成一个模型,而是让它们读写同一套基础数据。我们把这套数据层归纳为四张底表:
| 底表 | 记录什么 | 缺了它会出现的矛盾 |
|---|---|---|
| 球迷身份 Fan Identity | APP账号、会员卡、商城账号、现场支付记录在用户授权范围内的关联关系与置信度 | 把折扣发给已经买过的人;同一个人被当成三个低价值用户 |
| 商品主数据 | 统一的款式、尺码、颜色、球员印号、生命周期与替代关系 | 线上和门店的销量无法相加;缺码时推荐不出替代款 |
| 赛事日历 | 比赛、转会窗口、纪念日,以及推送与促销计划 | 预测模型把促销增量当成趋势;比赛日前不预留现场库存 |
| 渠道库存 | 线上仓、门店、体育场商店、在途调拨的实时可售量 | 推荐已经断码的商品;线上促销吃掉现场需要的货 |
这四张表里,把推送和促销计划放进赛事日历,是一个容易被忽视的细节。对预测模型来说,“下周要给6000人发券”和“下周有主场比赛”一样,都是会改变需求的事件,理应作为输入提前告知,而不是事后才从销量曲线里看出来。
回到那个周五:共享数据层会怎样改变决策
同样的模拟场景,如果四个模块读的是同一套底表,决策会变成这样:
- 推送名单变了:Fan Identity 把现场收银记录和会员账号对上以后,发现约三成会员(示例数据)已经拥有这件球衣。系统建议把他们移出球衣折扣名单,改为推送比赛日围巾或纪念徽章。
- 推荐位变了:Recommendation Engine 查询渠道库存后,只在线上M码、L码可售量充足的区域展示客场球衣首屏;库存紧张的区域优先展示主场球衣和训练服。
- 库存预留变了:Inventory Engine 读取赛事日历,识别出周六主场,把一部分主力尺码锁定为体育场预留,线上不能占用这部分库存。
- 预测口径变了:Forecast Model 接收推送计划后,把周末增量标注为“促销驱动”,下周基线预测不随之上调。
这几条建议之间仍然会有冲突,比如私域运营希望扩大发券范围,零售团队希望保护现场库存。统一系统的价值在于把冲突摆到桌面上:它会写明“扩大发券预计多出多少线上订单、体育场商店缺码概率上升多少”,由有权限的负责人拍板,而不是让两个系统各自执行、事后再对账。
最容易被忽视的是链条末端的留存
前面的冲突在当周就能看到:缺码、积压、预测偏差。但链条最后一环 Retention 的损失往往要几个月后才显现。在同一个模拟场景里,周六到了现场却没买到主力尺码的球迷,有一部分改买了主场球衣,还有一部分空手离开;而那些刚在现场买过客场球衣、又收到八折券的老会员,会觉得自己被当成了“需要打折才肯买”的普通用户。两种体验叠加,下赛季续会员时才会反映出来,那时已经很难追溯到这个周五。
分散的系统几乎无法把这笔账算回去,因为续费数据在会员系统,缺码记录在门店系统,推送记录在私域工具里。共享的球迷身份让这条因果链可以被追踪:系统能够找出“在比赛日遇到缺码的会员”和“近期买过又收到同款折扣的会员”,单独观察他们的续费率,再把结果反馈给库存预留和发券规则。留存不是链条末端的一个指标,而是检验前面每一环是否做对的最终答案。
一个系统,不等于一个包打天下的模型
需要说明的是,欧宝体育内部仍然是多个专门模块:Fan Identity 和 Fan Lifecycle 负责“人”,Recommendation Engine 负责兴趣与排序,Forecast Model 负责需求,Inventory Engine 和 Retail Analytics 负责渠道与门店。把它们串起来做主动判断的是 Sports Commerce Agent,它的工作是在链路上发现矛盾和机会,再把建议交给对应负责人确认。每个模块可以单独升级、单独评估误差,但它们对“谁、哪件货、什么时间、在哪个渠道”的理解是一致的。
一体化的代价和适用边界
共享数据层并不便宜。身份关联必须建立在用户授权之上,并遵守个人信息保护相关法规,关联不上的数据宁可保持独立;商品主数据需要有人长期维护,每个新款、每个球员印号都要按统一规则入库;渠道库存如果只能按天同步,就无法支撑比赛日的现场决策。对规模较小的俱乐部或品牌,我们通常建议先建身份与渠道库存两张表,再逐步接入赛事日历和预测模型。
怎么判断一体化真的有用
与其问“系统有没有打通”,不如每个月统计三个矛盾指标:推荐给用户的商品在其最近渠道断码的次数;折扣券发给近九十天内已购买同款用户的比例;促销周的预测误差是否明显高于非促销周。如果一体化之后这三个数字没有下降,说明底表只是连在了一起,还没有真正进入决策。想看这条链路在一次具体运营中如何逐步执行,可以接着读一次体育商品运营流程的完整拆解。