分享

Data mining Midterm exam: 運用KMeans進行RFM模型分析探討結果

TianZhang
Apr 18, 2019·8 min read
本文中僅討論關於KMeans對於RFM分析結果並探討結果原因
僅作為台中科技大學 Data mining Midterm exam 報告使用
什麼是RFM?
RFM模型是由 喬治·卡利南(George Cullinan)於1961年所提出,他發現客戶資料庫分析中,有三項重要的指標:最近一次消費(Recency)、消費頻率(Frequency)、與消費金額(Monetary),這三項指標的英文字母的分別為R、F、M,所以就稱為「RFM模型」
R(Recency):最近一次消費;意指上一次購買的時間,而理論上上一次消費的顧客時間點越接近越是好顧客,且對提供即時的商品或服務較有幫助。
F(Frequency):消費頻率;意指顧客在某特定的期間內所購買的次數 如果相信品牌及商店忠誠度的話,最常購買的消費者,忠誠度也就最高。
M(Monetary):消費金額;意指在某特定的期間內購買所花費的金額, 可代表顧客對企業的貢獻度及顧客價值。
資料
筆者這邊準備了200筆RFM資料,而此次指探討關於RFM三者互相之影響性之探討,故沒有其他多餘值影響分群,資料檔案之連結可參考此,亦或是最下方的數據產生教學
部份原始資料的具體模樣:
客戶編號乃不影響之範圍,僅作為排序依據
以上資料僅取最近365天消費,一萬元以內且消費頻率超過10次以上作10次計算,以避免天數及計算量過大,運作緩慢
執行前的結果預測
此圖為運用KMeans最理想之結果
圖中將RFM三者依據程度分成5個級距,圖中紅色部分就是企業中所重點的對象顧客,那我們又可依據他們所在的位置分為常見的客群類型,如上圖中中心群部分就是像我們所說的"安定客群"
開始動手實作
以下程式畫面均使用Python 3.6.6版本運行
首先先準備好必要的Library
中間註解部分用意在於測試Print出的row行,讀者不必在意
分割主要是為了後續寫入檔案的便利性
直接寫入原始的df_label在讀寫那邊會報錯,原因可能是程式誤判檔案的維度,故利用Split來切割。
將cluster寫入output做文章後面的資料驗證處理
原資料的視覺化可協助分群後的比較
※plt.subplot後面的 plotNum 指定創建的Axes對象所在的區域
要特別注意上面若沒有做好每一欄的切割,在畫座標的時候可能會發生型態判斷錯誤上的錯誤
Axes3D(fig)後面之參數僅作為參考用,不影響本次操作結果
rect #作為定義圖表的[left, bottom, width, height]
elev azim#輸出視角調整
這邊筆者卡了蠻久的原因在於運用原始的csv格式無法進行KMeans訓練,而在參考Sklearn官網所提供的原始資料庫後就將原資料做了點小處理
因為csv格式大部分都是靠”,”來分割的,而這邊需要每一個row都是用” “來分隔,所以讀者們需要多多注意原始檔案的格式,故筆者用原資料重新劃分出一個類numpy矩陣格式的csv檔用" "來分割。還有要特別注意的是做完新csv後還不能馬上使用,因為這時候訓練的話他一樣會把你當作tuple,所以必須用.values將它數值化。
實作結果與探討
原資料未分群前的效果
深淺變化乃是因資料間距過大落點重複造成
分三群的結果(0)
淺而易見的結果跟我們預料中的完全不同
那我們換個角度來觀察的話會發現
分三群的結果(1)
KMeans似乎直接把消費金額當作是重點來分群了,但筆者這時心裡就不踏實了,筆者稍微找了下資料思考一下,若是更改一下n_cluster的數值或許能夠退而求其次得到以下的成果
筆者預想的成果

但理所當然的夢總是最美的,將cluster分成8筆之後我們得到了以下的結果

分八群的結果
筆者似乎已經無法阻止KMeans拿消費金額來當依據了,但當然的筆者不會輕易放棄任何機會,這時候筆者打算將整筆的原資料搭上KMeans訓練出來的cluster放上weka做分析與原資料丟給weka讓它自己RUN一次做比較。
這邊快速介紹一下餵給WEKA時原資料的設定!
之後要分成三群是因為資料才能正確進行對比

選擇AddCluster進行增加Cluster的設定

點進AddCluster的設定會看到上圖
要不要忽略都是可以的,不影響資料的判斷,但還是提醒大家有這個功能
從SimpleKMeans進入調整Cluster的分群設定
結果圖
亂碼是因為沒有轉成UTF-8格式,一樣不影響結果,但看久其實有點影響視覺畫面XD
那上述所說的是如何自己增加Cluster,那筆者已經透過Python自己將Cluster產生出來所以直接進行結果分析就好
那在來這邊就是讀者期待已久的結果分析
Weka自己分群的結果分析
筆者自己把亂碼刪除後改成中文希望比較不會傷害大家的眼睛XD
筆者自己的分群結果,請忽略客戶編號的排序XD
上面兩張圖中 綠色的部分是指大於平均數,紅色則是指低於平均值的部分
那透過分群後數字化的分析大概可以將Python幫我們分群的關鍵找出來,像是若仔細看看第二張圖,可以發現消費金額的組距差距較大,可以明顯看出這筆分群組要是依照金額來做決定,而依照表中所視可發現第1群為我們企業所需要的優良客群。
而第一張圖Weka的分析較趨於平均,但要注意的"最近消費天數"的顏色應該要進行調換,因為這項數值應該要是越低越好! 故可以發現第一張圖的1群跟2群各有所優缺,但第3群明顯低落許多,為該企業的非優良客群。
結論
從筆者從頭到尾的作完後可以發現運用KMeans來做RFM模型的幾個優缺點
優點

符合人類直覺

可視化簡單易懂
可解釋性高
畢竟當一名分析師看到一大筆消費數據的直觀應該都是先看金額來做判斷,請透過Python的協助進行可視化的表現容易也讓外行人看懂,最後將Cluster的結果分析後可以容易抓出面對該分群的重點為何。
缺點
沒有明確對照目標
要選擇分群的數目,因無法確定分成幾群才是最適合的
cluster 的數據量可能是不均勻的
畢竟是客戶資料,沒辦法像SKlearn官網所提供的資料那樣都有附上target給我們參考,且分群的數量又是我們決定,雖可透過重複測試來找出最佳解,但有可能分群的結果並不是用,而在最後的不解之解,我們假設各個cluster 的先驗概率是一樣的,但有可能cluster A的資料是1000筆,cluster B卻是100筆cluster,在不考慮AB群相似度的情況下有可能造成屬於cluster A的概率大於cluster B。
筆者的牢騷
最後的最後,雖然這篇是筆者我用來對付期中考的武器,但從中也學到了很多,特別感謝自己的2位朋友在我卡在把數據寫進3維座標裡挺身而出來幫我做一些數據上的處理和丟一些無關緊要的文章出來給我XD,而其實Medium中其實已經有挺多人做過RFM的實驗但好像沒有人使用Python來做,故筆者者才打算這麼挑戰,最後~筆者在這預祝各位同我一樣應付期中考生的讀者們好好加油!!

資料參考

常貴客?新客? 讓RFM模型簡簡單單解釋一切!
行銷經理的經驗也可以科學化
資料聚類:分群 / Clustering
Data Mining Using RFM Analysis
Google試算表中的XLMiner Analysis ToolPak
Weka分群結果分析器
KMeans聚類方法進行RFM分析細分客戶
K-means Clustering
三維散點圖scatter介紹
分類:學習

各位日安,我是TianRy,來自雲林,資訊工程系畢業,在2021年03月被野放到台灣社會,資工系讀得很混,所以不敢自稱是資工人,略懂程式設計,平常喜好看美劇打遊戲看迷因,目前致力於Unity製作,繁體中文化Unity筆記,迷因翻譯

評論
下一篇
  • Data Mining Final Exam:四位人選中誰在PTT最受定居外國鄉民歡迎?其中的網路聲量又是誰最高?
  • 更多文章
    載入中... 沒有更多了