“数据比我们想的还乱。”
周野这句话落下,办公室里刚压下去的紧张又浮了起来。陈海把三张表并排拉开,用户编号、点击日志和订单记录像三套互不认识的账本,同一个人今天叫U1029,明天变成手机号后四位,后天又成了微信开放号。
年轻测试盯着屏幕:“这怎么跑推荐?样本都对不齐。”
周野在视频那头咳了一声,医院走廊的灯光很白,他压低声音:“别急着写算法。先确认哪个编号能回到同一个用户,否则算出来的偏好全是假的。”
林川看了眼时间,晚上六点三十九分。
七天死线,从数据送达这一刻就开始往下掉。
“先停一下。”林川把南城优选的协议放到桌上,“今晚目标不是把系统做出来,是把问题拆成能执行的清单。七天内要让推荐转化率相对基线提升百分之二十,第一步必须知道基线到底干不干净。”
陈海揉了揉眉心:“林总,我说句实话。我们现在九个人,手上还有原客户二期问题,南城这批数据又乱成这样。七天要跑出效果,风险太大。”
另一名后端也低声接话:“而且没有预付款,最后不达标就白干。”
话出口,他自己先低下头。办公室一下安静了几秒。
林川没有训人。创业不是打鸡血,员工刚从欠薪里缓过来,怕白干很正常。真正不正常的是老板假装风险不存在。
他拿起白板笔,在最上方写下三个词:数据、商品、运营。
“风险确实大。”林川说,“所以今晚不靠口号。陈海,你带两个人做字段映射,把三套用户编号能合并的部分标出来,合不上的不要硬合。”
陈海抬头:“那推荐样本会少很多。”
“少也比脏好。”林川说,“我们宁可先做小商品池,也不拿假数据骗自己。”
他又看向测试:“你们把最近七天订单抽样,按商品、价格、退货、手动置顶四个标签拆开。凡是人工强推过的流量,单独标出来,不并入自然推荐基线。”
年轻测试立刻点头,手指重新落回键盘。
林川转向后端:“库存表七天没同步,今晚不写入生产,不碰南城后台。先让李萍确认库存快照,我们只用她签字确认后的灰度商品池。”
后端问:“李萍现在还在线吗?”
“我来打。”
电话接通时,李萍那边有叉车倒车的提示音。她听完要求,沉默了两秒:“林总,今晚就要锁商品池?”
“不锁,明天你们一改价格,我们今天做的基线就废了。”林川说,“我只要二十到三十个库存压力最大、价格能当天确认、退货原因能查清的商品。低于成本价的不进。”
李萍没有推给邵明,只问:“如果我给了,明天运营不能临时换主推?”
“能换,但换了就从灰度池里剔除。”林川说,“这是保护你们,也是保护星川。七天太短,口径先乱,结果就没有意义。”
电话那头传来翻纸声。过了一会儿,李萍说:“给我半小时,我把仓库和售后叫到一起核。”
挂断电话,陈海看林川的眼神变了些。他以前见过老板催开发,也见过老板对客户拍胸脯,但很少见到有人第一晚先把不能做的部分圈掉。
周野在视频里开口:“林川,我可以看清洗规则,但我现在不能长时间在线。周晚刚手术完,病区随时会叫人。”
“你只负责判断方向。”林川说,“执行在星川。今晚所有代码提交走陈海审核,别把你拖进不清楚的权责里。”
周野看了他一眼,没再推辞:“那我给一个最小方案。先不做复杂模型,用商品相似度、用户近七天行为和库存压力做三层排序。冷启动部分单独处理,别让缺字段的用户污染全量。”
陈海立刻追问:“如果点击时间和订单时间对不上呢?”
“按可靠字段降级。”周野说,“有完整链路的进训练样本,只有订单的做购买偏好,只有点击的只做参考权重。最重要的是,别为了凑数据把时间线倒过来。”
这句话像一颗钉子,把混乱的数据暂时钉住了。
林川在白板上写下“可用、降级、剔除”三列,又把每一列后面标上负责人和截止时间。晚上八点前拿到商品池,十点前出第一版清洗结果,凌晨一点前跑出离线排序,明早九点前给南城优选一份只包含边界和灰度规则的确认表。
有人小声说:“这排得也太满了。”
“是满。”林川把笔放下,“但每一步都有交付物。做不完哪一步,马上说,不许拖到最后再报喜。”
没人再争论白干不白干。风险已经摆在桌面上,接下来只能用一条条能核验的结果往前推。
办公室里重新响起键盘声。
八点二十六分,李萍发来第一版灰度商品池。二十八个SKU,包含临期饼干、纸巾套装、小电锅和本地洗衣液,后面逐项写着库存、成本价、可调整价格区间、退货主要原因。她还附了一句话:邵总已确认,不临时插入新商品。
林川把邮件存档,转给团队:“以这版为准。”
陈海那边也有了第一批结果。三套用户编号里,只有约六成能通过手机号哈希和收货地址片段合并,剩下四成无法可靠归一。测试抽样又发现,过去七天里有两次清仓活动被运营手动置顶,表面上带来点击,实际退货率比普通订单高了一倍多。
“难怪转化率越救越低。”年轻测试说,“系统以为这些商品受欢迎,其实是被硬推出来的。”
林川看着那组数据,心里反倒松了一点。问题暴露出来,至少说明他们没有在黑箱里瞎撞。
到了十一点半,办公室的外卖盒堆在角落,没人顾得上收。周野中途下线两次,第二次回来时声音明显更哑,却仍把清洗规则里一处时间窗口错误圈了出来。
“这里不能用支付时间反推点击偏好。”他说,“如果用户先加入购物车,第二天才付款,你们会把第二天的推荐误判成有效。”
陈海拍了下额头,立刻改规则:“我来修。”
林川站在白板前,看着一个个红色问题被划掉,又有新的黄色便签贴上来。直到这一刻,他才真正意识到,收购一家公司和拥有一家公司是两回事。前者是签字付款,后者是每一个人看着他,等他在压力里把方向定清楚。
凌晨零点四十七分,第一版离线排序终于跑出来。
屏幕上,二十八个商品被重新排进不同人群标签里。临期饼干不再推给近期购买血糖仪和低糖食品的用户,小电锅也不再出现在只浏览母婴纸品的人群前面。数据看起来顺了许多。
年轻测试忍不住握了下拳:“这版至少比原来靠谱。”
陈海却没有笑。他把最后一组校验结果拖出来,脸色慢慢沉下去:“不对。点击预测提高了,但订单转化模拟没有跟上。”
后端赶紧刷新日志:“是不是样本太少?”
周野盯着屏幕看了很久,眉头皱紧:“不是样本少。核心排序有个地方卡住了,库存压力和用户偏好在互相打架。它把最该清掉的货推上去了,但用户根本不买。”
办公室里刚升起的一点热度,被这句话压回原地。
林川看着屏幕上那条迟迟不动的转化曲线,手指缓慢敲了两下桌面。七天只剩六天多一点,而他们连第一版核心逻辑都还没跑通。
他合上笔记本,声音不高,却让所有人都抬起头。
“休息十分钟。”林川说,“十分钟后,我们重新拆这条排序逻辑。”