轉化率(CTR)預測的貝葉斯平滑

概述

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

r=CI(1)
.

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

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

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

第一個問題,初始值設0是可以的,但不太合理。當CTR作爲特徵使用時,表示這個商品完全沒有點擊,不太符合日常推斷,通常是賦一個大於0的初始值。第二個問題,不合理。

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

r=C+aI+b(2)

但(2)式中a和b的值如何確定?若設置得不合理會出現數據被放大的情況。本文介紹如何使用貝葉斯平滑來確定a和b的值。

貝葉斯平滑

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

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

貝葉斯平滑的推導涉及貝葉斯參數估計,如果對貝葉斯參數估計不熟悉,可以參考這篇文章:貝葉斯參數估計

點擊率貝葉斯平滑的假設

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

XBer(r)(3)

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

對於不符合二項分佈的比值類數據,後文有說明。

點擊率的極大似然估計

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

XiBer(r)(4)

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

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

點擊率的貝葉斯估計

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

rπ(r)(5)

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

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

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

用歷史數據根據 π(r) 估計 r ,記作 r^history ;用當前數據根據 π(r|x) 估計 r ,記作 r^current ,然後用 r^history 修正 r^current

損失函數

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

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

  • L(r^,r)=(r^r)2
  • L(r^,r)=|r>) 是個概率密度函數,無法知道 r 確切的值。需要求出最接近真實情況的 r 需要損失函數來約束。

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

    • L(r^,r)=(r^r)2
    • L(r^,r)=|r^r)=(r
相關文章
相關標籤/搜索