为什么要ctr校正?

通常我们在做CTR预估的时候,预估值会与真是的CTR有偏差,这种偏差可能来自于负采样,可能是因为模型的问题。

CTR预估值与真实值有偏差,并不会影响AUC指标和排序,但是实际使用中往往需要CTR的预估值不仅仅是做到有序,即正样本排在负样本前面,而且需要保证有一定的区分度。这涉及到一个概念保序和保距。

假设我们有这么一个序列 牛 500KG,羊100KG,兔子 5kg,假设我们有一个模型,输入这些动物之后,根据体重排序,并且出一个体重的预估值。

我们模型如果只是采用AUC这个指标的话,那么我们模型输出 牛 100kg, 羊 20 kg,兔子1kg,这样的结果AUC是没问题的,但是这只是做到了保序,但是他们之间的差值变小了,没有做到保距

在实际业务中,比如我们有这么一些广告,A的实际点击率是10%,B的实际点击率是5%,C的实际点击率是1%,但是A B C的点击收益分别是2,5,10。如果我们的模型只保序、没有做到保距,那么输出的预估值是5%,1%,0.5%,这样的话AUC的排序指标是满足了,但是实际收益并不是最优的。

因此需要对CTR进行校准,是的CTR距离真实值越近越好。

CTR 训练时负样本下采样,上线前如何矫正?

第一种方法

  1. 首先有以下假设:
  • p ′ p^{'} p: 是已经采样之后的预测概率
  • p p p: 表示未采样的预测概率
  • N p N_p Np: 原始的正样本数量
  • N n N_n Nn: 采样后的负样本的数量
  • r r r: 表示负样本的采样比例,通常是个分数
  • N p r \frac{N_p}{r} rNp: 表示原始的负样本数量

可以得到:

p ′ 1 − p ′ = N p N n   ( 1 ) \frac{p^{'}}{1-p^{'}} = \frac{N_p}{N_n} \ (1) 1pp=NnNp 1
p 1 − p = N p N n r   ( 2 ) \frac{p}{1-p} = \frac{N_p}{\frac{N_n}{r}} \ (2) 1pp=rNnNp 2
p ′ = 1 1 + e − w x   ( 3 ) p^{'} = \frac{1}{1+e^{-wx}}\ (3) p=1+ewx1 3

公式(1)(2)这里假设:(正样本概率) / (负样本概率) = (正样本数) / (负样本数)
公式(3)也是一个假设,方便后面计算

  1. 根据(1)和(2)得到:

p 1 − p = N p N n r = p ′ 1 − p ′ ∗ r   ( 4 ) \frac{p}{1-p} =\frac{N_p}{\frac{N_n}{r}} = \frac{p^{'}}{1-p^{'}}*r \ (4) 1pp=rNnNp=1ppr 4

  1. 已知(3)可得:

1 p ′ = 1 + e − w x   ( 第 一 步 ) 1 − p ′ p ′ = e − w x   ( 第 二 步 ) l n ( 1 − p ′ p ′ ) = − w x   ( 第 三 步 ) l n ( p ′ 1 − p ′ ) = w x   ( 5 ) \frac{1}{p^{'}} = 1+e^{-wx} \ (第一步)\\ \frac{1-p^{'}}{p^{'}} = e^{-wx} \ (第二步)\\ ln(\frac{1-p^{'}}{p^{'}} ) = -wx \ (第三步)\\ ln(\frac{p^{'}}{1-p^{'}}) = wx \ (5) p1=1+ewx p1p=ewx ln(p1p)=wx ln(1pp)=wx 5

  1. 已知(4)和(5)可得:

(4)取以e为底的对数,然后用(5)替换

l n ( p 1 − p ) = l n ( p ′ 1 − p ′ ) + l n ( r ) = w x + l n ( r )   ( 6 ) ln(\frac{p}{1-p}) = ln(\frac{p^{'}}{1-p^{'}}) + ln(r) = wx + ln(r) \ (6) ln(1pp)=ln(1pp)+ln(r)=wx+ln(r) 6

  1. 最终得到的预测概率为:

l n ( p 1 − p ) = w x + l n ( r )   然 后 取 以 e 为 底   l n ( p 1 − p )   为 指 数 的 变 换 ln(\frac{p}{1-p}) = wx + ln(r) \ 然后取以e为底\ ln(\frac{p}{1-p}) \ 为指数的变换 ln(1pp)=wx+ln(r) e ln(1pp) 

p = 1 1 + e − ( w x + l n ( r ) )   ( 7 ) p = \frac{1}{1+e^{-(wx+ln(r))}} \ (7) p=1+e(wx+ln(r))1 7

第二种方法

参考的论文是14年facebook的论文《Practical Lessons from Predicting Clicks on Ads at Facebook》

q = p p + 1 − p w q = \frac{p}{p+\frac{1-p}{w}} q=p+w1pp

其中:

  • P是预估值
  • w是负样本的采样比例
  • q是校准后的值

矫正ctr例子

在广告的CTR训练中,在训练集中对负样本使用下采样,下采样比例为1/7,即选择1/7负样本作为训练数据。

在模型评估中,新模型ctr的mean为0.02。但是线上的Base模型mean为0.0032。所以上线前要对新模型的预估ctr做矫正。按照上面的公式带入计算。

p’是已经采样之后的预测概率值为0.02
r表示负样本的采样比例为1/7
要在要预估p(未采样的预测概率)

  • 用第一种方法:

由(5)可知wx等于-2In7。

将wx等于-2In7带入公式(7)等于0.003。

  • 用第二种方法:

0.02 0.02 + 1 − 0.02 1 / 7 = 0.0029 \frac{0.02}{0.02+\frac{1-0.02}{1/7}} = 0.0029 0.02+1/710.020.02=0.0029

通过计算,可以得出两种矫正的结果相差不多,似乎第一种方式更好,但是第一种比第二计算方式复杂。

分析:采样后预估均值为0.02,如果不采样的真实值大约在0.003附近。两者大约相差7倍。

注意:
在预估ctr的场景中,如果采用cpm排序、点击计费的场景中,一般是不需要上线前校准的。只要做到保序就可以了,但是如果想要更好的效果,就要做到保距,也就需要校准。

这么来看的话其实做校准模型也是有必要的,因为精排能够保序,但是保距能力较弱,所以需要通过校准模型优化模型预估的保距能力

Python code

# res 为模型预测后的概率值
res = res[0][1] / (res[0][1] + (1 - res[0][1]) / 0.1)
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐