點擊率預測的貝葉斯平滑

背景

電商領域中經常需要計算或預測一些轉化率指標,如最典型的CTR(點擊率,Click-Through Rate)。這些轉化率可以是模型的預測值,也可以作爲模型的特徵(feature)使用。以商品點擊率預測爲例,CTR的值等於點擊量(Click)除以曝光量(Impression或Exposure)。以rr表示點擊率,

r=CI(1)r=\frac{C}{I} \tag{1}.

但在實際應用過程中會碰到兩個問題:

  • 新商品點擊率的預測與計算
    對於新上線的商品,其曝光爲0,點擊量也爲0,此時這件商品的CTR應該設爲0還是賦一個初始值?

  • 不同商品點擊率之間的比較
    有兩件商品A和B,其點擊率分別爲rA=510r_A=\frac{5}{10}rB=50100r_B=\frac{50}{100}rA=rBr_A=r_B,但商品A的曝光只有10次,商品B的曝光有100次,這樣比較是否合理?

第一個問題,初始值設0是可以的,但不太合理。當CTR作爲特徵使用時,表示這個商品完全沒有點擊,不太符合日常推斷,通常是賦一個大於0的初始值。第二個問題,不合理,通常會認爲曝光次數少的商品權重應該低一些。

解決以上兩個問題可以使用平滑的技術解決。最簡單的方法是在計算CTR的公式中分子分母同時加上一個數,加上之後可避免這兩個問題。

r=C+aI+b(2)r = \frac{C+a}{I+b} \tag{2}

但(2)式中aabb的值如何確定? 這兩個數可以人爲設定,但若設置得不合理會出現數據被放大的情況。本文介紹如何通過歷史數據來計算有統計意義的aabb,即貝葉斯平滑。

貝葉斯平滑

貝葉斯平滑的思想是給CTR預設一個經驗初始值,再通過當前的點擊量和曝光量來修正這個初始值。如果某商品的點擊量和曝光量都是0,那麼該商品的CTR就是這個經驗初始值;如果商品A和商品B的曝光量差別很大,那麼可以通過這個經驗初始值來修正,使得曝光量大的商品的權重增大。

貝葉斯平滑就是確定這個經驗值的過程。貝葉斯平滑是基於貝葉斯統計推斷的,因此經驗值計算的過程依賴於數據的分佈情況。

貝葉斯平滑的推導涉及貝葉斯參數估計,如果對貝葉斯參數估計不熟悉,可以先參考這篇文章:貝葉斯參數估計的理解及其在電商算法中的應用

點擊率貝葉斯平滑的假設

對於一件商品或一條廣告,對於某次曝光,用戶要麼點擊,要麼沒點擊,這符合二項分佈。因此下文中對於點擊率類的貝葉斯平滑,都是基於以下假設:對於某件商品或廣告XX,其是否被點擊是一個伯努利分佈(Bernoulli)

XBer(r)(3)X \sim Ber( r) \tag{3}

其中XX表示某個廣告是否被點擊,點擊取1,未被點擊取0,rr是某件商品被點擊的概率,即點擊率

對於不符合二項分佈的比值類數據,也可以通過貝葉斯參數估計的方法計算平滑參數,但是數據分佈假設需要修改,後文有說明。

點擊率的極大似然估計

在(3)式的假設下,可以使用極大似然法計算出點擊率的估計值r^\hat{r}。從用戶日誌中隨機抽取nn條記錄,對任一條記錄ii都有

XiBer(r)(4)X_i \sim Ber( r) \tag{4}

那麼所有記錄的點擊數的聯合概率密度就是上式的連乘。將連乘後的式子對rr求導,並令其等於0,可以解出rr的值r^\hat{r}r^\hat{r}就是點擊率的極大似然估計。當某件商品的點擊次數或曝光量等於0時,可以用r^\hat{r}當成它的初始值。它解決了最開始提出的第一個問題,但沒有解決第二個問題。

上述r^\hat{r}的計算沒有用到歷史信息。所謂歷史信息是指:雖然我們不知道rr的具體取值,但是可以知道rr取值的範圍,更精確地,我們可以假設rr服從某個分佈。要將這些信息融入到rr的估計中需要用到貝葉斯參數估計。關於貝葉斯參數估計的具體內容可以參考:貝葉斯參數估計的理解及其在電商算法中的應用

點擊率的貝葉斯估計

在貝葉斯框架下,我們假設點擊率rr服從某個分佈:

rπ(r)(5)r \sim \pi(r) \tag{5}

因爲這是基於經驗的,這個分佈稱爲先驗分佈。貝葉斯參數估計可以同時解決最開始提出的兩個問題。其過程是基於經驗或歷史數據先給出一個rr的估計值,然後基於現有的數據在這個估計值上修正,得到最終的點擊率估計,此時的估計值已經是修正過的。更美好的是我們可以分離出修正參數(即(2)式中的aabb)。

既然有先驗分佈,就有後驗分佈rr的後驗分佈記作π(rx)\pi(r|x)。其中xx表示輸入數據或特徵,對於點擊率預測,xx就是點擊次數和曝光量。因爲已經看到了數據,才確定rr的分佈,因此叫做『後驗』分佈。**貝葉斯估計的實質就是求後驗分佈。**即基於當前的點擊次數和曝光量,求點擊率的分佈;而未看到數據之前點擊率的分佈是π(r)\pi(r)。下面講解如何計算後驗分佈π(rx)\pi(r|x).

貝葉斯估計的過程可以簡單認爲:

用歷史數據根據π(r)\pi(r)估計rr,記作r^history\hat{r}_{history};用當前數據根據π(rx)\pi(r|x)估計rr,記作r^current\hat{r}_{current},然後用r^history\hat{r}_{history}修正r^current\hat{r}_{current}

平滑係數的計算

rr的後驗分佈π(rx)\pi(r|x)是個概率密度函數,無法知道rr確切的值。需要求出最接近真實情況的rr需要損失函數來約束。

適用於點擊率的損失函數有:

  • L(r^,r)=(r^r)2L(\hat{r}, r) = (\hat{r} - r)^2
  • L(r^,r)=r^rL(\hat{r}, r) = |\hat{r} - r|

貝葉斯參數估計的過程可以簡單描述爲:r^\hat{r},使得損失函數在rr的後驗分佈上的期望最小。

這句話的數學公式是:

argminL(r,r^)π(rx) dr=argminEπL(r,r^)(6)\arg \min \int L(r, \hat{r}) \pi(r|\boldsymbol{x})\ dr = \arg \min E_{\pi} L(r, \hat{r}) \tag{6}

整個過程的推導可以參考:貝葉斯參數估計的理解及其在電商算法中的應用

要計算上式需要知道π(rx)\pi(r|x)的形式,然而π(rx)\pi(r|x)的形式一般不知道的,但是可以知道π(r)\pi(r)的形式(經驗值嘛,我們指定的,例如點擊率就是伯努利分佈)。此外,數據的分佈我們也是知道的(通過樣本得知),其概率密度函數(pdf)記爲f(xr)f(x|r),表示數據的分佈跟參數rr有關,rr是要求解的參數,在這裏就是點擊率。

這時可以根據貝葉斯公式計算出π(rx)\pi(r|x)

π(rx)=f(xr)π(r)f(x)(7)\pi(r|\boldsymbol{x}) = \frac{f(\boldsymbol{x}|r)\pi(r)}{f(\boldsymbol{x})} \tag{7}

其中,

f(x)=0f(xr)π(r)dr  (邊緣概率密度定義)f(\boldsymbol{x}) = \int_0^\infty f(\boldsymbol{x}|r) \pi(r) dr\ \text{ (邊緣概率密度定義)}

上式好複雜,但索性一些常見的分佈都可以求出上式積分的具體形式。然而實際計算時通常不用去計算積分,因爲滿足一定條件,π(r)\pi(r)π(rx)\pi(r|\boldsymbol{x})有一樣的形式π(r)\pi(r)是已知的,如果形式一樣,π(rx)\pi(r|\boldsymbol{x})也就容易求得了,這個條件就是共軛。下面介紹共軛先驗的概念。

共軛先驗:如果找到一個π(r)\pi(r),它是f(xr)f(x|r)的共軛先驗,那麼rr的後驗分佈π(rx)\pi(r|x)和先驗分佈π(r)\pi(r)會有一樣的形式。

『軛』是指駕車時套在牲口脖子上的曲木。古代拉扯的牲口通常有兩隻,因此軛是連接兩隻牲口的工具。在這裏共軛是指π(r)\pi(r)π(rx)\pi(r|x)通過f(xr)f(x|r)聯繫起來了。

之前假設廣告是否點擊服從伯努利分佈,參數爲rr;對於點擊次數,服從的是二項分佈,即f(C,Ir)Bin(r)f(C, I|r) \sim Bin(r)二項分佈的共軛先驗是Beta分佈,Beta分佈的參數是α\alphaβ\beta,即π(r)=Beta(α,β)\pi(r) =Beta(\alpha, \beta)。根據共軛先驗的定義,rr的後驗分佈π(rx)\pi(r|x)的形式跟其先驗分佈π(r)\pi(r)一樣,即π(rx)=Beta(α,β)\pi(r|x) = Beta(\alpha', \beta')

對於點擊率預測,求出π(rx)\pi(r|x),帶入公式(6),當L(r^,r)=(r^r)2L(\hat{r}, r) = (\hat{r} - r)^2時,
r^=C+αI+α+β(8)\hat{r} = \frac{C + \alpha}{I + \alpha + \beta} \tag{8}

(8)式就是點擊率估計(平滑)的最終形式。該式的具體求解過程可以參考貝葉斯參數估計最後二項分佈的例子。其中CCII就是點擊次數和曝光量,α\alpha即爲公式(2)中的aaα+β\alpha + \beta是公式(2)中的bbα\alphaβ\beta是從歷史數據中得到的

上面的內容給出了爲什麼很多文章會假設點擊率服從Beta分佈的理由,因爲最終的平滑的因子是Beta分佈(先驗分佈)中的兩個參數。那麼如何計算(估計)這兩個參數?

貝葉斯平滑因子的工程實踐

綜上,貝葉斯平滑的最終落腳點是要估計Beta分佈(點擊率rr服從的分佈)中的參數α\alphaβ\beta,帶入(8)式,得到平滑後的點擊率。下面給出比較直觀的矩估計的方法。

矩估計

Beta分佈的期望是E(X)=αα+βE(X) = \frac{\alpha}{\alpha + \beta},方差是D(X)=αβ(α+β)2+(α+β+1)D(X) = \frac{\alpha \beta}{(\alpha+\beta)^2 + (\alpha + \beta + 1)}. 我們可以用樣本的均值代替期望,樣本的方差代替總體的方差,此時就可以解出α\alphaβ\beta的值。Xˉ\bar{X}是樣本均值,S2S^2是樣本方差,則:
α=Xˉ(Xˉ(1Xˉ)S21)(9)\alpha = \bar{X}\left(\frac{\bar{X}(1-\bar{X})}{S^2}-1 \right) \tag{9}
β=(1Xˉ)(Xˉ(1Xˉ)S21)(10)\beta= (1-\bar{X})\left(\frac{\bar{X}(1-\bar{X})}{S^2}-1 \right) \tag{10}

這裏的樣本指的就是我們能觀察到的商品的點擊情況。

工程實踐

實際操作時可以連續取一段時間的數據,比如一週,然後在每天的數據中計算每件商品或廣告的點擊率,之後求出這些點擊率的均值和方差,帶入公式(9)和公式(10),可以得到每天的α\alphaβ\beta. 最後求這段時間α\alphaβ\beta的均值作爲最終的平滑參數。

也可以每天計算前一天的α\alphaβ\beta,用於當天的點擊率預測平滑。

實際應用時根據歷史數據得到的α\alphaβ\beta可以幫助確定平滑參數的大致範圍,防止設置參數時偏離過大。通常可以調整α\alphaβ\beta的範圍達到預期的效果。

下圖是某件商品在兩週時間內的點擊率。黃色線是每天根據點擊次數CC和曝光量II計算得到的真實點擊率;藍色線是根據一週的歷史數據計算得到的α\alphaβ\beta帶入公式(8)得到的平滑後的點擊率;綠色線是自定義平滑參數的點擊率,a=50a=50b=200b=200,設置得比較誇張。可以看到如果平滑參數設置的不合理,會放大數據的表現,有時候甚至會扭曲數據的走勢,數據預處理時需要考慮這樣的情況。

點擊率貝葉斯平滑效果

非二項分佈的貝葉斯平滑

公式(8)的結論適用於數據是二項分佈的情況,如點擊率。對於不是二項分佈的數據公式(8)不適用。如果數據不是二項分佈,那麼其先驗概率就不是Beta分佈了。比如某件商品一天的點擊量與一週的點擊量的比值,這個數據不符合二項分佈,因此不適用公式(8)。但這個數據有可能是高斯分佈。如果數據是高斯分佈,那麼其先驗概率π(r)\pi(r)是逆Gamma分佈(invers Gamma)分佈,進而其後驗概率π(rx)\pi(r|x)也是逆Gamma分佈,此時公式(8)會有不一樣的形式,視數據的具體情況而定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章