1、背景与挖掘目标
信息时代的来临使得企业营销焦点从产品中心转变为客户中心,而客户关系管理的关键问题是客户分类。
面对市场激烈的竞争,通过建立合理的客户价值评估模型,对客户进行分群,分析比较不同客户群的客户价值,并制定相应的 营 销策略,对不同的客户群提供个性化的客户服务是必须和有效的,目前该航空公司已积累了大量的会员档案信息和其乘坐航 班记录,已得到经加工后的数据,根据这些数据实现以下目标:
1)借助航空公司客户数据,对客户进行分类。
2)对不同的客户类别进行特征分析,比较不同类客户的客户价值。
3)对不同价值的客户类别提供个性化服务,制定相应的营销策略。
2、分析方法与过程
本案例将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标,记为LRFMC模型。 针对航空公司LRFMC模型,如果采用传统RFM模型分析的属性分箱方法,虽然也能够识别出最有价值的客户,但是细分的客户群太多,提高了针对性营销的成本。因此,本案例采用聚类的方法识别客户价值。通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别出最有价值客户。
3、航空客运信息挖掘主要步骤:
1)从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。
2)对步骤1)中形成的两个数据集进行数据探索分析与预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。
3)利用步骤2)中形成的已完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
4)针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。
#coding:utf-8
#对数据进行基本的探索分析
#返回缺失值个数以及最大最小值
import pandas as pd
datafile = './data/air_data.csv' #航空原始数据,第一行为属性标签
resultfile = './tmp/explore.xls' #数据探索结果表
data = pd.read_csv(datafile, encoding='utf-8') #读取原始数据,指定utf-8编码(需要用文本编辑器将数据转换为utf-8编码)
explore = data.describe(percentiles=[], include='all').T
'''
包括对数据的基本描述,percentiles参数是制定计算多少的分位数表(如1/4分位数、中位数,默认为1/2);
T是转置,转置后更方便查阅
'''
explore['null'] = len(data) - explore['count'] #describe()函数自动计算非空数值,需要手动计算空值数
explore = explore[['null', 'max', 'min']] #从描述数据中筛选出空值、最大值、最小值
explore.columns = [u'空值数',u'最大值',u'最小值'] #表头重命名
'''
这里只选取部分探索结果。
describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、
freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)
'''
explore.to_excel(resultfile) #导出结果
#coding:utf-8
#数据清洗,过滤掉不符合规则的数据
import pandas as pd
datafile = './data/air_data.csv' #航空原始数据,第一行为属性标签
cleanedfile = './tmp/data_cleaned.xls' #数据清洗后保存的文件
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)
#coding:utf-8
#标准差标准化
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) #数据写入
#coding:utf-8
#K-Means聚类算法
import pandas as pd
from sklearn.cluster import KMeans #导入均值聚类算法
inputfile = './tmp/zscoreddata.xls' #待聚类的数据文件
k = 5 #需要进行的聚类类别数
#读取数据并进行聚类分析
data = pd.read_excel(inputfile) #读取数据
#调用K-means算法,进行聚类分析
kmodel = KMeans(n_clusters=k, n_jobs=1) #n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data) #训练模型
print(kmodel.cluster_centers_) #查看聚类中心
print(kmodel.labels_) #查看各样本对应的类别
参考自:《python数据分析与挖掘》 --张良均