在之前的文章中用均值的方法对用户RMF模型进行了分析,
https://blog.csdn.net/andakiwukawa/article/details/119142435
上篇文章中写道:RFM是常用的对用户分析的手法,RFM模型的形式有均值、评分、对应算法,以下就是使用评分制的方法,对用户RMF模型评估。
采用均值分析的方法的思路总结如下:
1.获取相应数据-数据清洗
2.将CustomerID作为行索引
3.添加orders字段用于统计合计
4.计算出OrderData,orders,Sales,采用了分组集合(OrderData取最后一次交易发生日期,orders求和,sales求和)
5.将上面三个值转换成RMF
6.每位用户的RMF值和平均值比较,为用户打标签
7.对RMF进行分析
众所周知,平均数反应的状况往往和实际有较大出入,有的时候还不如中位数。。
6.我们不再和平均值进行比较,我们将用户的RFM值转化成对应分数
7.用户的分数平均分数(或者区间)对比,打标签
原先的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
#%%
data = pd.read_csv('dataset.csv',encoding='ISO-8859-1')
data
#%%
data.drop(index=data[data.RowID.duplicated()].index,inplace=True)
data
#%%
data['ShipDate']=pd.to_datetime(data['ShipDate'])
data['OrderDate']=pd.to_datetime(data['OrderDate'])
data['interval']=(data['ShipDate']-data['OrderDate']).dt.total_seconds()
data.drop(index=data[data['interval']<0].index,inplace=True)
data['interval']=(data['ShipDate']-data['OrderDate'])
data
#%%
data['ShipMode'].fillna(value=data.ShipMode.mode()[0],inplace=True)
data.drop(columns=['PostalCode'],inplace=True)
data['Discount']=data['Discount'].mask(data['Discount']>1,None)
mean_Discount=round(data[data['Discount'].notnull()].Discount.sum()/\
data[data['Discount'].notnull()].size,2)
data['Discount'].fillna(value=mean_Discount,inplace=True)
data['order-year'] = data['OrderDate'].dt.year
data['order-month']=data['OrderDate'].dt.month
data['quarter']=data['OrderDate'].dt.to_period('Q')
data
#%%
data_14 =data[data['order-year']==2014]
data_14=data_14[['CustomerID','OrderDate','Sales']]
customer_df = data_14.copy()
customer_df.set_index('CustomerID',drop=True,inplace=True)
customer_df['Orders'] = 1
customer_df
#%