原來用Python實作行銷RFM model,可以那麼簡單!-【附Python程式碼】

圖1. 利用python實作出RFM model

資料欄位

RFM存在至今已過半百,為何大家仍想要引進呢?

因為RFM只需要基本的銷售資料,就能做出強大的顧客分群,等同於市場區隔(Segmentation),且邏輯清晰明瞭。一般的CRM資料一定有有購買者ID、銷售ID、購買時間、購買金額,這麼少的欄位若要進行機器學習其實誤差值是非常大的,這時候RFM就派上用場了,因此本按例就預設以最少的資料欄位進行分析。

  1. clientId:顧客編號。
  2. orderdate:顧客最後一次來購買的日期
  3. recency(近因):上一次購買與今天相差天數。
  4. gender:性別。人口變數資料,有的話更能細部分析顧客類群。
  5. frequency(頻率):從顧客第一次來開始,到目前共來過幾次。
  6. recency_cate:近因天數。
  7. frequency_cate:頻率天數。
  8. 購買量:該顧客的總購買量。
圖2. 單一顧客購買數據

在開始實作之前,您必須要學會

Python中文顯示

範例資料中含有中文,而Python繪圖並不支援中文字。您可以參考先前文章「解決Python 3 Matplotlib與Seaborn視覺化套件中文顯示問題」,否則若您的資料或圖表中有中文,會出現如圖3情況。當然若要將其資料全部換為英文的話也可輸出,但基於一般在華人區域的CRM資料難免有中文出現,因此建議進行此修改。

圖3. 中文全部為亂碼

FacetGrid繪圖

這是此實作最重要的基礎來源。FacetGrid是Seaborn繪圖套件下的一個繪圖類別,其與一般圖表的差異在於,能夠集合多張圖表於一身,進行多為度的比較,而這正符合三個、甚至多個維度的RFM分析,且配色精美,詳請可見官方文件

圖4
圖5. tips資料集
import matplotlib.pyplot as plt
import seaborn as sns
thetips= sns.load_dataset("tips")
g = sns.FacetGrid(thetips, col="time")
g.map(plt.hist, "tip")

用Python實作RFM

基於以上的基礎,並以FacetGrid的特性,開發出6 X 6的RFM Model。最主要的兩個欄位是recency_cate與frequency_cate,分別控制資料在RFM圖形中的位置,因此只要資料調整到定位,可以簡單利用FacetGrid產出圖片。

recency_label =  ['0-7 day', '8-15 day', '16-22 day', '23-30 day', '31-55 day', '>55 day']frequency_label =  ['1 freq', '2 freq', '3 freq', '4 freq', '5 freq', '>5 freq']g = sns.FacetGrid(purchase_list, # 來源資料表
col="recency_cate", # X資料來源欄位
row="frequency_cate" , # Y資料來源欄位
col_order= recency_label, # X資料順序
row_order= frequency_label[::-1], # Y資料順序
margin_titles=True
)#小圖表部分
g = g.map_dataframe(sns.barplot, # 資料顯示的模式
x= 'gender', # 小圖表X資料來源
y ='購買量', # 小圖表Y資料來源
palette = sns.color_palette("muted")) #畫布色調
g = g.set_axis_labels('光顧天數','購買頻率').add_legend()

 

作者:楊超霆(臺灣行銷研究有限公司 資深資料科學家)

 

更多實戰案例及情境好文推薦

回到頂端