ctr 平滑_CTR平滑的原理,包懂!!!附代码
為什么需要平滑?
某個(gè)物品CTR(click-Through-Rate)定義為“物品被點(diǎn)擊的概率”。CTR是某個(gè)物品在其他條件保持不變下自身的屬性。但是概率我們不好確定,能確定的是頻率。根據(jù)大數(shù)定理,隨著實(shí)驗(yàn)次數(shù)的增加,頻率會逐漸穩(wěn)定到概率附近。所以我們用一般物品被點(diǎn)擊的頻率
來表示它的CTR,即
(公式1)
我們當(dāng)然希望CTR越大越好,由上面的公式我們可知CTR的大小實(shí)際上由兩部分決定。首先是展示的次數(shù),英文里用了impression,直譯為給人留下的印象,我們可以理解為曝光并且被用戶看到,是有效的曝光。其次是被點(diǎn)擊的次數(shù)。如果有一件物品a 曝光了1次,并且被點(diǎn)了,那它的CTR就是100%。而另外一件物品b曝光了1000次,被點(diǎn)擊了100次,它的CTR就是10%。那我們能說物品a的CTR比物品b的CTR更高嗎?顯然不能,一次被曝光并且被點(diǎn)擊,這其中包含了很大的不確定性。根據(jù)大數(shù)定律,在實(shí)驗(yàn)次數(shù)不斷增加下,頻率才會穩(wěn)定在概率附近。顯示CTR等于100%這個(gè)數(shù)據(jù),只是在一次實(shí)驗(yàn)中得到,它偏離真實(shí)CTR的可能性非常高。
那么怎么能獲得更可靠的結(jié)論呢?一種顯然的想法是提高物品a的曝光,增大實(shí)驗(yàn)次數(shù),讓頻率更接近概率。但是大多數(shù)時(shí)候曝光不是你想增加,增加就能增加的。
指數(shù)平滑
另外一種樸素的想法是我們假定物品的CTR在一定時(shí)間內(nèi)是不變的,我們可以利用歷史的數(shù)據(jù)來修正今天的CTR。今天的CTR實(shí)際上CTR的觀測值。根據(jù)這個(gè)思路我們首先想到了指數(shù)平滑
(公式2)
可以看出來隨著時(shí)間的推移,歷史的信息在很快的衰減。
為什么利用beta分布得到的結(jié)果是
beta分布是在0-1之間beta分布的概率密度函數(shù)
我們假設(shè)某件物品的CTR服從參數(shù)為
的beta分布,即有
(公式3)
那么每次曝光可以看成從服從
和
的beta分布里的一次隨機(jī)抽樣。顯然被點(diǎn)擊的次數(shù)服從參數(shù)為
和r的n重伯努利分布,其中
和r都是已知條件
(公式4)
曝光
和點(diǎn)擊率是獨(dú)立的,
(公式5)
明確我們的目標(biāo)是要求在已知曝光
和點(diǎn)擊
下點(diǎn)擊率
的估計(jì),根據(jù)貝葉斯公式
(公式6)
其中B表示Beta函數(shù),可見新的點(diǎn)擊率也服從Beta分布,當(dāng)我們得到
之后,就可以確定點(diǎn)擊率的分布了。
對于參數(shù)為
的Beta分布的它的眾數(shù)是
,它的平均數(shù)是
。所以我們可以拿
或者
來作為平滑之后的CTR.
如何計(jì)算
?
假設(shè)我們擁有的是時(shí)間序列格式的數(shù)據(jù),每天點(diǎn)擊數(shù)獨(dú)立同分布,所以有如下的概率密度函數(shù),根據(jù)極大似然估計(jì)的原理。我們使下式取到最大值
(公式7)
上式對
求導(dǎo)有
其中
對
迭代求解
import scipy.special as special
def update(clicks,imps,init_alpha,init_beta,epoches,epsilon):
assert len(clicks) == len(imps), print("length not equal")
alpha, beta = init_alpha, init_beta
last_alpha = last_beta = 0
for i in range(epoches):
normalization = sum([special.digamma(imps[i]+alpha+beta) - special.digamma(alpha+beta) for i in range(len(clicks))])
alpha = alpha * (1/normalization) * sum([special.digamma(clicks[i] + alpha)-special.digamma(alpha) for i in range(len(clicks))])
beta = beta * (1/normalization) * sum([special.digamma(imps[i]-clicks[i]+beta)-special.digamma(beta) for i in range(len(clicks))])
if abs(last_alpha - alpha)
break
last_alpha = alpha
last_beta = beta
return alpha,beta
寫在最后
計(jì)算
時(shí)用到的極大似然函數(shù)也可以用我們在推導(dǎo)平滑CTR用到的公式6,最后對
的迭代求求我也沒太搞清楚,有興趣的朋友可以看下第一個(gè)參考文獻(xiàn)。
參考文獻(xiàn)
Environmental I S . Click-Through Rate Estimation for Rare Events in Online Advertising[J]. Online Multimedia Advertising Techniques & Technologies, 2011.
總結(jié)
以上是生活随笔為你收集整理的ctr 平滑_CTR平滑的原理,包懂!!!附代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名列前茅!DXOMARK公布小米13 P
- 下一篇: java socket ip_JAVA