如何在Python中實現RFM分析

2021-09-30 13:35:39 字數 2834 閱讀 3776

rfm分析是根據客戶活躍程度和交易金額貢獻,進行客戶價值細分的一種方法;

可以通過r,f,m三個維度,將客戶劃分為8種型別。

rfm分析過程

1.計算rfm各項分值

r_s,距離當前日期越近,得分越高,最高5分,最低1分

f_s,交易頻率越高,得分越高,最高5分,最低1分

m_s,交易金額越高,得分越高,最高5分,最低1分

2.歸總rfm分值

rfm=100*r_s+10*f_s+1*m_s

3.根據rfm分值對客戶分類

rfm分析前提,滿足以下三個假設,這三個假設也是符合邏輯的

1.最近有過交易行為的客戶,再次發生交易的可能性要高於最近買有交易行為的客戶;

2.交易頻率較高的客戶比交易頻率較低的客戶,更有可能再次發生交易行為;

3.過去所有交易總金額較多的客戶,比交易總金額較少的客戶,更有消費積極性。

我們了解了rfm的分析原理後,下面來看看如何在python中用**實現:

import numpy

import pandas

data = pandas.read_csv(

'd:\\pda\\5.7\\data.csv'

)data['dealdatetime'] = pandas.to_datetime(

data.dealdatetime,

format='%y/%m/%d'

)data['datediff'] = pandas.to_datetime(

'today'

) - data['dealdatetime']

data['datediff'] = data['datediff'].dt.days

r_agg = data.groupby(

by=['customerid']

)['datediff'].agg()

f_agg = data.groupby(

by=['customerid']

)['orderid'].agg()

m_agg = data.groupby(

by=['customerid']

)['sales'].agg()

aggdata = r_agg.join(f_agg).join(m_agg)

bins = aggdata.recencyagg.quantile(

q=[0, 0.2, 0.4, 0.6, 0.8, 1],

interpolation='nearest'

)bins[0] = 0

labels = [5, 4, 3, 2, 1]

r_s = pandas.cut(

aggdata.recencyagg,

bins, labels=labels

)bins = aggdata.frequencyagg.quantile(

q=[0, 0.2, 0.4, 0.6, 0.8, 1],

interpolation='nearest'

)bins[0] = 0;

labels = [1, 2, 3, 4, 5];

f_s = pandas.cut(

aggdata.frequencyagg,

bins, labels=labels

)bins = aggdata.monetaryagg.quantile(

q=[0, 0.2, 0.4, 0.6, 0.8, 1],

interpolation='nearest'

)bins[0] = 0

labels = [1, 2, 3, 4, 5]

m_s = pandas.cut(

aggdata.monetaryagg,

bins, labels=labels

)aggdata['r_s']=r_s

aggdata['f_s']=f_s

aggdata['m_s']=m_s

aggdata['rfm'] = 100*r_s.astype(int) + 10*f_s.astype(int) + 1*m_s.astype(int)

bins = aggdata.rfm.quantile(

q=[0, 0.125, 0.25, 0.375, 0.5,

0.625, 0.75, 0.875, 1

],interpolation='nearest'

)bins[0] = 0

labels = [1, 2, 3, 4, 5, 6, 7, 8]

aggdata['level'] = pandas.cut(

aggdata.rfm,

bins, labels=labels

)aggdata = aggdata.reset_index()

aggdata.sort(

['level', 'rfm'],

ascending=[1, 1]

)aggdata.groupby(

by=['level']

)['customerid'].agg()

如何在Python中實現資料分箱

1 資料分箱 資料分箱技術在pandas官方給出的定義 bin values into discrete intervals,是指將值劃分到離散區間。好比不同大小的蘋果歸類到幾個事先布置的箱子中 不同年齡的人劃分到幾個年齡段中。這種技術在資料處理時會很有用。2 例子 我們先來看例子 import n...

如何在Python中實現矩陣分析

根據事物 如產品,服務等 的兩個重要屬性 指標 作為分析依據,進行關聯分析,找出解決問題的一種分析方法。如何使用python進行矩陣分析呢 各個省份的gdp 人口矩陣分析,實現如下 import pandas import matplotlib import matplotlib.pyplot as...

如何在 Python 中清屏

在很多時候,如果我們在控制台中使用 python,隨著時間的推移,可能會發現螢幕越來越亂。如下圖,我們跑了不少的測試程式,在螢幕上有很多的輸出。在 windows 中,我們會使用 cls 命令清屏。在 python,應該怎麼樣才能清屏呢?其實 python 並沒有清螢幕的命令,也沒有內建內建命令可以...