Advertisement

客户价值分析之RFM模型

阅读量:

RFM模型介绍

在这里插入图片描述

RFM模型的Excel/Python实现

首先计算出用户的在投时长(月),取数日:2016/7/20
R :最近一次投资距取数日天数
F:月均投资次数
M-月均投资金额
在这里插入图片描述

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行数据
结果如下
在这里插入图片描述
复制代码
    #查看样本数
    len(data)

数据探索及预处理

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

在这里插入图片描述
在这里插入图片描述

复制代码
    #确定提数日
    from datatime import datatime
    ex_data = datatime(2016,7,20)
    print(ex_data)
    
    #最近一次投资时间距提数日的天数
    diff_R = ex_data - data['最近一次投资时间']
    diff_R.head()
在这里插入图片描述
复制代码
    #获取天数
    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]
聚类分析
在这里插入图片描述
复制代码
    #选取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-月均投资金额']
在这里插入图片描述
数据标准化
复制代码
    zcdata = (cdata-cdata.mean())/cdata.std()
    zcdata.head()
在这里插入图片描述
复制代码
    #聚类(已经事先在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()
在这里插入图片描述
复制代码
    #讲最后一列命名为类别
    cdata_rst.columns = list(cdata.columns)+['类别']
    cdata_rst.head()
在这里插入图片描述
复制代码
    #按照类别统计R、F、M的均值
    cdata_rst.groupby(cdata_rst['类别']).mean()
在这里插入图片描述

结论

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

全部评论 (0)

还没有任何评论哟~