日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ctr 平滑_CTR平滑的原理,包懂!!!附代码

發(fā)布時(shí)間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ctr 平滑_CTR平滑的原理,包懂!!!附代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么需要平滑?

某個(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。