• 文末赠书

人群画像分析是对已经创建完成的人群进行画像分析,目的是从不同角度更深入地认识人群用户并挖掘其人群特点。

人群分布分析偏重人群画像标签值的占比分析,比如人群中男女占比分别为60%和40%;人群指标分析主要针对可量化的标签进行分析,比如人群的平均在线时长、平均点赞次数等;人群下钻分析是在某一画像分析维度的基础上再次基于其他画像维度进行分析,比如在人群男女分布的基础上,针对其中男性用户再次下钻分析其常住省分布;人群交叉分析是使用多个维度交叉计算其人群数据指标,比如通过性别和常住省交叉分析其在线时长;人群对比分析是对已经完成画像分析的多个人群进行分析结果对比,找出人群间的主要差异。

1 人群分布分析


人群分布分析是计算人群在画像标签上的分布占比数据,比如分析人群的性别分布,常住省分布,兴趣爱好分布等。从技术角度来看,分布分析适用于各类画像标签,但是从业务角度来看,有些标签的分布分析没有实际价值。比如对“每日在线时长”进行分布分析,如果其数据单位是毫秒,那么该标签的取值数量众多,分布分析计算出的分布结果很难被业务使用且不具有分析价值。由上可知,适合做分布分析的画像标签大多是可枚举且数量有限的标签,比如性别、年龄段、常住省、手机操作系统等;不适用标签值量级较大的标签,比如在线时长、粉丝数、新闻话题、历史阅读文章字数等。
人群分布分析结果可以通过饼图、环形图或者柱状图进行展示。饼图和环形图比较适合性别、年龄段等标签值数量少且不同标签值占比之和为100%的标签,通过这些图形可以明确展示各标签值的分布占比数据。柱状图一般适用标签取值较多、需要对标签值占比进行排序的标签,比如对城市标签进行分布分析(获取占比最高的前10个城市),对兴趣爱好(获取占比较高的头部兴趣爱好)进行分布分析。图6-3展示了人群分布分析功能示意图,图中通过饼图和柱状图展示了指定人群的性别和常住省占比分布。

图6-3 人群分布分析功能示意图
对于自动更新人群,如果也需要定时计算其画像分布数据,那么使用该人群连续多日的分布分析结果可以构建出标签值占比变化趋势图。比如在某游戏的运营过程中,对于每天下载游戏的用户可以构建成定时更新人群,该人群更新后可以自动计算其性别占比分布。如果近一周男女占比趋势分析图中男性占比逐渐提升,那么后续可以重点分析男性占比提升的主要原因并调整运营策略。运营人员在某活动中为了吸引中老年用户采取了一系列补贴策略,通过观察活动参与人群年龄段分布趋势变化可以评估是否达到运营目的。

2 人群指标分析


人群指标分析用于计算人群在某些指标类标签上的数值及变化趋势。指标类画像标签的特点是可以量化并进行聚合运算,比如在线时长、粉丝数、充值金额,以上标签支持求和、平均、最小值、最大值等函数运算。人群指标分析结果具有很大的业务参考价值,比如人群平均在线时长可以反馈该人群的活跃情况,平均充值金额可以反映人群的消费意愿。
人群指标分析结果一般是单个数值,可以通过数字看板进行展示。指标分析也可以计算过去一段时间每天的指标数值并通过折线图展示其变化趋势,折线图中横坐标展示指标分析日期,纵坐标展示具体的指标分析数值。通过折线图中数值波动可以感知到人群指标变化;基于折线图数据可以实现数据报警功能,当数据波动超过阈值时可以发出报警信息。图6-4展示了人群指标分析功能示意图,其中展示了平均在线时长数字看板以及近一周平均充值金额指标变化折线图。 

图6-4 人群指标分析功能示意图

3 人群下钻分析


人群下钻分析可以增加分析的层次,由浅入深、由粗入细的进行人群画像分析。人群分布分析只能对人群进行最直观的画像分析,比如性别和常住省的占比分布。如果业务需要查看该人群中所有男性用户的常住省分布情况,那么需要深入到男性用户中进行更深层的画像分析。通过下钻分析功能用户可以更深入和细致地了解人群特点,比如某人群男女占比各50%,在男女用户基础上进行常住省下钻,其中男性下钻后占比最高的省份是山东省,女性下钻后占比最高的省份是河南省。这一分析结果可以反馈出该人群男女用户常住省信息有明显差异,而通过单一的人群分布分析很难得出上述结论。人群下钻分析结果也可以通过饼图、柱状图或者折线图进行展示,图6-5展示了某人群在性别基础上进行常住省下钻分析的功能示意图。

图6-5 人群下钻功能示意图

4 人群交叉分析


人群交叉分析可以选择多个画像标签维度,通过交叉计算不同标签值组合下的人群指标数据。相比下钻分析只专注某标签值的深入分析,交叉分析更偏重多维的全面分析,结果中包含所有维度组合后的分析数据。比如查看指定人群性别和常住省交叉计算后的用户平均在线时长,其分析结果包括性别男女和所有省份交叉组合后的人数占比以及平均在线时长数据。交叉分析的展示结果可以根据其数值大小呈现不同的颜色,从而快速区分并定位重点分析结果。图6-6展示了某人群基于性别和常住省的交叉分析示意图,其中北京男性用户模块颜色最深,代表该人群下北京市男性用户平均在线时长最大,具有显著的特点。 

图6-6 人群交叉分析示意图

5 人群对比分析


人群对比分析通过对比两个人群的画像分析结果,可以找出人群间的主要差异。人群对比分析可以利用人群分布分析结果进行计算,假设两个人群A和B都计算出了性别分布数据,其中A人群男女占比分别是60%和40%,B人群男女占比分别是70%和30%,将两个人群的占比环形图放到一起便可以对比出人群间的主要差异。

为了量化不同人群之间的画像分布差异,可以引入TGI指数进行计算,其计算公式为(目标人群中具有某一个特征的人群比例)× 100 /(对比人群中具有该特征的人群比例)。如果计算出的TGI数值等于100,说明两者之间没有任何差异;当TGI数值与100差距越大时说明两者的差异越明显,也可以侧面反馈出人群的主要特点。TGI计算公式中的对比人群一般指全量用户人群,目的是找到人群与大盘用户的主要差异;也可以把任何其他人群当成对比人群,主要目的是找到任意两个人群之间的显著差异。还是以人群A和B为例,其中男性用户的TGI = (60% / 70%)× 100 = 85.7,表示人群间男性用户占比有微弱的差异。图6-7展示了两个人群进行人群对比分析的功能示意图,图中展示了性别和常住省下的所有TGI数值,其中女性和河南省具有显著差异。

图6-7 人群对比分析功能示意图

6 工程实现方案


人群画像分析是在人群创建完成之后进行的,并不是每一个人群都需要进行画像分析,所以画像平台需要支持对人群进行画像分析配置。配置人群画像分析功能时可以指定标签维度和指标,该配置内容通过接口传递到服务端并存储到数据表中。当人群状态流转到“创建完成”状态之后(参见第5章人群状态机),人群画像计算引擎可以根据画像配置计算出分布分析和指标分析结果并存储到数据表中,之后便可以通过平台可视化页面查看人群分析结果。基于不同人群的分析结果可以进行人群对比分析并计算不同标签取值的TGI。对于自动更新人群,可以从数据库中查询一段时间内的标签分布数据并构建标签占比趋势图。人群下钻分析和交叉分析的使用方式比较灵活,使用者可以在平台上可以进行即席配置和分析,相关配置传递到服务端后可以转换为分析语句,借助ClickHouse引擎计算出分析结果后返回前端进行可视化展示。人群画像分析的基本流程如图6-8所示。 

图6-8 人群画像分析基本流程
如图所示,人群分布分析和指标分析配置存储在数据表demo_userprofile_crowd中,其中calculate_labels字段通过JSON数组的方式记录了需要进行分析的画像标签列表;画像分析结果存储在数据表demo_userprofile_crowd_overview中,userprofile_date字段记录了画像分析所使用的数据日期,overview_result字段存储了指定标签的画像分析结果。
通过人群结果表和画像宽表之间的连接(join)操作可以实现人群分布分析和指标分析。人群结果表连接画像宽表后可以获取每一个用户的画像标签值,根据不同标签值可以聚合计算出其对应的用户数,基于用户数便可以实现分布分析。比如某个100万大小的人群,其中男女用户的数量分别是60万和40万,那么该人群性别标签男女分布即为60/100=60%和40/100=40%。指标分析需要使用聚合函数进行计算,比如平均函数AVG,求和函数SUM以及最大最小值函数MAX和MIN等。图6-9以性别和在线时长为例展示了分布分析和指标分析的计算流程,其中关键代码如下所示,代码中默认使用ClickHouse表进行计算,出现异常后可以兜底使用Hive表重新计算。
-- 性别占比统计语句 --SELECT  gender, count(1) AS cntFROM  (    SELECT      user_id    FROM      userprofile_demo.crowd_result_table_ch    WHERE      crowd_id = 100  ) t1  INNER JOIN (    SELECT      user_id,      gender    FROM      userprofile_demo.userprofile_wide_table_ch    WHERE      p_date = '2022-08-26'  ) t2 ON (t1.user_id = t2.user_id)GROUP BY  gender
-- 平均在线时长统计语句 --SELECT avg(online_time) AS avgValueFROM ( SELECT user_id FROM userprofile_demo.crowd_result_table_ch WHERE crowd_id = 100 ) t1 INNER JOIN ( SELECT user_id, online_time FROM userprofile_demo.userprofile_wide_table_ch WHERE p_date = '2022-08-26' ) t2 ON (t1.user_id = t2.user_id)
图6-9 人群画像分析和指标分析实现逻辑
下钻分析是在指定标签值的基础上进行深入分析,其实现逻辑主要表现为在join语句中添加额外的筛选条件。比如在A人群男性用户基础上对常住省进行下钻分析,分析目标是不同省份下的用户数目,其分析语句和分布分析相似,主要不同点是在join语句中需要在画像宽表中增加筛选条件gender='男',这样便限定了人群中的男性用户。同理,如果要在性别为男性、常住省为北京市的基础上进一步下钻年龄段分布,只需要在宽表的筛选条件中添加gender = 男 AND province = '北京市'。其核心SQL语句如下所示。
SELECT  province,  count(1) AS cntFROM  (    SELECT      user_id    FROM      userprofile_demo.crowd_result_table_ch    WHERE      crowd_id = 100  ) t1  INNER JOIN (    SELECT      user_id,      province    FROM      userprofile_demo.userprofile_wide_table_ch    WHERE      p_date = '2022-08-26'      AND gender = '男'  ) t2 ON (t1.user_id = t2.user_id)GROUP BY  province
交叉分析需要对选定的维度进行组合并计算其人群指标数值,工程上使用GROUP BY语句可以实现多个维度的交叉组合,借助聚合函数可以实现指标计算。为了实现性别和常住省的交叉分析并计算平均在线时长,其核心SQL语句如下所示。
SELECT  gender,  province,  avg(online_time) AS avgValueFROM  (    SELECT      user_id    FROM      userprofile_demo.crowd_result_table_ch    WHERE      crowd_id = 100  ) t1  INNER JOIN (    SELECT      user_id,      gender,      province,      online_time    FROM      userprofile_demo.userprofile_wide_table_ch    WHERE      p_date = '2022-08-26'  ) t2 ON (t1.user_id = t2.user_id)GROUP BY  gender,  province

以上示例中的标签在数据表中的存储类型都是基本数据类型,对于特殊类型的标签如何实现画像分析?以兴趣爱好标签为例,其在数据表中以数组的方式进行存储,实际分析过程中需要将数据“打散”后再进行画像分析。Hive表中需要通过行转列LATERAL VIEW EXPLODE展开数组内容,ClickHouse表中可以使用arrayJoin函数实现。比如统计某人群兴趣爱好的分布,通过Hive和ClickHouse表进行分析的核心SQL语句如下所示。

-- 基于Hive表实现数组类标签的统计分析 --SELECT  item,  count(1) AS cntFROM  (    SELECT      interests    FROM      (        SELECT          user_id        FROM          userprofile_demo.crowd_result_table        WHERE          crowd_id = 100      ) t1      INNER JOIN (        SELECT          user_id,          interests        FROM          userprofile_demo.userprofile_wide_table        WHERE          p_date = '2022-08-26'      ) t2 ON (t1.user_id = t2.user_id)  ) joinTable LATERAL VIEW EXPLODE (interests) virtual_table AS itemGROUP BY  item-- 基于ClickHouse表实现数组类标签的统计分析 --SELECT  item,  count(1) AS cntFROM  (    SELECT      arrayJoin(interests) AS item    FROM      (        SELECT          user_id        FROM          userprofile_demo.crowd_result_table_ch        WHERE          crowd_id = 100      ) t1      INNER JOIN (        SELECT          user_id,          interests        FROM          userprofile_demo.userprofile_wide_table_ch        WHERE          p_date = '2022-08-26'      ) t2 ON (t1.user_id = t2.user_id)  )GROUP BY  item
人群画像分析的目标是做“有用的分析”,如果只是展示人群分布分析和指标分析结果的话,很难直观体现出当前人群的特点,一般会默认计算人群与全部用户的画像标签TGI数据并将其中差异明显的特征列举出来。对于一些核心画像标签也可以自动进行下钻和交叉分析,从而找出人群深层次的画像特点,比如对人群自动进行性别和常住省交叉分析,找出其中人数占比最高的交叉条件(如河北省女性)。对于自动更新人群,可以基于多日的分布分析结果构建标签占比趋势图并支持用户配置数据监控报警,比如当人群中有充值行为的用户占比低于5%或者人群平均在线时长低于30分钟时发出报警,用户通过报警信息可以快速感知问题并及时干预。

在画像分析的结果上可以再次沉淀生成人群。比如对某人群的兴趣爱好进行了分布分析,其中对军事感兴趣的用户占比为60%,可以将该批用户直接转化为人群,即从原始人群中找到了所有对军事感兴趣的用户并生成了新的人群。通过这种方式不仅打通了人群分析和人群创建功能,而且可以实现对人群的精细化筛选,该思路也同样适用于其他分析功能。

本文摘自《用户画像:平台构建与业务实践》一书

内容简介

这是一本从功能模块、技术实现、平台构建、业务应用4个层次由浅入深地讲解用户画像的著作。作者在某头部互联网公司经历了其用户画像平台从0到1并发展为画像中台的全过程,打下了扎实的技术功底,积累了丰富的业务经验,本书从技术和业务双重维度对整个过程进行了复盘。

具体来讲,本书主要包含如下内容:

(1)画像的作用、业界主流的4种商用画像平台的核心功能和实现逻辑;

(2)画像平台的主要功能、画像平台的技术架构与技术选型、画像平台的数据模型;

(3)画像平台4大功能模块:标签管理、标签服务、分群功能、画像分析的实现方案;

(4)从0到1搭建用户画像平台,包括环境搭建和前、后端工程框架搭建;

(5)画像平台在用户的不同生命周期阶段和各种业务场景中如何为业务赋能;

(6)画像平台的优化和佳实践。

书中有200+设计图和原型图,可以帮助读者更加直观地了解平台的实现原理及功能形态。20+真实应用案例,技术方案和案例均来自真实的项目。本书提供可运行的代码,能帮助读者快速搭建并部署用户画像平台。

作者介绍

  • 张型龙

  • 用户画像与用户增长领域的资深专家,同时拥有近10年的服务端和大数据方面的开发经 验。目前从事用户画像平台建设及业务实践相关的工作。毕业后入职百度国际化产品部,主要从事服务端研发工作,完成了海外消息服务、图片服务的升级与优化,在服务端框架、分布式与高并发方面积累了一定的经验。之后加入某头部互联网公司,主要从事用户增长与用户画像相关工作。在此期间从0到1搭建了公司的用户画像平台, 对画像业务和平台技术有了进一步的认识。随着画像的数据量和用户量不断增加,增加和优化了用户画像平台的功能,调整了用户画像平台的架构,使之发展成为一个画像中台,在这个过程中,掌握了画像平台架构以及超大规模数据量下的画像实现方案,对于如何使用画像数据取得业务价值也有了更深的认识。此外,近几年在用户画像领域申请了多项专利,在公司内及业界有一定的技术影响力。


免费赠书活动


为了感谢大家的支持,本书作者联合DataFun通过本次活动赠送5本书!

留言分享您对用户画像平台构建的心得体会或看法,入选留言点赞最多的前5名赠送定价¥109元的《用户画像:平台构建与业务实践》一书!先到先得~

抽奖日期截止至11月13日12:00中奖用户请留意私信~

内容中包含的图片若涉及版权问题,请及时与我们联系删除