推薦系統指標評測——覆蓋率與基尼係數的算法與應用

評測指標是衡量推薦系統優劣的數據支持,目前應用普遍的有:點擊率、轉化率、精準率、召回率、F1值、覆蓋率、多樣性等等。不一樣的指標衡量的標準和目的是不同的...今天就來介紹一下覆蓋率和多樣性是如何計算和應用的。html

更多推薦系統資源,請參考——《推薦系統那點事兒》python

覆蓋率

如何評價推薦系統的優劣,能夠經過推薦的內容覆蓋率來衡量。固然它並非惟一的準則....覆蓋率顧名思義就是推薦商品佔整個推薦池的比例,它描述了一個推薦系統對長尾商品的挖掘能力(推薦池即你想推薦的商品池子,因爲大部分電商都有一些髒數據或者本身定義了推薦數據的來源,所以纔會出現本身的推薦池。)。git

而後咱們應用了一些算法,獲得了推薦結果。那麼試想一下,你的推薦系統做用是什麼?github

  • 讓熱銷更熱銷?讓冷門更冷門?
  • 全部商品出現的概率都同樣...

上面兩種場景,第二種或許纔是你們指望的吧。若是推薦系統的覆蓋率是100%,就意味着任何的商品內容都有可能出如今用戶面前;而若是覆蓋率只有10%,那麼就意味着只能推薦十分之一的商品給用戶,推薦的內容就太狹窄了。算法

然而覆蓋率只能說明商品的種類問題,不能說明每種商品的出場頻率。所以就須要額外的指標來講明瞭——基尼係數。spa

基尼係數

基尼係數描述的是物品流行度的分佈趨勢,流行度按照《推薦系統實踐》做者項亮的解釋,就是人與物品發生交互的鏈接數,我這邊就把它定義爲點擊數了。日誌

按照基尼係數的定義,有這樣一個分佈圖:code

基尼係數的定義就是A的面積除以半個等腰垂直三角形的面積。即
\[ \frac { A的面積 }{ (A的面積+B的面積)=1/2 } =\frac { 1/2-B的面積 }{ 1/2 } \]
若是還記得微積分的概念,就應該能理解。其中B的面積能夠近似的當作是每一個小格子的面積。每一個小格子都是一個梯形,梯形的面積公式,你們應該都有印象吧!
\[ (上底+下底)*高*1/2 \]
而後下面就有一大堆的公式推導:
\[ B=\sum { \left[ \frac { 1 }{ 2 } \times \frac { 1 }{ n } \times ({ w }_{ i-1 }+{ w }_{ i }) \right] } \]
\[ =\frac { 1 }{ 2 } \frac { 1 }{ n } \left( { w }_{ 0 }+{ w }_{ 1 } \right) +\frac { 1 }{ 2 } \frac { 1 }{ n } \left( { w }_{ 1 }+{ w }_{ 2 } \right) +...+\frac { 1 }{ 2 } \frac { 1 }{ n } \left( { w }_{ n-1 }+{ w }_{ n } \right) \]
\[ =\frac { 1 }{ 2 } \frac { 1 }{ n } \left( { 0+2w }_{ 1 }+2{ w }_{ 1 }+...+2{ w }_{ n-1 }+1 \right) \]
\[ =\frac { 1 }{ n } \sum _{ i=1 }^{ n-1 }{ { w }_{ i }+\frac { 1 }{ 2 } \frac { 1 }{ n } } \]
帶入到基尼係數的公式裏面,就是:
\[ \frac { \frac { 1 }{ 2 } -\frac { 1 }{ n } \sum _{ i=1 }^{ n-1 }{ { w }_{ i }-\frac { 1 }{ 2 } \frac { 1 }{ n } } }{ \frac { 1 }{ 2 } } \]
\[ G=1-\frac { 1 }{ n } \left( 2\sum _{ i=1 }^{ n-1 }{ { w }_{ i } } +1 \right) \]
上面只是公式的推導,有須要的直接使用最後一個公式就行。不過關鍵是\({ w }_{ i }\)的數據是怎麼計算的。htm

首先,有點擊日誌的朋友應該能獲取到用戶對物品的點擊數據。那麼就能夠統計(物品,被點擊次數),而後就能計算出,每種點擊次數有多少個。如:blog

點擊次數 個數
1 30w
2 20w
... ...
400 2
520 1

而後分別格式化點擊次數和個數,我這邊有個思路就是給每一列增長一個行號:

點擊次數 個數 行號
1 30w 101
2 20w 100
... ... ...
400 2 2
520 1 1

而後對行號除以10,給他分紅十組:

點擊次數 個數 行號
1 30w 10
2 20w 10
... ... ...
400 2 1
520 1 1

再累加個數,就把數據平均的分到了十個桶中,相似bucket統計。Y軸則直接除以最大值便可,這樣把X軸和Y軸都歸一化到0-1之間便可,而後應用上面的公式就能計算出對應的基尼係數。

獲得歸一化後的值就很好計算了 :

select 1-((sum(c2)*2+1)/10) from t

最終就能獲得對應的基尼係數。

應用

推薦系統若是想要用好基尼係數,須要蒐集一個原始的用戶行爲的基尼係數值G1,以及推薦系統後用戶點擊的基尼係數值G2。若是G2>G1,就說明推薦系統讓熱銷更熱銷,而長尾更冷門....咱們就須要調整推薦算法,增長商品的覆蓋率,改善商品的推薦分佈了。

參考

相關文章
相關標籤/搜索