淘宝用户行为分析
项目简介
随着移动互联网技术的飞速发展和大众人均收入的增长,电商行业也随着技术的发展迅速崛起又快速分化。在当下大众消费需求日趋多样化的时代背景下,移动互联网行业特别是电商行业不再依靠用户红利实现业务增长,开始从粗放型的经营模式转向精细化管理,需要结合市场、渠道、用户行为等数据分析,对用户展开有针对性的运营活动,提供个性化、差异化的经营策略,从而实现运营目的。
本项目使用MySQL分析淘宝平台2017年11月25日至2017年12月3日的用户行为数据,通过对网站流量、用户活跃率、用户行为转化漏斗、用户行为偏好等特征的分析,提供有针对性的运营策略。
数据理解
数据来源
数据来源于阿里天池User Behavior Data,项目仅截取完整数据集UserBehavior
(3.41GB)的部分数据记录UB_split_10.csv
(171.7MB)作为本次数据分析的数据集。
数据属性
| ||||||||||||||||||
|
评估指标
提出问题
根据上述的业务评估指标,项目分析主要解决以下问题:
- Q1. 网站流量情况:访问量PV、独立访客数UV、人均访问数PV/UV、跳出率(只存在浏览行为的访问量/PV)、DAU、活跃率等指标情况;
- Q2. 探索用户从浏览到购买整个过程的转化或者流失情况,从而确定关键夹点位置,为后续的改进提出意见;
- Q3. 探索用户的行为模式,从日期、时间、商品种类销量、具体商品销量等维度探索用户的行为偏好和模式;
- Q4. 挖掘用户价值,发现高价值用户
数据导入
使用ETL工具Kettle快速读写数据集UB_split_10.csv
到数据库中,因为拆分的数据集没有字段名,所以预先在数据库中创建表结构和编码规则
CREATE TABLE IF NOT EXISTS user_behavior10 (
UserID INT NOT NULL,
ItemID INT,
CategoryID INT,
BehaviorType VARCHAR(255),
Timestamp INT) ENGINE INNODB DEFAULT CHARSET=utf8;
数据评估与清洗
对数据集的基本信息,如数据类型、重复值、缺失值、异常值等评估和清理
数据评估
-- 预览数据
SELECT *
FROM user_behavior10
LIMIT 10
-- 查看总记录数
SELECT count(*) AS 总记录数
FROM user_behavior10
-- 查看数据特征及对应的数据类型
SELECT COLUMN_NAME, DATA_TYPE
FROM information_schema.`COLUMNS`
WHERE TABLE_NAME='user_behavior10' AND TABLE_SCHEMA = 'userbehavior';
-- 查看行为类型包含的类型种类有哪些
SELECT DISTINCT BehaviorType
FROM user_behavior10
小结
本项目的数据集共有4,999,999记录,每一条记录代表一个用户的一条用户行为,每一条用户行为包含5个数据特征,如用户ID、商品ID、商品种类ID、该行为所属的类型以及行为发出的时间,而行为类型有浏览商品页面、加入购物车、收藏商品、购买商品四种类型。
- 部分特征的数据类型存在错误:
- UserID、ItemID、CategoryID的数据类型应改为字符串
- Timestamp应改为标准可读的日期时间形式
- 新增相关的日期时间序列
- 根据Timestamp新建Datetime,Date,Hour和DayofWeek
数据清洗
- 更正数据类型
-- UserID、ItemID、CategoryID的数据类型应改为字符串
ALTER TABLE user_behavior10
MODIFY COLUMN UserID VARCHAR(255),
MODIFY COLUMN ItemID VARCHAR(255),
MODIFY COLUMN CategoryID VARCHAR(255);
- 根据Timestamp新建Datetime,Date,Hour和DayofWeek
ALTER TABLE user_behavior10 ADD Datetime TIMESTAMP(0); # 新建一列Datetime
UPDATE user_behavior10
SET Datetime = FROM_UNIXTIME(user_behavior10.`Timestamp`); # 根据Timestamp字符串,得出Datetime
ALTER TABLE user_behavior10 ADD Date DATE; # 新建一列Date
UPDATE user_behavior10
SET Date = DATE(user_behavior10.Datetime); # 根据Datetime,得出Date
ALTER TABLE user_behavior10 ADD Hour INT; # 新建一列Hour
UPDATE user_behavior10
SET Hour = EXTRACT(HOUR unit FROM Datetime); # 根据Datetime,得出Hour
ALTER TABLE user_behavior10 ADD DayofWeek INT;
UPDATE user_behavior10
SET DayofWeek = WEEKDAY(Date)+1;
+--------+---------+------------+--------------+------------+---------------------+------------+------+-----------+
| UserID | ItemID | CategoryID | BehaviorType | Timestamp | Datetime | Date | Hour | DayofWeek |
+--------+---------+------------+--------------+------------+---------------------+------------+------+-----------+
| 314276 | 124362 | 3108044 | pv | 1511598951 | 2017-11-25 16:35:51 | 2017-11-25 | 16 | 6 |
| 314276 | 98571 | 3738615 | pv | 1511572152 | 2017-11-25 09:09:12 | 2017-11-25 | 9 | 6 |
| 314276 | 2678768 | 4358294 | pv | 1511572680 | 2017-11-25 09:18:00 | 2017-11-25 | 9 | 6 |
| 314276 | 2635989 | 2558244 | pv | 1511572672 | 2017-11-25 09:17:52 | 2017-11-25 | 9 | 6 |
| 314276 | 1188172 | 1859277 | pv | 1511688261 | 2017-11-26 17:24:21 | 2017-11-26 | 17 | 7 |
| 314276 | 76385 | 3108044 | pv | 1511572189 | 2017-11-25 09:09:49 | 2017-11-25 | 9 | 6 |
| 314276 | 3893085 | 3607361 | pv | 1511572298 | 2017-11-25 09:11:38 | 2017-11-25 | 9 | 6 |
| 314276 | 4082640 | 2578647 | pv | 1511572574 | 2017-11-25 09:16:14 | 2017-11-25 | 9 | 6 |
| 314276 | 2201297 | 4181361 | pv | 1511703995 | 2017-11-26 21:46:35 | 2017-11-26 | 21 | 7 |
| 314276 | 4732687 | 4159072 | pv | 1511688354 | 2017-11-26 17:25:54 | 2017-11-26 | 17 | 7 |
+--------+---------+------------+--------------+------------+---------------------+------------+------+-----------+
-- 查看更改之后的数据类型
+--------------+-----------+
| COLUMN_NAME | DATA_TYPE |
+--------------+-----------+
| UserID | varchar |
| ItemID | varchar |
| CategoryID | varchar |
| BehaviorType | varchar |
| Timestamp | int |
| Datetime | timestamp |
| Date | date |
| Hour | int |
| DayofWeek | int |
+--------------+-----------+
异常值处理
- 探索行为发生的时间不在规定的日期时间范围内或空值的数据记录
WITH a AS
(SELECT *
FROM user_behavior10
WHERE Datetime < '2017-11-25 00:00:00' OR Datetime >= '2017-12-04 00:00:00' OR Datetime IS NULL)
SELECT Date, count(*) AS records FROM a GROUP BY Date ORDER BY Date
- 删除时间范围外的数据记录和时间日期为空值的数据记录
BEGIN;
DELETE FROM user_behavior10
WHERE Datetime < '2017-11-25 00:00:00' OR Datetime >= '2017-12-04 00:00:00' OR Datetime IS NULL;
COMMIT;
-- 查看是否删除完成
SELECT *
FROM user_behavior10
WHERE Datetime < '2017-11-25 00:00:00' OR Datetime >= '2017-12-04 00:00:00' OR Datetime IS NULL
探索性分析
通过可视化的方式,探索11月25日-12月3日期间,淘宝用户在访问网站、行为转化率、用户行为偏好、商品销量等现状探索
网站流量情况
PV、UV、人均访问数
P
V
=
浏
览
商
品
的
累
计
次
数
PV = 浏览商品的累计次数
PV=浏览商品的累计次数
U
V
=
访
问
网
站
的
不
重
复
用
户
个
数
UV = 访问网站的不重复用户个数
UV=访问网站的不重复用户个数
人
均
访
问
数
=
P
V
U
V
人均访问数 = \frac{PV}{UV}
人均访问数=UVPV
-- 将流量结果用table封装以便后续探索的使用
CREATE TABLE web_traffic AS
SELECT t1.*, t1.PV/t1.UV AS '平均页面访问量'
FROM (SELECT COUNT(DISTINCT UserID) AS 'UV',
(SELECT COUNT(*)
FROM user_behavior10
WHERE BehaviorType = 'pv') AS 'PV'
FROM user_behavior10) AS t1
SELECT *
FROM web_traffic
+-------+---------+-----------------------+
| UV | PV | 平均页面访问量 |
+-------+---------+-----------------------+
| 48503 | 4469990 | 92.1590 |
+-------+---------+-----------------------+
共有48,503位独立用户访问了淘宝,并产生了4,469,990条浏览记录,人均访问量约为92条
跳出率、日均活跃用户数、活跃率
$跳出率 = \frac{只有点击行为的用户数}{总用户数} $
日
均
活
跃
用
户
数
(
D
A
U
)
=
∑
日
U
V
天
数
日均活跃用户数(DAU) = \frac{\sum{日UV}}{天数}
日均活跃用户数(DAU)=天数∑日UV
日
活
率
(
D
A
U
R
a
t
e
)
=
D
A
U
U
V
日活率(DAU Rate) =\frac{DAU}{UV}
日活率(DAURate)=UVDAU
-- 计算跳出率
SELECT (UV - (SELECT COUNT(DISTINCT UserID)
FROM user_behavior10
WHERE BehaviorType != 'pv'))/UV AS '跳出率'
FROM web_traffic;
+-----------+
| 跳出率 |
+-----------+
| 0.0598 |
+-----------+
-- 计算平均日活数和活跃率
SELECT t3.`DAU`, t3.DAU/web_traffic.UV AS 'DAU Rate'
FROM (SELECT AVG(t2.DUV) AS 'DAU'
FROM (SELECT Date,COUNT(DISTINCT UserID) AS 'DUV'
FROM user_behavior10
GROUP BY Date) AS t2) AS t3, web_traffic
+------------+------------+
| DAU | DAU Rate |
+------------+------------+
| 38046.8889 | 0.78442342 |
+------------+------------+
跳出率约为6%,DAU即每天平均活跃的独立用户数约为38,047个用户,DAU Rate约为78%
小结
2017年11月25日至2017年12月3日期间内,有48,503位用户访问了淘宝,产生了4,469,990条浏览记录,人均访问量约为92条。在这48,503位用户中,平均每天的日活为38,047,约占总用户的78%,即每天平均有78%的用户会访问淘宝进行商品选购,跳出率约为6%,即仅存在6%的用户只浏览了商品而没有发出任何有意购买的行为。综上所述,淘宝网具有较大的流量规模和用户基数,高日活量和、日活率和低跳出率说明淘宝具有较好的用户体验和较强的用户粘性,人们能在淘宝上解决其购物需求,从而成为人们的主要购物平台。
用户行为路径转化漏斗
探索用户从进入网站、浏览、选择加购到完成购买整个过程的转化情况,从而确定关键夹点位置,为后续的运营策略提出较有针对性的建议。
不同行为次数转化率
探索商品的整个选购过程中,每一个环节到下一个环节的行为次数转化率
- 因为加入购物车和收藏在购买商品的步骤上没有先后顺序,而且两种行为都能表现用户对产品可能存在购买意向,同属于购买意向确认阶段,所以可以将这两种行为合并作为购买意向确认阶段的行为总次数;
- 加入购买车或收藏也并非进入购买页面的必要行为,存在少量用户从浏览商品页面直接进入购买页面,但这并不影响计算浏览-购买的转化率
-- 统计各个行为的总次数
CREATE TABLE bh_total_counts AS(
SELECT BehaviorType, COUNT(1) AS bh_counts
FROM user_behavior10
GROUP BY BehaviorType);
+--------------+-----------+
| BehaviorType | bh_counts |
+--------------+-----------+
| pv | 4469990 |
| cart | 279393 |
| buy | 98863 |
| fav | 149147 |
+--------------+-----------+
-- 插入cart和fav的总计
INSERT INTO bh_total_counts VALUES ('cart&fav',(SELECT
SUM(t1.bh_counts)
FROM
(
SELECT
bh_counts
FROM
bh_total_counts
WHERE
BehaviorType IN ('cart', 'fav')
) AS t1));
-- 删除cart和fav的记录
DELETE FROM bh_total_counts
WHERE BehaviorType in ('fav','cart')
-- 预览数据
SELECT *
FROM bh_total_counts
+--------------+-----------+
| BehaviorType | bh_counts |
+--------------+-----------+
| pv | 4469990 |
| buy | 98863 |
| cart&fav | 428540 |
+--------------+-----------+
从上图可知,有9.6%的浏览行为转化为加入购物车或收藏,从加入购物车和收藏商品到发生购买的转化率为23%,整体行为次数的购买转化率为2%。
从整个选购过程的转化率来看,由浏览转化为加入购物车或收藏行为是整个过程中流失最多的环节,所以该阶段应为整个过程的关键夹点,需要在此环节提高转化率。
不同行为的独立用户人数转化率
-- 统计不同行为的独立用户人数
CREATE TABLE bh_uv_counts AS(
SELECT *
FROM (SELECT BehaviorType, COUNT(DISTINCT UserID) AS uv_cnts
FROM user_behavior10
GROUP BY BehaviorType) t1
WHERE t1.BehaviorType NOT IN ('cart','fav'))
INSERT INTO bh_uv_counts
VALUE
(
'cart&fav',
(SELECT
COUNT( DISTINCT UserID ) AS uv_cnts
FROM
user_behavior10
WHERE
BehaviorType IN ( 'cart', 'fav' ))
);
+--------------+---------+
| BehaviorType | uv_cnts |
+--------------+---------+
| buy | 33032 |
| pv | 48283 |
| cart&fav | 42396 |
+--------------+---------+
由上图可知,在所有浏览商品的用户中,有68%的用户都存在购买行为,说明大部分用户能够在该平台达到“AHA”时刻:
- 所有浏览过商品的用户,88%的用户有加购到购物车或收藏商品的行为,说明多数用户能在平台上找到需要的商品;
- 所有有加购或收藏商品的用户中,有78%的用户会完成购买,说明购物车或收藏夹里的商品的购买确定性高;
复购行为
CREATE TABLE
buy_counts AS(
SELECT UserID, COUNT(UserID) AS user_buy_frequency
FROM user_behavior10
WHERE BehaviorType = 'buy'
GROUP BY UserID);
SELECT *
FROM buy_counts
LIMIT 10;
+--------+--------------------+
| UserID | user_buy_frequency |
+--------+--------------------+
| 314276 | 1 |
| 314282 | 2 |
| 314284 | 5 |
| 314292 | 5 |
| 314296 | 2 |
| 314308 | 2 |
| 314299 | 1 |
| 31434 | 10 |
| 314316 | 1 |
| 31431 | 1 |
+--------+--------------------+
-- 统计分析复购率,计算复购1次,2次,4次的复购率
SELECT
SUM(CASE WHEN user_buy_frequency >= 2 THEN 1 ELSE NULL END) AS buy2_uv,
SUM(CASE WHEN user_buy_frequency >= 3 THEN 1 ELSE NULL END) AS buy3_uv,
SUM(CASE WHEN user_buy_frequency >= 5 THEN 1 ELSE NULL END) AS buy5_uv
FROM buy_counts;
SELECT buy2_uv/(SELECT UV FROM web_traffic) AS buy2_rate,
buy3_uv/(SELECT UV FROM web_traffic) AS buy3_rate,
buy5_uv/(SELECT UV FROM web_traffic) AS buy5_rate
FROM
(SELECT
SUM(CASE WHEN user_buy_frequency >= 2 THEN 1 ELSE NULL END) AS buy2_uv,
SUM(CASE WHEN user_buy_frequency >= 3 THEN 1 ELSE NULL END) AS buy3_uv,
SUM(CASE WHEN user_buy_frequency >= 5 THEN 1 ELSE NULL END) AS buy5_uv
FROM buy_counts) t1;
-- 复购用户数
+---------+---------+---------+
| buy2_uv | buy3_uv | buy5_uv |
+---------+---------+---------+
| 21583 | 13929 | 5960 |
+---------+---------+---------+
-- 复购率
+-----------+-----------+-----------+
| buy2_rate | buy3_rate | buy5_rate |
+-----------+-----------+-----------+
| 0.4450 | 0.2872 | 0.1229 |
+-----------+-----------+-----------+
- 在所有购买用户中,近45%的用户存在复购行为,近29%的用户购买次数达到3次以上,12%的用户购买次数达到5次以上;
- 综上所述,用户在该平台的付费转化率较高,复购率较高,用户粘性较大
小结
- 从不同行为的次数转化率上看,整体从浏览-购买行为的转化率为2%,其中由浏览转化到加入购物车或收藏行为是整个选购过程中流失最多、转化最困难的环节,用户在加购和完成购买商品前期需要花费大量的时间和精力在浏览、选择商品上,所以该阶段可能是用户行为路径的关键夹点,需要在此环节上制定针对性的运营策略从而提高转化率,从而提高整体的付费转化率;
- 从不同用户在不同行为上的转化率上看,68%的用户都存在购买行为,其中购买用户中有近45%的用户存在复购行为,说明进入该平台的大部分用户能够达到“Aha”时刻,能够真正体验到该平台提供的核心服务和功能,从而解决用户的购买需求和购买痛点。
用户行为偏好探索
探索用户的行为模式,从时间日期、商品种类等因素探索用户的行为偏好和模式
日期时间维度
-- 按照Date和DayofWeek分组,计算每一天的PV和UV
CREATE VIEW
day_web_traffic AS(
SELECT Date, DayofWeek, COUNT(*) AS pv_counts, COUNT(DISTINCT UserID) AS uv_counts
FROM user_behavior10
WHERE BehaviorType = "pv"
GROUP BY Date, DayofWeek)
+------------+-----------+-----------+-----------+
| Date | DayofWeek | pv_counts | uv_counts |
+------------+-----------+-----------+-----------+
| 2017-11-25 | 6 | 466825 | 33722 |
| 2017-11-26 | 7 | 480649 | 34221 |
| 2017-11-27 | 1 | 451323 | 33998 |
| 2017-11-28 | 2 | 438731 | 33877 |
| 2017-11-29 | 3 | 459257 | 34282 |
| 2017-11-30 | 4 | 466369 | 34855 |
| 2017-12-01 | 5 | 490064 | 35133 |
| 2017-12-02 | 6 | 609312 | 46072 |
| 2017-12-03 | 7 | 607460 | 45840 |
+------------+-----------+-----------+-----------+
-- 按照时间点分组,计算每一个时刻的平均PV和UV
CREATE VIEW hour_web_traffic AS(
SELECT Hour, COUNT(*)/COUNT(DISTINCT Date) AS apv, COUNT(DISTINCT UserID)/COUNT(DISTINCT Date) AS auv
FROM user_behavior10
WHERE BehaviorType = "pv"
GROUP BY Hour);
+------+------------+-----------+
| Hour | apv | auv |
+------+------------+-----------+
| 0 | 16597.8889 | 1637.7778 |
| 1 | 7722.6667 | 850.4444 |
| 2 | 4122.7778 | 499.8889 |
| 3 | 2746.2222 | 365.2222 |
| 4 | 2304.7778 | 322.4444 |
| 5 | 3140.8889 | 441.8889 |
| 6 | 6880.2222 | 946.2222 |
| 7 | 12317.5556 | 1728.2222 |
| 8 | 16578.0000 | 2316.3333 |
| 9 | 20512.3333 | 2701.4444 |
| 10 | 24130.7778 | 3014.7778 |
| 11 | 23467.6667 | 3068.1111 |
| 12 | 23572.6667 | 3090.1111 |
| 13 | 25816.6667 | 3158.8889 |
| 14 | 25707.7778 | 3107.0000 |
| 15 | 26294.8889 | 3163.6667 |
| 16 | 25650.6667 | 3143.1111 |
| 17 | 23184.3333 | 3060.6667 |
| 18 | 24237.8889 | 3091.8889 |
| 19 | 30198.7778 | 3301.7778 |
| 20 | 36632.4444 | 3521.3333 |
| 21 | 42424.8889 | 3625.6667 |
| 22 | 41419.0000 | 3440.4444 |
| 23 | 31003.7778 | 2698.5556 |
+------+------------+-----------+
-
相比工作日(周一至周五),用户在非工作日期间(周六至周日)的活跃度更高
-
从2017-12-1起,用户活跃数和浏览量呈大幅增长趋势,特别是在2017-12-2两个指标出现骤增现象
- 12月1日起,双12活动开始预热,参考信息来源;
- 双12活动恰逢12月的第一个双休日,即12月2日-12月3日,用户有更多的时间和精力参与双12的预热选购活动
-
从不同时段的平均用户活跃量和平均页面浏览量分布存在如下特征:
- 10:00-18:00,UV基本稳定在3000-3100,PV基本稳定在24000-25000之间,两个指标在该时间段内的数值差异不大;
- 18:00后,UV和PV均呈现明显增长的趋势,直到21:00达到一天内的最大值,UV达到3626,PV达到42329,UV增速约20%,PV增速高达75%;
- 22:00后,虽然UV和PV仍维持在较高位,但是均已呈现快速下降趋势,直至4:00达到最低值,UV低至320,PV低至2300左右;
不管是平台运营人员还是网站入驻的商家,应该充分把握用户高度活跃的黄金时段,如非工作日的18:00-22:00,以及特殊的节假日和购物节,选择这个日期和时段开启促销、上新或其他优惠运营活动。
商品种类维度
- 不同的商品种类之间是否存在较大的购买量差异?如果存在较大差异,继续探索下面三个问题。
- 哪些种类的商品兼具高浏览量和高购买量?
- 哪些种类的商品虽然没有较高的浏览量,但是付费成功率较高,购买率较高?
- 哪些种类的商品虽然有较高的浏览量,但是付费成功率较低,购买率较低?
- 哪些种类的商品的复购率高?
不同的商品种类之间是否存在较大的购买量差异
-- 按照商品种类和行为类型统计pv和uv
SELECT COUNT(*) AS pv, COUNT(DISTINCT UserID) AS uv
FROM user_behavior10
GROUP BY CategoryID, BehaviorType
WITH cat_stats AS(
SELECT CategoryID, BehaviorType, COUNT(*) AS pv, COUNT(DISTINCT UserID) AS uv
FROM user_behavior10
GROUP BY CategoryID, BehaviorType);
-- 将一维表转换成二维表,统计各个商品种类的不同行为下的pv总数
CREATE TABLE cat_stats2 AS(
SELECT CategoryID,
SUM(IFNULL(CASE WHEN BehaviorType = "pv" THEN pv ELSE NULL END,0)) AS "pv_cnts",
SUM(IFNULL(CASE WHEN BehaviorType = "fav" OR BehaviorType = "cart" THEN pv ELSE NULL END,0)) AS "cart_cnts",
SUM(IFNULL(CASE WHEN BehaviorType = "buy" THEN pv ELSE NULL END,0)) AS "buy_cnts"
FROM cat_stats
GROUP BY CategoryID);
- 按照购买量从大到小降序排列,计算累加占比,观察不同种类的商品在购买量的分布是否存在较大的差异
通过上图可以看出,不同种类商品在购买量上存在较大的差异,整体数据分布呈现幂律化分布,其中8%的商品种类贡献超过80%的购买量,而92%的商品种类的累计购买量仅占总购买量的20%;
高购买量VS高浏览量
-- 购买量Top20的商品种类在浏览量上的分布
WITH a AS (
SELECT
t1.*
FROM
(
SELECT
*,
sum( buy_cnts ) over ( ORDER BY buy_cnts DESC )/(
SELECT
sum( buy_cnts )
FROM
cat_stats2
) AS cumsum_buycnts_rate
FROM
cat_stats2
LIMIT 20
) t1
JOIN ( SELECT * FROM cat_stats2 ORDER BY pv_cnts DESC LIMIT 20 ) t2 ON t1.CategoryID = t2.CategoryID
ORDER BY
cumsum_buycnts_rate
)
SELECT *,sum( pv_cnts ) over ( ORDER BY buy_cnts DESC )/(
SELECT
sum( pv_cnts )
FROM
cat_stats2
) AS cumsum_pvcnts_rate
FROM
a
+------------+---------+-----------+----------+---------------------+--------------------+
| CategoryID | pv_cnts | cart_cnts | buy_cnts | cumsum_buycnts_rate | cumsum_pvcnts_rate |
+------------+---------+-----------+----------+---------------------+--------------------+
| 2735466 | 57633 | 6735 | 1724 | 0.0174 | 0.0129 |
| 4145813 | 160284 | 14680 | 1629 | 0.0512 | 0.0488 |
| 2885642 | 47353 | 4379 | 1564 | 0.0670 | 0.0593 |
| 4756105 | 237764 | 19507 | 1480 | 0.0820 | 0.1125 |
| 4801426 | 98625 | 10008 | 1371 | 0.0958 | 0.1346 |
| 982926 | 144935 | 12844 | 1297 | 0.1090 | 0.1670 |
| 2640118 | 34726 | 3774 | 861 | 0.1177 | 0.1748 |
| 1320293 | 91018 | 7726 | 835 | 0.1347 | 0.1952 |
| 3002561 | 73580 | 6941 | 771 | 0.1584 | 0.2116 |
| 4217906 | 47961 | 5197 | 706 | 0.1656 | 0.2223 |
| 1879194 | 38127 | 3508 | 646 | 0.1926 | 0.2309 |
| 2355072 | 159822 | 10710 | 631 | 0.1990 | 0.2666 |
| 2465336 | 76960 | 7323 | 629 | 0.2053 | 0.2838 |
+------------+---------+-----------+----------+---------------------+--------------------+
13 rows in set (0.04 sec)
- 购买量Top20的商品种类有65%的种类同时也位于浏览量Top20;
- 购买量Top20的商品种类贡献了总购买量的20.5%,同时这些种类的浏览量也占了总浏览量的28.3%;
- 说明高流量、高活跃度的商品与高购买量存在着一定的正相关性
高购买转化率VS高浏览量
-- 查看购买转化率Top20的商品种类
SELECT *
FROM
(SELECT *, buy_cnts/pv_cnts AS 'buy_cr'
FROM cat_stats2
WHERE pv_cnts >= (SELECT AVG(pv_cnts)
FROM (SELECT *, ROW_NUMBER() over (ORDER BY pv_cnts) AS rnk, ROW_NUMBER() over (ORDER BY pv_cnts DESC) AS rnk_desc
FROM cat_stats2) t1
WHERE rnk >= (SELECT COUNT(*) FROM cat_stats2)/2 AND rnk_desc >= (SELECT COUNT(*) FROM cat_stats2)/2)
ORDER BY buy_cr DESC) t2
WHERE buy_cr < 1
LIMIT 20
+------------+---------+-----------+----------+--------+
| CategoryID | pv_cnts | cart_cnts | buy_cnts | buy_cr |
+------------+---------+-----------+----------+--------+
| 257793 | 45 | 1 | 39 | 0.8667 |
| 194104 | 63 | 3 | 50 | 0.7937 |
| 1421972 | 92 | 1 | 69 | 0.7500 |
| 1030192 | 75 | 4 | 54 | 0.7200 |
| 2443475 | 35 | 2 | 23 | 0.6571 |
| 804084 | 205 | 12 | 96 | 0.4683 |
| 1136219 | 41 | 2 | 17 | 0.4146 |
| 1366688 | 105 | 9 | 35 | 0.3333 |
| 1958275 | 47 | 13 | 15 | 0.3191 |
| 2306491 | 33 | 5 | 10 | 0.3030 |
| 2533979 | 30 | 7 | 9 | 0.3000 |
| 3814171 | 49 | 5 | 13 | 0.2653 |
| 1742197 | 62 | 15 | 16 | 0.2581 |
| 4783746 | 66 | 7 | 17 | 0.2576 |
| 1461887 | 83 | 26 | 21 | 0.2530 |
| 937407 | 132 | 19 | 33 | 0.2500 |
| 1256778 | 36 | 8 | 9 | 0.2500 |
| 3628508 | 61 | 11 | 15 | 0.2459 |
| 813818 | 33 | 7 | 8 | 0.2424 |
| 1918447 | 29 | 5 | 7 | 0.2414 |
+------------+---------+-----------+----------+--------+
-- 查看高浏览量的商品种类的购买转化率
SELECT *, buy_cnts/pv_cnts AS 'buy_cr'
FROM cat_stats2
ORDER BY pv_cnts DESC
LIMIT 20
+------------+---------+-----------+----------+--------+
| CategoryID | pv_cnts | cart_cnts | buy_cnts | buy_cr |
+------------+---------+-----------+----------+--------+
| 4756105 | 237764 | 19507 | 1480 | 0.0062 |
| 4145813 | 160284 | 14680 | 1629 | 0.0102 |
| 2355072 | 159822 | 10710 | 631 | 0.0039 |
| 3607361 | 150959 | 9140 | 621 | 0.0041 |
| 982926 | 144935 | 12844 | 1297 | 0.0089 |
| 2520377 | 100938 | 7843 | 462 | 0.0046 |
| 4801426 | 98625 | 10008 | 1371 | 0.0139 |
| 1320293 | 91018 | 7726 | 835 | 0.0092 |
| 2465336 | 76960 | 7323 | 629 | 0.0082 |
| 3002561 | 73580 | 6941 | 771 | 0.0105 |
| 2735466 | 57633 | 6735 | 1724 | 0.0299 |
| 149192 | 51043 | 5226 | 567 | 0.0111 |
| 4181361 | 50353 | 5165 | 396 | 0.0079 |
| 1080785 | 49092 | 3806 | 232 | 0.0047 |
| 4217906 | 47961 | 5197 | 706 | 0.0147 |
| 2885642 | 47353 | 4379 | 1564 | 0.0330 |
| 154040 | 44167 | 2448 | 113 | 0.0026 |
| 3738615 | 41071 | 3933 | 483 | 0.0118 |
| 1879194 | 38127 | 3508 | 646 | 0.0169 |
| 2640118 | 34726 | 3774 | 861 | 0.0248 |
+------------+---------+-----------+----------+--------+
- 由上述结果可以看出,高流量的商品种类的购买转化率都不高,反之购买转化率高的商品种类在浏览次数和加购次数均较低;
- 这也说明用户是否购买一件商品受到多方面因素的影响,如商品属性(刚需、可选消费、特殊)、平台图片展示、口碑、质量,活跃度高、浏览次数多的商品不一定购买转化率转化率就高;
单个商品的销量维度
-- 按照ItemID分类统计各个行为类型的次数
CREATE TABLE item_stats AS(
SELECT ItemID,
SUM(IFNULL(CASE WHEN BehaviorType = "pv" THEN pv ELSE NULL END,0)) AS "pv_cnts",
SUM(IFNULL(CASE WHEN BehaviorType = "fav" OR BehaviorType = "cart" THEN pv ELSE NULL END,0)) AS "cart_cnts",
SUM(IFNULL(CASE WHEN BehaviorType = "buy" THEN pv ELSE NULL END,0)) AS "buy_cnts"
FROM (SELECT ItemID, BehaviorType, COUNT(*) AS pv
FROM user_behavior10
GROUP BY ItemID, BehaviorType) t1
GROUP BY ItemID);
-- 按照购买量计算每个item的商品的累加购买量占总购买量的百分比
CREATE TABLE item_web_traffic AS (
SELECT t1.*,t1.cum_buys/(
SELECT sum(buy_cnts) FROM item_stats) AS cum_buys_pct,t1.cum_item_cnts/(
SELECT count(ItemID) FROM item_stats) AS cum_itemcnts_pct FROM (
SELECT*,sum(buy_cnts) over (ORDER BY buy_cnts DESC,ItemID) AS cum_buys,row_number() over () AS cum_item_cnts FROM item_stats) t1);
SELECT*FROM item_web_traffic WHERE cum_buys_pct=1 LIMIT 10;
+---------+---------+-----------+----------+----------+---------------+--------------+------------------+
| ItemID | pv_cnts | cart_cnts | buy_cnts | cum_buys | cum_item_cnts | cum_buys_pct | cum_itemcnts_pct |
+---------+---------+-----------+----------+----------+---------------+--------------+------------------+
| 999885 | 14 | 1 | 1 | 98859 | 70991 | 1.0000 | 0.0653 |
| 999930 | 8 | 2 | 1 | 98860 | 70992 | 1.0000 | 0.0653 |
| 999940 | 0 | 0 | 1 | 98861 | 70993 | 1.0000 | 0.0653 |
| 99995 | 2 | 0 | 1 | 98862 | 70994 | 1.0000 | 0.0653 |
| 999954 | 1 | 0 | 1 | 98863 | 70995 | 1.0000 | 0.0653 |
| 100 | 4 | 0 | 0 | 98863 | 70996 | 1.0000 | 0.0653 |
| 100000 | 16 | 1 | 0 | 98863 | 70997 | 1.0000 | 0.0653 |
| 1000002 | 1 | 0 | 0 | 98863 | 70998 | 1.0000 | 0.0653 |
| 1000008 | 1 | 0 | 0 | 98863 | 70999 | 1.0000 | 0.0653 |
| 1000010 | 1 | 0 | 0 | 98863 | 71000 | 1.0000 | 0.0653 |
+---------+---------+-----------+----------+----------+---------------+--------------+------------------+
可以看出前6.5%的商品几乎贡献了100%的购买量,说明某些商品被购买很多次,不同商品之间的购买量差异很大
挖掘用户价值,发掘高价值用户
结合RMF模型,给每个用户按照其用户价值定级
高购买率和低购买率用户有什么特征
-- 按照用户ID分组
CREATE VIEW user_stats AS (
SELECT UserID,BehaviorType,COUNT(*) AS pv FROM user_behavior10 GROUP BY UserID,BehaviorType);
-- 将一维表转换成二维表,统计各个商品种类的不同行为下的pv总数
CREATE TABLE user_web_traffic AS(
SELECT UserID,
SUM(IFNULL(CASE WHEN BehaviorType = "pv" THEN pv ELSE NULL END,0)) AS "pv_cnts",
SUM(IFNULL(CASE WHEN BehaviorType = "fav" OR BehaviorType = "cart" THEN pv ELSE NULL END,0)) AS "cart_cnts",
SUM(IFNULL(CASE WHEN BehaviorType = "buy" THEN pv ELSE NULL END,0)) AS "buy_cnts"
FROM user_stats
GROUP BY UserID);
-- 查看高购买率的用户在各个行为特征下的数据分布
SELECT*,buy_cnts/pv_cnts AS buy_cr
FROM user_web_traffic
ORDER BY buy_cnts/pv_cnts DESC
LIMIT 100;
+--------+---------+-----------+----------+---------+
| UserID | pv_cnts | cart_cnts | buy_cnts | buy_cr |
+--------+---------+-----------+----------+---------+
| 365156 | 1 | 23 | 10 | 10.0000 |
| 337313 | 1 | 51 | 9 | 9.0000 |
| 52545 | 2 | 2 | 17 | 8.5000 |
| 322897 | 1 | 24 | 8 | 8.0000 |
| 319139 | 1 | 50 | 7 | 7.0000 |
| 450619 | 1 | 0 | 7 | 7.0000 |
| 4260 | 1 | 31 | 6 | 6.0000 |
| 370735 | 2 | 50 | 12 | 6.0000 |
| 364666 | 1 | 5 | 5 | 5.0000 |
| 384633 | 3 | 0 | 13 | 4.3333 |
| 324801 | 1 | 6 | 4 | 4.0000 |
| 508850 | 3 | 4 | 12 | 4.0000 |
| 365005 | 1 | 31 | 4 | 4.0000 |
| 476217 | 1 | 9 | 3 | 3.0000 |
| 393152 | 1 | 2 | 3 | 3.0000 |
| 382786 | 1 | 2 | 3 | 3.0000 |
| 369782 | 1 | 8 | 3 | 3.0000 |
| 424718 | 2 | 6 | 6 | 3.0000 |
| 40111 | 1 | 6 | 3 | 3.0000 |
| 477131 | 1 | 66 | 3 | 3.0000 |
| 510314 | 1 | 0 | 3 | 3.0000 |
| 384168 | 1 | 2 | 3 | 3.0000 |
| 451669 | 1 | 34 | 3 | 3.0000 |
| 47680 | 6 | 0 | 17 | 2.8333 |
| 388972 | 2 | 0 | 5 | 2.5000 |
| 386061 | 2 | 3 | 5 | 2.5000 |
| 508044 | 2 | 2 | 5 | 2.5000 |
| 421267 | 2 | 0 | 5 | 2.5000 |
| 339210 | 1 | 0 | 2 | 2.0000 |
| 347142 | 1 | 72 | 2 | 2.0000 |
| 351724 | 2 | 3 | 4 | 2.0000 |
| 334701 | 2 | 0 | 4 | 2.0000 |
| 459084 | 2 | 0 | 4 | 2.0000 |
| 348832 | 1 | 39 | 2 | 2.0000 |
| 381855 | 1 | 1 | 2 | 2.0000 |
| 413115 | 2 | 10 | 4 | 2.0000 |
| 439508 | 1 | 0 | 2 | 2.0000 |
| 508672 | 39 | 24 | 69 | 1.7692 |
| 395350 | 5 | 9 | 8 | 1.6000 |
| 315494 | 5 | 24 | 8 | 1.6000 |
| 453324 | 5 | 1 | 8 | 1.6000 |
| 486717 | 2 | 2 | 3 | 1.5000 |
| 422571 | 6 | 2 | 9 | 1.5000 |
| 324591 | 2 | 14 | 3 | 1.5000 |
| 334094 | 2 | 4 | 3 | 1.5000 |
| 331876 | 2 | 1 | 3 | 1.5000 |
| 362825 | 5 | 0 | 7 | 1.4000 |
| 352338 | 5 | 0 | 7 | 1.4000 |
| 497614 | 3 | 0 | 4 | 1.3333 |
| 379937 | 15 | 0 | 19 | 1.2667 |
| 532736 | 4 | 0 | 5 | 1.2500 |
| 357018 | 4 | 0 | 5 | 1.2500 |
| 41406 | 9 | 0 | 11 | 1.2222 |
| 46294 | 7 | 0 | 8 | 1.1429 |
| 362442 | 10 | 2 | 10 | 1.0000 |
| 442131 | 2 | 0 | 2 | 1.0000 |
| 409081 | 11 | 4 | 11 | 1.0000 |
| 353709 | 3 | 0 | 3 | 1.0000 |
| 516228 | 2 | 0 | 2 | 1.0000 |
| 332333 | 2 | 0 | 2 | 1.0000 |
| 4187 | 1 | 2 | 1 | 1.0000 |
| 434576 | 4 | 3 | 4 | 1.0000 |
| 409628 | 5 | 6 | 5 | 1.0000 |
| 462055 | 2 | 2 | 2 | 1.0000 |
| 52414 | 9 | 0 | 9 | 1.0000 |
| 362306 | 2 | 0 | 2 | 1.0000 |
| 343857 | 21 | 1 | 21 | 1.0000 |
| 384084 | 2 | 22 | 2 | 1.0000 |
| 351618 | 2 | 35 | 2 | 1.0000 |
| 405989 | 1 | 6 | 1 | 1.0000 |
| 397045 | 3 | 0 | 3 | 1.0000 |
| 365781 | 2 | 1 | 2 | 1.0000 |
| 464229 | 4 | 0 | 4 | 1.0000 |
| 350855 | 4 | 1 | 4 | 1.0000 |
| 528950 | 1 | 13 | 1 | 1.0000 |
| 393404 | 2 | 17 | 2 | 1.0000 |
| 467660 | 4 | 1 | 4 | 1.0000 |
| 328538 | 4 | 0 | 4 | 1.0000 |
| 354545 | 2 | 28 | 2 | 1.0000 |
| 524651 | 5 | 0 | 5 | 1.0000 |
| 434022 | 3 | 0 | 3 | 1.0000 |
| 464367 | 5 | 0 | 5 | 1.0000 |
| 347846 | 2 | 2 | 2 | 1.0000 |
| 361216 | 2 | 0 | 2 | 1.0000 |
| 394474 | 4 | 4 | 4 | 1.0000 |
| 441655 | 2 | 3 | 2 | 1.0000 |
| 434471 | 36 | 3 | 35 | 0.9722 |
| 358178 | 14 | 7 | 13 | 0.9286 |
| 527166 | 21 | 10 | 19 | 0.9048 |
| 347066 | 28 | 0 | 25 | 0.8929 |
| 501420 | 9 | 0 | 8 | 0.8889 |
| 403972 | 8 | 1 | 7 | 0.8750 |
| 328278 | 8 | 0 | 7 | 0.8750 |
| 526539 | 8 | 13 | 7 | 0.8750 |
| 481183 | 24 | 1 | 21 | 0.8750 |
| 342337 | 7 | 0 | 6 | 0.8571 |
| 399393 | 25 | 5 | 21 | 0.8400 |
| 460495 | 18 | 1 | 15 | 0.8333 |
| 533404 | 6 | 1 | 5 | 0.8333 |
| 426812 | 6 | 2 | 5 | 0.8333 |
+--------+---------+-----------+----------+---------+
-- 查看低购买率的用户在各个行为特征下的数据分布
with a as (select *, buy_cnts/pv_cnts as buy_cr from user_web_traffic where buy_cnts/pv_cnts=0 limit 100)
-> select * from a order by pv_cnts;
+--------+---------+-----------+----------+--------+
| UserID | pv_cnts | cart_cnts | buy_cnts | buy_cr |
+--------+---------+-----------+----------+--------+
| 31489 | 5 | 0 | 0 | 0.0000 |
| 314824 | 7 | 2 | 0 | 0.0000 |
| 314796 | 7 | 0 | 0 | 0.0000 |
| 314558 | 7 | 4 | 0 | 0.0000 |
| 314906 | 8 | 0 | 0 | 0.0000 |
| 314302 | 11 | 3 | 0 | 0.0000 |
| 314341 | 11 | 4 | 0 | 0.0000 |
| 3153 | 11 | 3 | 0 | 0.0000 |
| 315654 | 12 | 0 | 0 | 0.0000 |
| 315088 | 13 | 5 | 0 | 0.0000 |
| 315593 | 13 | 1 | 0 | 0.0000 |
| 314996 | 13 | 0 | 0 | 0.0000 |
| 315160 | 14 | 14 | 0 | 0.0000 |
| 315694 | 16 | 2 | 0 | 0.0000 |
| 315031 | 16 | 0 | 0 | 0.0000 |
| 314613 | 18 | 2 | 0 | 0.0000 |
| 314629 | 19 | 0 | 0 | 0.0000 |
| 315481 | 20 | 1 | 0 | 0.0000 |
| 314619 | 21 | 5 | 0 | 0.0000 |
| 314714 | 22 | 1 | 0 | 0.0000 |
| 315069 | 23 | 2 | 0 | 0.0000 |
| 315580 | 23 | 0 | 0 | 0.0000 |
| 315323 | 23 | 0 | 0 | 0.0000 |
| 315684 | 24 | 3 | 0 | 0.0000 |
| 314989 | 24 | 4 | 0 | 0.0000 |
| 315539 | 25 | 3 | 0 | 0.0000 |
| 314523 | 28 | 1 | 0 | 0.0000 |
| 315121 | 28 | 16 | 0 | 0.0000 |
| 314495 | 28 | 3 | 0 | 0.0000 |
| 315559 | 29 | 2 | 0 | 0.0000 |
| 314859 | 30 | 1 | 0 | 0.0000 |
| 314865 | 31 | 6 | 0 | 0.0000 |
| 315141 | 31 | 2 | 0 | 0.0000 |
| 314885 | 32 | 6 | 0 | 0.0000 |
| 315496 | 33 | 1 | 0 | 0.0000 |
| 314347 | 33 | 1 | 0 | 0.0000 |
| 315495 | 33 | 3 | 0 | 0.0000 |
| 314826 | 34 | 3 | 0 | 0.0000 |
| 315365 | 35 | 2 | 0 | 0.0000 |
| 31515 | 35 | 3 | 0 | 0.0000 |
| 314708 | 38 | 0 | 0 | 0.0000 |
| 314628 | 40 | 2 | 0 | 0.0000 |
| 314297 | 40 | 2 | 0 | 0.0000 |
| 314832 | 41 | 6 | 0 | 0.0000 |
| 314886 | 41 | 1 | 0 | 0.0000 |
| 314453 | 41 | 0 | 0 | 0.0000 |
| 315717 | 41 | 11 | 0 | 0.0000 |
| 315411 | 46 | 4 | 0 | 0.0000 |
| 3149 | 46 | 4 | 0 | 0.0000 |
| 315646 | 46 | 4 | 0 | 0.0000 |
| 314830 | 47 | 1 | 0 | 0.0000 |
| 314451 | 49 | 19 | 0 | 0.0000 |
| 314914 | 53 | 2 | 0 | 0.0000 |
| 3150 | 54 | 6 | 0 | 0.0000 |
| 314474 | 56 | 2 | 0 | 0.0000 |
| 315507 | 56 | 4 | 0 | 0.0000 |
| 31475 | 60 | 3 | 0 | 0.0000 |
| 315469 | 60 | 6 | 0 | 0.0000 |
| 315754 | 62 | 0 | 0 | 0.0000 |
| 315714 | 63 | 2 | 0 | 0.0000 |
| 315334 | 63 | 2 | 0 | 0.0000 |
| 315702 | 64 | 4 | 0 | 0.0000 |
| 315697 | 65 | 7 | 0 | 0.0000 |
| 314897 | 67 | 0 | 0 | 0.0000 |
| 315402 | 67 | 5 | 0 | 0.0000 |
| 314463 | 67 | 7 | 0 | 0.0000 |
| 314715 | 68 | 9 | 0 | 0.0000 |
| 315456 | 69 | 1 | 0 | 0.0000 |
| 315103 | 70 | 2 | 0 | 0.0000 |
| 314409 | 70 | 12 | 0 | 0.0000 |
| 314348 | 71 | 0 | 0 | 0.0000 |
| 315165 | 71 | 5 | 0 | 0.0000 |
| 315485 | 77 | 6 | 0 | 0.0000 |
| 314649 | 77 | 2 | 0 | 0.0000 |
| 31535 | 80 | 12 | 0 | 0.0000 |
| 31567 | 82 | 11 | 0 | 0.0000 |
| 31446 | 84 | 17 | 0 | 0.0000 |
| 314521 | 90 | 4 | 0 | 0.0000 |
| 314542 | 92 | 2 | 0 | 0.0000 |
| 314443 | 101 | 14 | 0 | 0.0000 |
| 314966 | 104 | 7 | 0 | 0.0000 |
| 315479 | 104 | 6 | 0 | 0.0000 |
| 314657 | 105 | 3 | 0 | 0.0000 |
| 314427 | 110 | 3 | 0 | 0.0000 |
| 31559 | 111 | 6 | 0 | 0.0000 |
| 314377 | 111 | 4 | 0 | 0.0000 |
| 315583 | 116 | 42 | 0 | 0.0000 |
| 314743 | 122 | 15 | 0 | 0.0000 |
| 314382 | 127 | 10 | 0 | 0.0000 |
| 315311 | 144 | 23 | 0 | 0.0000 |
| 314748 | 144 | 11 | 0 | 0.0000 |
| 315462 | 149 | 5 | 0 | 0.0000 |
| 315120 | 173 | 5 | 0 | 0.0000 |
| 314687 | 175 | 19 | 0 | 0.0000 |
| 315092 | 191 | 63 | 0 | 0.0000 |
| 315578 | 206 | 6 | 0 | 0.0000 |
| 314385 | 210 | 12 | 0 | 0.0000 |
| 314454 | 225 | 0 | 0 | 0.0000 |
| 315105 | 238 | 32 | 0 | 0.0000 |
| 314501 | 263 | 16 | 0 | 0.0000 |
+--------+---------+-----------+----------+--------+
-
可以看出高购买率的用户并不需要对商品进行大量的浏览和对比,这些用户对于购买一件商品的确定性更高,有非常明确的购买目的,可以推断购买率高的用户属于理智型消费者,属于具有比较明确的购买需求和目的,不易被商家广告和促销吸引;
-
购买率低的用户大致可以分成两类,一类是浏览少购买的也少的,这类用户属于物欲低下或者不喜欢网购的用户,可以加以引导;第二类属于浏览量大,需要经过大量商品的比对和浏览,属于深思熟虑或者自制力较强的用户,这些用户比较容易广告或者促销的影响,可能对商品的价格、商品品质材质等因素敏感。
基于RMF模型找出高价值的用户
RMF模型是衡量用户价值和用户创利能力的重要工具和手段,下面的三个要素构成了RMF模型的重要指标:
- R-Recency(最近一次购买时间)
- F-Frequency(消费频率)
- M-Money(消费金额)
由于数据源中没有消费金额,本项目仅使用R和F的数据对客户价值进行打分
计算R-Recency和F-Frequency
由于数据集统计的是2017年11月25日至2017年12月3日的用户行为数据,所以这里选取2017年12月4日作为计算日期,计算数据集中每个用户最近购买行为发生的日期与2017年12月4日之间的间隔天数,作为R指标,R值越小,客户价值越大;
-- 创建R-Recency和F-Frequency
CREATE TABLE user_rfm AS (
SELECT UserID, max(Date) AS recent_date,count(*) AS buy_frequency
FROM user_behavior10
WHERE BehaviorType='buy'
GROUP BY UserID;
ALTER TABLE user_rfm ADD COLUMN interval_days INT;
UPDATE user_rfm SET interval_days=datediff('2017-12-04',recent_date);
SELECT * FROM user_rfm;
--------+-------------+---------------+---------------+
| UserID | recent_date | buy_frequency | interval_days |
+--------+-------------+---------------+---------------+
| 314276 | 2017-11-29 | 1 | 5 |
| 314282 | 2017-12-03 | 2 | 1 |
| 314284 | 2017-12-02 | 5 | 2 |
| 314292 | 2017-11-29 | 5 | 5 |
| 314296 | 2017-12-03 | 2 | 1 |
| 314308 | 2017-12-02 | 2 | 2 |
| 314299 | 2017-12-02 | 1 | 2 |
| 31434 | 2017-12-03 | 10 | 1 |
| 314316 | 2017-11-27 | 1 | 7 |
| 31431 | 2017-11-29 | 1 | 5 |
+--------+-------------+---------------+---------------+
-- 根据上述buy_frequency和interval_days打分
## 排名
CREATE TABLE user_ufm_rank AS
(SELECT UserID,buy_frequency,
interval_days,
row_number() over (ORDER BY interval_days,buy_frequency DESC) AS r_rank,
row_number() over (ORDER BY buy_frequency DESC,interval_days) AS f_rank
FROM user_rfm);
## 打分
CREATE TABLE user_rmf_grade AS
(SELECT*,
(CASE WHEN r_rank<=(SELECT count(*) FROM user_rfm)/4 THEN 4
WHEN r_rank<=(SELECT count(*) FROM user_rfm)/3 THEN 3
WHEN r_rank<=(SELECT count(*) FROM user_rfm)/2 THEN 2
ELSE 1 END) AS r_grade,
(CASE WHEN f_rank<=(SELECT count(*) FROM user_rfm)/4 THEN 4
WHEN f_rank<=(SELECT count(*) FROM user_rfm)/3 THEN 3
WHEN f_rank<=(SELECT count(*) FROM user_rfm)/2 THEN 2
ELSE 1 END) AS f_grade
FROM user_ufm_rank);
-- 查询
mysql> select * from user_rmf_grade limit 10;
+--------+---------------+---------------+--------+--------+---------+---------+
| UserID | buy_frequency | interval_days | r_rank | f_rank | r_grade | f_grade |
+--------+---------------+---------------+--------+--------+---------+---------+
| 537150 | 109 | 1 | 1 | 1 | 4 | 4 |
| 524735 | 82 | 2 | 8393 | 2 | 3 | 4 |
| 508672 | 69 | 1 | 2 | 3 | 4 | 4 |
| 523342 | 60 | 1 | 3 | 4 | 4 | 4 |
| 526437 | 60 | 1 | 4 | 5 | 4 | 4 |
| 315769 | 60 | 4 | 18720 | 6 | 1 | 4 |
| 529478 | 52 | 1 | 5 | 7 | 4 | 4 |
| 486585 | 50 | 1 | 6 | 8 | 4 | 4 |
| 508743 | 43 | 1 | 7 | 9 | 4 | 4 |
| 395683 | 43 | 1 | 8 | 10 | 4 | 4 |
+--------+---------------+---------------+--------+--------+---------+---------+
-- 哪些用户是重要价值用户
select * from user_rmf_grade where user_type='重要价值用户';
+--------+---------------+---------------+--------+--------+---------+---------+--------------------+
| UserID | buy_frequency | interval_days | r_rank | f_rank | r_grade | f_grade | user_type |
+--------+---------------+---------------+--------+--------+---------+---------+--------------------+
| 537150 | 109 | 1 | 1 | 1 | 4 | 4 | 重要价值用户 |
| 524735 | 82 | 2 | 8393 | 2 | 3 | 4 | 重要价值用户 |
| 508672 | 69 | 1 | 2 | 3 | 4 | 4 | 重要价值用户 |
| 523342 | 60 | 1 | 3 | 4 | 4 | 4 | 重要价值用户 |
| 526437 | 60 | 1 | 4 | 5 | 4 | 4 | 重要价值用户 |
| 529478 | 52 | 1 | 5 | 7 | 4 | 4 | 重要价值用户 |
| 486585 | 50 | 1 | 6 | 8 | 4 | 4 | 重要价值用户 |
| 508743 | 43 | 1 | 7 | 9 | 4 | 4 | 重要价值用户 |
| 395683 | 43 | 1 | 8 | 10 | 4 | 4 | 重要价值用户 |
| 316310 | 42 | 2 | 8394 | 11 | 3 | 4 | 重要价值用户 |
| 524699 | 40 | 1 | 9 | 12 | 4 | 4 | 重要价值用户 |
| 539047 | 38 | 1 | 10 | 13 | 4 | 4 | 重要价值用户 |
| 42048 | 38 | 1 | 11 | 14 | 4 | 4 | 重要价值用户 |
| 404318 | 37 | 1 | 12 | 15 | 4 | 4 | 重要价值用户 |
-- 查看不同用户价值的用户数量
mysql> select user_type, count(*) from user_rmf_grade group by user_type;
+--------------------+----------+
| user_type | count(*) |
+--------------------+----------+
| 重要价值用户 | 7647 |
| 重要保持用户 | 3363 |
| 一般价值用户 | 18659 |
| 新发展用户 | 3363 |
+--------------------+----------+
- 针对重要价值用户,该类人群的用户活跃度或者创利能力较强,需要重点关注,不定期或者定期跟踪其行为数据,如有异常需要查明原因并解决问题;
- 针对新发展用户,可能是新用户,也可能是重新唤回用户,虽然购买频次较少,但是近期较为活跃,可以对此类用户给予折扣力度或者优惠活动,从而增加其用户粘性和复购率;
- 对于重要保持用户,虽然近期活跃度较低,但是前期购买频率较高,对于这类用户需要查明其历史行为特征,分析其活跃期间是否存在特殊事件,从而分析用户的行为偏好的行为动机;
结论
通过以上四个方面的探索性分析,并结合以上业务指标,从AARRR用户生命周期的五个方面进行总结和建议:
用户获取(Acquisition)
实现产品与渠道的匹配
- 淘宝网具有较大的流量规模和用户基数,高日活量和低跳出率说明淘宝同时也存在较好的用户体验和较强的用户粘性,人们能在淘宝上解决其大部分的购物需求,所以淘宝俨然已成为人们目前的主要购物平台。在这一现状下,淘宝继续获取用户的较好方式应为用户推荐,淘宝可以充分利用现有的用户规模,采用多种推荐方式来吸取更多的用户。
- 通过用户行为偏好的探索发现,非工作日和每天的18:00-22:00是用户使用平台的高峰期,所以平台应尽可能在选择这些时间段开展运营活动,比如建议各大商家的促销上新时间定在这个时间段内,并在这个时间段内设置多种邀请触发机制,如增加弹窗、开展需要邀请好友的互动小游戏、开展好友拼单拼团活动。为了进一步激发用户推荐的动力,最好设置一些有偿型的补贴推荐方式,如成功邀请好友能够获取购物代金券等。
用户激活(Activation)
理解产品的“Aha时刻”,通过多种渠道推动用户到达“Aha时刻”。根据到达“Aha时刻”的路径转化问题,确定关键夹点位置,提供针对性的运营策略。
- 作为购物平台,将用户完成一次购物行为的用户体验作为“Aha”时刻,但本项目整个选购行为的总体转化率仅为2%,其中由浏览转化为加入购物车或收藏行为是整个选购中行为流失量最多(流失90%的行为数)、转化最困难的环节,所以将该阶段确定为整个过程的关键夹点。
- 浏览行为流失严重,说明用户在选择、搜索商品时花费了大量的时间和精力,也可能是用户在确定购买意向的过程中,需要通过大量的商品比对、查看商品详情和评价才能确定购买意向,针对这种情况提出以下建议:
- 优化用户个性化推荐机制,根据用户近期的消费记录、搜索记录和平台现有的商品数据,精准地推荐用户可能喜欢的高质量产品。
- 设置优选商品机制,对平台上每一个商品设置打分机制,结合推荐机制推荐评分较高的商品。
- 优化平台搜索引擎机制,增加关键词的准确率
- 增加同类商品比较的功能,如采用卡片式图片展示,下滑沉浸式体验让用户能够快速地一览无遗地进行商品比对
用户留存(Retention)
让用户养成习惯,对平台产生依赖感,增强用户粘性是提升用户留存率的关键,针对让用户到达“习惯时刻”,提出以下建议:
- 制定高频率个性化的移动推送方案,比如及时推送关注店铺的上新促销活动、推送大型的促销活动等消息
- 定期/不定期开展秒杀、1元抢购和大型促销的活动,并结合第一点及时推送提醒用户
- 实行积分制,如可以根据活跃频率、活跃时间、购买次数和购买金额领取一定的积分,积分可以在购买商品时当做现金券使用
- 设置等级会员制,根据购买频率和购买金额满足一定的条件可以成为某一等级的会员,不同等级的会员设置享有不同的优惠程度
用户变现(Revenue)
提高用户的付费成交转化率、复购率及对各大产品类目的购买率
- 从独立用户在各个行为上的人数转化漏斗分析可知,在所有活跃用户中,有68%的用户有购买行为,而在所有购买用户中,有65%的用户有复购行为,即在所有活跃用户中有超过44%的用户在该平台购买次数超过1次,所以淘宝的用户付费成交率相对较高,用户存在着较强的购买意向,所以在本平台上关键还是优化解决第二部分“用户激活”关键位置的转化率问题。
- 在商品种类的购买量分布上,不同种类商品在购买量上存在较大的差异,整体数据分布呈现幂律化分布,其中8%的商品种类贡献超过80%的购买量,而92%的商品种类的累计购买量仅占总购买量的20%,这更多的取决于不同种类商品的消费属性和消费周期。
- 针对复购率高的价值用户,需要进一步加大对其的奖励程度,个性化推荐和推送,保持其高频的购买行为。
用户推荐(Recommend)
如上,淘宝可以利用庞大的用户基础,通过用户之间的互相推荐达到整体增长的良性循环。可采取的推荐方式如下:
- 开启好友拼单拼团活动;
- 补贴推荐,如成功邀请好友可获取购物代金券
- 与大型社交直播平台合作,利用短视频或者直播的方式推荐商品
- 在产品内部实行多种动态的邀请机制增加接触到邀请机会的比例
- 实行以上方案后应跟踪推荐方案的转发率、转化率、K因子等指标来实时监测方案的有效性