python rfm模型实现

原数据是航空公司客户数据,目的是对客户分类(按价值等因素),对不同客户类别进行特征分析,比较不同客户的客户价值,对不同价值的客户提供个性化服务。
所有数据指标如下图所示

指标及其含义
RFM模型,及最近消费时间间隔recency,消费频率Frequency,消费金额Monetary来进行客户细分。本案例用一定时间累积飞行里程M,和乘坐舱位所对应的折扣系数的平均值C代替消费金额。增加客户关系长度L,构成了LRFMC模型。
传统的rfm模型依据三个指标的平均值进行划分,分成约8类,此次的LRFMC模型采用K-Means聚类,识别出最有价值客户。

第一步选取观测窗口,然后对数据进行初步探索,看其中各参数空值情况及最大值最小值

import pandas as pd

datafile= '../data/air_data.csv' #航空原始数据,第一行为属性标签
resultfile = '../tmp/explore1.xls' #数据探索结果表

data = pd.read_csv(datafile, encoding = 'utf-8') #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)

explore = data.describe(percentiles = [], include = 'all').T #包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等);T是转置,转置后更方便查阅
explore['null'] = len(data)-explore['count'] #describe()函数自动计算非空值数,需要手动计算空值数
print(explore.columns)
explore = explore[['null', 'max', 'min']]
explore.columns = [u'空值数', u'最大值', u'最小值'] #表头重命名
'''这里只选取部分探索结果。
describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)'''

explore.to_excel(resultfile) #导出结果

第二部数据的预处理
因为数据中包含极小量的票价为空及票价为0但是总飞行公里数大于0的错误记录,可直接将其删除。

import pandas as pd

datafile= '../data/air_data.csv' #航空原始数据,第一行为属性标签
cleanedfile = '../tmp/data_cleaned.csv' #数据清洗后保存的文件

data = pd.read_csv(datafile,encoding='utf-8') #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)

data = data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()] #票价非空值才保留

#只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录。
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0) #该规则是“与”
data = data[index1 | index2 | index3] #该规则是“或”

data.to_excel(cleanedfile) #导出结果

第三部对数据进行标准化

import pandas as pd
datafile = '../data/zscoredata.xls' #需要进行标准化的数据文件;
zscoredfile = '../tmp/zscoreddata.xls' #标准差化后的数据存储路径文件;
#标准化处理
data = pd.read_excel(datafile)
data = (data - data.mean(axis = 0))/(data.std(axis = 0)) #简洁的语句实现了标准化变换,类似地可以实现任何想要的变换。
data.columns=['Z'+i for i in data.columns] #表头重命名。

data.to_excel(zscoredfile, index = False) #数据写入

第四部 模型建立

mport pandas as pd
from sklearn.cluster import KMeans #导入K均值聚类算法

inputfile = '../tmp/zscoreddata.xls' #待聚类的数据文件
k = 5                       #需要进行的聚类类别数

#读取数据并进行聚类分析
data = pd.read_excel(inputfile) #读取数据

#调用k-means算法,进行聚类分析
kmodel = KMeans(n_clusters = k, n_jobs = 4) #n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data) #训练模型

kmodel.cluster_centers_ #查看聚类中心
kmodel.labels_ #查看各样本对应的类别
然后根据聚类中心的特点(里面LRFMC五个值的高低)为几类进行用户画像,定义其特点。
发布了23 篇原创文章 · 获赞 6 · 访问量 4692

猜你喜欢

转载自blog.csdn.net/qq_34211618/article/details/93542625
今日推荐