普遍预测CTR不准,需要校准。例如。boosted trees and SVM预測结果趋于保守。即预測的概率偏向于中值;而对于NaiveBayes预測的概率,小概率趋于更小。大概率趋于更大。经常使用的校准方法有Binning和Pair‐Adjacent
Violators (PAV);以下分别说说这两种方法。

Binning思想比較简单,也easy实现。

须要说明的是,通常校准算法不不过将概率校准为还有一概率。而是广义地将一分类器的输出score(比如SVM的输出)校准为一概率;这里的score在本文中指的就是预估的点击率CTR。

採用以上方法就能够得到每一个bin的平均输入概率和输出概率(输入输出都是相对于算法而言的)。

以下是我针对1kw曝光量的測试集得到的每一个bin输入输出概率:

7.88491695029e-08       9.80392156863e-05       4|50000
5.4510560119e-07 0.000274509803922 13|50000
1.35458085469e-06 0.000372549019608 18|50000
2.33257130656e-06 0.000588235294118 29|50000
3.39343704862e-06 0.000313725490196 15|50000
4.91818880101e-06 0.000352941176471 17|50000
6.69217711e-06 0.000313725490196 15|50000
8.65811344814e-06 0.000392156862745 19|50000
1.00954604284e-05 9.80392156863e-05 4|50000
1.14438087348e-05 0.00021568627451 10|50000
1.30646586671e-05 0.000196078431373 9|50000
1.50354239562e-05 0.000156862745098 7|50000
1.75724883698e-05 0.000235294117647 11|50000
2.012701573e-05 0.000196078431373 9|50000
2.25293057122e-05 0.000254901960784 12|50000
2.47121329232e-05 0.000294117647059 14|50000
2.68149995297e-05 0.000235294117647 11|50000
2.87109118589e-05 0.000235294117647 11|50000
3.03836824801e-05 0.000274509803922 13|50000
3.27245870019e-05 0.000450980392157 22|50000
3.51748897506e-05 0.000274509803922 13|50000
3.7623296079e-05 0.000352941176471 17|50000
4.03544768064e-05 0.000490196078431 24|50000
。。。

这仅仅是前面一些片段,第一列为每一个bin的平均预估点击率,第二列是校准的点击率,第三列为校准时分子分母的值(这里就是点击量和曝光量),这里每一个bin的总量均为50000。对整个每一个bin的平均预估点击率和校准点击率画出散点图为:



能够看出两个点击率是相关的。这样看还看不出详细什么关系,画出对数图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1pbmdfMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" align="middle" alt="">

能够非常明显地看出平均预估点击率大于0.0001时。平均预估点击率的对数与校准点击率的对数是呈线性关系,

logy = alogx + b                  得到y = cx^a, 预计出參数c和a就可以。

对于平均预估点击率小于0.0001时,能够简单地使用线性回归求出方程。

有了这两个方程就能够对随意的点击率进行校准了。

当然,我看也有人将以上平均预估点击率划分成若干区间0 &#20; < v1 < v2 < : : : < vn+1 <&#20; 1,对随意的点击率进行查找所属区间(vi,vi+1),採用线性插值得到的校准点击率为  α p(vi) + (1 -
α )p(vi+1)。

1.将score由大到小排序,对于随意两个相邻的score(i)和score(j)。若它们相应的样本属于不同类,则我们希望样本i属于正类,样本j属于负类

2.对于随意两个相邻score,若上述条件不满足,则令这两个score所定义区间相应的后验概率为score(i)和score(j)的均值。

3.对排序后的score依照上述规则进行一次“扫描”(由小到大或由大到小均可),直到没有变化为止,即完毕了PAV

python-sklearn包中含有http://scikit-learn.org/stable/modules/generated/sklearn.isotonic.IsotonicRegression.html#sklearn.isotonic.IsotonicRegression 
能够直接调用:

from sklearn.isotonic import IsotonicRegression as IR

ir = IR()
ir.fit( p_train, y_train )
p_calibrated = ir.transform( p_test ) # or ir.fit( p_test ), that's the same thing

參考资料:

http://fastml.com/classifier-calibration-with-platts-scaling-and-isotonic-regression/

http://scikit-learn.org/stable/modules/generated/sklearn.isotonic.IsotonicRegression.html#sklearn.isotonic.IsotonicRegression

http://wan.poly.edu/KDD2012/docs/p768.pdf

CTR校准的更多相关文章

  1. 美团DSP

    https://blog.csdn.net/LW_GHY/article/details/71455535 ADX出价调整, 预估ctr抽样后调整还原 2. 动态调整报价在DSP的报价环节,点击率预估 ...

  2. 负样本采样及bias校准、ctr平滑

    参考:https://zhuanlan.zhihu.com/p/31529643 在CTR预估中,负样本采样是一种常见的特征工程方法.一般CTR预估的原始正负样本比可能达到1:1000~1:10000 ...

  3. CTR点击率校准

    1. 概述 广告CTR预估过程中,正负样本比例差距较大,需要采样,但是采用后模型训练的结果是有偏的. 2. 校准方式 用逻辑回归作为激活函数

  4. 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践

    计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局   版 ...

  5. oCPC中转化率模型与校准

    翻看日历时间已经来到了2021年,也是共同战役的第二年,许久没有更新文章了,在与懒惰进行过几次斗争都失利之后,今天拿出打工人最后的倔强,终于收获了一场胜利.闲话不多说,今天咱们重点聊聊oCPC中转化率 ...

  6. 项目 CTR预估

    项目和数据介绍 给定查询和用户信息后预测广告点击率 搜索广告是近年来互联网的主流营收来源之一.在搜索广告背后,一个关键技术就是点击率预测-----pCTR(predict the click-thro ...

  7. 【项目】百度搜索广告CTR预估

    -------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...

  8. HTML 5 背离贪吃蛇 写成了类似于屏幕校准

    中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...

  9. Google在KDD2013上关于CTR的一篇论文

    最近在做CTR,刚好Google在KDD发了一篇文章,讲了他们的一些尝试,总结一下: 先是一些公式的符号说明: 一.优化算法 CTR中经常用Logistic regression进行训练,一个常用的L ...

随机推荐

  1. 内核空间和用户空间的分界 PAGE_OFFSET

      PAGE_OFFSET 首先看看PAGE_OFFSET的功能   内存映射 |            用户空间                  |   内核空间   | |——————+———— ...

  2. C++开源代码项目汇总

    Google的C++开源代码项目 v8  -  V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎.V8 采用 C++ 编写,可在谷歌浏览器(来自 Go ...

  3. Java抓取网页数据(原来的页面+Javascript返回数据)

    转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同 ...

  4. oracle 在操作blob该字段是否会产生很多redo

    操作blob该字段是否会产生很多redo,答案是否定的.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob (   id ...

  5. ORALCE 之LRU链与脏LRU链【转载】

    今天是2013-09-09,时别n久的一篇经典文章,有被我在google发现了,再次转载一下.学习一下. 一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer cac ...

  6. 跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)

    跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)         上面设计好了一个模块的主界面,以下通过菜单命令的运行来把这个模块增加到主界面其中. 在MainModule. ...

  7. Struts工作机制图+OGNL+EL+值栈(Map,对象栈)

    struts 值栈  通过get set方法 方便的获取,设置属性值      比如从jsp页面传来的參数...从Action设置jsp所要回显的内容 注意EL表达式,struts2对request进 ...

  8. php中empty()、isset()、is_null()和变量本身的布尔判断区别(转)

    在php脚本中,我们经常要去判断一个变量是否已定义或者是否为空,就需要用到这些函数empty().isset().is_null()和其本身作为参数,下面小段程序做个简要比较 <?php//预定 ...

  9. hdu5176(并查集)

    传送门:The Experience of Love 题意:一个叫Gorwin的女孩和一个叫Vivin的男孩是一对情侣.他们来到一个叫爱情的国家,这个国家由N个城市组成而且只有N−1条小道(像一棵树) ...

  10. DHTML【10】--Javascript

    大家好,这一节主要介绍Javascript的函数.函数是Javascript的核心中的核心,这么强调一点都不过分,相信没有人反对,如果有人反对,你以后可以不用函数,呵呵,说的有点绝了啊. 下面看一下J ...