概念+实战讲解,一文带你了解RFM模型【kaggle项目实战分享】数据分析
大家早上好,本人姓吳,如果覺得文章寫得還行的話也可以叫我吳老師。歡迎大家跟我一起走進數據分析的世界,一起學習!
感興趣的朋友可以關注我或者我的數據分析專欄,里面有許多優質的文章跟大家分享哦。
(有需要完整代碼和數據的可以評論留下你的郵箱,我會盡快發送給你!)
今日份學習分享,請查收!
目錄
- 必須要看的前言
- 一、什么是RFM模型?
- R值:Recency, 最近一次消費
- F值:Frequency, 消費頻率
- M值:Monetary, 消費金額
- 二、實踐應用有哪些?
- 基于RFM模型進行客戶細分
- 通過RFM模型評分后輸出目標用戶
- 基于RFM的常用策略
- 補充
- 三、kaggle項目實戰講解
- 1 數據探索與數據清洗
- 1.1 數據探索
- 1.2 缺失值統計
- 1.3 日期格式的轉換
- 1.4 去重
- 1.5 異常值處理
- 2 用戶分類
- 3 分類結果
- 4 結論與建議
- 結束語
必須要看的前言
RFM模型是衡量客戶價值和客戶創利能力的重要工具和手段。在眾多的客戶關系管理(CRM)的分析模式中,RFM模型是被廣泛提到的。
所以RFM模型是數據分析師必須掌握的知識點,而本篇文章詳細介紹RFM模型的同時,還附帶了kaggle項目實戰,收藏本篇文章,你還怕搞不懂RFM模型,不懂怎么對用戶進行分類嗎?
一、什么是RFM模型?
RFM模型通過一個客戶的近期購買行為、購買的總體頻率以及花了多少錢3項指標來描述該客戶的價值狀況。
R值:Recency, 最近一次消費
- 最近一次消費指的是上一次購買距離當前的時間。比方說最近一次買車什么時候,上一次買唱片是幾時。
理論上,上一次消費時間越近的顧客應該是比較好的顧客,對提供即時的商品或是服務也最有可能會有反應。營銷人員若想業績有所成長,只能靠偷取競爭對手的市場占有率,而如果要密切地注意消費者的購買行為,那么最近的一次消費就是營銷人員第一個要利用的工具。
功能:R值的功能不僅在于提供的促銷信息而已,營銷人員的消費報告可以監督事業的健全度。優秀的營銷人員會定期查看消費分析,以掌握趨勢。月報告如果顯示上一次購買很近的客戶,(消費為1個月)人數如增加,則表示該公司是個穩健成長的公司;反之,如上一次消費為一個月的客戶越來越少,則是該公司邁向不健全之路的征兆。
F值:Frequency, 消費頻率
- 消費頻率是顧客在限定的期間內所購買的次數。我們可以說最常購買的顧客,往往也是滿意度最高的顧客。增加顧客購買的次數意味著從競爭對手處偷取市場占有率,由別人的手中賺取營業額。
基于這個指標,我們可以把客戶分為五等分:如購買一次的客戶為新客戶,購買兩次的客戶為潛力客戶,購買三次的客戶為老客戶,購買四次的客戶為成熟客戶,購買五次及以上則為忠實客戶。運營人員的目標是要讓消費者不斷升級。
注意:不同類型的商品的消費頻率往往有著較大的差距,如婚禮類產品和零食類產品,前者往往也就購買一次差不多得了(多了社會就亂套了哈哈),后者屬于易耗品,消耗評論搞,相對容易產生重復購買,所以說F值不適合用作跨類目比較。
M值:Monetary, 消費金額
- 消費金額同消費頻率一樣,有限定的時間范圍,指的是一段時間(通常是1年)內的消費金額。它同時也能驗證帕累托法則(俗稱二八法則),即80%的收入來自于20%的客戶。
M值是RFM模型中相對于R值和F值最難使用,但最具有價值的指標。同一品牌美妝類,價格浮動范圍基本在某個特定消費群的可接受范圍內,加上單一品類購買頻次不高,所以對于一般店鋪而言,M值對客戶細分的作用相對較弱。
二、實踐應用有哪些?
基于RFM模型進行客戶細分
CRM實操時可以選擇RFM模型中的1-3個指標進行客戶細分,如下表所示。切記細分指標需要在自己可操控的合理范圍內,并非越多越好,一旦用戶細分群組過多,一來會給自己的營銷方案執行帶來較大的難度,而來可能會遺漏用戶群或者對同個用戶造成多次打擾。
如何選擇最終指標有兩個參考標準:店鋪的客戶基數,店鋪的商品和客戶結構。
店鋪的客戶基數:在店鋪自身客戶數量不大的情況下,選擇1-2個維度進行細分即可;反之可以選擇2-3個指標進行用戶用類。
店鋪的商品和客戶結構:如果在店鋪的商品層次比較單一,客單價差異幅度不大的情況下,購買頻次(F值)和消費金額(M值)高度相關的情況下,可以只選擇比較容易操作的購買頻次(F值)代替消費金額(M值)。對于剛剛開店還沒形成客戶粘性的店鋪,則可以放棄購買頻次(F值),直接用最后一次消費(R值)或者消費金額(M值)。
通過RFM模型評分后輸出目標用戶
RFM模型評分主要有三個部分:
確定RFM三個指標的分段和每個分段的分值;
計算每個客戶RFM三個指標的得分;
計算每個客戶的總得分,并且根據總得分篩選出優質的客戶
還是以上圖為例。
此時我們將每個用戶在每個指標下所得的分數相加,就可得到最終的分數。
但這里需要注意的是,對于每個指標下所對應的每個分值不應像上圖一樣,應根據不同的店鋪進行進一步的賦值(聽其他網友說可以用AHP層次分析法,我暫時還沒有去了解)。
并且,相加時最好先給每個指標設一個權重,比方說最終的計算公式可以是:score = 0.5R+0.3F+0.2M。
具體的權重設置也可以參考上文提到的兩個參考標準。
基于RFM的常用策略
RFM非常適用于提供多種商品的企業,這些商品單價相對不高,或者相互間有互補性,具有多次重復購買的必要,這些企業可能提供如下商品:日用消費品、服裝、小家電等;RFM也適用于這類企業,它們既提供高價值耐用商品、同時又提供配套的零部件或維修服務,如下:精密機床、成套生產設備、打印機等;RFM對于商品批發、原材料貿易、以及一些服務業(如旅行、保險、運輸、快遞、娛樂等)的企業也很適用。
RFM可以用來提高客戶的交易次數。業界常用的DM(直接郵寄),常常一次寄發成千上萬封郵購清單,其實這是很浪費錢的。根據統計(以一般郵購日用品而言),如果將所有R(Recency)的客戶分為五級,最好的第五級回函率是第四級的三倍,因為這些客戶剛完成交易不久,所以會更注意同一公司的產品信息。如果用M(Monetary)來把客戶分為五級,最好與次好的平均回復率,幾乎沒有顯著差異。
有些人會用客戶絕對貢獻金額來分析客戶是否流失,但是絕對金額有時會曲解客戶行為。因為每個商品價格可能不同,對不同產品的促銷有不同的折扣,所以采用相對的分級(例如R、F、M都各分為五級)來比較消費者在級別區間的變動,則更可以顯現出相對行為。企業用R、F的變化,可以推測客戶消費的異動狀況,根據客戶流失的可能性,列出客戶,再從M(消費金額)的角度來分析,就可以把重點放在貢獻度高且流失機會也高的客戶上,重點拜訪或聯系,以最有效的方式挽回更多的商機。
補充
以上三個指標會將維度細分出4份,這樣就能夠細分出4x4x4=64類用戶,再根據每類用戶精準營銷……顯然64類用戶已超出普通人腦的計算范疇了,更別說針對64類用戶量體定制營銷策略。實際運用上,我們只需要把每個維度做一次兩分即可,這樣在3個維度上我們依然得到了8組用戶。
(編號次序RFM,1代表高,0代表低)
重要價值客戶(111):最近消費時間近、消費頻次和消費金額都很高,必須是VIP啊!
重要保持客戶(011):最近消費時間較遠,但消費頻次和金額都很高,說明這是個一段時間沒來的忠誠客戶,我們需要主動和他保持聯系。
重要發展客戶(101):最近消費時間較近、消費金額高,但頻次不高,忠誠度不高,很有潛力的用戶,必須重點發展。
重要挽留客戶(001):最近消費時間較遠、消費頻次不高,但消費金額高的用戶,可能是將要流失或者已經要流失的用戶,應當給予挽留措施。
三、kaggle項目實戰講解
項目來源:
https://www.kaggle.com/carrie1/ecommerce-data
項目簡介:
這是一個跨國數據集,其中包含在英國注冊的商店于2010年12月1日至2011年12月9日之間發生的所有在線零售交易。該公司主要銷售獨特的全天候禮品,許多客戶對象是批發商。
本次項目的主要目的是利用RFM模型進行用戶分類。
PS: 本次項目是在jupyter上運行的。
導入模塊
import pandas as pd import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 設置漢字字體,優先使用黑體加載數據
df = pd.read_csv('data.csv',encoding = 'ISO-8859-1', dtype = {'CustomerID':str})接下來正式開始進行分析啦!
1 數據探索與數據清洗
1.1 數據探索
df.shape df
數據包含541910行,8個字段,字段內容為:
InvoiceNo: 訂單編號,每筆交易有6個整數,退貨訂單編號開頭有字母’C’。
StockCode: 產品編號,由5個整數組成。
Description: 產品描述。
Quantity: 產品數量,有負號的表示退貨。
InvoiceDate: 訂單具體時間。
UnitPrice: 單價(英鎊),單位產品的價格。
CustomerID:客戶編號,每個客戶編號由5位數字組成。
Country: 國家的名稱,每個客戶所在國家/地區的名稱。
我們不難發現,我們需要進行日期格式的轉換,以及常規的缺失值統計、去重以及異常值的檢測與處理。
1.2 缺失值統計
# 先統計缺失率 df.apply(lambda x :sum(x.isnull())/len(x),axis=0) # Description是用于產品描述,與后續分析無關,刪去。 df.drop(['Description'],axis=1,inplace=True) df.head() # 這里的CustomerID對于后續分析僅起到標識作用,不做刪除,可以用unknown填充。 df['CustomerID'] = df['CustomerID'].astype('str') df.info() df['CustomerID'] = df['CustomerID'].fillna('unknown')1.3 日期格式的轉換
df['date'] = [x.split(' ')[0] for x in df['InvoiceDate']] df['date'] = pd.to_datetime(df['date']) df['month'] = df['date'].astype('datetime64[M]') df[['date', 'month']]1.4 去重
df = df.drop_duplicates() df.shape1.5 異常值處理
在這里,我們把退貨訂單看做異常數據(即數量為負數或者貨單價為負數的數據)。
df[(df['Quantity']<0) | (df['UnitPrice']<0)] # 除去異常數據 df = df[(df['Quantity']>0) & (df['UnitPrice']>0)] df[(df['Quantity']<0) | (df['UnitPrice']<0)]2 用戶分類
# 首先計算R值 R_value = df.groupby('CustomerID')['date'].max() R_value = (df['date'].max() - R_value).dt.days # 這里將2011-12-9作為當前日期進行計算 R_value # 將2010-12-1至2011-12-9視為F值的區間段,計算每個客戶所下單的數量 F_value = df.groupby('CustomerID')['InvoiceNo'].nunique() F_value # 首先計算每個訂單的消費金額 df['amount'] = df['Quantity'] * df['UnitPrice'] # 再計算M值 M_value = df.groupby('CustomerID')['InvoiceNo'].nunique() M_value = df.groupby('CustomerID')['amount'].sum() M_value R_value.describe() R_value.hist(bins = 30) M_value.describe() M_value.hist(bins = 30) M_value.plot.box()
可見非常不均。
一樣是非常的不均。
先是R值:
R_score = pd.cut(R_value,R_bins,labels=[5,4,3,2,1],right=False) R_score
接著是F值:
最后是M值:
生成新的數據框看一看:
rfm = pd.concat([R_score,F_score,M_score],axis=1) rfm.rename(columns={'date':'R_score','InvoiceNo':'F_score','amount':'M_score'},inplace=True) rfm rfm.info()
改下數據格式:
按平均值在每個指標下劃分價值高低:
3 分類結果
rfm['用戶等級'].value_counts() rfm['用戶等級'].hist(figsize=(12,9)) # 分類占比 rfm['用戶等級'].value_counts() / rfm['用戶等級'].value_counts().sum() rfm['用戶等級'].value_counts().plot(kind = 'pie', # 選擇圖形類型figsize = (15, 9),autopct='%.1f%%', # 餅圖中添加數值標簽title = 'RFM用戶分類', # 為餅圖添加標題textprops = {'fontsize':8},# 設置文本標簽的屬性值subplots=True) plt.legend(loc=2, bbox_to_anchor=(1.05,1.0),borderaxespad = 0.) # 添加注解4 結論與建議
從用戶分類占比的結果來看,高價值客戶和重要發展客戶共占總數的47%,是公司收入的重要來源。
-
高價值客戶(111)
RFM三個值都很高,要提供vip服務。 -
重點發展客戶(101)
消費頻率低,但是其他兩個值很高,就要想辦法提高他的消費頻率,建議及時推送公司活動信息或新品相關信息來吸引客戶。 -
重點保持客戶(011)
最近消費距離現在時間較遠,也就是F值低,但是消費頻次和消費金額高。這種用戶,是一段時間沒來的忠實客戶。應該主動和他保持聯系,提高復購率。可以贈送優惠券或推送商品折扣信息來增加購買次數。 -
重點挽留客戶(001)
最近消費時間距離現在較遠、消費頻率低,但消費金額高。這種用戶,即將流失,要主動聯系用戶,調查清楚哪里出了問題,并想辦法挽回。當然同樣可以贈送優惠券或推送商品折扣信息來增加購買次數。 -
一般發展客戶(100)
公司應獲取客戶的詳細數據信息用戶畫像, 從中了解客戶的消費屬性。建議對此類客戶進行精準營銷和及時推送產品信息。
當然,最終的營銷策略應基于公司自身的財政投入決定。
RFM也不可以用過頭,而造成高交易的客戶不斷收到信函。每一個企業應該設計一個客戶接觸頻率規則,如購買三天或一周內應該發出一個感謝的電話或Email,并主動關心消費者是否有使用方面的問題,一個月后發出使用是否滿意的詢問,而三個月后則提供交叉銷售的建議,并開始注意客戶的流失可能性,不斷地創造主動接觸客戶的機會。這樣一來,客戶再購買的機會也會大幅提高。
結束語
為方便需要的朋友運行代碼,我也把完整的代碼和數據文件放到了網盤上,需要的朋友自取。
鏈接:https://pan.baidu.com/s/1qzVvW2tFYquertL6jbWx8w
提取碼:1024
引用鳴謝:https://www.jianshu.com/p/4b60880f24e2
推薦關注的專欄
👨?👩?👦?👦 機器學習:分享機器學習實戰項目和常用模型講解
👨?👩?👦?👦 數據分析:分享數據分析實戰項目和常用技能整理
關注我,了解更多相關知識!
CSDN@報告,今天也有好好學習
總結
以上是生活随笔為你收集整理的概念+实战讲解,一文带你了解RFM模型【kaggle项目实战分享】数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逆袭之旅.DAY08东软实训.多态~
- 下一篇: 如何进入保护模式?