機器學習與Python行銷數據分析
-校內作品
大四時,希望能透過多方面學習,且在目前數據驅動行銷的趨勢下,加強自己觀察數據並加以分析的能力,選修了Python行銷數據分析相關的課程,從資料處理、資料視覺化、爬蟲到資料分析、建模等,在經過了一年的學習,對於如何解讀數據及Python有了基礎的認識。
一、使用RFM模型分析,並將顧客分群進行行銷洞察給予行銷方案
(此將省略前期的資料前置處理,著重在行銷洞察上)
使用Opendata - OnlineRetail.csv (某線上零售商八個月內顧客的購買紀錄)
將原始資料集進行資料前置處理後,儲存的新資料集為-OR_Processed.csv,包含InvoiceNo、InvoiceDate、CustomerID、Total_Amount、InvMonth,共約34萬筆資料。
將新資料集(OR_Processed.csv) 應用 RFM 模型做顧客區隔:
R - 計算最近購買日期(Recency) - 客戶代碼+購買日期 [R_Flag]
F - 計算購買頻率(Frequency) - 客戶代碼 + 發票號碼 [F_Flag]
M - 計算購買金額(Monetary) - 客戶代碼 + 購買金額 [M_Flag]
將RFM合併儲存另一個資料集(OnlineRetail_RFM.csv) 將進行分群,並給予行銷洞察。
接下來將使用K-means演算法對資料進行分群
[Code: 8~27行]
載入資料集後,先使用Elbow法,決定要分為幾群 :
由下圖Elbow graph來看,分成3、4、5群皆可行,
但以不超過5群為原則,此次練習分為5群。
[Code: 30~56行]
使用K-means將客戶分為5群後,匯出RFM圖,並以三角形標出各群重心點 :
行銷洞察與可行的行動方案 :
共分為5群Cluster 0~4 ,各群重心分別約為 :
Cluster 0:[5,2,4]、Cluster 1:[2,2,2]、Cluster 2:[5,2,3]、Cluster 3:[5,2,5]、Cluster 4:[3,2,3]
依照各客群重心的RFM數值,區分客群價值高低 :
Cluster 3 > Cluster 0 > Cluster 2 > Cluster 4 > Cluster 1
以下針對不同客群,制定不同行銷方案 :
- Cluster 3 : 高價值客群,有較高活躍度(R)及較高購買金額(M),屬於新貴客、重點發展客戶。
- Cluster 0 : 中高價值客群,有高活耀度(R)及高購買金額(M),屬於新貴客、重點發展客戶。
上面兩個客群(3&0),可為商家帶來最多的價值,是最近一次消費時間較近、消費金額高,
但頻率不高、忠誠度不高的潛力客戶,所以企業必須嚴格檢視每一次服務體驗,是否讓客戶非常滿意,
或是可以定期寄送專屬獨家優惠,提升此客群消費的頻率,及保持與他們的聯繫。
- Cluster 2 : 中價值客群,有高活躍度(R)並有適度的購買金額(M),屬於新客,一般發展客戶。
此客群距離上次消費時間近(R),但購買頻率(F)及消費金額(M)都偏低,所以要提升消費頻率及金額,
可以推出一些符合此客群的優惠組合(例如:買第二件6折 or 將客戶常會一起購買的產品放在旁邊
(or優惠組合)...),並定期更換組合。
- Cluster 4 : 中低價值客群,有適度的活耀度(R)及購買金額(M),屬於普通客,一般發展客戶。
- Cluster 1 : 低價值客群,活耀度(R)及購買頻率(F)都偏低,屬於一次性消費客人,一般挽留客戶。
上面兩個客群(4&1),對於RFM分數都較低的客群,我認為要調整在此客群上投入的行銷預算,若對此
客群投放廣告及寄送優惠郵件後,過了一段時間,分數還是沒有提升的話,就可以考慮將此客群從行
銷名單中刪除,或減少行銷預算。
總結 :
我覺得此商家的顧客的購物頻率(F)都偏低,顧客生命週期短,可能此商家賣的產品大多是屬於3C產品
或耐用品,所以這個商家會有較多新顧客,因此建議寄送歡迎信的優惠,或是提供產品訊息、新手適用
指南,讓他們更瞭解公司,並同時要加強在會員制度的改善、提供優惠的頻率及產品推陳出新的速度,
強化消費者對公司的忠誠度。另外可以多銷售一些或加強行銷在消耗週期短,購買頻率很高的產品,藉
此提升消費者光顧的意願。
二、機器學習 - 建立分類分析模型,找出重要的預測因⼦,供未來的⾏銷活動參考
載入套件&資料集、資料前置處理
01
資料拆分、訓練&測試資料、建模、預測&評估模型
02
模型優化 (特徵選取 & 超參數調整)
03
04
行銷洞察與
可行的行動
方案
使用Opendata - Bankdata.csv (某銀行行銷的歷史資料集)
資料集共有17個Column :
1.資料前置處理
-
載入必要套件&資料集
-
載入資料集後,檢查是否有遺漏值及重複值,接著開始處理類別資料,使用One-Hot Encoding (.get_dummies),一次將需要處理的資料完成,並使用drop_first=True,去掉每個類別中的第一項,避免過度凝合。
-
準備label資料(y-客戶是否決定要定期存款)。
-
檢查前7項(未進行類別處理的)特徵相關性。
#無發現高共線性
2、資料拆分、訓練 & 測試資料、建模、預測、評估模型
-
將資料以7:3的比例拆分為train/test,
拆分資料後,先使用全部的特徵
並選用RandomForest分類演算法訓練模型,評估模型效能,預測準確度
# 改用test_size=0.3,準確度較高
# 使用全部特徵+RandomForest演算法 的預測準確度:90.61%
3、模型優化 (特徵選取 & 超參數調整)
-
評估特徵重要性值,選出前15名特徵,降低模型複雜度,再次建模比較,並評估模型效能(準確度)
# 挑出特徵重要性前15名+RandomForest的 預測準確度:90.1%
# 準確度雖未提升,但將特徵範圍縮小,降低 複雜度,接著試以調整超參數提升準確度
-
超參數調整,選出最佳參數組合後,調整演算法的參數,再次建模比較,並評估模型效能(準確度)
# 使用特徵重要性值前15名 + 新參數Random Forest 演算法的預測準確度:90.43%
# 準確度提升約 0.33%
-
繪出混淆矩陣,評估模型效能
(yes=1、no=0)
-
precision = 在預測(predictions)為正向(yes)的預測準確率 :
741/741+437=0.63
-
recall = 在實際(true)為正向(yes)的預測準確率 :
741/741+818=0.48
-
f1-score = 「precision」和「recall」的調和平均數 :
2*0.63*0.48/0.63+0.48=0.55
行銷洞察與可行的行動方案 :
- 建立模型前,先觀察資料:
1、客戶是否決定要定期存款(y)的比例 :
可以看到願意定期存款的客戶比例較少,所以如果沒有掌握好可能會定期存款客戶的名單,就對所有客戶進行相同的行銷方案的話,會造成大量的行銷預算的浪費。
2、「前一次行銷活動的結果(poutcome)」與「客戶是否決定要定期存款(y)」的比較 :
-
從左邊的圖可以觀察到,在對前一次行銷活動成功的客戶中,有64.7%的人是有決定要定期存款的;右邊的圖可以觀察到,在對前一次行銷活動失敗的客戶中,只有12.6%的人是有決定要定期存款的。
-
由此圖可以知道「前一次行銷活動的結果(poutcome)」這個特徵,是在判斷未來的行銷活動時,一項很重要的特徵。
- 從建立的預測模型,觀察資料:
1、使用評估特徵重要性值,選出前15名的特徵:
從前15名的特徵可以觀察到,上一次聯繫時所花費的時間、客戶帳戶的結餘、年紀、前一次行銷活動的結果、最後一次聯繫客戶之後經過的天數等…,是影響模型很重要的因素。
-
在推廣行銷活動前,可以先改善與公司有關的因素,例如:應先檢視公司與客戶是否有經常保持聯繫,維持客戶忠誠度,並在每一次的聯絡是否有給客戶留下良好的印象。
-
前一次的行銷對於客戶留下的印象/結果也很重要,公司在每一次的行銷活動前,都要做好完善的規劃,確保有將活動推給正確的客群。
-
參考預測模型的因素,在每一次不同性質的行銷活動,應適當的改善模型,才能做到精準行銷,縮小每一次行銷的範圍,以最適當的預算達到最大的效益。