KKBox音樂平台用戶購買分析

專案介紹
隨著流量紅利的消失,為了企業的銷售數字,重心轉變放在既有流量、既有客戶的經營上,機器學習可以在MarTech發光發熱。
The News Lens 游舒帆提到:在互聯網流量增速大於數位廣告增速時,透過廣告來獲取新客戶是相對容易的,但隨著流量紅利的消失,要獲取新流量、新客戶(增量)已經不再容易,要穩固企業的銷售數字與經營,就要把重心放到既有流量、既有客戶(存量)的經營上。
因此,如何提高消費者的「回購頻次」和「單次毛利」,從現有的會員基礎中挖掘出更多的新變現模式,企業回購率是一個衡量事業是否健康的重要指標,回購率代表你的客戶會回頭再買你的商品或服務,Martech 成為這一趨勢的解方。
在 Kaggle 機器學習競賽平台上,KKBox Churn Prediction Challenge 讓參賽者預測會員是否會繼續延續會員資格,案例恰與前述吻合,另外此案例包含五個資料表(tables),總資料量接近兩千萬筆資料,其複雜度遠大於一般教案只有一個資料表,在專案老師指導下,是一個很好的結業專案。
資料來源
參考資料: KKBox‘s Churn Prediction Challenge Data Description

資料表資料欄位描述

研究過程
過程1.將歌曲播放數欄位併入到訓練及測試資料集
NUM_25: 播放長度少於25%的歌曲平均數
NUM_50: 播放長度介於25~50%的歌曲平均數
NUM_75: 播放長度介於50~75%的歌曲平均數
NUM_985: 播放長度介於75~98.5%的歌曲平均數
NUM_100: 播放長度大於98.5%的歌曲平均數
Total_secs: 單日播放全部秒數平均數

UNQ_RATIO: 播放歌曲不重複比率
NUM_UNQ/NUM_25 + NUM_50 + NUM_75 + NUM_985 + NUM_100
過程2.將會員資訊欄位併入訓練及測試資料集
CITY: 城市
BD: 年齡
GENDER: 姓別
REGISTERED_VIA: 註冊方式
REGISTRATION_INIT_TIME: 第一次註冊時間
EXPIRATION_DATE: 到期日

過程3.將日期轉為序列數字
EXPIRES_AT_SEQ:會員到期日
PREVIOUS_EXPIRES_AT_SEQ:前一次到期日
TRANSACTION_DATE_SEQ:交易日期
REGISTRATION_INIT_TIME_SEQ:第一次註冊日期

過程4.處理缺失值


過程5.特徵選擇
依據各欄位與is_churn的 correlatio值,挑選絕對值大於0.05的欄位,所以篩選出共 11個欄位

(1) bd
(2) expires_at_seq gap_init_
(3) last_expire,
(4) gender_cat
(5) is_auto_renew
(6)is_cancel
(7)is_churn
(8) payment_method_id
(9) payment_plan_days
(10) plan_list_price
(11)previous_expires_at_seq

過程6.選用XGBClassifier模型
本專案使用XGBoosting全名為eXtreme Gradient Boosting(極限梯度提升)模型,2014年華盛頓大學博士陳天奇開發的軟體。
Boosting 是集成學習(Ensemble learning)的概念,集成多種學習演算法,成為能獲得更好預測表現的演算法概念。起源於 1990年,由沙皮爾(Robert Schapire)提出,將許多的弱分類器,集合在一起,進而成為一個強分類器。
Boosting Process:
當訓練模型完成第一棵決策樹,會算出殘差(預測值與目標值的差異),接著會訓練第二棵決策樹並算出殘差,隨著樹的數目增加,模型的預測值會愈來愈接近目標值。

技術講解
XGBoost 優點

1.平行運算
可以執行多個執行緒,用來訓練模型。
2.高度客製化
開發人員可以自己定義客製化的 optimization objective 與 evaluation criteria。
3.缺失值處理
模型可以處理缺失值,不需要人為處理
4.剪枝
當XGBoost 樹的深度大於 max_depth,會根據設定超參數刪除不必要的節點。
5.原生的交叉驗證 (Built-in Cross-Validation)
XGBoost 逐步(迭代)建立決策樹過程中允許使用交叉驗證,以便於取得最佳的迭代次數。
6.延續已存在的模型 (Continue on Existing Model)
使用者可以從最後一次訓練的結果開始訓練模型。
7.正則化(Regulation)
使用Regulation降低對訓練資料集過擬合問題,標準的 Gradient Boosting Machine 沒有實作類似的正則化。
XGBoosting 參數
XGBoosting 參數可以分為三類
全域性參數(General): 套用於全域性運算
Booster 參數: 套運於單一booster(決策樹/迴歸)迭代運算
學習工作參數(Learning Task): 設定學習類型(如: 迴歸/二元分類/多分類)與度量方式。
XGBoosting 參數 - 全域性參數(General)
booster [default=gbtree]
選擇每一次boosting迭代模型的類別
gbtree: tree-based models
gblinear: linear models
silent [default=0]:
0: 顯示執行訊息1: 不顯示訊息
顯示訊息可能有助於瞭解訓練模型
nthread [預設值為對大的CPU核數]
此參數用於平行運算與作業系統CPU核數
如果要使用全部CPU核數,此參數可以不用設定且xgboost會自動偵測
XGBoosting 參數 - Booster 參數
learning_rate [default=0.3]
藉由降低每次迭代的權重使得訓練模型更為穩定
標準值: 0.01-0.2
min_child_weight[default=1]
定義子節點最小樣本數權重總和
用於調控過擬合。較高的值可避免讓特定的樣本被選入一棵樹。
太高的值可能導致欠擬合,可使用交叉驗證來調整。
max_depth[default=6]
決策樹最大深度。用於調控過擬合,較高的值允許模型去學習某些樣本特有的關聯性。
可使用交叉驗證來調整
標準值: 3-10
max_leaf_nodes [default=0.3]
樹的最末端節點數或葉子數,可以用來取代 max_depth。
如果模型使用 binary tree,一個深度為n的樹最多產生2^n葉子數。
如果使用此參數,GBM會忽略 max_depth
gamma[default=0]
當損失函數下降值大於0,才產生新的節點。gamma是定義產生新的節點,最小的損失函數下降值。
此參數可以根據損失函數調整。
max_delta_step [default=0]
這參數限制每棵樹權重改變的最大步長。如果這個參數的值為0,意味著沒有限制。如果大於0,那麽它會讓這個算法更加保守。
一般情況下此參數可以不用設定。
subsample [default=1]
設定每一棵樹隨機選取樣本比例。
較低的設定值可以避免過擬合且會使得模型運算趨於保守,但設定值太小可能會導致欠擬合。
標準設定值: 0.5-1
colsample_bytree [default=1]
設定每一棵樹隨機選取欄位數的比例
標準值: 0.5-1
colsample_bylevel [default=1]
設定每一棵樹的各階層隨機選取欄位數的比例
subsample 與 colsample_bytree 會自動設定此參數,因此可以不用設定。
lambda [default=1]
L2 權重正則化(regulation),可以用於降低過擬合。
alpha [default=0]
L1 權重正則化,若用於很高維度的模型運算,演算法運行會比較快。
scale_post_weight [default=1]
設定值大於0,在訓練集類別樣本數不平均的情況下,此參數有助於快速的收斂。

研究結果
超過0.1的重要特徵為: is_canceled 與 is_auto_renew


參考資料(References)
Jain A. 1 Mar 2016. Complete Guide to Parameter Tuning in XGBoost with codes in Python. [online]. Available from:
[Accessed 10 December 2021].
nttrungmt-wiki. 2008. Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python. [online]. Available from:
[Accessed 9 December 2021]
Shah I. 13 Feb 2020. Introduction to XGBoost in Python. [online]. Available from: https://blog.quantinsti.com/xgboost-python/
[Accessed 9 December 2021]
行銷資料科學. 6 Apr 2020. Boosting、AdaBoost、GBDT、XGBoosting與LightGBM(LGBM). [online]. Available from: https://aitmr1234567890.medium.com/boosting-adaboost-gbdt-xgboosting%E8%88%87lightgbm-lgbm-8ae05255aa56
[Accessed 15 December 2020]
Saad M. 18 Aug 2019. 15 Python DS XGBoosting Screencast 2019 08 17 12:09:49. [online]. Available from:
[Accessed 15 December 2020]
Gupta A. 28 Apr. XGBoost Hyperparameters — Explained. [online]. Available from:
[Accessed 14 December 2021]
專案心得&教學回饋:
專案共有五個資料表,如何整併在一起成為一個資料集,餵入訓練模型,剛開始完全沒有方向
Mike老師細心指導,給予方向,並傳授如何處理缺失值,特徵選擇及將日期轉為數列等技巧,並建議使用XGBClassifer,最後提交至kaggle,logloss 分數從2.7降至0.17。
Mike老師在簡報製作部分,也給許多實際的建議,節省學員在準備簡報時間。
Comments