用户购物行为分析
淘寶用戶行為分析
- (一)項目數據來源
- (二)分析角度
- (三)分析正文
- 提出問題
- 理解數據
- 數據清洗
- (四)模型構建
- 1. 用戶購物情況整體分析
- 2 用戶行為時間維度分析
- 3 商品銷售情況分析
- 4 用戶行為路徑分析
- 5 參照RFM模型,對用戶進行分類找出有價值的用戶
- 6 聚類分析
- (五)結論及建議
(一)項目數據來源
項目數據來源于: https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1。
用戶在網上進行購物時,會產生一系列的數據,這些數據綜合起來既反映了用戶的行為偏好,也反映了商品的受歡迎程度,同時反映了在用戶和商品的交互過程中所產生的問題。
旨在通過此項目來學習電商數據的主要分析方法和分析思路,主要使用的工具為Mysql。
(二)分析角度
首先分為兩個角度:用戶和商品
用戶角度主要從時間維度來分析用戶的各種行為情況以及之間的關系:
商品角度主要銷量維度分析商品的賣點和銷售潛力
(三)分析正文
分析步驟如下:
提出問題- -理解數據- -數據清洗- -構建模型- -分析結論
提出問題
根據之前的維度,有以下幾個分析角度:
? 用戶最活躍的日期及時段
? 用戶對商品有哪些購買偏好
? 用戶行為間的轉化情況
? 用戶分類,哪些是有價值的用戶
? 同一商品復購率和回購率排名
理解數據
本數據集包含了2017年11月25日至2017年12月3日之間,有行為的約一百萬隨機用戶的所有行為(行為包括點擊、購買、加購、喜歡)
用戶行為類型又分為四種:
pv:商品詳情頁pv,等價于點擊
buy:商品購買
cart:商品加入購物車
fav:收藏
數據清洗
包含數據導入(采用Navicat)、缺失值處理、一致化處理、異常值處理(2017.11.25到2017.12.3日內的數據)
根據表中各個字段的含義,查詢缺失值。發現僅時間戳有一行為空,刪掉即可。
為了之后的分析方便,在表中添加字段“datetime”“times”“dates”“hours”“weekday”“week”,分別存放時間戳轉化的日期時間,時間,日期,小時,星期幾,第幾周。表達式為:
4. 異常值處理
因為該數據集為2017年11月25日至2017年12月3日之間產生的用戶行為,因此查詢不在此區間的數據,共1944條,為異常值數據點:
相對于總數據量3835330來說,占全體數據量的0.05%,可認為對總樣本影響很小,可以直接刪去。
(四)模型構建
1. 用戶購物情況整體分析
1.1 總的點擊量查詢,結果為3431905
SELECT count(*) FROM userbehavior WHERE behavior_type = 'pv';1.2 總的購買次數查詢,結果為76707
SELECT count(*) FROM userbehavior WHERE behavior_type = 'buy';1.3 總的加入購物車數查詢,結果為213634
SELECT count(*) FROM userbehavior WHERE behavior_type = 'cart';1.4 總的收藏量查詢,結果為111140
SELECT count(*) FROM userbehavior WHERE behavior_type = 'fav';2 用戶行為時間維度分析
2.1 點擊量時間段分布(每日訪客)查詢
SELECT dates,count(*) as 訪客 FROM userbehavior WHERE behavior_type = 'pv' GROUP BY dates;
查詢日期后發現,12月2日和12月3日為周六周日,訪客增多符合預期。但對比11月25日和11月26日(同樣是周末),雖然訪問量比工作日略有提升,但并不明顯,需要深入挖掘具體原因。
2.2 各個時段訪客量
SELECT hours,count(*) as 訪客 FROM userbehavior WHERE behavior_type = 'pv' GROUP BY hours ORDER BY hours asc;
可以看出,可大致分為4個等級:
2.3 各個時段成交量查詢
SELECT hours,count(*) as 成交量 FROM userbehavior WHERE behavior_type = 'buy' GROUP BY hours ORDER BY hours asc;
與各個時段的訪問量不同,晚上(20:00-23:00)的購買量與白天(09:00-18:00)相比并沒有顯著的提升。認為是晚上下班后休閑時客戶的瀏覽行為相比較于購買行為較白天增多,并且白天有工作購買的需求。
2.4對工作日白天夜間購買量進行查詢
進一步,我們對工作日白天的購買量進行查詢驗證猜想:
由此發現,發現,工作日白天消費較多,占到一半以上,符合之前2.3的推測。
以上分析可以看出:
3 商品銷售情況分析
3.1 商品交易數總量,結果為56726
SELECTcount( DISTINCT item_id ) AS 交易商品數 FROMuserbehavior WHEREbehavior_type = 'buy';3.2 商品每日成交量查詢
SELECTdates,COUNT( behavior_type ) AS 成交量 FROMuserbehavior WHEREbehavior_type = 'buy' GROUP BYdates;
可以看出,2017/11/25-2017/12/2之間的每日成交量變化幅度并不是很大,12/2與12/3兩個周末成交量有小幅度上漲,推測是這段時間處于雙11 與雙12之間,沒有特別大的購物活動,因而變化不明顯。
3.3 商品被購買次數排名查詢(取前20名)
SELECTa.* FROM(SELECTu.item_id,COUNT( u.behavior_type ) AS 被購買次數 FROMuserbehavior AS u WHEREu.behavior_type = 'buy' GROUP BYu.item_id ORDER BY被購買次數 DESC ) AS a LIMIT 20;
可以根據商品被購買次數后續進行商品受歡迎程度對比(同一商品大類下),分析受歡迎商品的共同點。
4 用戶行為路徑分析
4.1 各類用戶行為人數查詢
SELECTbehavior_type,count( behavior_type ) AS 人數 FROMuserbehavior GROUP BYbehavior_type;
4.2 用戶行為路徑分析
因為未知用戶收藏和加入購物車的關系,所以暫定兩者平行,分為
①點擊→收藏→購買
②點擊→加入購物車→購買
③點擊→購買
這三條行為路徑
第一條路經
①收藏轉化率=添加收藏后購買的用戶數/添加收藏的用戶數
點擊用戶數為:37223
收藏用戶數為:14943
收藏后加購用戶數為:3233
收藏轉化率為:3233/14943 = 21.6%
而瀏覽收藏轉化率為:14943/37223 = 40.1%
第二條路經
②購物車轉化率=加入購物車后購買的用戶數/加入購物車的用戶數
點擊用戶數為:37223
添加購物車用戶數為:28122
添加購物車后購買的用戶數為:8503
購物車轉化率:8503/28122 = 30.2%
而瀏覽加購物車轉化率為:28122/37223 = 75.6%
對比以上兩種路徑可以看出,用戶點擊到加入購物車的轉化率很高,達到了75.6%,說明大部分用戶點擊瀏覽后有購買意向,因此選擇加入購物車,但是只有30%的加入購物車商品立即實現了購買,推測產生此現象的原因是:
同時發現,用戶點擊到加入購物車的轉化率(75.6%)遠高于點擊到收藏的轉化率(40.1%),說明用戶有購買意向時更傾向于加入購物車,認為原因是因為購物車方便下單購買,有直接付款的選項,而收藏需要重新進入商品頁面選擇,造成用戶的流失。
5 參照RFM模型,對用戶進行分類找出有價值的用戶
5.1 顧客復購率查詢
a.總的產生購買行為的用戶數查詢,結果為:25400
SELECTCOUNT( DISTINCT user_id ) AS 購買人數 FROMuserbehavior WHEREbehavior_type = 'buy';b.購買兩次以上的用戶數查詢,結果為:16712
SELECTCOUNT( * ) AS 購買人數 FROM( SELECT COUNT( u.user_id ) AS 用戶購買次數 FROM userbehavior AS u WHERE behavior_type = 'buy' GROUP BY u.user_id ) AS userbuy WHEREuserbuy.用戶購買次數 > 1;因此復購率 = 16712/25400*100% = 65.8%
5.2 重復購買次數最多的用戶查詢(前20名)
SELECTuser_id,count( user_id ) AS 購買次數 FROMuserbehavior WHEREbehavior_type = 'buy' GROUP BYuser_id ORDER BY購買次數 DESC LIMIT 20;
這些用戶在9天里消費了至少30次,上至84次,屬于高頻率消費客戶,需要特別標注。
5.3 RFM模型
RFM模型是衡量客戶價值和客戶創利能力的重要工具和手段。在眾多的客戶關系管理(CRM)的分析模式中,RFM模型是被廣泛提到的。該機械模型通過一個客戶的最近交易行為(Recency)、交易頻率(Frequency)以及交易金額(Monetary)3項指標來描述該客戶的價值狀況。
最近一次消費 (Recency):最近一次消費意指上一次購買的時候,它反映與顧客建立長期的關系,讓顧客持續保持往來,并贏得他們的忠誠度的可能性。
消費頻率 (Frequency):消費頻率是顧客在限定的期間內所購買的次數。它直接反映了顧客對商品的忠誠度。
消費金額 (Monetary):指的是一段時間內的消費金額。它反映了顧客的消費能力。(因為此數據不涉及商品金額,因此只對R和F進行分析)
R(最近一次消費)查詢:
因為數據集是從11月25日起始,因此可以把距離11月25日的時間作為R值標準,距離越久,得分越高,最近一次消費時間越近。
F(消費頻率)查詢:
從上文復購率部分可知,購買次數最多的用戶購買次數為84次,與R檔位對應,從1-84劃分為4檔:[1-21],[22-42],[43-63],[64-84]分別對應1,2,3,4分。
| 低 | 低 | 重要挽留以及一般挽留客戶 |
| 低 | 高 | 重要保持以及一般保持客戶 |
| 高 | 低 | 重要發展以及一般發展客戶 |
| 高 | 高 | 重要價值以及一般價值客戶 |
求得R平均值為:2.98
求得F平均值為:1.00
至此,我們就可以對所有的購買用戶進行畫像分類。
順便,為了了解各個類型用戶數量情況,可以對此進行查詢:
| 價值客戶 | 225 |
| 保持客戶 | 17 |
| 發展客戶 | 17154 |
| 挽留客戶 | 8004 |
可以看出,價值客戶與保持客戶較少,僅占比0.95%,因此需要及時針對不同類型客戶做出相應的調整計劃:
- 對于價值客戶,他們是最優質的用戶,需要重點關注并保持,應該提高滿意度,增加留存;
- 對于保持客戶,他們最近有購買,但購買頻率不高,可以通過活動等提高其購買頻率;
- 對于發展客戶,他們雖然最近沒有購買,但以往購買頻率高,可以做觸達,以防止流失;
- 對于挽留客戶,他們最近沒有購買,以往購買頻率也不高,特別容易流失,所以應該贈送優惠券或推送活動信息,喚醒購買意愿。
6 聚類分析
最后,借助python中的sklearn庫對用戶進行行為聚類分析
#導入所需庫 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler#將上文中使用Mysql處理過的數據導出,并導入jupyter notebook df = pd.read_csv("C:/Users/Y/Desktop/淘寶用戶行為/userbehavior1.csv") #實例化Kmeans聚類器 estimator = KMeans(n_clusters=3,tol=0.001,init = 'k-means++')data_behavior = df.groupby(['user_id','behavior_type']).count()['item_id'].unstack().reset_index() data_behavior = data_behavior.fillna(0)#添加時間特征 data_daily = df.groupby(['user_id','times']).count()['item_id'].unstack().reset_index() data_daily = data_daily.fillna(0) estimator.fit(data_daily.iloc[:,1:]) y_daily = estimator.labels_ data_behavior['daily_feature'] = y_daily#添加星期特征 data_week = df.groupby(['user_id','weekday']).count()['item_id'].unstack().reset_index() data_week = data_week.fillna(0) estimator.fit(data_week.iloc[:,1:]) y_week = estimator.labels_ data_behavior['weekday_feature'] = y_week #數據查看 data_behavior.head() #整理數據特征后聚類 estimator1 = KMeans(n_clusters = 6,tol = 0.001,init = 'k-means++') estimator1.fit(data_behavior1.iloc[:,1:]) data_behavior['cluster'] = estimator1.labels_ merge_data = pd.merge(df,data_behavior, on='user_id',how='left') merge_data = merge_data[['user_id','item_id','behavior_type','times','buytimes','pvtimes','carttimes','favtimes','cluster']]ax = sns.countplot(x="cluster", hue="behavior_type", data=merge_data2)
這是6類的用戶分布情況,因點擊量與其他指標數量差距過大,去除點擊量后重試
可以看出,不同類型的用戶之間的購物習慣各不相同,有的喜歡加入購物車,有的喜歡收藏,有的喜歡直接購買。
第一類和第5類人數最多,兩者之間的用戶行為模式也比較相似。
(五)結論及建議
總結
- 上一篇: 可汗学院统计学 task4
- 下一篇: coreldraw插件编写