一文告诉你什么是用户画像
推荐阅读时间:5min~8min 文章内容:什么是用户画像
做推荐系统的时,我们需要了解我们的用户,也就是说需要对用户的基本情况、基本喜好有个了解。
什么是用户画像
用户画像,英文又叫 User Profile,我们经常看到在 PPT 中展现出高大上的用户画像,展现的方式是采用标签云的方式绘制一个人的形状,或者在一个人物形象旁边列出若干人口统计学属性,以此来表达“用户画像”这个概念。
上面这种方式看上去非常炫酷,但实际上这么做的目的只是为了对外展现,用户画像最应该是给机器看,而不是给人看。如果要给机器看,那每个用户的画像应该就是一个向量。
用户向量化后的结果,就是 User Profile,俗称“用户画像”。所以,用户画像不是推荐系统的目的,而是在构建推荐系统的过程中产生的一个关键环节的副产品。
通常大型推荐系统一般都分为召回和排序两个阶段,因为全量物品通常数量非常大,无法为一个用户(User)逐一计算每一个物品(Item)的评分,这时候就需要一个召回阶段,其实就是预先筛选一部分物品(Item),从而降低计算量,用户画像除了用于最终匹配评分,还要用在召回。所以,构建用户画像就要以这两个阶段为目的。
用户画像关键因素
建立用户画像有两个关键点,一个是维度,另一个是量化。这里举个简单的例子来说明下。比如有以下几家旅店,旅店的属性(标签)如下:
名称 |
价格 |
环境 |
距离 |
---|---|---|---|
A |
100/晚 |
中 |
5km |
B |
200/晚 |
优 |
2km |
C |
150/晚 |
差 |
10km |
D |
150/晚 |
优 |
1km |
对价格、环境、距离分别映射一个评分。假定都分为三个级别,价格越低评分越高,环境越好评分越高,距离越近评分越高,那么映射后的结果如下:
名称 |
价格 |
环境 |
距离 |
---|---|---|---|
A |
3 |
2 |
2 |
B |
1 |
3 |
3 |
C |
2 |
1 |
1 |
D |
2 |
3 |
3 |
映射后生成旅店的特征矩阵(维度矩阵),每个旅店都对应一个向量,比如旅店A对应的向量就是 [1, 2, 2]
。接下来需要对人也映射一个向量,映射方法就是看你多在意这几个因素,比如我对价格不敏感(不缺钱),但是非常在意环境和距离,那我这个人对应的向量就是[1, 3, 3]
。然后将物品的矩阵与人的向量相乘,得到这个人对每个物品的评分。
可以看到,最后会有一个评分列表,分别表示我对每个旅店的预估评分。了解了上面的例子后,再来看下用户画像中关键的两个因素:维度和量化。
上面例子中选择的维度分别是:价格、环境、距离。这几个维度有以下几个特点:
- 维度名称都是可解释的
- 维度的数量是拍脑袋拍出来的
- 选择什么维度也是拍脑袋拍出来的
在实际生产环境中,维度名称并不一定需要由可解释性,维度数量以及选择什么维度也不应该都以主观意愿来决定。
再来看下量化,实际生产环境中,用户画像每个维度的量化,应该交给机器,而且以目标为导向,以推荐效果好坏来反向优化出用户画像才有意义。像前面的例子中的先行主观量化而不考虑推荐效果时非常不合理的。
所以用户画像的量化是和第三个关键元素“效果”息息相关的。前面已经说过,不要为了用户画像而用户画像,它只是推荐系统的一个副产品,所以要根据使用效果(排序好坏、召回覆盖等指标)来指导用户画像的量化。
用户画像构建方法
按照对用户向量化的手段来分,用户画像构建方法分成三类:
1. 查户口
查户口的意思就是说直接使用原始数据作为用户画像,比如注册资料中包含的人口统计学信息,或者浏览历史、购买历史,除了数据清洗等工作外,数据本身没有做任何抽象和处理。通常对于用户冷启动等场景非常有用。
2. 堆数据
堆数据的意思就是说从历史数据中统计过出需要的结果,常见的兴趣标签就属于这类:从历史行为数据中去挖掘出标签,然后在标签维度上做数据统计,用统计结果作为量化结果。一般非常炫酷的用户画像都是通过这种方法制作的。
3. 黑盒子
黑盒子的意思是说使用机器学习方法,学习出人类无法直观理解的稠密向量,也最不被非技术人员重视,但实际上在推荐系统中承担的作用非常大。
比如使用潜语义模型构建用户阅读兴趣,或者使用矩阵分解得到的隐因子,或者使用深度学习模型学习用户的 Embedding 向量。这一类用户画像数据因为通常是不可解释,不能直接被人看懂。
总结
用户画像应该是让机器看的,所以就需要是一种结构化的数据,可以认为是用户信息的向量化结果。用户画像的关键元素有维度和量化,量化时需要以推荐系统的效果为指导。通常构建用户画像的方法有三种:采用原始信息(查户口)、使用统计结果(可被理解)、使用机器学习方法(无法被人理解,但是很重要)。
相关推荐:
点击这里领取BAT面试题 ==》:BAT机器学习/深度学习面试300题
作者:无邪,个人博客:脑洞大开,专注于机器学习研究。
- objective-C 的代码文件组织
- objective-C 的OOP(上)--类定义、继承及方法调用
- jQuery打造智能提示插件二(可编辑下拉框)
- Nicholas Christakis:朋友多是由基因决定的?
- WPF中的MatrixTransform
- kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)
- ruby学习笔记(3)--语法层面的先见之明
- jQuery操作Select
- ruby学习笔记(11)--symbol与hash参数
- zabbix监控-基本原理介绍
- OpenStack构架知识梳理
- mysql操作命令梳理(4)-grant授权和revoke回收权限
- 问未来
- ruby on rails + mysql 开发环境搭建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 最全总结!聊聊 Python 操作PDF的几种方法(合并、拆分、水印、加密)
- 作用域和作用域链的简单理解
- 如何在js中创建对象
- 如何理解JavaScript中的this
- 学习Matplotlib看这一份笔记就够了!
- 6个提升效率的pandas小技巧
- 手把手教你用Python+Pyecharts让微博热搜榜动起来
- JS继承
- call,apply,bind 的完全实现和理 解
- js构造函数的理解
- 实战 | PyQt5制作雪球网股票数据爬虫工具
- 别再问我Python怎么操作Word了!
- Vaex :突破pandas,快速分析100GB大数据集
- 【适合收藏】为了多点时间陪女朋友,我向BAT大佬跪求了这15条JS技巧
- Flask框架教程汇总(1)---视图/重定向/传参