他没有再开新的训练。
一点多,办公室只剩他这一排还亮着灯。空调早停了,屋里闷得像一只没掀盖的饭盒。他关掉训练脚本,打开数据管道的入口文件,从第一行读起。
熊叙川的代码写得干净,注释却几乎没有。读订单、去重、按用户合并、算每样商品的销量,一层套着一层。杜衡每进一个函数,就在本子上记下函数名和它交出去的东西。记到第三页,他翻到一个叫“清洗订单”的函数,统共不过十几行。其中一行写着:订单类型只保留“普通”和“促销”,其余一律跳过。
只是跳过。不报错,也不留一条日志。
他去订单表里查了一下。现在的订单类型有三种,第三种叫“拼团”。
拼团页是三个月前上线的,那天公司给每个人点了一杯奶茶。杜衡记得那杯奶茶,却从没想过拼团的订单流到了哪里。他按月一个个数:三月,拼团还只是零头;四月涨得很快;到了五月,已经占全部订单的三分之一。
他翻回前一页,看了看那个零点六六几,又看了看这个三分之一,用一条线把两个数连了起来。
接着他把五月的拼团订单按商品排了一遍。排在最前面的是西瓜,后面是水蜜桃、葡萄、几种瓶装饮料和冰棍。超市这个夏天卖得最好的东西,大半是从拼团页走的。而这些,模型一次也没见过。在它眼里,五月的南京几乎没有人买西瓜。
快两点的时候,他给熊叙川发微信。写了删,删了又写,最后只剩三句:“清洗订单只留普通和促销,拼团的单全被跳过了。拼团现在占三分之一。这一段是故意的吗?”
发完他才想起时间。熊叙川这会儿早该睡了。
回复是第二天上午来的,只有一行:
“写那段的时候还没有拼团。”
隔了几分钟,又来一条:“加上就行,很简单。”
杜衡把“拼团”加进那一行,重新跑了一遍合并。结果出来,他先看买得最多的用户。排第一的那个人,五月买了几十个西瓜、几十箱桃子,还有成箱的汽水。他点开订单,收货地址是一个小区门口的便利店。
是个团长。
他又翻了十几张拼团单,每一张都一样:订单上只记着发起拼团的人,东西全挂在团长一个人名下。哪一户要了半个西瓜,哪一户要了一箱桃子,订单里一个字都没有。照这样算,模型会以为一个团长一口气吃掉了半个小区的水果,而真正买西瓜的那些人家,在数据里还是空的。
武佩兰端着冷茶从他身后经过,瞥了一眼屏幕:“怎么样,有眉目没?”
“有。”
他想了想,“还差一点。”
“差多少?”
他没答上来。她喝了口茶,走了。
要把“谁拿了什么”找回来,订单表里就得多一个字段,下单时把每一份记到真正拿货的人头上。
他打开订单表的说明文档。负责人一栏写着数据平台组。下面列着读这张表的服务:支付、配送、发票。推荐排在最后,括号里还是熊叙川的名字。