Big Data & AI Accelerator
Author: Danger Crew
Last update: July 18, 2023

大數據如何分析 Customer Behavior – RFM

面對成千上萬的顧客名單及銷售記錄,分析顧客行為並不容易。透過大數據分析及 Python Programming,我們可以把顧客分類 (Customer Segmentation),從中找出最有價值的顧客,以增加公司銷售額。

Index

Scroll to top

對 Sales & Marketing 而言,分析顧客行為 (“Customer Behavior”) 是不可或缺的工作。每間公司都想透過把顧客分類 (Customer Segmentation),從中找出最有價值的顧客,例如經常到門市購買產品,每單交易也是高消費等,然後投放更多的資源到這些高價值的顧客身上,以增加公司銷售額。不過面對成千上萬的顧客名單及銷售記錄,分析顧客行為並不容易。

好消息是透過大數據分析,數據科學 (Data Science) 及 Python Programming,我們不但可以分辨出高價值的顧客,更可以預測哪些顧客有較高的忠誠度而繼續消費,哪些顧客已經開始漸漸對公司的產品失去興趣。

什麼是顧客流失率

顧客流失率 (Customer Churn Rate) 量度一間公司在指定時間內流失了多少顧客。例如我們說某位顧客已經 churned,代表那位顧客已經不會再到公司消費。了解現時的顧客流失率並採取措施降低它對營銷來說非常重要。在”大數據如何分析 Customer Behavior – RFM”系列的文章中,我們會試範如何運用 Big Data Analysis, Machine Learning 及 Python Programming,配合 Marketing Analysis model,分析顧客行為並預測顧客 churn risk。

Marketing Analysis – RFM Model

Recency, Frequency and Monetary Value (RFM) Model 是其中一個常用的 Marketing Analysis model,以量化顧客的消費行為並進行 Customer Segmentation。 Recency 指顧客最近一次消費是什麼時候 ; Frequency 指顧客消費的頻率 ; Monetary value 指顧客的平均消費金額。我們可以根據這幾項指標為顧客評分並歸類為高價值或低價值,然後分別進行針對性的 marketing campaign。 Optimove 詳細解釋了什麼是 RFM Model。

觀察數據

在這次教學中,我們從 Kaggle 下載了一間公司的銷售數據。首先我們以 Python Library – Pandas 去觀察數據,例如數據包含的資料,數據的數量,數據的日期等:

This image has an empty alt attribute; its file name is Capture-1.jpg

例子中我們看見數據有 Date, Customer_ID 及 Sales_Amount,分別代表銷售日期,顧客身份及銷售金額。而且透過 max(), min(), info() functions,我們得知這是2016年的數據,一共有 131,706 行 records。

Training Set 及 Testing Set

由於稍後我們會運用 machine learning model 去進行預測,所以我們先把 data set 分為 Training set 及 Testing set。 Training set 的 data 我們會用作訓練 machine learning model ; Testing set 的 data 我們會用作驗證 model 的準確性。Google 的課堂進一步講解了什麼是 Training and Test Sets。

This image has an empty alt attribute; its file name is 1_QSXxOderidihfo1itIE7cw.png

例子中我們以 "01-10-2016" 作為 cut-off,日子前的 data 是 Training set,日子後的是 Testing set:

This image has an empty alt attribute; its file name is Capture-2.jpg

計算 Recency

Recency 指顧客最近一次消費是什麼時候。我們首先找出每位顧客的最後一次消費日,然後以 data set 最後一天相減,計算出對上一次的消費日與最後一天相差多少天。我們 “groupby” Customer_ID,找出每位 Customer 的 max() 消費日,即是最後一次的消費日:

This image has an empty alt attribute; its file name is Capture-3.jpg
例子中我們計算出 22625號顧客的 Recency 是 12,代表他/她最後一次消費日應該是在 12天前 (不包括 31-12-2016)。我們翻看 22625號顧客的所有消費記錄,發現是 19-12-2016:
This image has an empty alt attribute; its file name is Capture-5.jpg

計算 Frequency

Frequency 指顧客消費的頻率。首先我們訂立一個時間單位 (例如一個月),然後計算顧客在整段 data period 期間一共消費多少次。我們 “groupby” Customer_ID,以 “M” 作單位去 count() 每位 Customer 在每個月的消費次數。不管 Customer 在同一個月內消費多少次,只要他/她至少消費一次,我們也當作一次。最後以 sum() 相加計算 Customer 一共消費了多少個月:

This image has an empty alt attribute; its file name is Capture-6.jpg

例子中我們計算出 5號顧客的 Frequency 是 4,代表他/她一共消費了4個月。我們翻看 5號顧客的所有消費記錄,發現是分別是 2月,3月,5月及 9月:

This image has an empty alt attribute; its file name is Capture-7.jpg

計算 Monetary Value

Monetary value 指顧客的平均消費金額。我們只需找出顧客在整段 data period 期間的平均消費金額。我們 “groupby” Customer_ID,以 Sales_Amount 的 mean() 找出平均消費金額:

This image has an empty alt attribute; its file name is Capture-8.jpg

例子中我們計算出 1號顧客的 Value 是 8.14,代表他/她的平均消費金額是 $8.14。我們翻看 1號顧客的所有消費記錄,發現這是以下2次消費額的平均:

This image has an empty alt attribute; its file name is Capture-9.jpg

計算 Aging

最後我們額外計算 Aging,即是每位顧客的首次消費日是多少天前。我們找出顧客在整段 data period 期間的首次消費日,然後以 data set 中最後一天相減,計算出首次消費日與最後一天之間相差多少天。我們”groupby” Customer_ID,以 Date 的 min() 找出首次消費日:

This image has an empty alt attribute; its file name is Capture-10.jpg

例子中我們計算出 4號顧客的 age 是 111,代表他/她的首次消費日是在 111天前。我們翻看 4號顧客的所有消費記錄,發現首次消費日是 11-9-2016:

This image has an empty alt attribute; its file name is Capture-11.jpg

總結

在 “大數據如何分析 Customer Behavior-RFM” 系列的首篇文章中,我們試範了如何運用 Python Programming 從 Big Data 中建立一些新的 customer behavior features 如 recency, frequency, monetary value 及 aging 等。下一篇文章我們會繼續以這些 features 配合 machine learning 進行 training 及 prediction。

如果你不想獨自走過以上每個部份,歡迎你報讀 DANGER 為你加入大數據行業工作而設的 Data Science & Engineering Bootcamp,在行內導師的指導下與其他學生一起進行具職場水準的訓練,節省學習時間同時額外汲取行業經驗,比其他人走快一步。