航空公司客户价值分析案例——《Python数据分析与挖掘实战》笔记

一、实现目标

(1)借助航空公司客户数据,对客户进行分类
(2)对不同的客户进行特征分析,比较不同类客户的客户价值
(3)对不同价值的客户类别提供个性化服务,指定相应的营销策略

二、分析方法

LRFMC模型指标含义:
(1) L:会员入会时间距观测窗口结束的月数。
(2) R:客户最近一次乘坐公司飞机距离观测窗口结束的月数。
(3) F:客户在观测窗口内乘坐公司飞机的次数。
(4) M:客户在观测窗口内累计的飞行里程碑。
(5) C:客户在观测窗口内乘坐仓位所对应的折扣系数的平均值。

方法:本案例采用聚类的方法,通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别客户价值。

总体流程:数据抽取->数据预处理(数据清洗(缺失值填补舍弃等),属性规约(提取需要特征数据),数据变换(转换适当格式))->建模->结果

分析过程

数据抽取

# -*- coding:utf-8 -*-
#对数据进行基本的探索,返回缺失值个数,最大值,最小值
import pandas as pd

#数据文件路径初始化
datafile = 'air_data.csv'  #第一行为标签属性
#定义数据探索结果文件名
resultfile = 'data_explore.xls'

#使用pandas模块内置函数对文件内容进行读取
data = pd.read_csv(datafile,encoding = 'utf-8')  #设置文件读取编码格式

#获取数据的相应属性内容
explore = data.describe(percentiles=[], include='all').T  #对探索结果矩阵进行转置

#计算数据结果中的空值个数,describe()函数只返回有值数据个数
explore['null'] = len(data) - explore['count']

#提取数据探索结果中的null、min、max三列,并且对数据表表头进行重命名
explore = explore[['null','max','min']]
print('explore:',explore)
print('explore.columns:',explore.columns)

explore.columns = [u'空值数',u'最大值',u'最小值']
print('u-explore:',explore)

#将数据探索的最后结果写入文件中
explore.to_excel(resultfile)

数据预处理

内容:数据清洗、属性规约、数据变换

# -*- coding:utf-8 -*-
#清洗丢弃掉不符合规则的数据
import pandas as pd

datafile = 'air_data.csv'
cleanfile = 'data_clean.csv'

#读取文件内容,并设置读取的编码格式
data = pd.read_csv(datafile,encoding = 'utf-8')

#去掉票价为0的记录
data = data[data['SUM_YR_1'].notnull()]
data = data[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变量中
data = data[index1|index2|index3]

data.to_csv(cleanfile)

# 属性规约:去掉不相管的属性,只留下与LRFMC模型相关的属性
# FFP_DATE 入会时间
# LOAD_TIME 观测窗口结束时间
# FLIGHT_COUNT 飞行频率
# avg_discount 平均折扣
# SEG_KM_SUM 观测窗口总飞行公里数
# LAST_TO_END 最后一次乘机时间至观察窗口末端时长
data = data[['FFP_DATE','LOAD_TIME', 'FLIGHT_COUNT', 'avg_discount', 'SEG_KM_SUM','LAST_TO_END']]

cleanfile = 'D:/my_project/Airline_customer_value/cleanfile.csv'
data.to_csv(cleanfile)

#数据变化的LRFMC数据: 
#L = LOAD_TIME - FFP_DATE (观测窗口时间 - 入会时间) 
#R = LOAD_TIME - LAST_TO_END (观测窗口时间 - 最后一次乘机时间) 
#F = FLIGHT_COUNT 
#M = SEG_KM_SUM 
#C = avg_discount
from datetime import datetime
import time

def normal_time(date):
    return datetime.strptime(date, '%Y/%m/%d')

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.to_csv('D:/my_project/Airline_customer_value/LRFMC.csv') #数据写入文件

#注意到所有的数据值,最大值和最小值间隔较大,需要对数据进行标准化 

# 标准化、重命名、写入文件
data_normal = (data_LRFMC-data_LRFMC.mean()) / (data_LRFMC.std())
data_normal.columns = ['Z'+i for i in data_normal.columns]
data_normal.to_csv('D:/my_project/Airline_customer_value/.csv')

模型构建

客户价值分析模型构建主要由两个部分构成:
第一部分根据航空公司客户5个指标的数据,对客户进行聚类分群。
第二部分结合业务对每个客户群进行特征分析,分析其客户价值,并对每个客户群进行排名。

from sklearn.cluster import KMeans
#设置类别个数5
k = 5
#创建聚类模型对象
kmodel = KMeans(n_clusters=k)
kmodel.fit(data_normal)

#查看聚类中心和对应的类别
print(kmodel.cluster_centers_)
print(kmodel.labels_)

#图形展示
import matplotlib.pyplot as plt

clu = kmodel.cluster_centers_
x = [1,2,3,4,5]
colors = ['red','green','yellow','blue','black']
for i in range(5):
    plt.plot(x, clu[i],label='cluster'+str(i), color=colors[i], marker='o')

plt.xlabel('L R F M C')
plt.ylabel('values')
plt.show()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 馨儿语文老师今年要求孩子们每天做一个读书卡,这个读书卡可以是一篇文章,可以是一个故事,可以是你看的一本书的一部分,...
    yanzuliu阅读 7,456评论 0 1
  • 那时的爱情是那般纯净,像湖里的一湾碧水,轻轻一瞥就迷失了双眼,又像是掬在手里的流沙,微风一吹即四处飘洒,无法再感受...
    心中的小火苗阅读 947评论 27 16
  • 我想发明一台机器人,让外婆减少负担,让我每天不那么孤单。 这台机器人和狗狗的大小差不多,外形也和狗狗差不多,背...
    凉凉的夏天阅读 181评论 1 2
  • 大增益_漠雨阅读 452评论 0 0
  • Summary Chapter 5 Top Gun project is a pretty good recipe...
    哇620阅读 385评论 0 0