日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

概念+实战讲解,一文带你了解RFM模型【kaggle项目实战分享】数据分析

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 概念+实战讲解,一文带你了解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: 國家的名稱,每個客戶所在國家/地區的名稱。

    df.info()


    我們不難發現,我們需要進行日期格式的轉換,以及常規的缺失值統計、去重以及異常值的檢測與處理。

    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.shape

    1.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()


    可見非常不均。

    M_value[M_value<2000].hist(bins = 30)

    # 分位數 觀察出異常值還是很嚴重 F_value.quantile([0.1,0.2,0.3,0.4,0.5,0.9,1])

    F_value.hist(bins = 30)

    F_value.plot.box()

    F_value[F_value<30].hist(bins = 30)


    一樣是非常的不均。

    # 每個指標下都分為五個等級 R_bins = [0,30,90,180,360,720] F_bins = [1,2,5,10,20,5000] M_bins = [0,500,2000,5000,10000,200000]

    先是R值:

    R_score = pd.cut(R_value,R_bins,labels=[5,4,3,2,1],right=False) R_score


    接著是F值:

    F_score = pd.cut(F_value,F_bins,labels=[1,2,3,4,5],right=False) F_score


    最后是M值:

    M_score = pd.cut(M_value,M_bins,labels=[1,2,3,4,5],right=False) M_score

    生成新的數據框看一看:

    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()


    改下數據格式:

    rfm['R_score'] = rfm['R_score'].astype('float') rfm['F_score'] = rfm['F_score'].astype('float') rfm['M_score'] = rfm['M_score'].astype('float') rfm.describe()


    按平均值在每個指標下劃分價值高低:

    rfm['R'] = np.where(rfm['R_score']>3.82,'高','低') rfm['F'] = np.where(rfm['F_score']>2.03,'高','低') rfm['M'] = np.where(rfm['M_score']>1.89,'高','低') rfm

    # 將三個指標結合 rfm['RFM']=rfm['R']+rfm['F']+rfm['M'] rfm

    def rfm2grade(x):if x=='高高高':return '高價值客戶'elif x=='高低高':return '重點發展客戶'elif x=='低高高':return '重點保持客戶'elif x=='低低高':return '重點挽留客戶'elif x=='高高低':return '一般價值客戶'elif x=='高低低':return '一般發展客戶'elif x=='低高低':return '一般保持客戶'else:return '一般挽留客戶' rfm['用戶等級']=rfm['RFM'].apply(rfm2grade) rfm

    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项目实战分享】数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。