内容目录
-
- 1.背景故事
- 2.概述
- 3.用户画像流程
-
- 3.1整体流程
- 3.2用户为什么进行标注
- 3.3用户如何打标签
-
- 3.3.1数据结构
- 3.3.2用户画像模块
- 3.3.3数据指标体系
- 3.3.4常见的数据清洗问题
- 3.3.5标签维度
- 3.3.6其他常见标签维度
- 3.3.7标签命名方式
- 3.3.8元数据管理
- 3.3.9标签数据存储
- 3.3.10数据仓库
- 3.3.11MySQL
- 3.3.12HBase
- 3.3.13Elasticsearch
- 3.3.14标签数据开发
- 3.3.15统计类标签开发
- 3.3.16规则类标签开发
- 3.3.17挖掘类标签开发
- 3.3.18流式计算标签开发
- 3.3.19用户特征库开发
- 3.3.20标签权重计算
- 3.3.21标签相似度计算
- 3.3.22标签组合计算
- 3.3.22数据服务层开发
- 3.3.23GraphX图计算用户
- 3.4用户标签如何指导业务
- 3.5标签从而来
- 3.5.2不同的聚类问题
- 3.5.3无监督算法之K-means
- K-means算法的使用
1.背景故事
小明是2020年刚毕业的学生,谁都想不到,今年的疫情如此严重,小明的毕业答辩也是远程进行,完成毕业前的相关事项。头疼的事情来了,工作怎么找?上网搜了几篇博客,看别人怎么写简历。写了一份还不错的简历并且投递出去,犹如石沉大海,没有任何的反应,实在没有办法,把简历投到了海底捞,海底捞一看是学推荐系统的,给了小明一个机会。疫情严重,海底捞的线下店开不了,老板发了一个用户数据集,要求小明给用户做画像,做好了就可以入职上任。小明要怎么完成这个任务,从而顺利入职,开启自己工作时光。小明遇到的第一个问题就是用户画像是什么?用户画像怎么做?
2.概述
用户画像是通过分析用户的基础信息、特征偏好、社会属性等各维度的数据,刻画出用户的信息全貌,从中挖掘用户价值。这些标签集合就能抽象出一个用户的信息全貌,如下图所示是某个用户的标签集合,每个标签分别描述了该用户的一个维度,各个维度之间相互联系,共同构成对用户的一个整体描述。
3.用户画像流程
3.1整体流程
构建用户画像的方法进行总结归纳,发现用户画像的构建一般可以分为统一标识、给用户打标签、基于标签指导业务三步。
3.2用户为什么进行标注
统一标识,是用户的唯一ID, 是最基础常见的标签,从用户注册数据、用户访问数据中统计得出。在实际应用中,我们用userID,简称uid,统一用户标识。
有了统一标签,我们想给不同的用户打上独特标签,更加精准的识别和分类。用户的标签可以从不同的维度出发,从这些维度全方位的了解用户,分析客户喜欢什么,提供相应的服务。
在设计基于标签的个性化推荐系统之前,我们需要深入了解用户的标注行为(即打标签的行
为),知知道用户为什么要标注,用户怎么标注,只有深入了解用户的行为,我们才能基于这个行为设计出令他们满意的个性化推荐系统。
YouTube网站是对用户的标注方面算是首屈一指,用户的观看时长、在什么时间段浏览信息、收藏什么类型视频、在哪些视频下进行了评分与关注等,这些都是肉眼可见的指标。除此之外,有的UP主视频做的好,很多人关注,慢慢推出专栏视频,需要用户付费观看,为了消除广告,体验VIP会员专享,开通会员,用来分析用户消费行为。用户平时浏览的内容是科普、读书类,可能会推送相类似的,还会不定时推送其他内容,探索用户的潜在需求。
3.3用户如何打标签
在互联网中,尽管每个用户的行为看起来是随机的,但其实这些表面随机的行为背后蕴含着很多规律。这一节将通过研究Delicious数据集总结用户标注行为中的一些统计规律。
德国研究人员公布过一个很庞大的Delicious数据集,该数据集包含2003年9月到2007年12月Delicious用户4.2亿条标签行为记录。本节选用该数据集2007年一个月的数据进行分析,对该数据集的统计特性进行研究。
用户行为数据集中用户活跃度和物品流行度的分布都遵循长尾分布(Power Law分布)。因此,我们首先看一下标签流行度的分布。我们定义的一个标签被一个用户使用在一个物品上,它的流行度就加一。如下代码计算了每个标签的流行度
# 使用训练集,初始化user_tags, tag_items, user_items
def initStat():
records=train_data
for u,items in records.items():
for i,tags in items.items():
for tag in tags:
#print tag
# 用户和tag的关系
addValueToMat(user_tags, u, tag, 1)
# tag和item的关系
addValueToMat(tag_items, tag, i, 1)
# 用户和item的关系
addValueToMat(user_items, u, i, 1)
print("user_tags, tag_items, user_items初始化完成.")
print("user_tags大小 %d, tag_items大小 %d, user_items大小 %d" % (len(user_tags), len(tag_items), len(user_items)))
给用户“打标签”,总的来说可以分为三类:
● 统计类标签:最基础常见的标签,从用户注册数据、用户访问数据中统计得出。
● 规则类标签:基于用户行为及规则产生,通常由对业务更为熟悉的运营人员和数据人员共同协商确定。
● 机器学习挖掘类标签:通过机器学习挖掘产生,根据某些用户行为或熟悉进行预测判断。
3.3.1数据结构
画像系统的基础设施包括Spark、Hive、HBase、Airflow、Redis、Elasticsearch。
下图是《用户画像》中的数据仓库架构。
(1)数据仓库ETL加工流程是对每日的业务数据、日志数据、埋点数据等数据经过ETL过程,加工到对应的原始数据层(ODS)、数据仓库(DW)、数据集市层(DM)中。
(2)用户画像不是产生数据的源头,是经过ODS层、DW层、DM层中的数据与用户相关数据的二次建模加工得到的数据。
在ETL过程将用户标签写入Hive,根据不同数据对应不同数据库的应用场景,再将数据同步到MySQL、HBase、Elasticsearch等数据库中。
Hive:存储用户标签、用户人群及用户特征库的计算结果
MySQL:存储标签元数据,监控相关数据,导出到业务系统的数据
HBase:存储线上实时数据
Elasticsearch:支持海量数据的实时查询分析
(3)用户标签在Hive中加工完成后,部分标签通过Sqoop同步到MySQL数据库,提供用于BI报表展示的数据、多为透视分析数据、圈人服务数据;另一部分标签同步到HBase数据库用于产品的线上个性化推荐。
3.3.2用户画像模块
搭建用户画像方案整体考虑以下8个模块
● 用户画像基础
了解和明确用户画像包含的模块,设计数据仓库架构、开发流程、表结构,及ETL的设计。主要就是明确大方向的规划。
● 数据指标体系
建立数据指标体系,根据业务线梳理,包括用户属性、用户行为、用户消费、风险控制等维度的指标体系。
● 标签数据存储
设计好数据指标体系后,考虑不同应用场景使用哪种存储方式。
● 标签数据开发
重点模块。标签数据开发包含统计类、规则雷、挖掘类、流式计算类标签的开发,以及人群计算功能的开发。
重点内容:数据调研、和业务方确认数据口径、标签开发上线。打通画像数据和各业务系统之间的路,提供接口服务
● 开发性能调优
标签数据开发上线后,为了缩短调度时间、保证数据稳定性,需要对标签脚本、调度脚本进行迭代重构、调优。梳理现有标签开发、调度、校验告警、同步到服务层等相关脚本、明确可以优化的地方,迭代优化。
重点内容:减少ETL调度时间,降低调度时的资源消耗。
● 作业流程调度
标签加工、人群计算、同步数据和业务系统、数据监控预警脚本开发完成后,需要调度工具把整套流程调度起来。
重点内容:满足定式调度、监控预警、失败重试,各调度任务之家的复杂依赖关系。
● 用户画像产品化
产品化的模块包括包括标签视图、用户标签查询、用户分群、透视分析等。
重点内容:满足业务方对用户精准营销的需求。
● 用户画像应用
应用场景包括用户特征分析、短信邮件、站内信、Push消息的精准推送,客户针对不同用户的话术、针对高价值用户的极速退款等高级服务应用等。
重点内容:帮助业务方理解和应用用户画像数据,提高用户活跃度和GMV。
3.3.3数据指标体系
数据指标体系是建立用户画像的基础,也是在进入开发前的关键环节,是需要结合业务场景制定的数据指标。
建立用户画像一般从2个维度:
用户维度(userid):基于当前用户账号相关数据推送内容。
设备维度(cookie):当用户没有登陆账户而访问设备时,基于用户在设备的行为对该设备推送相关内容。
-
用户标签从标签类型可分为:统计类、规则类、机器学习挖掘类。
-
从建立的维度来看,可分为:用户属性类、用户行为类、用户消费类、风险控制类。
至于标签如何分类,没有严格的规定,符合业务场景和使用者使用即可。
建立数据指标体系,从而知道用户画像建立的基本维度。但现实往往很复杂,数据的处理也是一个难题,只有把数据清洗干净,得到合适的特征,才能更好地给用户打标签。好的数据质量,要满足“完全合一”,即四个重要标准:
- 完整性:数据是否存在空值,字段是否完善,是否有漏掉
- 全面性:观察某一列的全部数值及特征值,是否存在单位、字段名与数值不匹配
- 合法性:数据的类型、内容、大小的合法性。
- 唯一性:数据是否存在重复记录
3.3.4常见的数据清洗问题
问题1:缺失值
在数据中有些年龄、体重数值是缺失的,这往往是因为数据量较大,在过程中,有些数值没有采集到。通常我们可以采用以下三种方法:
- 删除:删除数据缺失的记录;
- 均值:使用当前列的均值;
- 高频:使用当前列出现频率最高的数据。
创建一个包含NaN(not a number)的数据。
import pandas as pd
import numpy as np
dates = pd.date_range('20201121', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['A', 'B'