推荐中的ctr校准方式
文章目录为什么要ctr校正?CTR 训练时负样本下采样,上线前如何矫正?第一种方法第二种方法矫正ctr例子Python code为什么要ctr校正?通常我们在做CTR预估的时候,预估值会与真是的CTR有偏差,这种偏差可能来自于负采样,可能是因为模型的问题。CTR预估值与真实值有偏差,并不会影响AUC指标和排序,但是实际使用中往往需要CTR的预估值不仅仅是做到有序,即正样本排在负样本前面,而且需要保
为什么要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 训练时负样本下采样,上线前如何矫正?
第一种方法
- 首先有以下假设:
- 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) 1−p′p′=NnNp (1)
p 1 − p = N p N n r ( 2 ) \frac{p}{1-p} = \frac{N_p}{\frac{N_n}{r}} \ (2) 1−pp=rNnNp (2)
p ′ = 1 1 + e − w x ( 3 ) p^{'} = \frac{1}{1+e^{-wx}}\ (3) p′=1+e−wx1 (3)
公式(1)(2)这里假设:(正样本概率) / (负样本概率) = (正样本数) / (负样本数)
公式(3)也是一个假设,方便后面计算
- 根据(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) 1−pp=rNnNp=1−p′p′∗r (4)
- 已知(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) p′1=1+e−wx (第一步)p′1−p′=e−wx (第二步)ln(p′1−p′)=−wx (第三步)ln(1−p′p′)=wx (5)
- 已知(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(1−pp)=ln(1−p′p′)+ln(r)=wx+ln(r) (6)
- 最终得到的预测概率为:
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(1−pp)=wx+ln(r) 然后取以e为底 ln(1−pp) 为指数的变换
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+w1−pp
其中:
- 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/71−0.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)

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