《利用K-Means聚类进行航空公司客户价值分析》由会员分享,可在线阅读,更多相关《利用K-Means聚类进行航空公司客户价值分析(16页珍藏版)》请在金锄头文库上搜索。
1、利用K-Means聚类进行航空公司客户价值分析 1.背景与挖掘目标1.1背景航空公司业务竞争激烈,从产品中心转化为客户中心。针对不同类型客户,进行精准营销,实现利润最大化。建立客户价值评估模型,进行客户分类,是解决问题的办法1.2挖掘目标借助航空公司客户数据,对客户进行分类。对不同的客户类别进行特征分析,比较不同类客户的客户价值对不同价值的客户类别提供个性化服务,制定相应的营销策略。详情数据见数据集内容中的air_data.csv和客户信息属性说明2.分析方法与过程2.1分析方法首先,明确目标是客户价值识别。识别客户价值,应用最广泛的模型是三个指标(消费时间间隔(Recency),消费频率(F
2、requency),消费金额(Monetary)以上指标简称RFM模型,作用是识别高价值的客户消费金额,一般表示一段时间内,消费的总额。但是,因为航空票价收到距离和舱位等级的影响,同样金额对航空公司价值不同。因此,需要修改指标。选定变量,舱位因素=舱位所对应的折扣系数的平均值=C,距离因素=一定时间内积累的飞行里程=M。再考虑到,航空公司的会员系统,用户的入会时间长短能在一定程度上影响客户价值,所以增加指标L=入会时间长度=客户关系长度总共确定了五个指标,消费时间间隔R,客户关系长度L,消费频率F,飞行里程M和折扣系数的平均值C以上指标,作为航空公司识别客户价值指标,记为LRFMC模型如果采用
3、传统的RFM模型,如下图。它是依据,各个属性的平均值进行划分,但是,细分的客户群太多,精准营销的成本太高。综上,这次案例,采用聚类的办法进行识别客户价值,以LRFMC模型为基础本案例,总体流程如下图2.2挖掘步骤从航空公司,选择性抽取与新增数据抽取,形成历史数据和增量数据对步骤一的两个数据,进行数据探索性分析和预处理,主要有缺失值与异常值的分析处理,属性规约、清洗和变换利用步骤2中的已处理数据作为建模数据,基于旅客价值的LRFMC模型进行客户分群,对各个客户群再进行特征分析,识别有价值客户。针对模型结果得到不同价值的客户,采用不同的营销手段,指定定制化的营销服务,或者针对性的优惠与关怀。(重点
4、维护老客户)2.3数据抽取选取,2014-03-31为结束时间,选取宽度为两年的时间段,作为观测窗口,抽取观测窗口内所有客户的详细数据,形成历史数据对于后续新增的客户信息,采用目前的时间作为重点,形成新增数据2.4探索性分析本案例的探索分析,主要对数据进行缺失值和异常值分析。发现,存在票价为控制,折扣率为0,飞行公里数为0。票价为空值,可能是不存在飞行记录,其他空值可能是,飞机票来自于积分兑换等渠道,查找每列属性观测值中空值的个数、最大值、最小值的代码如下。import pandas as pddatafile= r/home/kesci/input/date27730/air_data.cs
5、v #航空原始数据,第一行为属性标签resultfile = r/home/kesci/work/test.xls #数据探索结果表data = pd.read_csv(datafile, encoding = utf-8) #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)explore = data.describe(percentiles = , include = all).T #包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等);T是转置,转置后更方便查阅print(explore)explorenull
6、 = len(data)-explorecount #describe()函数自动计算非空值数,需要手动计算空值数explore = explorenull, max, minexplore.columns = u空值数, u最大值, u最小值 #表头重命名print(-以下是处理后数据)print(explore)这里只选取部分探索结果。describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)-以下是处理前数据 count un
7、ique top freq mean std MEMBER_NO 62988 NaN NaN NaN 31494.5 18183.2 FFP_DATE 62988 3068 2011/01/13 184 NaN NaN FIRST_FLIGHT_DATE 62988 3406 2013/02/16 96 NaN NaN GENDER 62985 2 男 48134 NaN NaN FFP_TIER 62988 NaN NaN NaN 4.10216 0.373856 WORK_CITY 60719 3310 广州 9385 NaN NaN WORK_PROVINCE 59740 1185 广东
8、 17507 NaN NaN WORK_COUNTRY 62962 118 CN 57748 NaN NaN .-以下是处理后数据 空值数 最大值 最小值MEMBER_NO 0 62988 1FFP_DATE 0 NaN NaNFIRST_FLIGHT_DATE 0 NaN NaNGENDER 3 NaN NaNFFP_TIER 0 6 4WORK_CITY 2269 NaN NaNWORK_PROVINCE 3248 NaN NaNWORK_COUNTRY 26 NaN NaNAGE 420 110 6LOAD_TIME 0 NaN NaNFLIGHT_COUNT 0 213 2BP_SUM
9、 0 505308 0.2.3数据预处理数据清洗丢弃票价为空记录丢弃票价为0、平均折扣率不为0、总飞行公里数大于0的记录import pandas as pddatafile= /home/kesci/input/date27730/air_data.csv #航空原始数据,第一行为属性标签cleanedfile = #数据清洗后保存的文件data = pd.read_csv(datafile,encoding=utf-8) #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)data = datadataSUM_YR_1.notnull() & dataS
10、UM_YR_2.notnull() #票价非空值才保留#只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录。index1 = dataSUM_YR_1 != 0index2 = dataSUM_YR_2 != 0index3 = (dataSEG_KM_SUM = 0) & (dataavg_discount = 0) #该规则是“与”,书上给的代码无法正常运行,修改*为&data = dataindex1 | index2 | index3 #该规则是“或”print(data)# data.to_excel(cleanedfile) #导出结果以下是处理后数据 M
11、EMBER_NO FFP_DATE FIRST_FLIGHT_DATE GENDER FFP_TIER 0 54993 2006/11/02 2008/12/24 男 6 1 28065 2007/02/19 2007/08/03 男 6 2 55106 2007/02/01 2007/08/30 男 6 3 21189 2008/08/22 2008/08/23 男 5 4 39546 2009/04/10 2009/04/15 男 6 5 56972 2008/02/10 2009/09/29 男 6 6 44924 2006/03/22 2006/03/29 男 6 7 22631 2010/04/09 2010/04/09 女 6 8 32197 2011/06/07 2011/07/01 男 5 9 31645 2010/07/05 2010/07/05 女 6 属性规约原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与模型相关的六个属性。删除其他无用属性,如会员卡号等等def reduction_data(data): data = dataLOAD_TIME, FFP_DATE, LAST_TO_END,