色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Python語言的RFM模型講解

數據分析與開發 ? 來源:CDA數據分析師 ? 作者:CDA數據分析師 ? 2022-03-15 15:38 ? 次閱讀

背景

RFM(Recency Frequency Monetary)模型是衡量客戶價值和客戶創利能力的重要工具和手段。在眾多的客戶關系管理(CRM)的分析模式中,RFM模型是被廣泛提到的。

RFM模型是屬于業務分析方法與模型中的部分。它的本質是用戶分類。本文將用現代最流行的編程語言---Python語言來實踐課堂上講解的RFM模型,將用戶進行分類。

本文采用Anaconda進行Python編譯,主要涉及的Python模塊:

  • pandas

  • matplotlib

  • seaborn

  • datetime

本章分為三部分講解:

1.RFM模型原理與步驟

2.Python分布實現RFM

3.總結

RFM模型原理與步驟

RFM模型的思路是:該模型是根據用戶歷史行為數據,結合業務理解選擇劃分維度,實現用戶分類,助力用戶精準營銷。此外,還學習了構建RFM模型的步驟:

  • 獲取R、F、M三個維度下的原始數據

  • 定義R、F、M的評估模型與判斷閾值

  • 進行數據處理,獲取R、F、M的值

  • 參照評估模型與閾值,對用戶進行分層

  • 針對不同層級用戶制定運營策略

上面步驟可以知道,我們需要有RFM三個維度,根據我們在業務分析方法課程中學到的,業務分析模型離不開指標,而指標是對度量的匯總。因此,在找出RFM三個維度后,需要對每個維度下度量實現不同匯總規則。下面講述對R、F、M三個維度下的度量如何進行匯總。

1.R代表最近一次消費,是計算最近一次消費時間點和當前時間點的時間差。因此,這里需要用到多維數據透視分析中的基本透視規則---最小值MIN求出最小的時間差。

2.F代表消費頻次,是在指定區間內統計用戶的購買次數。因此,這里需要用到多維數據透視分析中的基本透視規則---技術類COUNT(技術類不去重指標)統計用戶的購買次數。

3.M代表消費金額,是指在指定區間內統計用戶的消費總金額,因此,這里需要用到求和類指標,也即基本透視規則中的合計規則---SUM。

在對得到RFM模型中的指標值后最重要的一步就是分層,根據我們在課堂上學到的內容,大部分的用戶分層是根據經驗來分層的,本文在追求數據的客觀性下采取統計學中的等距分箱方法來進行分層,對R、F、M三個維度分成兩類。

綜上,我們大致了解了如何構建RFM模型,下面以Python實現RFM模型,并對每一步進行詳細的講解。

03 Python實現RFM模型

數據準備

本文所需的數據是一家公司對2021年10月底至今的客戶購買行為數據,(前十二行)如圖下:

abd337c8-91e2-11ec-952b-dac502259ad0.png

其中,uid代表客戶的id,是存在重復情況的。prince維度代表客戶每發生一次交易行為所花費的金額。time為客戶發生交易行為的時間。

數據讀取與理解

在得到一份數據之后,我們第一步就是要理解數據的業務意義,以及對數據表的EDA(探索性分析),這里通過如下代碼,發現以下特征:

abeab51a-91e2-11ec-952b-dac502259ad0.png

具體代碼(包含Python導入包部分)如下:

#導入相關包
importpandasaspd
importtime
importnumpyasnp
importseabornassns
importmatplotlib.pyplotasplt
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams["axes.unicode_minus"]=Falsesns.set(style="darkgrid")

#數據讀取與查看
data=pd.read_excel('data.xlsx')
data.head()
data.isnull().sum()#查看缺失值
data.duplicated().sum()#重復值,但是不刪
data.dtypes#查看數據類型
data.describe()

#創建dataframe,存放RFM各值
data_rfm=pd.DataFrame()

接下來進行R、F、M指標值構建。

時間維度處理

從上文可以知道time維度,即每筆交易行為發生的時間是字符串object的格式,而在Python中我們對時間作差需要的是datetime格式,因此利用pandas庫中的pd.to_datetime函數將時間格式進行轉換,代碼如下:

data['time']=pd.to_datetime(data['time'])

得到的前五行數據如圖下,可以看到數據類型變成了datetime64[ns]

abffd4f4-91e2-11ec-952b-dac502259ad0.png

統計每筆訂單產生時間與當前時間的差(這里的當前時間是2021年12月11日),得到的差是timedelta64[ns]類型

ac1717fe-91e2-11ec-952b-dac502259ad0.png

可以看到時間差中包含了day、時、分、秒4個維度,但是這里我們僅需要day維度,因此我們用astype()函數將類型轉為僅含有day維度的timedelta64[D]類型。具體代碼如下:

#統計沒條數據與當前日期的時間差
##計算相差天數
data['R']=(pd.datetime.now()-data['time'])
##將時間差timedelta格式轉化為需要的日格式
data['R']=data['R'].astype('timedelta64[D]').astype('int')

tips:這里可能會報警告:FutureWarning: The pandas.datetime class is deprecated and will be removed from pandas in a future version. Import from datetime module instead.讀者無需理會,這是由于我們所用的pd.datetime.now()是一個比較舊的函數,以后將會廢棄。

統計R值

在上面我們已經創建了名為data_rfm的表結構的數據框,因此,將下面統計的R值放入其中。R值得統計是找客戶最近發生交易行為日期與當前日期的差。換一種思路就是找所有時間差中的最小值。

因此利用pandas中的groupby函數對每個用戶以上一步統計的R值作為分組依據進行分組,并求出最小值。具體代碼如下:

data_rfm=pd.merge(data_rfm,data.groupby('uid')['R'].min(),
left_on='user_id',right_on='uid')

統計F值

F值得統計就是統計指定區間內的消費頻次,而指定區間一般為人為設定,這里我們取全部數據,即2021年10月底至今作為指定區間。

本文利用value_counts()函數對uid進行統計即為每個用戶得消費頻次,同時將結果合并到data_rfm數據框中。

#統計指定區間內的消費頻次
data_rfm['user_id']=data['uid'].value_counts().index
data_rfm['F']=data['uid'].value_counts().values

統計M值

本文以uid作為分組依據對price字段進行求和,得到求和類指標M值。此外,將結果合并到data_rfm數據框中。

data_rfm=pd.merge(data_rfm,data.groupby('uid')['price'].sum(),
left_on='user_id',right_on='uid')
data_rfm.rename(columns={'price':'M'},inplace=True)

上述代碼中出現了pandas庫中得合并語法merge()merge()函數采取的是橫向合并,不同于MYSQL,不需要指定左表還是右表為主表,只需要提供左表與右表的公共字段在各表中的名稱即可。

由于data_rfm數據表中的user_id是去重的,因此將其作為主鍵。而data.groupby('uid')['price'].sum()得到的表格也是去重的,因此我們可以采取多維數據模型中的連接對應關系---一對一對兩表進行合并。公共字段為:左表的uid,右表的user_id

最終表格結果如下,展現前18行:

ac2cd22e-91e2-11ec-952b-dac502259ad0.png

數據分箱

在得到R、F、M三個指標值后,我們需要對這三個指標進行分類,并將每個用戶進行分層。

本文不采取人為主觀性的經驗法則劃分,而是采取等距分箱的方式劃分,等距分箱的原理較簡單,這里寫出步驟:

  • 從最小值到最大值之間,均分為$N$等份(這里$N$取為2)。

  • 如果 $A$,$B$ 為最小最大值, 則每個區間的長度為 $W=(B?A)/N$ ,.

  • 則區間邊界值為$A+W$,$A+2W$,….$A+(N?1)W$ 。這里只考慮邊界,采用左閉右開的方式,即每個等份的實例數量不等。

在Python中可以利用pandas庫中的cut()函數輕松實現上述等距分箱,同時將結果R_labelF_labelM_label合并到data_rfm數據框中具體代碼如下:

#分箱客觀左閉右開
cut_R=pd.cut(data_rfm['R'],bins=2,right=False,labels=range(1,3)).astype('int')
data_rfm['R_label']=cut_R

cut_F=pd.cut(data_rfm['F'],bins=2,right=False,labels=range(1,3)).astype('int')
data_rfm['F_label']=cut_F

cut_M=pd.cut(data_rfm['M'],bins=2,right=False,labels=range(1,3)).astype('int')
data_rfm['M_label']=cut_M

由于利用cut()函數得到的是區間形式的值,因此需要賦予label值進行虛擬變量引用。label值使用1和2,對應的區間為從小到大。具體代表意思如下表:

ac4e7226-91e2-11ec-952b-dac502259ad0.jpg

得到最終的表格形式如下:

ac628266-91e2-11ec-952b-dac502259ad0.png

用戶分類

在得到每個用戶的R、F、M三個維度的label值后,最后就是需要對用戶進行分類,分類的原則如圖下:

ac8f2e7e-91e2-11ec-952b-dac502259ad0.png

利用pandas庫中的·terrows()函數循環遍歷每個用戶行為記錄,將符合上述條件的劃分對應的類,具體代碼如下:

fori,jindata_rfm.iterrows():
ifj['R_label']==2andj['F_label']==2andj['M_label']==2:
data_rfm.loc[i,'用戶類別']='重要價值用戶'
ifj['R_label']==2andj['F_label']==1andj['M_label']==2:
data_rfm.loc[i,'用戶類別']='重要發展用戶'
ifj['R_label']==1andj['F_label']==2andj['M_label']==2:
data_rfm.loc[i,'用戶類別']='重要保持用戶'
ifj['R_label']==1andj['F_label']==1andj['M_label']==2:
data_rfm.loc[i,'用戶類別']='重要挽留用戶'
ifj['R_label']==2andj['F_label']==2andj['M_label']==1:
data_rfm.loc[i,'用戶類別']='一般價值用戶'
ifj['R_label']==2andj['F_label']==1andj['M_label']==1:
data_rfm.loc[i,'用戶類別']='一般發展用戶'
ifj['R_label']==1andj['F_label']==2andj['M_label']==1:
data_rfm.loc[i,'用戶類別']='一般保持用戶'
ifj['R_label']==1andj['F_label']==1andj['M_label']==1:
data_rfm.loc[i,'用戶類別']='一般挽留用戶'

條形圖可視化用戶類別

利用seaborn畫圖庫對已劃分類別的用戶進行技術統計與可視化,得到如下圖表

acabd60a-91e2-11ec-952b-dac502259ad0.png

可以看出,大部分的用戶屬于一般發展用戶與一般挽留用戶。而對于一般發展用戶而言采取的策略為挖掘需求,后者則是放棄治療。因此,可以看出該公司在10月底至今的時間段內,用戶流失較多,但是可發展的用戶同樣是非常多的,想要提高收入,對一般發展用戶入手是成本少,效率高的選擇。

總結

RFM模型同時還利用了多維數據透視分析和業務分析方法兩個模塊的內容。所以說實踐是檢驗和鞏固學到的東西的最好方法。

例如一級的常考題上,我們常碰到一個模擬題,包含RFM模型劃分規則和一張帕累托圖,問題是在公司有限成本下提高公司收入,需要針對哪種用戶營銷最好,答案是一般發展用戶。相信大家一開始都很疑惑為什么選這個,這時候如果像本文一樣對一份數據進行實踐,這樣你就會更加理解為什么是這個答案。

審核編輯:郭婷


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84628

原文標題:基于客觀事實的 RFM 模型(Python 代碼)

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    語言模型開發框架是什么

    語言模型開發框架是指用于訓練、推理和部署大型語言模型的軟件工具和庫。下面,AI部落小編為您介紹大語言
    的頭像 發表于 12-06 10:28 ?115次閱讀

    語言模型開發語言是什么

    在人工智能領域,大語言模型(Large Language Models, LLMs)背后,離不開高效的開發語言和工具的支持。下面,AI部落小編為您介紹大語言
    的頭像 發表于 12-04 11:44 ?96次閱讀

    對比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨特的優勢和適用場景。以下是對這兩種編程語言的對比: 一、語法和易用性 Python 語法簡潔,代碼更易讀,非常適合初學者。
    的頭像 發表于 11-15 09:31 ?289次閱讀

    【《大語言模型應用指南》閱讀體驗】+ 基礎篇

    學習方法。其中文本向量化中的三種編碼方式:獨熱編碼、靜態編碼和動態編碼,這些概念描述是需要時間仔細研究理解的。 1.5章節終于開始講解語言模型了,這也是基礎篇的最后一章節,占據了基礎篇的一半篇幅
    發表于 07-25 14:33

    Python語言基礎2

    電子發燒友網站提供《Python語言基礎2.rar》資料免費下載
    發表于 07-17 17:23 ?1次下載

    python訓練出的模型怎么調用

    Python中,訓練出的模型可以通過多種方式進行調用。 1. 模型保存與加載 在Python中,訓練好的模型需要被保存,以便在其他程序或會
    的頭像 發表于 07-11 10:15 ?1875次閱讀

    語言模型(LLM)快速理解

    自2022年,ChatGPT發布之后,大語言模型(LargeLanguageModel),簡稱LLM掀起了一波狂潮。作為學習理解LLM的開始,先來整體理解一下大語言模型。一、發展歷史大
    的頭像 發表于 06-04 08:27 ?961次閱讀
    大<b class='flag-5'>語言</b><b class='flag-5'>模型</b>(LLM)快速理解

    語言模型:原理與工程時間+小白初識大語言模型

    解鎖 我理解的是基于深度學習,需要訓練各種數據知識最后生成自己的的語言理解和能力的交互模型。 對于常說的RNN是處理短序列的數據時表現出色,耳真正厲害的是Transformer,此框架被推出后直接
    發表于 05-12 23:57

    【大語言模型:原理與工程實踐】大語言模型的應用

    ,它通過抽象思考和邏輯推理,協助我們應對復雜的決策。 相應地,我們設計了兩類任務來檢驗大語言模型的能力。一類是感性的、無需理性能力的任務,類似于人類的系統1,如情感分析和抽取式問答等。大語言
    發表于 05-07 17:21

    【大語言模型:原理與工程實踐】大語言模型的評測

    地提升工作效率。大語言模型的代碼類評測任務包括:1)代碼生成評估,如生成逆轉字符串的Python函數;2)代碼糾錯評估,如識別并修正JavaScript代碼中的錯誤;3)代碼解釋評估,如解釋冒泡排序算法
    發表于 05-07 17:12

    【大語言模型:原理與工程實踐】探索《大語言模型原理與工程實踐》2.0

    《大語言模型“原理與工程實踐”》是關于大語言模型內在機理和應用實踐的一次深入探索。作者不僅深入討論了理論,還提供了豐富的實踐案例,幫助讀者理解如何將理論知識應用于解決實際問題。書中的案
    發表于 05-07 10:30

    【大語言模型:原理與工程實踐】大語言模型的基礎技術

    全面剖析大語言模型的核心技術與基礎知識。首先,概述自然語言的基本表示,這是理解大語言模型技術的前提。接著,詳細介紹自然
    發表于 05-05 12:17

    【大語言模型:原理與工程實踐】揭開大語言模型的面紗

    語言模型(LLM)是人工智能領域的尖端技術,憑借龐大的參數量和卓越的語言理解能力贏得了廣泛關注。它基于深度學習,利用神經網絡框架來理解和生成自然語言文本。這些
    發表于 05-04 23:55

    【大語言模型:原理與工程實踐】探索《大語言模型原理與工程實踐》

    《大語言模型》是一本深入探討人工智能領域中語言模型的著作。作者通過對語言模型的基本概念、基礎技術
    發表于 04-30 15:35

    語言模型使用指南

    在信息爆炸的時代,我們渴望更智能、更高效的語言處理工具。GPT-3.5等大語言模型的崛起為我們提供了前所未有的機會。這不僅是技術的進步,更是人與機器共舞的一幕。本篇文章將帶你走進這個奇妙的語言
    的頭像 發表于 12-29 14:18 ?670次閱讀
    主站蜘蛛池模板: 亚洲精品成人无码A片在线| 99精品久久精品一区二区| 成人精品视频在线观看| 精品在线观看一区| 天堂so导航| JIZJIZJIZ 日本老师水多| 久久国产精品自线拍免费| 丝袜足控免费网站xx91| 99人精品福利在线观看| 精品国产乱码久久久久久免费流畅 | 最新影音先锋av资源台| 国产麻豆精品人妻无码A片| 皮皮色狼网| 970女主播电台歌曲| 九九久久国产精品免费热6| 午夜男人免费福利视频| 成人毛片在线播放| 嫩草影院地址一地址二| 在线观看亚洲 日韩 国产| 国产亚洲视频在线观看| 天天操天天干天天爽| 本庄优花aⅴ全部在线影片| 免费视频精品38| 在线少女漫画| 久久精品国产96精品亚洲| 亚洲精品国产高清不卡在线| 国产精品高清m3u8在线播放 | 刺激一区仑乱| 强开少妇嫩苞又嫩又紧九色| 91精品福利一区二区| 久久九九亚洲精品| 夜夜女人国产香蕉久久精品| 国产乱码精品一区二区三区四川| 肉动漫h黄动漫日本免费观看| xx69美国| 青青精品国产自在线拍| bbbbbxxxxx肥胖| 青草久久久| 被窝伦理午夜电影网| 日本在线免费播放| 成年人深夜福利|