文 | 包包闭关修炼
源 | 包包算法笔记
让算法工程师最头疼的一件事就是线下涨了线上降了。
这时候你可能怀疑自己,这一个月岂不是白干了?
先不要灰心,先问问自己为什么会这样。要是找不出为什么的话,后面半年还得继续白干,就是这么扎心。
但事情也不要总往悲观的方面想,第一是至少你开始思考这个问题了,不是校招面试官一问三不知的时候了。第二是说明你的业务挺有挑战的,过了在电梯上做俯卧撑也能增长的时候。
之前讲过比赛场景的类似问题《一文破解机器学习里的bias》[1],今天我们唠一唠工业界的算法场景。
工业界的算法场景要比比赛复杂很多,所以比赛中,线上线下不一致问题的原因,仅仅是其中一个子集。
算法实验效果不好,先甩锅给工程。
对,你没看错。
工程的原因可能有下面几个。
实时特征一致性。典型的各种实时特征场景,你在离线日志解析出来的用户停留时长总比在线长那么半秒,而这个特征又是一个关键特征。仔细看看是不是落库的链路口径不一致。
特征预处理没有考虑特殊情况线。广告场景的新I’d,离线建模的时候没有考虑过这个问题,在线上场景频繁见过新的东西,你是不是取错embedding到一个离谱的位置了。除了广告场景,NLP里的溢出词表词,可能也会给你几个颜色瞧瞧。
模型更新失败?上线的时候,一定检查下模型在线上的链路有没有生效,偷懒摸鱼一时爽,缓存还在火葬场。嗯,线上的模型一般都有buffer机制,两道保险也有两道坑,记得刷新。
实验配错了。包括不限于流量配错位,场景I’d和实际情况不一致等等低级问题。
当然,甩锅给工程都是一些初级的问题,容易发现,容易解决。要是你算法自己的锅,就没那么容易了。
你自己的锅:
1.特征穿越了
是不是偷偷地用线上不可能产生的逻辑建模了,比如当天的PV和UV。你在离线的时候很美好,在线的时候,这一天还没过完呢,你统计出来的信息肯定是有穿越。好家伙,你做量化,怎么不把今天的收盘价也加进去。
2.建模的技术指标不合理
不要以为会看个AUC,logloss就万事大吉了。这些技术指标往往不是你okr上的关键。AUC高只能说明你模型拟合特征和标签还行。典型的比方说,你的场景是list view 里插的固定条目的广告。你要是用AUC,就不如用NDCG。
3.特征有bias
在建模的时候,debias是老生常谈的问题了,最最经典的问题就是position带来的bias。你把这个item放在推荐页的上面,你把这个query放在搜索联想的第一条,他本身也会因为近水楼台先得月而点击率偏高。
这时候你就得想办法debias了。
4.数据分布不一致
训练样本的分布往往不等于真实的分布。我们在处理离线建模数据的时候,往往会负采样。负样本弱水三千,只取一瓢。你取哪瓢就太有学问了。负样本太简单,模型学不到什么有价值的信息。在相近的类似正样本上分的就不会太好。这时候你的线下指标就失真了。比如推荐场景下,我们往往会选取展示未点击作为负样本的组成部分。
5.流量抢夺,链路纠缠
典型的比如在营销场景,你在前面的PUSH,短信,固定入口广告做优化,把好转化的用户都转化了。那么下游的IVR电销,人工电销一定就变难了。
这时候你离线用历史数据训练的模型可能离线指标提升了,线上也不会有太多的效果。
这种在一些瀑布流程的场景中更为常见,一定要关注实验的上下游变化,比较经典的方法是做MVP机制,一直维持着最优流量的AB测。这样相对提升是可以把握住的。即使小模块指标变得难看了也没关系,可能大盘整体还是变好的。
6.特殊时间点的漂移
双十一大促,过年放假,这些时间点一定要注意。最好跟往年同时间的复刻对比,谨慎实验。因为这时候的幺蛾子特别多,尤其是在一些时间序列的预测任务上,基本上都跑飞了。所以成熟的算法工程师从不让自己利于危墙之下。
后台回复关键词【入群】
加入卖萌屋NLP/IR/Rec与求职讨论群
后台回复关键词【顶会】
获取ACL、CIKM等各大顶会论文集!
[1] 一文破解机器学习里的bias
https://mp.weixin.qq.com/s?__biz=MzIwNDY1NTU5Mg==&mid=2247484333&idx=1&sn=d0868c0686a49cd91e90f8ee3c03aa1c&chksm=973d9d2aa04a143c49b80085c693fef8d980c0967e7a4676292c3a8299e632583f4189be4b14&scene=21#wechat_redirect