线上线下效果不一致

1. 发生在 KAGGLE 比赛中的“地震”现象

主要原因:训练集和测试集数据分布不一致

检测:在训练集合和测试集合上训练一个二分类,并在测试集合上进行 auc 检测,如果 auc = 0.5,说明训练集合和测试集合没有显著差异。当 > 0.7 时,说明有较大差异。

应用1:二分类预测测试集上所有样本,将打分最高的 TOPK 选做测试集。

应用2:不挑选样本,只加权,将二分类的打分算作样本的权重,与测试集越相似,则权重越高。

2. offline 评估和线上评估效果不一致

原因a:bug

特征是否齐,特征穿越(我们在线log的,应该不可能),过拟合的测试集合(多扩大几天)

原因b:离线指标不可信

  auc?

  gauc?

  auc 是一个比较全局的评价指标,如果存在大量的负样本,则拉低了 fpr,进而提升了 auc。

  之前的测试数据发现以下的问题

  - test 是 daily feature join daily events。如果 events 跨天了,则会出现假负例。

  - 用户没点击不代表用户不喜欢。遇到过, ai push 了相似的文章,用户点击了最新的。是天然的 position bias。

原因c:动态环境

  线上 rerank 的规则可能改变真实的排序结果。

原因d:样本分布不一致

  离线预测的都是实际展示给用户的,在线的时候预测的是所有召回的集合。离线训练看不到其他召回结果。(可以采样部分召回结果,但是 label? )可能导致线上拉胯。

  对于新模型,一开始都是在拟合老模型产生的样本。可能经过一段时间的迭代,慢慢影响样本的分布,逐渐收敛。

  - solution1:尽量使用无偏的样本(探索、随机)或者引入召回的样本作为负例。

  - solution2:线上新老模型做融合,逐渐降低老模型的权重。

原因e: 可能是业务场景的问题。

  - 比如优化了 AI PUSH,那么 editor push 会不会降?如果 editor_push 降了比增的少,那是不是整体就是降的。

3. 可优化的思路

有没有办法用上全部的正例

A. 因为没有走 AI push 而丢失的正例(比如 ED push, CA  push)

无论是 calibrate,还是线上 join 特征。正例如果反馈时间太长,是不能 join 上特征的,就会导致这个正例被丢掉了。

时间窗口的方法,势必会丢掉窗口外的正例。有没有办法可以不丢失呢?

是不是可以用用户最近一次的 running_feature 做近似?因为只要用户没有点击,v1 就不会跟新的。但如果前一次是点击的话,画像可能会轻微变化。

B. 因为不在窗口内而丢失的正例

running feature 不能无限存储,这部分可能就得丢掉?

原文地址:https://www.cnblogs.com/toonice/p/14701446.html