简介:本案例以互联网金融行业客户信息为数据,通过-means聚类,对用户划分成不同的群体。
1 RFM模型介绍
根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标,这三个指标分别是:R-最近一次消费(Recency);F-消费频率(Frequency)和M-消费金额(Monetary)。
依据这三个指标将客户分为下面图所示的8个类别。
客户分类
R、F、M都很高,重要价值客户(VIP客户)
R、F、M一般居中:一般价值客户
F、M很高,R不高:重要保持客户
R、M很高,F不高:重要发展客户
R、F、M都很低,流失客户
M很高,R、F不高,重要挽留客户
2 RFM聚类分析
以R、F、M这三个核心指标为维度进行聚类分析,利用K-means聚类分析将用户分成8个类别(或者其他个数类别),根据这8个类别的R、F、M指标,对用户进行标注,哪些是重要价值客户,哪些是重要保持客户,哪些是重要发展客户,哪些是流失客户等。
3 案例:互联网金融行业客户价值分析
3.1首先数据源
变量 |
---|
用户id |
首次投资时间 |
最近一次投资时间 |
总计投资金额 |
投标总次数 |
提数日:2016/7/20 |
3.2 R、F、M指标计算
指标 | 计算方式 |
---|---|
R | 求出最近一次投资时间距提数日天数 |
F | 月均投资次数 |
M | 月均投资金额 |
3.3 操作步骤
本次数据挖掘的主要步骤:
1).数据标准化,这里采用取对数,即Log10进行标准化。
2).利用k-means聚类法将用户分为8个类别。
3).根据这8个类别的R、F、M指标,对用户进行标注,哪些是重要价值客户,哪些是重要保持客户,哪些是重要发展客户,哪些是流失客户等。
** 3.4 数据读取**
import pandas as pd
data=pd.read_excel('RFM聚类分析【样本数据】.xlsx',index_col='用户编码')
data.head()
3.5 数据预处理
#提数日,2016/7/20
from datetime import datetime
exdate_date=datetime(2016,7,20)
#最近一次投资时间距提数日天数
diff_R=exdate_date-data['最近一次投资时间']
diff_R.head()
R=[]
for i in diff_R:
R.append(i.days)
R[:10]
'''
用户在投时长(月)
python1没有直接获取月数差的
1、用户在投时长(天)
2、月=天/30
'''
diff=exdate_date-data['首次投资时间']
diff.head()
diff[0].days/30
#通过循环获取相差天数,用户在投时长(天)
diff_days=[]
for i in diff:
diff_days.append(i.days)
diff_days[:10]
#通过循环获取相差天数,用户在投时长(月)
from math import ceil
diff_months=[]
for i in diff_days:
diff_months.append(ceil(i/30))
diff_months[:10]
#F月均投资次数
F=(data['总计投标总次数']/diff_months).values
F[:10]
#M月均投资金额
M=(data['总计投资总金额']/diff_months).values
M[:10]
3.6 R、F、M聚类分析
from pandas import DataFrame
cdata=DataFrame([R,list(F),list(M)]).T
cdata.index=data.index
cdata.columns=['R-最近一次投资时间距离提数日的天数','F-月均投资次数','M-月均投资金额']
cdata.head()
3.7 K-Means聚类分析
#数据标准化
zcdata=((cdata-cdata.mean())/cdata.std())
zcdata.head()
#sklearn
from sklearn.cluster import KMeans
kmode=KMeans(n_clusters=4,n_jobs=4,max_iter=100,random_state=0)
kmode.fit(zcdata)
#统计每个类别的频率
from pandas import Series
Series(kmode.labels_).value_counts()
#将类别标签附会原数据
cdata_rst=pd.concat([cdata,Series(kmode.labels_,index=cdata.index)],axis=1)
cdata_rst.columns=list(cdata.columns)+['类别']
cdata_rst.head()
#按照类别分组统计R、F、M指标的均值
cdata_rst.groupby(cdata_rst['类别']).mean()
4 结论
类别0:R、F、M都比较低,属于低价值客户
类别3:R、F、M都比较高,属于重要价值客户
类别1:R不高、F还行、M高,属于重要保持客户
类别2:R还行、F还行、M低,属于一般保持客户