CTR预估中负采样修正

负采样

CTR预估中,负类(label==0)的样本数往往远大于正类。
为了解决样本不均匀的问题,往往对负类进行采样,就是所谓的负采样。

但需要注意的是,负采样后的结果,会使得测试集中CTR被高估:

  • 相当于将训练集中一部分真实的负例排除掉了,使得模型获取的信息不足,并不能准确地识别出(这些)负例,从而在测试集中将一部分负类向正类预测,即CTR被(整体)高估。

这在CTR预估中是有问题的,涉及到“保序”与“保距”的概念:

  • 假设我们有这么一个序列“牛 500KG,羊100KG,兔子 5kg”,我们有一个模型,输入这些动物之后,根据体重排序,并且出一个体重的预估值。如果模型只是采用AUC这个指标的话,那么我们模型输出“牛 100kg,羊 20 kg,兔子1kg”,这样的结果是没问题的,但是这只是做到了保序,但是他们之间的差值变小了,没有做到保距。
  • 在CTR预估中,比如我们有这么一些广告,A的实际点击率是10%,B的实际点击率是5%,C的实际点击率是1%,但是A B C的点击收益分别是2,5,10,如果我们的模型没有做到保距,那么输出的预估值是5%,1%,0.5%,这样的话AUC的排序指标是满足了,但是实际收益并不是最优的。

因此需要对负采样后的CTR预估值进行校准,使得整体CTR距离真实值越近越好。

修正方法

$p$为负采样后预测值,$w$为采样率$[0,1]$,$q$为修正后的预测概率。

推导

假设输入向量$x$,预测标签$C_k$,那么可以用条件概率表示,即计算$p(C_k|x)$的概率。根据贝叶斯公式,条件概率:

上面是没有做重采样时,得到概率。
当做重采样时,只是改变了标签$C_k$的先验概率$p(C_k)$,即将$p(C_k)$变为$p′(C_k)$($C_k$的先验分布改变)。而$p(x)$是条件$x$发生的概率,不会变化。$p(x|C_k)$是后验概率,也不会变化。(假设均匀采样,不改变样本中正样本分布)

对负样本进行抽样,比例为$w$,则$n’(0)=n(0)\times w$,$n’(1)=n(1)$,则先验概率$p(1)$与$p′(1)$的关系为:

由此,若想修正$p(C_k|x)$,则:

由于预测时并不能获知正样本比例$p’(1)$,则令$p’(1) \approx p’(1|x)$
群体比例由单体概率估算