Wednesday, February 23, 2022

算法实验效果不好

 算法实验效果不好,先甩锅给工程。

对,你没看错。

工程的原因可能有下面几个。

1.实时特征一致性。典型的各种实时特征场景,你在离线日志解析出来的用户停留时长总比在线长那么半秒,而这个特征又是一个关键特征。仔细看看是不是落库的链路口径不一致。

2特征预处理没有考虑特殊情况线。广告场景的新I’d,离线建模的时候没有考虑过这个问题,在线上场景频繁见过新的东西,你是不是取错embedding到一个离谱的位置了。除了广告场景,NLP里的溢出词表词,可能也会给你几个颜色瞧瞧。

3.模型更新失败?上线的时候,一定检查下模型在线上的链路有没有生效,偷懒摸鱼一时爽,缓存还在火葬场。嗯,线上的模型一般都有buffer机制,两道保险也有两道坑,记得刷新。

4.实验配错了。包括不限于流量配错位,场景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.特殊时间点的漂移

双十一大促,过年放假,这些时间点一定要注意。最好跟往年同时间的复刻对比,谨慎实验。因为这时候的幺蛾子特别多,尤其是在一些时间序列的预测任务上,基本上都跑飞了。所以成熟的算法工程师从不让自己利于危墙之下。


No comments:

Post a Comment