用幾行Python和消費數據做客戶細分

細分客戶群是向客戶提供個性化體驗的關鍵。它可以提供關於客戶行為、習慣與偏好的相關信息,幫助企業提供量身定製的營銷活動從而改善客戶體驗。

在業界人們往往把他吹噓成提高收入的萬能藥,但實際上這個操作並不複雜,本文就將帶你用簡單的代碼實現這一項目。

用幾行Python和消費數據做客戶細分

客戶細分

我們需要創建什麼?

通過使用消費交易數據,我們將會通過創建一個2 x 2的有價值屬性的矩陣來得到4個客戶群。每一個客戶群將與其他群體有兩大區別,即當前客戶價值和潛在客戶價值。

我們將使用什麼技術?

我們將使用RFM模型從消費交易數據中創建所需變量。RFM模型代表:

• 最近消費(Recency):他們最近一次消費是什麼時候?

• 消費頻率(Frequency):他們多久消費一次、一次消費多久?

• 消費金額(Monetary):他們消費了多少?

該模型通常被用於在三個屬性交叉處尋找高價值客戶。但在本例中,我們將僅適用R(最近消費)與M(消費金額)來創建二維矩陣。

用幾行Python和消費數據做客戶細分

RFM模型

我們使用什麼數據?

我們將使用Tableau提供的消費數據樣本——它也被稱為“Global Superstore”。它通常被用於預測與時間序列分析。該數據集包含超過1500位不同客戶4年的消費數據。既然我們做的是行為細分而非人口細分,我們將通過僅選擇B2C領域的消費者以及美國區域的消費數據來去除潛在的人口偏差。

我們採取什麼方法?

第0步:導入、篩選、清理、合併消費者層級數據。

第1步:為每一位消費者創建RFM變量。

第2步:為實現自動細分,我們將使用R與M變量的80%分位數;我們其實還可以用k均值聚類(K-mean Clustering)或者利用商業背景知識來進行群體區分——比如,全球超市企業用戶將活躍客戶定義為最近一次訂單在100天內的客戶。

第3步:計算RM分數,並對客戶進行排序。

第4步:可視化價值矩陣,並對關鍵指標進行進一步分析。


Python實現:

第0步:導入、篩選、清理、合併消費者層級數據。

import matplotlib as plt

import numpy as np

%matplotlib inline

import warnings

warnings.filterwarnings('ignore')

import pandas as pd

url = 'https://github.com/tristanga/Data-Analysis/raw/master/Global%20Superstore.xls'

df = pd.read_excel(url)

df = df[(df.Segment == 'Consumer') & (df.Country == 'United States')]

df.head()

第1步:為每一位消費者創建RFM變量。

df_RFM = df.groupby('Customer ID').agg({'Order Date': lambda y: (df['Order Date'].max().date() - y.max().date()).days,

'Order ID': lambda y: len(y.unique()),

'Sales': lambda y: round(y.sum(),2)})

df_RFM.columns = ['Recency', 'Frequency', 'Monetary']

df_RFM = df_RFM.sort_values('Monetary', ascending=False)

df_RFM.head()

用幾行Python和消費數據做客戶細分

第2步:使用R與M變量的80%分位數實現自動細分。

# We will use the 80% quantile for each feature

quantiles = df_RFM.quantile(q=[0.8])

print(quantiles)

df_RFM['R']=np.where(df_RFM['Recency']<=int(quantiles.Recency.values), 2, 1)

df_RFM['F']=np.where(df_RFM['Frequency']>=int(quantiles.Frequency.values), 2, 1)

df_RFM['M']=np.where(df_RFM['Monetary']>=int(quantiles.Monetary.values), 2, 1)

df_RFM.head()

用幾行Python和消費數據做客戶細分

第3步:計算RM分數,並對客戶進行排序。

# To do the 2 x 2 matrix we will only use Recency & Monetary

df_RFM['RMScore'] = df_RFM.M.map(str)+df_RFM.R.map(str)

df_RFM = df_RFM.reset_index()

df_RFM_SUM = df_RFM.groupby('RMScore').agg({'Customer ID': lambda y: len(y.unique()),

'Frequency': lambda y: round(y.mean(),0),

'Recency': lambda y: round(y.mean(),0),

'R': lambda y: round(y.mean(),0),

'M': lambda y: round(y.mean(),0),

'Monetary': lambda y: round(y.mean(),0)})

df_RFM_SUM = df_RFM_SUM.sort_values('RMScore', ascending=False)

df_RFM_SUM.head()

用幾行Python和消費數據做客戶細分

第4步:可視化價值矩陣,並對關鍵指標進行進一步分析。

# 1) Average Monetary Matrix

df_RFM_M = df_RFM_SUM.pivot(index='M', columns='R', values='Monetary')

df_RFM_M= df_RFM_M.reset_index().sort_values(['M'], ascending = False).set_index(['M'])

df_RFM_M

# 2) Number of Customer Matrix

df_RFM_C = df_RFM_SUM.pivot(index='M', columns='R', values='Customer ID')

df_RFM_C= df_RFM_C.reset_index().sort_values(['M'], ascending = False).set_index(['M'])

df_RFM_C

# 3) Recency Matrix

用幾行Python和消費數據做客戶細分

用幾行Python和消費數據做客戶細分

最終矩陣(左上:流失客戶;右上:明星客戶;左下:次要客戶;右下:新客戶)




一些簡單的銷售與營銷策略的啟發性實例

“流失客戶”分類中的客戶人數不是很多,並且從他們身上得到的的平均收入高於“明星客戶”分類。既然人數不多,從客戶層面與業務部門合作對這些客戶進行分析研究並制定一個留住他們的策略應該不難:給他們打電話或者直接見面,說不定就可以把他們挪到“明星客戶”分類(例如,高參與度客戶)。

“次要客戶”分類的平均最近消費時間非常久遠(超過1年,而參與度較高的客戶平均來說該數據只有60至70天)。發起一些發放優惠券一類的營銷活動可能能夠帶來新的消費,並幫助把該類客戶挪至“新客戶”分類(例如,高參與度客戶)。

用幾行Python和消費數據做客戶細分

簡單策略實例(上:打電話;下:電郵營銷)

在Github上可以找到本Jupyter Notebook

https://github.com/tristanga/Data-Analysis/blob/master/Notebooks/Automatic Customer Segmentation with RFM %28Python%29.ipynb

成都加米穀大數據培訓機構,小班教學面授,大數據開發、數據分析與挖掘零基礎班報名進行中...


分享到:


相關文章: