Wilson威尔逊平滑

1、威尔逊平滑引入的动机

在曝光很少的情况下,计算出的CTR并不真实可靠,而样本数越大,CTR的比例才越准确,更能反应真实情况。

为了衡量样本数对于CTR信区间的影响,我们引入"威尔逊(Wilson)区间"的概念。Wilson区间的含义就是,就是指在一定置信度下,真实的CTR范围是多少。

2、威尔逊平滑公式

p —— 概率,即点击的概率,也就是 CTR 

n —— 样本总数,即曝光数

z —— 在正态分布里,均值 + z * 标准差会有一定的置信度。例如 z 取 1.96,就有 95% 的置信度。

Wilson区间的含义就是,就是指在一定置信度下,真实的 CTR 范围是多少。

3、置信度区间z参数设置

置信度水平与区间的关系如下

4、威尔逊几种实现代码

设置n小于多少时,认定为小样本,下面默认曝光次数小于10000时为小样本。

class WilsonCorrect(object):
    def evaluate(self, p, n, z=1.96, threshold=10000):
        score = p
        p = min(p, 1)
        if 0 < n < threshold:
            try:
                score = (p + z * z / (2 * n) - z / (2 * n) * math.sqrt(4 * n * (1 - p) * p + z * z)) / (1 + z * z / n)
            except:
                pass
        return score

当ctr大于某一阈值时,直接归0

import numpy as np
 
def walson_ctr(num_click, num_pv, z=1.96):
    p = num_click * 1.0 / num_pv
    if p > 0.9:
        return 0.0
    
    n = num_pv
    
    A = p + z**2 / (2*n)
    B = np.sqrt(p * (1-p) / n + z**2 / (4*(n**2)))
    C = z * B
    D = 1 + z**2 / n
 
    ctr = (A - C) / D
    return ctr

全走wilson平滑

double walson_ctr(int num_pv, int num_click) {
    if (num_pv * num_click == 0 || num_pv < num_click) {
        return 0.f;
    }
    double score = 0.f;
    double z = 1.96f;
    int n = num_pv;
    double p = 1.0f * num_click / num_pv;
    score = (p + z*z/(2.f*n) - z*sqrt((p*(1.0f - p) + z*z /(4.f*n))/n)) / (1.f + z*z/n);
    return score;
}

5、威尔逊实例

举个例子,有三个广告:
A:点击数   5     曝光数   10
B:点击数   50     曝光数   100
C:点击数   500     曝光数   1000
这三个广告的CTR 都是0.5 ,但是按照实际表现,从置信的角度分析,应该是C>B>A,因为C的样本数更多,可信度更高。

利用威尔逊平滑后的ctr预估值如下:

walson_ctr(5,10):0.2365895936154873
walson_ctr(50,100):0.40382982859014716
walson_ctr(500,1000):0.4690690341793595

6、参考文献

机器学习之数据处理威尔逊置信区间-CSDN博客

【推荐系统】推荐系统中一些常用的技术方法_威尔逊区间平滑-CSDN博客

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值