客户价值分析之RFM模型

RFM模型介绍

客户价值分析之RFM模型_第1张图片

RFM模型的Excel/Python实现

首先计算出用户的在投时长(月),取数日:2016/7/20
R :最近一次投资距取数日天数
F:月均投资次数
M-月均投资金额
客户价值分析之RFM模型_第2张图片

Python实现RFM及聚类分析

1)读取数据

#读取文件
import os 
import pandas as pd
os.getcwd()  #查看当前文件路径
os.chdir(r'E:\turing\工作\python代码') #更改文件路径为某一文件夹
#读取excel文件
data = pd.read_excel(r'E:\turing\工作\python代码\公开课-案例:客户价值分析\RFM聚类分析【样本数据】.xlsx,index_col = '用户编码')#index_col指定索引列为用户编码一列
data.head() #查看前5行数据
结果如下

客户价值分析之RFM模型_第3张图片

#查看样本数
len(data)

数据探索及预处理

data.describe()
data.describe(include = 'all') # include = 'all'把所有的描述性统计结果都显示出来

客户价值分析之RFM模型_第4张图片
客户价值分析之RFM模型_第5张图片

#确定提数日
from datatime import datatime
ex_data = datatime(2016,7,20)
print(ex_data)

#最近一次投资时间距提数日的天数
diff_R = ex_data - data['最近一次投资时间']
diff_R.head()

客户价值分析之RFM模型_第6张图片

#获取天数
diff_R[0].days
type(diff_R[0].days) 
#将每一个变成int型
R = []
for i in diff_R:
    R.append(i.days)

R[:10]

输出结果

计算用户在投时长
'''
用户在投时长
1、用户在线时长(天)
2、变成月 = 天/30,向上取整
'''
from math import math 
ceil(diff[0].days/30)
#通过for循环获取每一个的时长
diff_months = []
for i in diff_days:
    diff_months.append(ceil(i.days))

diff_months[:10]

在这里插入图片描述

分别获取F、M
#F,月均投资次数
F = data['总计投标总次数']/diff_months
F.head()
F.values() #只看F的值

# M,月均投资金额
M = data['总计投资总金额']/fidd_months
M[:10]
聚类分析

客户价值分析之RFM模型_第7张图片

#选取R、F、M作为聚类分析的指标
from pandas import DataFrame
cdata = DataFrame(R,list(F),list(M)).T #将F、M 转换成list类型,并转置
cdata.head()

#制定cdata的索引(index),columns
cdata.index = data.index
cdata.columns = ['R-最近一次投资时间距提数日的天数','F-月均投资次数','M-月均投资金额']

客户价值分析之RFM模型_第8张图片

数据标准化
zcdata = (cdata-cdata.mean())/cdata.std()
zcdata.head()

客户价值分析之RFM模型_第9张图片

#聚类(已经事先在spss中确定K的个数,不知道K分为几类的前提下,需要确定K的个数)
from sklearn.cluster import KMeans
kmodel = Kmeans(n_clusters = 4,n_jobs = 4,max_iter = 100,random_state = 0)
#max_iter 每次迭代的最大次数,默认值300,random_state随机生成器的种子,和初始化中心有关,n_jobs使用进程的数量,与电脑CPU有关
kmodel.labels_ #每个样本对应的簇类别标签
#统计每个类别的频次
from pandas import Series
Series(kmodel.labels_).value_counts()
#将类别标签赋回原数据
cdata_rst = pd.concat([cdata,Series(kmodel.labels_, index = cdata.index)],axis=1)
cdata.head()

客户价值分析之RFM模型_第10张图片

#讲最后一列命名为类别
cdata_rst.columns = list(cdata.columns)+['类别']
cdata_rst.head()

客户价值分析之RFM模型_第11张图片

#按照类别统计R、F、M的均值
cdata_rst.groupby(cdata_rst['类别']).mean()

客户价值分析之RFM模型_第12张图片

结论

•类别3,R、F、M都比较高,属于重要价值客户,或者超级用户
•类别0:R、F、M都比较低,属于低价值客户
•类别1:M很高,F还行,R不高,重要保持客户

你可能感兴趣的:(数据分析)