目錄
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模型,告訴業務的同事哪些用戶是有價值的用戶,哪些用戶是流失的用戶。業務的同事就問,那咋讓這些用戶買?
那問題出在哪?這個案例中,我統計了一個男女佔比,那這個男女佔比是不是個關鍵問題?
我們對這個數字無法判斷的原因是因爲沒有一個具體的業務場景,所以我們在做具體的分析前,要跟業務的同事多溝通,多刨根問底。