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


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

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

覆蓋率

如何評價推薦系統的優劣,可以通過推薦的內容覆蓋率來衡量。當然它並不是唯一的准則....覆蓋率顧名思義就是推薦商品占整個推薦池的比例,它描述了一個推薦系統對長尾商品的挖掘能力(推薦池即你想推薦的商品池子,由於大部分電商都有一些臟數據或者自己定義了推薦數據的來源,因此才會出現自己的推薦池。)。

然后我們應用了一些算法,得到了推薦結果。那么試想一下,你的推薦系統作用是什么?

  • 讓熱銷更熱銷?讓冷門更冷門?
  • 所有商品出現的幾率都一樣...

上面兩種場景,第二種或許才是大家期望的吧。如果推薦系統的覆蓋率是100%,就意味着任何的商品內容都有可能出現在用戶面前;而如果覆蓋率只有10%,那么就意味着只能推薦十分之一的商品給用戶,推薦的內容就太狹窄了。

然而覆蓋率只能說明商品的種類問題,不能說明每種商品的出場頻率。因此就需要額外的指標來說明了——基尼系數。

基尼系數

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

按照基尼系數的定義,有這樣一個分布圖:

基尼系數的定義就是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 }\)的數據是怎么計算的。

首先,有點擊日志的朋友應該能獲取到用戶對物品的點擊數據。那么就可以統計(物品,被點擊次數),然后就能計算出,每種點擊次數有多少個。如:

點擊次數 個數
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,就說明推薦系統讓熱銷更熱銷,而長尾更冷門....我們就需要調整推薦算法,增加商品的覆蓋率,改善商品的推薦分布了。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM