目录
1.我认为的用户画像
简单来说,就是通过你的基本信息,生活习惯、消费行为等方面来对你进行一个抽象的概括。
构建用户画像的核心工作就是给用户贴标签,而标签是通过对用户各方面信息的分析后提炼出来的特征标识。
下面直接通过一个案例来了解用python做用户画像。
2.某电商用户画像分析
2.1 分析目的
通过对用户的基本属性信息,消费行为特征去构建用户画像,实现对用户进行分群,做精细化的区别营销,达到提效降本的效果。
2.2 数据说明
本次案例用到4张表,通过python连接mysql读取数据:
# 导入相关模块
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
import warnings
warnings.filterwarnings("ignore")
# 解决中文乱码问题
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
# 魔法函数
%matplotlib inline
import pymysql.cursors
# 连接mysql数据库
conn = pymysql.connect(host = 'localhost',port = 3306,user = 'root',password = '123456',charset = 'utf8')
# 读取数据库
pd.read_sql('show databases',conn)
# 定义使用哪个数据库
pd.read_sql('use jd3c',conn)
# 查看数据表
pd.read_sql('show tables',conn)
4张表的字段说明:
由于字段的问题,创建时间和更新时间的值是一样的,所以只用使用一个创建时间字段。
画一张图来显示这四张表的关系:
2.3 分析思路
1、用户基本属性分析(整体的人群画像)
- 男女占比分析
- 年龄段占比分析
- 地区/省份/城市用户TOP10分布
2、用户购买手机偏好(TGI)分析
-
不同性别的用户对手机品牌的偏好TOP10
-
不同年龄段的用户对手机品牌的偏好TOP10
-
不同地区的用户对手机品牌的偏好TOP10
-
不同城市级别的用户对手机品牌的偏好TOP10
注:TGI:即Target Group Index(目标群体指数)
TGI指数= [目标群体中具有某一特征的群体所占比例/总体中具有相同特征的群体所占比例]×标准数100
3、RFM模型
- R:最近一次购买时间
- F:购买的频次
- M:购买的金额
2.4 分析过程
2.4.1 用户基本属性分析
2.4.1.1 数据清洗
方法1:使用info查看数据是否有缺失值。
方法2:使用isnull判断是否有缺失值。
查看数据是否有重复值。
本案例中的基本属性包括性别,年龄,地域,分布在users表和dim表,需要对这两张表进行连接。
2.4.1.2 男女占比分析
2.4.1.3 年龄段占比分析
2.4.1.4 地区/省份/城市用户TOP10分布
2.4.1.4.1 地区用户TOP10分布
2.4.1.4.2 省份用户TOP10分布
2.4.1.4.3 城市用户TOP10分布
2.4.1.4.4 小结
- 从地区角度来看,华东和华北地区的用户至少是其他地区用户的3倍。
- 从省份/直辖市角度来看,北京(属于华北地区)和上海(属于华东地区)的用户也至少是其他省份/直辖市用户的3倍。
- 从城市角度来看,除北京上海外,其他城市的用户数最多只有57个,北京上海的用户最少是其26倍以上。
- 华东和华北地区的用户绝大部分是由北京和上海的用户组成。
2.4.2 用户购买手机偏好(TGI)分析
2.4.2.1 数据清洗
把上面的df表和order_detail、product表进行连接。
我们下面的分析需要用到手机品牌title这个字段,从上图可以看出title字段的值不规律,这里是导出excel进行手机品牌的提取。
对数据进行清洗完毕后,read_csv导入。截图只能截取前半部分的字段。
截图截取后半部分字段,可以和上图合并一起看。
查看数据发现sell_point有缺失值。
使用isnull() == True查看缺失值。
由于本次案例不涉及到sell_point字段的分析,所以这里直接对该字段的值进行填充即可。
由于存在一个用户多次购买同一品牌手机,这里我们做一个去重的工作。
当计算比如不同性别的用户对手机偏好度的时候,不会因为同一用户的多次购买同一品牌手机而导致该品牌手机用户数偏大。
2.4.2.2 不同性别的用户对手机品牌的偏好TOP10
举例:
目标群体中具有某一特征的群体所占比例:【喜欢21克品牌】的【男的】/【男的】
总体中具有相同特征的群体所占比例:【喜欢21克品牌的男+女人数】/ 【男+女总人数】
TGI:(【喜欢21克品牌】的【男的】/【男的】)/ 【喜欢21克品牌的人数】/ 【男+女人数】 * 100
统计不同性别不同手机品牌的用户数。
统计不同性别的人数,与gender_phone进行merge合并后,每条记录都会显示该性别的总人数。
计算TGI。
2.4.2.2.1 男性用户对手机品牌的偏好TOP10
存在问题:
TGI排名靠前的手机类型,总用户数有80多的,人数较少可能导致TGI偏高
TGI指数能够显示偏好的强弱,但很容易让人忽略具体的样本量大小
2.4.2.2.2 女性用户对手机品牌的偏好TOP10
2.4.2.2.3 作图并小结
小结:
- 男性对微诺、荣耀、美翼品牌手机的偏好度较高;优思、比酷、美翼品牌手机用户数较多
- 女性对东信欧蓓、E.XUN、TCL品牌手机的偏好度较高;海尔、TCL、波导品牌手机用户数较多
- 偏好度高低与用户数多少不成正比
2.4.2.3 不同年龄段的用户对手机品牌的偏好TOP10
比如:
目标群体中具有某一特征的群体所占比例:【喜欢X品牌手机】的【XX后】/【XX后】
总体中具有相同特征的群体所占比例:【喜欢X品牌的人数】/ 【总人数】
TGI:(【喜欢X品牌手机】的【95后】/【95后】)/ 【喜欢X品牌的人数】/ 【总人数】 * 100
根据年龄段和手机品牌进行分组统计。
各年龄段的总人数。
喜欢不同手机品牌的人数。
计算TGI。
2.4.2.3.1 20岁及以下(95后)对手机品牌的偏好TOP10
2.4.2.3.2 90后/85后…/70前对手机品牌的偏好TOP10
代码与上述是一致的,这里就不再列出。
2.4.2.3.3 作图并小结
小结:
- 95后对’贝多芬’, ‘恒宇丰’, '金立’品牌手机的偏好度较高;
- 90后对’首信’, ‘派信’, '威铂’品牌手机的偏好度较高;
- 85后对’世纪天元’, ‘HTC’, 'E.XUN’品牌手机的偏好度较高;
- 80后对’OPPO’, ‘HANMAC’, '福中福’品牌手机的偏好度较高;
- 75后对’LOVME’, ‘传奇’, '金国威’品牌手机的偏好度较高;
- 70后对’中维恒泰’, ‘奥克斯’, '聆韵’品牌手机的偏好度较高;
- 70前对’SOSMART’, ‘迪士尼’, '创维’品牌手机的偏好度较高;
- 偏好度高低与用户数多少不成正比。
2.4.2.4 不同地区的用户对手机品牌的偏好TOP10
比如:
目标群体中具有某一特征的群体所占比例:【喜欢X品牌手机】的【A地区人数】/【A地区人数】
总体中具有相同特征的群体所占比例:【喜欢X品牌的人数】/ 【总人数】
TGI:(【喜欢X品牌手机】的【A地区人数】/【A地区人数】)/ 【喜欢X品牌的人数】/ 【总人数】 * 100
根据地区和手机品牌进行分组统计。
统计各地区总人数。
喜欢X手机品牌的人数。
计算TGI。
2.4.2.4.1 东北地区对手机品牌的偏好TOP10
2.4.2.4.2 华北…等地区对手机品牌的偏好TOP10
代码与上述是一致的,这里就不再列出。
2.4.2.4.3 作图并小结
- 东北地区对’唐为’, ‘首信’, '金国威’品牌手机的偏好度较高;
- 中南地区对’NUU’, ‘金立’, 'SOSMART’品牌手机的偏好度较高;
- 华东地区对’福中福’, ‘欧奇’, '金圣达’品牌手机的偏好度较高;
- 华北地区对’小米’, ‘E.XUN’, '誉品’品牌手机的偏好度较高;
- 华南地区对’东信欧蓓’, ‘传奇’, '天语’品牌手机的偏好度较高;
- 西北地区对’丰讯达’, ‘恒宇丰’, '贝尔丰’品牌手机的偏好度较高;
- 西南地区对’天语’, ‘易百年’, '威铂’品牌手机的偏好度较高;
- 偏好度高低与用户数多少不成正比。
2.4.2.5 不同城市级别的用户对手机品牌的偏好TOP10
比如:
目标群体中具有某一特征的群体所占比例:【喜欢X品牌手机】的【A城市级别人数】/【A城市级别人数】
总体中具有相同特征的群体所占比例:【喜欢X品牌的人数】/ 【总人数】
TGI:(【喜欢X品牌手机】的【A城市级别人数】/【A城市级别人数】)/ 【喜欢X品牌的人数】/ 【总人数】 * 100
根据城市和手机品牌进行分组统计。
对城市进行级别划分。
按照city_level和title进行分组统计,并统计各城市级别的人数。
喜欢不同手机品牌的人数。
计算TGI。
2.4.2.5.1 一线城市对手机品牌的偏好TOP10
2.4.2.5.2 二线…等城市级别对手机品牌的偏好TOP10
代码与上述是一致的,这里就不再列出。
2.4.2.5.3 作图并小结
小结:
- 一线城市对’vivo’, ‘派信’, 'E.XUN’品牌手机的偏好度较高;
- 新一线城市对’HANMAC’, ‘唐为’, '纽曼’品牌手机的偏好度较高;
- 二线城市对’大Q手机’, ‘唐为’, '东信欧蓓’品牌手机的偏好度较高;
- 三线城市对’摩托罗拉’, ‘荣耀’, '天语’品牌手机的偏好度较高;
- 四线城市对’SUGAR’, ‘夏朗’, '贝尔丰’品牌手机的偏好度较高;
- 五线城市对’贝多芬’, ‘东信欧蓓’, '小米’品牌手机的偏好度较高;
- 偏好度高低与用户数多少不成正比
2.4.3 RFM模型
由于df4把同一用户购买同品牌手机进行了去重,在构建RFM模型的时候是可以同一用户多次购买同款手机的,所以重新导入数据。
这里需要使用order_date数据进行分析,是为了求R(最近一次购买时间)。
2.4.3.1 计算最近一次购买时间R
- 时间间隔是从2018年3月1日-2018年6月9日,这里选取2018年6月10日作为计算日期
- 统计客户最近发生购买行为的时间距离2018年6月10日间隔几天
- 再对间隔天数进行排名,间隔天数越小,排名越靠前。
按客户分组,获取最近购买时间。
获取间隔天数。将order_date转为日期类型,与目标日期相减,通过.days获取间隔天数。
.rank(ascending=True, method=‘dense’) 默认升序排名,dense表示组间内加1,即数值不同加1。
2.4.3.2 计算购买频次F
统计每个用户的购买次数,再对购买次数进行排名。购买次数越多,排名越靠前。
2.4.3.3 计算购买金额M
统计每个用户的购买金额总数,进行排名。购买金额越大,排名越靠前。
2.4.3.4 RFM用户分类
把r_buy,f_buy,m_buy进行连接。
对10075名用户进行打分,排名在前1/4的用户打4分,1/4到2/4的用户打3分,2/4到3/4的用户打2分,剩余的1/4打1分。
分别按照排名的最大值进行4等份。
抽取函数。
进行打分。
2.4.3.4.1 给用户贴标签
-
方式1:
根据需求配备rfm的权重来贴标签
比如r:f:m = 3:2:1,表示r_score>3,f_score>2,m_score>1 即为重要价值用户 -
方式2:
根据均值来贴标签
比如r_score>r.score.mean(),f_score>f.score.mean(),m_score>f.score.mean() 即为重要价值用户
由于我们没有特定的业务场景,这里使用的是方式2。
2.4.3.4.2 分为8个标签
- 重要价值用户:r高 f高 m高(111)
- 重要唤回用户:r低 f高 m高(011)
- 重要深耕用户:r高 f低 m高(101)
- 重要挽回用户:r低 f低 m高(001)
- 潜力用户:r高 f高 m低(110)
- 新用户:r高 f低 m低(100)
- 一般维持用户:r低 f高 m低(010)
- 流失用户:r低 f低 m低(000)
2.4.3.4.3 不同用户类型的人数
3.总结
在实际工作中,仅仅使用以上的分析是不够的。因为上述的分析主要是分享技术层面上是如何实现,都是属于描述性的分析。
在实际业务中,如果你的分析仅仅只是说一些描述性的结论,业务的同事可能就会跟你说,这个结论我早就知道了。
那好,我再加个RFM模型,告诉业务的同事哪些用户是有价值的用户,哪些用户是流失的用户。业务的同事就问,那咋让这些用户买?
那问题出在哪?这个案例中,我统计了一个男女占比,那这个男女占比是不是个关键问题?
我们对这个数字无法判断的原因是因为没有一个具体的业务场景,所以我们在做具体的分析前,要跟业务的同事多沟通,多刨根问底。