最近做用户画像,用到了KL散度,发现效果还是不错的,现跟大家分享一下,为了文章的易读性,不具体讲公式的计算,主要讲应用,不过公式也不复杂,具体可以看链接。

  首先先介绍一下KL散度是啥。KL散度全称Kullback–Leibler divergence,也称为相对熵,信息增益,它是度量两个概率分布P与Q之间差异的一种不对称度量,可以看做是概率分布P到目标概率Q之间距离。一般情况下,P表示数据的真是分布,Q表示数据的理论分布,也可以理解为影响P分布的一种因素。计算公式为:

                      DKL(P||Q) =ΣP(i)log(P(i)/Q(i))                         (1)

 从字面意思来看呢,是一种距离,但是实际上和我们理解的“距离”并不一样。我们常规理解的距离一般来说有几点性质:

  1.非负:距离是绝对值,非负好理解。

  2.对称:从A到B的距离 = 从B到A的距离

  3.勾股定理:两边之和大于第三边

  而KL的性质只满足第一点非负性,不满足对称性和勾股定理。

  1.非负:当P(x) = Q(x)几乎处处成立时,才有DKL(P||Q) = 0. 证明可利用詹森不等式

  2.非对称性:根据定义可知,如果要弄成对称的,可以定义

                      DSKL(P||Q) = (DKL(P||Q)+DKL(Q||P))/2                    (2)

  为什么是非对称的呢,其实很简单,如果P(i)大,Q(i)小,那么log是一个增函数,P(i)/Q(i) > Q(i)/P(i),则log(P(i)/Q(i)) > log(Q(i)/P(i)),因此DKL(P||Q) > DKL(Q||P),如果想要DKL(P||Q) = DKL(Q||P),那么P(i)大,Q的分布应该尽量和P接近一致,P(i)小,P和Q的差别对KL影响较小。

举例:

1.假设现在有两个用户群体A和B,在“女装”这个商品类别下面,A和B的消费总金额分别是11W和2W,是不是就能说明A群体相对于B群体就一定更偏好女装呢?不一定。因为A的人数可能比B的多,如果A和B的人数比例是10:1,那么可能A和B群体对于“女装的”偏好是一样的,简单来算的话,你可以只算人均价格,如果A和B在“女装”下的人均消费相似,可以说明偏好相同,但是这一点没有什么理论支撑,我们可以把A和B群体在“女装”下的消费情况分布作为P(真实分布),A群体和B群体的人数比例作为Q(拟合分布),那么

                          P= [11/13,2/13]     Q =[10/11,1/11]

                          DKL(P||Q) =Σi=1,2P(i)log(P(i)/Q(i))  = 0.02023101833433108

计算得出KL散度约为0.02,接近0,说明A和B在女装下的消费情况分布基本相同,即,两者对“女装”的偏好并没有明显差异,喜欢“女装”的程度为1:1

  贴上KL散度的代码:

  

1 #P和Q是两个概率分布,np.array格式
2 P = np.array()
3 Q = np.array()
4 def KL(P,Q):
5     sum = P*(log(P/Q))#计算KL散度
6     all_value= [x for x in sum if str(x) != 'nan' and str(x)!= 'inf']#除去inf值
7     return np.sum(all_value)#计算总和,要用np.sum,不能直接用sum
8
9 KL(P,Q)#得出KL散度值

  具体在用户画像里有什么用呢?举个例子,我在做用户画像的时候,根据消费金额,分出了8个用户群体,这八个群体的人均消费Top10的重叠性很大,很多人都集中在“女装”,“淑女装”,“商务休闲”,“运动户外”等这几类,看起来没有什么区分度,只能根据金额的高低来区分这些群体的消费能力,但并不能区分这些群体对某类商品的偏好。在计算了各商品类型下不同群体的消费金额的KL散度后,可以发现,这写消费比较集中的几类商品(“女装”,“淑女装”,“商务休闲”,“运动户外”等)的KL散度几乎等于0,或者0.1等,我取阈值为0.5的话,进行过滤一下,可以提取出对用户有偏好区分的商品,我做的实际情况中过滤掉了1/3的商品,再根据不同商品类型下的8个用户群体的消费金额百分比来进行排名,就可以看出各用户群对商品类型的真是偏好了。

  简单来说,从表格上看,可以看到明显效果:

  图1是没有计算KL散度之前的用户偏好,图2是计算KL散度之后的用户偏好。行:用户群体消费偏好的商品类型   列:8个用户群体

  1 2 3 4 5 6 7 8
1 少女装 少女装 少女 淑女装 淑女装 黄金饰品 淑女装 少女装
2 时尚 时尚 时尚 少女装 少女装 少女装 商务休闲 时尚
3 黄金饰品 淑女装 黄金饰品 黄金饰品 黄金饰品 淑女装 黄金饰品 黄金饰品
4 淑女装 黄金饰品 淑女装 镶嵌 镶嵌 时尚 少女装 商务休闲
5 商务休闲 商务休闲 商务休闲 时尚 商务休闲 商务休闲 镶嵌 淑女装

图1 原始用户偏好

1

2

3

4

5

6

7

8

1

护肤

玻璃饰品

玻璃饰品

玉石

饰品

经典

女装

玻璃饰品

2

经典

厨具

铂金饰品

黄金摆件

皮包

综合

保健品

布艺

3

玩具

滋补保健

工艺金条

文教

国际名品

杂饰品

美健

滋补保健

4

彩妆

礼品

国际流行

运动配品

礼品

女士手袋

家居生活

香水

5

家居生活

婴童、用品

投资金条

旅行箱包

羽绒

女饰品

银饰品

陶瓷

图2 计算KL散度后的用户偏好

  从图2可以很明显看出,各用户群体已经有了明显的偏好了,第一类的用户群体可能偏好女性护肤,对象可能是18-30岁的时尚爱美女性;第二类用户群体可能是25-40的居家带娃女性;第三类用户群体可能是偏好贵金属投资的土豪群体;第四类可能是爱好旅游的文艺青年;第五类可能是偏好大牌的富人群体;第六类可能是钟爱宝宝的白富美;第七类可能是热爱运动的女青年;第八类可能是热衷手工和养身的动手达人。(妈呀,编不下去了 = =)

  这个粒度还是比较粗的,因为同一个商品类别里面的商品的价格和风格也不一样,经常买LV的和买coach的人明显不是一个消费水平的,买coach的和买达芙妮的也不是一个消费水平。如果是以品牌为维度的话,再加上年龄、性别、其他的消费几率等等,因该就可以很容易看出各类用户群体的偏好了,这里写KL散度在用户画像中的应用只是一个引子,其实KL散度还有很多其他的应用,例如文档之间的相似度计算,推荐系统之间的应用等等,具体的怎么应用可以结合实际业务可以把KL散度的价值发挥的更好。

转载于:https://www.cnblogs.com/charlotte77/p/5392052.html

【原】浅谈KL散度(相对熵)在用户画像中的应用相关推荐

  1. KL距离,Kullback-Leibler Divergence 浅谈KL散度

    KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(Relative Entropy).它衡量的是相同事件空间里的两个概率分 ...

  2. 浅谈所谓的产品「用户画像」

    2015上半年,我国网民已达到6.68亿,年底肯定能够顺利突破7亿,其中使用手机上网人群占整体88.9%.不同于传统PC上网,每个家庭共用一台设备,手机上网存在着独特性.唯一性和私密性的特点,每个人的 ...

  3. kl散度度量分布_浅谈KL散度

    一.第一种理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence) ...

  4. 浅谈.NET(C#)与Windows用户账户信息的获取

    原文:浅谈.NET(C#)与Windows用户账户信息的获取 目录 1. 用户账户名称 - 使用Environment类 2. 用户账户信息 - 使用WindowsIdentity和IdentityR ...

  5. [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) - _Boz - 博客园

    [原]浅谈几种服务器端模型--反应堆模式(epoll 简介) - _Boz - 博客园 [原]浅谈几种服务器端模型--反应堆模式(epoll 简介) 引言:上一篇说到了线程池方式来处理服务器端的并发, ...

  6. 信息量-log2P(莫斯编码使用频繁P大的字符编码段信息量少)、信息熵:期望E=-Plog2P、两点分布交叉熵=KL散度=相对熵=-plnp-(1-p)ln(1-p)不对称、JS散度对称

    信息熵为什么要定义成-Σp*log§? 信息熵为什么要定义成-Σp*log(p)? 在解释信息熵之前,需要先来说说什么是信息量. 信息量是对信息的度量,单位一般用bit. 信息论之父克劳德·艾尔伍德· ...

  7. 浅谈智能问答系统发展及在高校中需求现状

    在科技新时代的发展中,智能信息化一直是研究的热点,家里用的扫地机器人,强劲有效清除尘土:阿里巴巴2017年推出的AI智能产品-天猫精灵,能实现智能家居控制.查天气.语音购物.手机充值.百科查询.音乐播 ...

  8. 2019FME博客大赛——浅谈FME在国土空间规划技术服务中的实践和应用

    参赛单元:传统GIS数据处理 作者:施仲添 单位:杭州市城市规划信息中心(杭州市地理信息中心) [摘要] 随着规划行业对空间数据的利用分析和需求日益增加,在日常的国土空间规划技术服务中涉及空间数据的情 ...

  9. 计算机辅助药物设计 中药,浅谈计算机辅助药物设计在中药研究中的应用(1).pdf...

    文档介绍: · 前沿进展· 浅谈计算机辅助药物设计在中药研究中的应用巴真真, 于巍巍摇摇作者单位: 圆缘远远园猿山东省滨州市,滨州职业学院医疗学院摇摇[摘要]摇计算机辅助药物设计( 悦粤阅阅)的理论和 ...

最新文章

  1. 将要看的两本书 - Hide From All - ITeye技术网站
  2. java的算法库_java – 如何实现算法库?
  3. 联想员工亲历联想大裁员:公司不是家
  4. Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)
  5. python3.6 安装Scrapy
  6. Ubuntu系统rm命令删除文件没有提示,怎么办?
  7. 如何配置php的ip地址吗,linux如何配置IP
  8. html文件语言表示网页标题,HTML网页基本结构(HTML文件、编程语言)——十一号笔记...
  9. weblogic中数据源_如何在WebLogic Server中创建MySQL数据源
  10. HDU4472_Count
  11. python需要下载哪些软件-Python 从不懂到入门
  12. SDR WiFi平台 gr-ieee802-11 软件无线电实现802.11协议
  13. Ubuntu 21 英国键盘布局修改参考方案
  14. Android 快别用Toast了,来试试Snackbar
  15. 如何利用云服务器搭建个人网站
  16. 一位微软技术大牛,工作8年的职业经验分享
  17. 在推荐系统中衡量社交朋友兴趣相似度
  18. UltraISO软件下载安装及制作 Linux 系统 U 盘启动盘
  19. 解两相互垂直的直线中的一个实际应用的计算公式
  20. 为什么JDK 1.8中不再有永久代(permanent generation)

热门文章

  1. 使用遗传算法解决图着色问题
  2. sql选择_SQL选择成
  3. spring框架mvc框架_5篇Spring框架书籍,通过MVC学习Spring
  4. textswitcher_Android TextSwitcher和ImageSwitcher示例教程
  5. 用gdb来学习c语言(linux环境下)
  6. C#中WinForm 父窗体和子窗体传值
  7. 测试sql server服务是否配置正确
  8. eclipse 中使用Git
  9. C# 6.0 的那些事
  10. 在Java中获取系统属性