python数据分析-客户价值分析

目标:企业针对不同价值的客户制定个性化的服务,将有限的资源集中于高价值客户。
1、借助航空公司的数据进行客户分类
2、比较不同类客户的价值并制定销策略
传统上识别客户价值模型是通过RFM模型:
Recency: 最近消费时间间隔
Frequency: 消费频率
Monetary: 消费金额
但是存在问题:
同样的消费金额的不同旅客对航空公司的价值不同,例如买长航线、低等仓的旅客和买短航线、高等仓的旅客消费金额相同
但是价值确实不同的。显然后者更有价值。因此这个指标可能不合适,故选择客户在一定时间内的飞行里程M和乘坐舱位所对应的折扣数C。

本次数据挖掘的主要步骤:

1).从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据
2).对步骤1)中形成的两个数据集进行数据探索分析和预处理,包括数据缺失值和异常值分析。即数据属性的规约、清洗和变换
3).利用步骤2)中的处理的数据进行建模,利用Python下Sklearn库中提供的KMeans方法,进行聚类
4)针对模型的结果进行分析。

数据抽取

数据集抽取2012-4-1到2014-3-31内乘客的数据,以宽度为2年的时间段作为分析观测窗口。

数据探索

explore=data.describe(percentiles=[],include='all').T
explore['null']=len(data)-explore['count']  #手动计算控制数
explore.head()  #显示每个属性的统计值
explore=explore[['null','max','min']]
explore.columns=[u'空值',u'最大值',u'最小值']
explore.to_excel(outputfile)     

数据预处理

import pandas as pd

datafile= 'data/air_data.csv' 
cleanedfile = 'output/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的记录,可能是客户乘坐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) #导出结果

数据标准化

from datetime import datetime
import time
def normal_time(date):
    '''
    格式化数据
    '''
    return datetime.strptime(date,"%Y/%m/%d")
#strptime通过已知格式对日期进行解析

def interval_time(dd):
    '''
    计算时间间隔,以月为单位
    '''
    return dd.days / 30
# data_LRFMC数据
data_LRFMC = pd.DataFrame()
# data_LRFMC.columns = ['L', 'R', 'F','M', 'C']
data_LRFMC['L'] = (data['LOAD_TIME'].apply(normal_time) - data['FFP_DATE'].apply(normal_time)).apply(interval_time)
data_LRFMC['R'] = data['LAST_TO_END']
data_LRFMC['F'] = data['FLIGHT_COUNT']
data_LRFMC['M'] = data['SEG_KM_SUM']
data_LRFMC['C'] = data['avg_discount']

# 显示数据的描述,最大值和最小值
data_LRFMC_describe = data_LRFMC.describe().T
data_LRFMC_describe = data_LRFMC_describe[['max','min']].T
data_LRFMC_describe
import pandas as pd

datafile = 'data/zscoredata.xls' #需要进行标准化的数据文件;
zscoredfile = 'output/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) #数据写入

python数据分析-客户价值分析_第1张图片

数据建模

1、使用聚类算法(KMeans),将数据生成5类用户
2、针对聚类结果进行特征分析

from sklearn.cluster import KMeans
inputfile='data/zscoreddata.xls'
k=5
data=pd.read_excel(inputfile)
kmodel=KMeans(n_clusters=k,n_jobs=4)
kmodel.fit(data)

r1=pd.Series(kmodel.labels_).value_counts()
r2=pd.DataFrame(kmodel.cluster_centers_)
r=pd.concat([r2,r1],axis=1)#横向连接,得到聚类中心下对应类别下的数目
r.columns=list(data.columns)+[u'类别数目']
print(r)

python数据分析-客户价值分析_第2张图片

import matplotlib.pyplot as plt
r=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)
r.columns=list(data.columns)+['聚类类别']
def density_plot(data):
    plt.rcParams['font.sans-serif']=['SimHei  ']
    plt.rcParams['axes.unicode_minus']=False
    p=data.plot(kind='kde',linewidth=2,subplots=True,sharex=False)
    [p[i].set_ylabel('密度') for i in range(k)]
    [p[i].set_title('客户群%d' %i) for i in range(k)]
    plt.legend()
    return plt
pic_output='output/pd_'
for i in range(k):
    density_plot(data[r[u'聚类类别']==i]).savefig(u'%s%s.png'%(pic_output,i))

你可能感兴趣的:(数据分析与挖掘,数据分析)