推荐系统指标评测——覆盖率与基尼系数的算法与应用

评测指标是衡量推荐系统优劣的数据支持,目前应用普遍的有:点击率、转化率、精准率、召回率、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,就说明推荐系统让热销更热销,而长尾更冷门....咱们就须要调整推荐算法,增长商品的覆盖率,改善商品的推荐分布了。

参考

相关文章
相关标签/搜索