100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > ctr 平滑_根据样本数进行点击率CTR的修正 - Wilson CTR

ctr 平滑_根据样本数进行点击率CTR的修正 - Wilson CTR

时间:2018-07-05 21:46:05

相关推荐

ctr 平滑_根据样本数进行点击率CTR的修正 - Wilson CTR

在广告和推荐系统当中,一个重要的衡量指标就是点击率,也即是CTR(Click Through Rate)。

计算公式: CTR = 点击数 / 曝光数

也有一种衡量指标是 uvCTR。 uvCTR = 点击uv数 / 曝光uv数。

考虑 CTR = 点击数 / 曝光数 这个公式的指标,只考虑了比例的关系,但没考虑样本数大小。因为样本数少的情况下,这个比例其实是不准确的;而样本数越大,这个比例越准确,越能反映真实情况。

举个例子,有三个广告:

A:点击数 2 曝光数 10

B:点击数 20 曝光数 100

C:点击数 200 曝光数 1000

它们的 CTR 都是 0.2 。但是很明显,从置信度来讲,是 C > B > A。因为C的样本数更多,C 的 0.2 CTR更加反映真实,更加可信。

为了衡量样本数对于 CTR 置信区间的影响,我们引入"威尔逊(Wilson)区间"的概念。公式如下:

p —— 概率,在这里指点击的概率,也就是 CTR

n —— 样本总数。在这里指 曝光数

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

Wilson区间的含义就是,就是指 在一定置信度下, 真实的 CTR 范围是多少。举一个例子,如下面代码所示。计算刚刚如上所述的 A、B、C 三个广告的 Wilson 区间( z取 1.96,也就是说该区间的置信度为 95% )。

frommathimportsqrt

defconfidence(clicks,impressions):

n=impressions

ifn==0:return0

z=1.96#1.96->95%confidence

phat=float(clicks)/n

denorm=1.+(z*z/n)

enum1=phat+z*z/(2*n)

enum2=z*sqrt(phat*(1-phat)/n+z*z/(4*n*n))

return(enum1-enum2)/denorm,(enum1+enum2)/denorm

defwilson(clicks,impressions):

ifimpressions==0:

return0

else:

returnconfidence(clicks,impressions)

if__name__=='__main__':

printwilson(2,10)

printwilson(20,100)

printwilson(200,1000)

"""

--------------------

results:

(0.07048879557839793,0.4518041980521754)

(0.14384999046998084,0.27112660859398174)

(0.1805388068716823,0.22099327100894336)

"""

从结果可以看到

A:点击数 2 曝光数 10点击率 95% 置信度的置信区间为 (0.07, 0.45)

B:点击数 20 曝光数 100 点击率 95% 置信度的置信区间为 (0.14, 0.27)

C:点击数 200 曝光数 1000 点击率 95% 置信度的置信区间为 (0.18, 0.22)

在实际的应用上面,就会取最低值,作为修正后的 Wilson CTR。也就是 A 的 Wilson CTR 为 0.07,B的 Wilson CTR 为 0.14,C的 Wilson CTR 为 0.18。这相当于是给样本数不足的CTR进行一定的衰减降权。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。