航空公司客户流失分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
扩展思考
1.背景与挖掘目标
在国内航空市场竞争日益激烈的背景下,航空公司在客户流失方面应该引起足够的重视。如何改善流失问题,继而提高客户的满意度、忠诚度是航空公司维护自身市场并面对激烈竞争的一件大事,客户流失分析将成为帮助航空公司开展持续改进活动的指南。
根据拓展思考数据实现以下目标:
借助航空公司客户数据,对客户进行分类;
针对目前老客户进行分类预测;
构建客户·的流失模型,运用模型预测未来客户的类别归属。
2.1 数据抽取
从航空公司系统内的详细数据中,根据末次飞行日期(LAST_FLIGHT_DATE),抽取2021-6-4--2014-3-9内所有乘客详细信息。其中包含了会员卡号、入会时间、性别、年龄、会员卡级别、工作地城市、工作地所在省份、工作地所在国家、观测窗口结束时间、观测窗口乘机积分、飞行公里数、飞行次数、飞行时间、乘机时间间隔、平均折扣率等44各属性。
2.2 数据探索分析
本案例的探索分析是对数据进行缺失值分析与异常值分析,分析出数据的规律以及异常值。通过对数据进行观察发现原始数据中存在票价最小值为0、总飞行公里数大于0的记录。
可能是客户乘坐0折机票或者积分兑换造成的。
数据探索分析代码
%% 数据空缺值探索,如果是字符串则返回缺失值个数,
% 如果是数值型返回缺失值个数以及最大最小值
clear;
% 参数初始化
datafile= '拓展思考样本数据.csv' ; % 航空原始数据,第一行为属性标签
logfile = 'log.txt'; % 日志文件
resultfile = 'explore.xls'; % 数据探索结果表
%% 读取数据
[num,txt] = xlsread(datafile);
[rows,cols] = size(num);
% 初始化结果变量
results = cell(5,cols+1);
result = zeros(4,cols);
results(:,1)= {'属性';'空记录数';'缺失率';'最大值';'最小值'};
results(1,2:end)=txt(1,:);
% 记录日志
log_add(logfile,['文件' datafile '一共有' num2str(rows) ...
'条记录']);
%% 遍历所有列,进行空缺判断
for i= 1: cols
% 判断txt每列从第二行开始,是否都是空串
empty_sum = sum(cellfun(@isempty,txt(2:end,i))); % 如果是空串,则empty_sum==rows,即为数值型
if empty_sum==rows % 该列为数值型
min_ = min(num(:,i)); % 最小值
max_ = max(num(:,i)); % 最大值
nan_sum = sum(isnan(num(:,i)));
nan_rate = nan_sum/rows; % 缺失率
loginfo=['属性列' txt{1,i} '是数值型,其最大值为'...
num2str(max_) ',最小值为' num2str(min_) ...
',缺失值个数为' num2str(nan_sum) '个,缺失率为'...
num2str(nan_rate)];
log_add(logfile,loginfo);
% if nan_sum~=0
% disp(loginfo);
% end
result(1,i)=nan_sum;
result(2,i)=nan_rate;
result(3,i)=max_;
result(4,i)=min_;
else% 该列为字符串型,接着判断txt
[emptynum,emptyrate]= find_empty(txt(2:end,i));
loginfo=['属性列' txt{1,i} '是字符串型,缺失值个数为'...
num2str(emptynum) '个,缺失率为'...
num2str(emptyrate)];
log_add(logfile,loginfo);
% if emptynum~=0
% disp(loginfo);
% end
result(1,i)=nan_sum;
result(2,i)=nan_rate;
end
end
%% 写入数据探索结果
results(2:end,2:end)=num2cell(result);
xlswrite(resultfile,results');
2.3数据预处理
1.数据清洗
通过数据探索分析,发现数据中存在缺失值、最小值为0、折扣率最小值为0、总飞行公里数大于0的记录。
数据清洗代码
%% 数据清洗,过滤掉不符合规则的数据
clear;
% 参数初始化
datafile = '拓展思考样本数据.csv'; % 数据文件
cleanedfile = 'data_cleaned.csv'; % 数据清洗后保存的文件
%% 清洗空值和不符规则的数据
[num,txt]=xlsread(datafile);
[row,col]=size(txt);
% 数据整合
for i=1:col
% 判断txt每列从第二行开始,是否都是空串
empty_sum = sum(cellfun(@isempty,txt(2:end,i))); % 如果是空串,则empty_sum==row-1,即为数值型
if empty_sum == row-1
txt(2:end,i)=num2cell(num(:,i)); % 把数值型转为cell类型,并整合end
% if mod(i,500)==0
% disp(['已整合数据' num2str(i) '条记录...']);
% end
end
disp(['过滤前行数:' num2str(size(txt,1))]);
% 初始化变量
txt_copy=[];
rule1_sum =0;
rule2_sum =0;
% 数据过滤
for i=2:row % 从第二行数据行开始判断
% 判断每一行数据是否符合规则,其中filter_data为自定义函数,
% 如果数据符合要求则返回1,否则返回0