天天看點

客戶分群分析

1 客戶分群分析

“PDFMV架構是問題-資料-特征-模型-價值五個英文字母的首字母組合而成,它是以問題為導向,資料為驅動,利用特征和模型從資料中學習到知識,以創造價值的系統化過程。”

客戶分群分析

當我們面對一批客戶時,如何讀懂你的客戶(KYC)?

我們可以做全量分析,整體洞察這些客戶;我們可以做分群分析,物以類聚,人以群分;我們可以做個性分析,每個人都有其特性,實作千人千面。

本文介紹客戶的分群分析,以UCI提供的線上零售資料集為研究對象,采用RFM分析方法,以實作客戶的分群研究和了解。

資料集擷取連結:

http://archive.ics.uci.edu/ml/machine-learning-databases/00352/

1 客戶分群概述

客戶分群是一種根據客戶共同特征将客戶分組或者分群的方法。

客戶分群的價值,幫助你讀懂你的客戶,進而給客戶提供更好地服務和體驗,讓客戶的全生命周期價值(CLV)最大化。

2 RFM分析方法

RFM(Recency,Frequency,Monetary)分析是一種基于客戶行為資料做分群的方法。RFM的含義,說明如下。

  • Recency(R):誰最近購買了?與最近一次購買的間隔天數。
  • Frequency(F):誰頻繁購買?表示最近一段時間購買的數量(例如:高頻或者低頻)。
  • Monetary(M):誰購買金額高?表示最近一段時間購買的所花費的金錢數。

如果RFM的三個變量,每個變量分成兩組,總共會有8種分群。如下圖所示。

客戶分群分析

圖1 8種客戶分群情況

3 客戶分群(Python語言)

客戶分群,Python語言參考代碼,建議使用jupyter notebook測試。

# 導入 Python庫
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt

import warnings
warnings.filterwarnings('ignore')

# 加載資料集
data = pd.read_excel('./datasets/Online_Retail.xlsx')

# 資料準備工作
data = data[pd.notnull(data['CustomerID'])]
filtered_data = data[['Country','CustomerID']].drop_duplicates() # 删除重複記錄

# 對英國的客戶做分群分析
uk_data = data[data.Country=='United Kingdom']

# 描述性統計分析
print(uk_data.describe().T)

# 資料清洗
uk_data = uk_data[(uk_data['Quantity']>0)]

# 選擇需要的列
uk_data=uk_data[['CustomerID','InvoiceDate','InvoiceNo','Quantity','UnitPrice']]

# 變量類型轉換
uk_data['InvoiceDate'] = pd.to_datetime(uk_data['InvoiceDate'])

# 設定觀測時間點
PRESENT = dt.datetime(2011,12,10)

# RFM分析
rfm = uk_data.groupby('CustomerID').agg({'InvoiceDate': lambda date: (PRESENT - date.max()).days,
                                        'InvoiceNo': lambda num: len(num),
                                        'TotalPrice': lambda price: price.sum()})

# 列重命名
rfm.columns = ['monetary','frequency','recency']

# 變量類型轉換
rfm['recency'] = rfm['recency'].astype(int)

# 變量分組
rfm['r_quartile'] = pd.qcut(rfm['recency'], 2, ['1','2'])
rfm['f_quartile'] = pd.qcut(rfm['frequency'], 2, ['2','1'])
rfm['m_quartile'] = pd.qcut(rfm['monetary'], 2, ['2','1'])

# RFM評分
rfm['RFM_Score'] = rfm.r_quartile.astype(str)+ rfm.f_quartile.astype(str) + rfm.m_quartile.astype(str)
print(rfm.head())

# 客戶分群的分布情況
rfm.reset_index(inplace=True)
rfm['RFM_Score'].value_counts()

# 客戶分群的可視化分析
rfm['RFM_Score'].value_counts().plot(kind='bar')           

複制

RFM分析的結果

客戶分群分析

RFM_Score的分布情況和可視化

客戶分群分析
客戶分群分析

RFM_Score取值"111?imageView2/2/w/1620",表示重要價值客戶。其它的取值,你可以參照圖1了解。