1. 數據說明
2. 導入數據
SELECT * FROM userbehavior;
3. 數據處理
- 所有字段都有用,不需要選擇子集等操作
3.1 刪除重復值
SELECT * FROM userbehavior GROUP BY User_ID,Item_ID,Category_ID,Behavior,Time_info HAVING COUNT(*)>1;
- 沒有重復值
3.2 缺失值處理
SELECT COUNT(User_ID),COUNT(Item_ID),COUNT(Category_ID),COUNT(Behavior),COUNT(Time_info) FROM userbehavior;
- 沒有缺失值
3.3 分列處理
ALTER TABLE userbehavior ADD COLUMN Date_Time TIMESTAMP(0) NULL; UPDATE userbehavior SET Date_time = FROM_UNIXTIME(`Time_info`);
ALTER TABLE userbehavior ADD COLUMN Date char(10) NULL; UPDATE userbehavior SET Date = FROM_UNIXTIME(`Timestamp`,'%y-%m-%d');
ALTER TABLE userbehavior ADD COLUMN Time char(10) NULL; UPDATE userbehavior SET Time = SUBSTRING(Date_time FROM 12 FOR 8);
3.4 異常值處理
SELECT MAX(Date),MIN(Date) FROM userbehavior;
DELETE FROM userbehavior WHERE Date >'17-12-03' OR Date <'17-11-25';
- 有44行數據被刪除
4. 數據分析
- 分析方法
4.1 數據總覽
(1)數據整體情況
SELECT COUNT(DISTINCT User_ID) AS 用戶數, COUNT(DISTINCT Item_ID) AS 商品總數, COUNT(DISTINCT Category_ID) AS 商品種類數, COUNT(Behavior) AS 行為總數 FROM userbehavior;
(2)用戶行為整體情況
CREATE VIEW 用戶行為數據 AS SELECT User_ID,COUNT(Behavior) AS 用戶行為總數, SUM(IF(Behavior='pv',1,0)) AS 點擊數, SUM(IF(Behavior='fav',1,0)) AS 收藏數, SUM(IF(Behavior='cart',1,0)) AS 加購數, SUM(IF(Behavior='buy',1,0)) AS 購買數 FROM userbehavior GROUP BY User_ID ORDER BY 用戶行為總數 DESC;
4.2 用戶生命周期分析
(1)用戶獲取情況
- 通過查詢日新增用戶數分析用戶的獲取情況
CREATE VIEW 分組 AS SELECT User_ID,MIN(Date) AS fd FROM userbehavior GROUP BY User_ID; SELECT fd,COUNT(User_ID) FROM 分組 GROUP BY fd;
- 11.25 日用戶新增數量最多,推測有新的促銷活動吸引了新用戶
- 整體用戶增加數都處於較低的狀態,推測目前的推廣渠道效果一般,應該制定更加有效的策略
(2)用戶活躍情況
- 通過計算UV、PV等指標和日變化趨勢查看用戶的活躍情況
① 總體獨立訪客數UV、點擊數PV、人均瀏覽次數、成交量
SELECT COUNT(DISTINCT User_ID) AS 獨立訪客數, SUM(IF(Behavior='pv',1,0)) AS 點擊數, SUM(IF(Behavior='pv',1,0))/COUNT(DISTINCT User_ID) AS 人均瀏覽次數, SUM(IF(Behavior='buy',1,0)) AS 成交量 FROM userbehavior;
② 日活躍情況
SELECT Date,COUNT(DISTINCT User_ID) AS 日獨立訪客數, SUM(IF(Behavior='pv',1,0)) AS 日點擊數, SUM(IF(Behavior='pv',1,0))/COUNT(DISTINCT User_ID) AS 日人均瀏覽次數, SUM(IF(Behavior='buy',1,0)) AS 日成交量 FROM userbehavior GROUP BY Date;
- 日獨立訪客數和日點擊數的增長趨勢基本相同,在11.27和11.30號有下降的趨勢
- 日成交量在11.27和11.30號呈現增長的趨勢,推測用戶在此期間直接購買商品的行為增加
- 日人均瀏覽趨勢在12.01號達到峰值,可能為雙12或其他活動宣傳導致用戶瀏覽量急速增加
(3)用戶留存情況
① 用戶次日、3日、5日、7日留存人數
- 第一天(17-11-25)活躍人數
CREATE TABLE retention AS SELECT COUNT(DISTINCT User_ID) AS 第一天活躍人數 FROM userbehavior WHERE Date = '17-11-25';
- 次日留存人數
ALTER TABLE retention ADD COLUMN 第二天留存人數 INT; UPDATE retention SET 第二天留存人數 = (SELECT COUNT(DISTINCT User_ID) FROM userbehavior WHERE Date = '17-11-26' AND User_ID IN (SELECT DISTINCT User_ID FROM userbehavior WHERE Date = '17-11-25'));
- 最終留存人數計算結果
② 留存率
SELECT CONCAT(ROUND(100*第二天留存人數/第一天活躍人數,2),'%') AS 次日留存率, CONCAT(ROUND(100*第三天留存人數/第一天活躍人數,2),'%') AS 第3日留存率, CONCAT(ROUND(100*第五天留存人數/第一天活躍人數,2),'%') AS 第5日留存率, CONCAT(ROUND(100*第七天留存人數/第一天活躍人數,2),'%') AS 第7日留存率 FROM retention;
- 用戶在7日之后還保持75.97%的留存率,處於比較高的狀態
SELECT User_ID FROM 用戶行為數據 WHERE 用戶行為總數=1;
(4)用戶購買情況
① 商品、購買數量及次數
SELECT COUNT(DISTINCT Item_ID) AS 商品數 FROM userbehavior;
SELECT COUNT(DISTINCT Item_ID) AS 購買商品數 FROM userbehavior WHERE Behavior = "buy";
SELECT a.購買次數,COUNT(a.Item_ID) AS 商品數 FROM (SELECT Item_ID,COUNT(User_ID) AS 購買次數 FROM userbehavior WHERE Behavior="buy" GROUP BY Item_ID) AS a GROUP BY 購買次數 ORDER BY 購買次數 DESC;
② 復購率
SELECT SUM(IF(購買數 > 1,1,0)) AS 復購次數, SUM(IF(購買數 > 0,1,0)) AS 購買次數, CONCAT(ROUND((SUM(IF(購買數 > 1,1,0)) * 100/ SUM(IF(購買數 > 0,1,0))),2),'%') AS 復購率 FROM 用戶行為數據;
4.3 用戶行為路徑分析
(1)行為轉化漏斗(點擊行為到其他行為的轉化率分別為多少)
SELECT SUM(IF(Behavior='pv',1,0)) AS 點擊, SUM(IF(Behavior='fav',1,0)) AS 收藏, SUM(IF(Behavior='cart',1,0)) AS 加購, SUM(IF(Behavior='buy',1,0)) AS 購買 FROM userbehavior;
(2)用戶轉化漏斗
SELECT SUM(IF(點擊數>0,1,0)) AS 點擊用戶數, SUM(IF(收藏數>0,1,0)) AS 收藏用戶數, SUM(IF(加購數>0,1,0)) AS 加購用戶數, SUM(IF(購買數>0,1,0)) AS 購買用戶數 FROM 用戶行為數據;
(3)四種不同行為路徑
- 購買行為可以由大致四種導致:點擊+購買、點擊+加購+購買、點擊+收藏+購買、點擊+收藏加購+購買
- 點擊用戶數為980
① 點擊→購買
SELECT SUM(IF(購買數>0,1,0)) AS 購買用戶數1 FROM 用戶行為數據 WHERE 收藏數=0 AND 加購數=0;
② 點擊→加購→購買
SELECT SUM(IF(購買數>0,1,0)) AS 購買用戶數2, SUM(IF(加購數>0,1,0)) AS 加購用戶數2 FROM 用戶行為數據 WHERE 收藏數=0 AND 加購數<>0;
③ 點擊→收藏→購買
SELECT SUM(IF(購買數>0,1,0)) AS 購買用戶數2 FROM 用戶行為數據 WHERE 收藏數=0 AND 加購數<>0;
④ 點擊→加購收藏→購買
SELECT SUM(IF(購買數>0,1,0)) AS 購買用戶數4, SUM(IF(收藏數>0,1,0)) AS 收藏用戶數4, SUM(IF(加購數>0,1,0)) AS 加購用戶數4 FROM 用戶行為數據 WHERE 收藏數<>0 AND 加購數<>0;
(4)不同行為路徑的轉化漏斗圖
- 商家可以通過增加此部分用戶所占比例提高銷量
4.4 用戶偏好分析
(1)用戶行為時間偏好分析
① 用戶行為習慣(按天)
CREATE VIEW 用戶行為習慣分布(日) AS SELECT Date,COUNT(Behavior) AS "用戶行為數", SUM(IF(Behavior='pv',1,0)) AS "點擊", SUM(IF(Behavior='fav',1,0)) AS "收藏", SUM(IF(Behavior='cart',1,0)) AS "加購", SUM(IF(Behavior='buy',1,0)) AS "購買" FROM userbehavior GROUP BY Date ORDER BY Date;
② 用戶行為習慣(按時)
CREATE VIEW 用戶行為習慣分布(時) AS SELECT SUBSTRING(Time FROM 1 FOR 2),COUNT(Behavior) AS "用戶行為數", SUM(IF(Behavior='pv',1,0)) AS "點擊", SUM(IF(Behavior='fav',1,0)) AS "收藏", SUM(IF(Behavior='cart',1,0)) AS "加購", SUM(IF(Behavior='buy',1,0)) AS "購買" FROM userbehavior GROUP BY SUBSTRING(Time FROM 1 FOR 2) ORDER BY SUBSTRING(Time FROM 1 FOR 2);
(2)用戶行為偏好Top 20產品分析
SELECT Category_ID,SUM(IF(Behavior="pv",1,0)) AS 點擊數 FROM userbehavior GROUP BY Category_ID ORDER BY 點擊數 DESC LIMIT 20;
① 點擊Top 20產品
② 加購Top 20產品
③ 收藏Top 20產品
④ 購買Top 20產品
- 創建每個行為Top20商品的視圖,計算不同行為的商品重疊情況
CREATE VIEW 點擊 AS SELECT Category_ID,SUM(IF(Behavior="pv",1,0)) AS 點擊數 FROM userbehavior GROUP BY Category_ID ORDER BY 點擊數 DESC LIMIT 20; SELECT COUNT(點擊.Category_ID) FROM 點擊 INNER JOIN 加購 ON 點擊.Category_ID = 加購.Category_ID
4.5 用戶價值分析
(1)RFM模型簡介
- 采用RFM模型進行用戶價值分析
- 由於本數據集不存在金額字段,所以只從RF兩個維度進行分析
- R:最近一次購買時間(采用12.03和最近一次購買的時間間隔作為計算依據)
- F:消費頻次(采用用戶購買次數作為計算依據)
- 一般來說,R和F的值越大,說明用戶的價值越高
(2)R值的計算
- 數據集的時間跨度為2017年的11.25到12.03,共9天
- 定義R值的划分規則:
- 間隔時間 > 7天:1
- 間隔時間 5-7天:2
- 間隔時間 3-4天:3
- 間隔時間 0-2天:4
SELECT User_ID, (CASE WHEN Rtime>7 THEN 1 WHEN Rtime BETWEEN 5 AND 7 THEN 2 WHEN Rtime BETWEEN 3 AND 4 THEN 3 WHEN Rtime BETWEEN 0 AND 2 THEN 4 ELSE NULL END) AS R值 FROM (SELECT User_ID,DATEDIFF('17-12-03',MAX(Date)) AS Rtime FROM userbehavior WHERE Behavior='buy' GROUP BY User_ID) AS 購買時間間隔 ORDER BY R值 DESC;
(3)F值的計算
SELECT User_ID,COUNT(Behavior) AS 購買次數 FROM userbehavior WHERE Behavior='buy' GROUP BY User_ID ORDER BY 購買次數 DESC;
- 可以看出,購買次數最多的為43次
- 定義F值的划分規則
- 購買次數 1-10:1
- 購買次數11-20:2
- 購買次數21-30:3
- 購買次數 >30:4
SELECT User_ID, (CASE WHEN Btime BETWEEN 1 AND 10 THEN 1 WHEN Btime BETWEEN 11 AND 20 THEN 2 WHEN Btime BETWEEN 21 AND 30 THEN 3 WHEN Btime >30 THEN 4 ELSE NULL END) AS F值 FROM (SELECT User_ID,COUNT(Behavior) AS Btime FROM userbehavior WHERE Behavior='buy' GROUP BY User_ID) AS 購買次數 ORDER BY F值 DESC;
(4)用戶划分
- 將用戶按照以下規則進行划分:
F(3-4) | 重要保持用戶 | 重要價值用戶 |
F(1-2) | 重要挽留用戶 | 重要發展用戶 |
R(1-2) | R(3-4) |
- 創建r_value和f_value分別記錄之前計算的R值和F值
- 將R值和F值合並到一起
CREATE VIEW 用戶價值分析 AS SELECT r.User_ID,R值,F值 FROM r_value AS r JOIN f_value AS f ON r.User_ID = f.User_ID
- 計算R值和F值的平均值
SELECT AVG(R值), AVG(F值) FROM 用戶價值分析;
- 查看不同用戶對應的份額
CREATE VIEW 用戶類型 AS SELECT User_ID, (CASE WHEN R值>3.3413 AND F值>1.0298 THEN "重要價值用戶" WHEN R值<3.3413 AND F值>1.0298 THEN "重要保持用戶" WHEN R值>3.3413 AND F值<1.0298 THEN "重要發展用戶" WHEN R值<3.3413 AND F值<1.0298 THEN "重要挽留用戶" END) AS user_type FROM 用戶價值分析
SELECT user_type,COUNT(User_ID) AS 人數 FROM 用戶類型 GROUP BY user_type
(5)用戶價值分析結論
- 重要發展用戶占比最高,這些用戶購買時間間隔較短,但購買次數比較低,重點應該提升消費頻次
- 重要挽留客戶占比第二,購買次數少,購買時間久遠,是潛在客戶,應該做精准化的營銷
- 重要價值客戶占比第三,需要重點關注,屬於忠實買家,應提供定期的VIP服務
- 重要保持用戶占比最少,購買次數多,但最近沒有買,應該采取措施及時召回
5. 總結
- 日新增用戶數不是很多,推廣渠道的效果一般,12.02日的增長明顯,推測可能為活動影響
- 用戶留存率較高,跳失率為0,復購率也較高,用戶的忠誠度較高
- 購買一次的用戶占比最多,說明淘寶的銷售情況並不是依靠爆款產品
- 用戶從點擊到最后的購買有大量的流失情況,建議通過活動或優惠券的方式吸引用戶購買
- 通過加購收藏方式的用戶最終購買的可能性最大,可以通過收藏有禮的方式提高收藏行為
- 用戶多活躍在20時到22時,建議在此時間段內進行推廣,使效果最大化
- 重要價值用戶占比較少,大多數為重要發展和重要挽留客戶,建議針對不同的人群,進行精准化營銷