摘要 :近年来,随着人们生活水平的不断提高,出行方便变成了大家的关注点,而大多数人为了便捷都选择了坐飞机出行。而航空公司业务竞争激烈,为了从产品中心转化为客户中心,针对不同类型客户,进行精准营销,实现利润最大化是很重要的。本文的实验目的就是对这些客户进行价值分析,从而促进航空业的发展。本次试验主要实现以下几个目标:1.借助航空公司客户数据,对客户进行分类。2. 对不同的客户进行特征分析,比较不同类客户的客户价值,对不同价值的客户类别提供个性化服务,制定相应的营销策略

关键词  航空公司;客户价值分析;数据挖掘;MATLAB;K-means算法

目录

1.问题的描述.... 3

1.1客户分类.... 3

1.2不同类客户的客户价值.... 3

2.问题的分析.... 3

3.数据处理.... 5

3.1数据抽取.... 5

3.2数据探索分析.... 5

3.3 数据预处理.... 7

3.3.1数据清洗.... 7

3.3.2属性规约.... 8

3.3.3数据变换.... 9

4.模型的建立与求解.... 10

4.1客户聚类.... 10

4.2客户价值分析.... 11

附录.... 13

1.问题的描述

在竞争激烈的航空市场里,很多航空公司都推出了优惠的营销方式来吸引更多的客户。在此种环境下,如何将公司有限的资源充分利用,提升企业竞争力,为企业带来更多的利益。

信息时代的来临使得企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业的核心问题。客户关系管理的关键问题是客户分类,通过客户分类,区分无价值客户、高价值客户,企业针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略,将有限的营销资源集中于高价值客户,实现企业利润最大化的目标。准确的客户分类结果是企业优化营销资源分配的重要依据,客户分类越来越成为客户关系管理中亟待解决的关键问题之一。

1.1客户分类

借助航空公司客户数据,对客户进行分类。

1.2不同类客户的客户价值

对不同的客户进行特征分析,比较不同类客户的客户价值,对不同价值的客户类别提供个性化服务,制定相应的营销策略。

2.问题的分析

这个案例需要通过航空公司提供的会员档案信息和乘坐航班的记录数据进行挖掘,即通过航空公司客户数据识别不同价值的客户。识别客户价值应用最广泛的模型是通过三个指标(最近消费时间间隔(Recency)、消费频率(Frequency)、消费金额(Monetary))来进行客户细分,识别出高价值的客户,简称RFM模型。

在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空票价收到运输距离、舱位等级等多种因素的影响,同样消费金额的不同旅客对航空公司的价值是不同的,比如一位购买长航线、低等级舱位票的旅客与一位购买短航线、高等级舱位票的旅客相比,后者对航空公司而言价值可能更高。因为这个指标并不适合于航空公司的客户价值分析。因此选择客户在一定时间内累积的飞行里程M和客户在一定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。此外,考虑航空公司会员入会时间的长短在一定程度上能够影响客户价值,所以在模型中增加客户关系长度L,作为区分客户的另一指标。
本案例将客户关系长度(L)、消费时间间隔(R)、消费频率(F)、飞行里程(M)和折扣系数的平均值(C)作为航空公司识别客户价值的五个指标,如下表1所示,记为LRFMC模型。

模型

L

R

F

M

C

航空公司的LRFMC模型

会员入会时间距观测窗口结束的月数

客户最近一次乘坐公司飞机距观测窗口结束的月数

客户在观测窗口内乘坐公司飞机的次数

客户在观测时间内在公司累计的飞行里程

客户在观测窗口内乘坐舱位所对应的折扣系数的平均值

表 1 LRFMC模型中各指标的含义

由于传统RFM模型分析是利用属性分箱方法进行分析,根据属性的平均值进行

划分的,其中大于平均值的表示为↑,小于平均值的表示为↓),但是此方法细分的客户群太多,需要一一识别客户特征和行为,提高了针对性营销的成本。因此,本案例采用聚类的方法识别客户价值。通过对航空公司客户价值的LRFMC五个指标进行K-means聚类,识别出最有价值的客户。
指标进行K-means聚类,识别出最有价值的客户。

图 1 RFM模型


 

由于传统RFM模型分析是利用属性分箱方法进行分析,根据属性的平均值进行划分的,其中大于平均值的表示为↑,小于平均值的表示为↓),但是此方法细分的客户群太多,需要一一识别客户特征和行为,提高了针对性营销的成本。因此,本案例采用聚类的方法识别客户价值。通过对航空公司客户价值的LRFMC五个指标进行K-means聚类,识别出最有价值的客户。

本案例航空客户价值分析的总体流程,航空客运信息挖掘主要包括以下步骤:

(1)从航空公司的数据源进行选择性的抽取与新增数据抽取分别形成历史数据和增量数据。因已给出数据文件,不需要提取

(2)对步骤(1)中形成的两个数据集进行数据探索和预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。

(3)利用步骤(2)中形成的已完成数据预处理的清洗数据,基于旅客价值LRFMC模型进行客户分群,对各个客户进行特征分析,识别出有价值的客户。

(4)针对模型结果对不同价值的客户,采用不同的营销手段,为其提供定制化的服务。

3.数据处理

3.1数据抽取

以2014-03-31为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口内有乘机记录的所有客户的详细数据形成历史数据。对于后续新增的客户详细信息,以后续新增数据中的时间点作为结束时间,采用上述同样的方法进行抽取,形成增量数据。

根据末次飞行日期,从航空公司系统内抽取2012-04-01至2014-03-31内所有乘客的详细数据,总共62988条记录

3.2数据探索分析

对数据进行缺失值分析与异常值分析,分析出数据的规律以及异常值。通过对数据进行观察发现原始数据中存在票价为空值、票价最小值为0、折扣率最小值为0、总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成的,其他数据可能是客户乘坐0折扣机票或者积分兑换造成的。

查找每列属性观测值中空值个数、最大值、最小值的MATLAB代码、如代码1所示。

代码1 数据探索分析代码

%% 数据空缺值探索,如果是字符串则返回缺失值个数

%  如果是数值型返回缺失值个数以及最大、最小值

clear;

% 参数初始化

datafile= 'data/air_data.csv' ; % 航空原始数据,第一行为属性标签

logfile = 'tmp/log.txt'; % 日志文件

resultfile = 'tmp/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');

disp('代码运行完成!');

根据上面代码得到探索结果,如表2所示。

属性名称

SUM_YR_1

SUM_YR_2

SEG_KM_SUM

AVG_DISCOUNT

空记录数

551

138

0

0

最大值

239 560

234 188

580 717

1.5

最小值

0

0

368

0

表 1 数据探索分析结果表

3.3 数据预处理

3.3.1数据清洗

        从航空公司业务和数据挖掘建模需要方面考虑,筛选出需要的数据。具体处理方法如下:

(1)丢弃票价为空的记录。

(2)丢弃票价为0、平均折扣率不为0、总飞行公里数大于0的记录。

使用MATLAB对满足清洗条件的数据进行丢弃,处理方法为满足清晰条件的一行数据全部丢弃,如代码2所示。

代码2 数据清洗代码

%% 数据清洗,过滤掉不符合规则的数据

clear;

% 参数初始化

datafile = 'data/air_data.csv';  % 数据文件

cleanedfile = 'tmp/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

[filterflag,rule1_sum,rule2_sum] = filter_data(txt(i,:),rule1_sum,rule2_sum);

if filterflag ==0  %  不符合要求,删除

txt_copy=[txt_copy,i];  % 清除数据

end

%     if mod(i,500)==0

%        disp(['已过滤数据' num2str(i) '条记录...']);

%     end

end

txt(txt_copy,:)=[];

disp(['过滤后行数:' num2str(size(txt,1)-1) ',规则1过滤记录数:' num2str(rule1_sum) ...

'规则2过滤的记录数:' num2str(rule2_sum)]);

%% 写入过滤后的数据

xlswrite(cleanedfile,txt);  % 写入数据文件

3.3.2属性规约

原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与LRFMC指标相关的六个属性:FPP_DATE、LOAD_TIME、FLGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END,删除不相关、弱相关和冗余的属性。

代码3 属性选择代码

preSelfile = 'tmp/data_cleaned.csv ' ; %数据文件

postSelfile = 'tmp/data_seled.csv ' ; %属性规约后保存的文件

[num,txt]= xlsread(preSelfile) ;

[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

end

txt_copy =[10 2 23 11 17 29];

r_txt = txt (:, txt_copy) ;

disp ( [ '选取属性6个! ']);

xlswrite (postSelfile,r_txt) ;% 写入数据文件

 3.3.3数据变换

数据变换是将数据转换成“适当的”格式,以适应挖掘任务及算法的需要。本案例中主要采用的数据变换方式有属性构造和数据标准化。

⑴属性构造:

因原始数据中并没有直接给出LRFMC五个指标,需要构造这五个指标。

L = LOAD _TIME – FFP_DATE

会员入会时间距观测窗口结束的月数=观测窗口的结束时间-入会时间[单位:月

R= LAST_TO_ END

客户最近一次乘坐公司飞机距观测窗口结束的月数=最后一次乘机时间至观察窗口末端时长[单位:月]

F = FLIGHT_ COUNT

客户在观测窗口内乘坐公司飞机的次数=观测窗口的飞行次数[单位:次]

M= SEG _KM_ SUM

客户在观测时间内在公司累计的飞行里程=观测窗口总飞行公里数[单位:公里]

C= AVG_DISCOUNT

客户在观测时间内乘坐舱位所对应的折扣系数的平均值=平均折扣率[单位:无]

⑵数据标准化:

因五个指标的取值范围数据差异较大(如下表3),为了消除数量级数据.带来的影响,需要对数据进行标准化处理。处理后形成ZL、ZR、ZF、ZM、ZC五个属性的数据

属性名称

L

R

F

M

C

最大值

12.23

0.03

2

368

0.14

最小值

114.63

24.37

213

580717

1.5

表 2 LRFMC指标的取值范围

用标准差标准化处理的MATLAB代码,如代码3所示。

代码4 标准差标准化代码

%% 标准差标准化

clear;

% 参数初始化

%datafile = 'data/zscoredata.xls';  % 需要进行标准化的数据文件

datafile = 'tmp/data_transed1.csv';  % 需要进行标准化的数据文件

zscoredfile = 'tmp/zscoreddata.xls'; % 标准差标准化后的数据存储路径文件

%% 标准化处理

[data,txt]=xlsread(datafile);

zscoredata = zscore(data) ;  % 其中zscore函数为MATLAB内置的标准化函数

%% 数据写入

xlswrite(zscoredfile,[txt;num2cell(zscoredata)]);

4.模型的建立与求解

利用以上步骤中的已处理数据作为建模数据,基于旅客价值的LRFMC模型进行客户分群,对各个客户群再进行特征分析,识别有价值客户。

4.1客户聚类

采用K_Means聚类算法对客户数据进行客户分群,聚成五类。

利用K-Means聚类算法进行客户分群的MATLAB代码,如代码4所示。

代码5  K-Means聚类算法代码

%% K-Means聚类算法

clear;

% 参数初始化

inputfile = 'tmp/zscoreddata.xls';  % 待聚类的数据文件

k=6;                   % 需要进行的聚类类别数

logfile = 'tmp/log.txt'; % 日志文件

%% 读取数据并进行聚类分析

[num,txt]=xlsread(inputfile);         % 读取数据

% 调用k-means算法,进行聚类分析

% 其中,type为每个样本对应的类别号,centervec为聚类中心向量

[type,centervec] = kmeans(num,k);

%% 聚类中心写入日志文件

rows = size(centervec,1);

for i=1:rows

loginfo= ['聚类号为' num2str(i) '的聚类中心向量为' ...

num2str(centervec(i,:))];

log_add(logfile,loginfo);

end

对数据进行聚类分群的结果,如表4所示。

聚类类别

聚类个数

聚类中心

ZL

ZR

ZF

ZM

ZC

客户群1

24656

-0.70003

-0.41491

-0.1612

-0.16103

-0.25475

客户群2

5337

0.48293

-0.7994

2.4831

2.4243

0.3078

客户群3

12129

-0.31414

1.686

-0.57397

-0.53678

-0.17107

客户群4

15724

1.1609

-0.3771

-0.08675

-0.094838

-0.15803

客户群5

4198

0.056824

-0.0056164

-0.22678

-0.2302

2.1911

表 4 客户聚类结果

4.2客户价值分析

针对聚类结果进行特征分析,其中客户群1在各属性中都比较小;客户群2在F、M属性中最大,R属性中最小;客户群3在R属性中最大,在F、M属性中最小;客户群4在L属性中最大,F、M、C属性相对较小;客户5在C属性中最大,L、R属性较小。(如图2所示)。 客户群1——黄;客户群2——紫;客户群3——蓝;客户群4——绿;客户群5——红;

图 2雷达图

结合业务分析,通过比较各个指标在群间的大小对某一个群的特征进行评价分析(如下图3所示)。

图 3 客户群体5项指标

根据业务定义五个等级的客户类别:重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户其中每种客户类别的特征如下。

重要保持客户:

这类客户的平均折扣率(C)较高、最近乘坐过本公司航班(R)少、乘坐的次数(F)多和里程(M)较长。他们是航空公司的高价值客户,是最为理想的客户类型,对航空公司的贡献最大,所占比例却较小。

重要发展客户:

这类客户的平均折扣率(C)很高、最近乘坐过本公司航班(R)较少,乘坐次数(F)较少和里程(M)较短。这类客户入会时间(L)短,他们是航空公司的潜在价值客户。虽然这类客户的当前价值并不是很高,但却有很大的发展潜力。

重要挽留客户:

这类客户入会时间(L)长、乘坐次数(F)较少和历程(M)较d短,并且较长时间已经没有乘坐本公司的航班(R)较低。该类客户处于流失状态。由于这些客户衰退的原因各不相同,所以掌握客户的最新信息、维持与客户的互动就显得尤为重要了。

一般客户或低价值客户:

这类客户所乘航班的平均折扣率(C)很低,乘坐的次数(F)少和里程(M)短,入会时间(L)短。这类客户机票票价低,可能是在航空公司机票打折促销时,才会乘坐该公司的航班,对公司无忠诚度。

根据建模结果,航空公司的五类不同价值的客户数量分布如下表5所示:

表 5 五类群体的数量分布

根据每种客户类型的特征和数量,对各类客户群进行客户价值排名,其结果如下表6所示。针对不同类型的客户群提供不同的产品和服务,提升重要发展客户的价值、稳定和延长重要保持客户的高水平消费、防范重要挽留客户的流失,并积极进行关系恢复。

客户群

排名

排名含义

客户群2

1

重要保持客户

客户群5

2

重要发展客户

客户群4

3

重要挽留客户

客户群1

4

一般客户

客户群3

5

低价值客户

表 6 客户群价值排名

附录

本文所有程序使用MATLAB编写 使用版本 R2021b

属性选择后生成的数据文件data_sele(Matlab报错:excel未激活)改名为data_sele1后在m7_2_3_trans脚本中成功运行。

属性构造后生成的数据文件data_transed(Matlab报错:excel未激活)改名为data_transed1后在m7_3_zscore_data脚本中成功运行。

补文章中代码

2,find_empty.m

function [emptynum, emptyrate] = find_empty(input)
%%cell列向量中查找字符串为空的个数以及比率
%输入参数:
%input:cell列向量;
%输出参数:
%emptynum:空字符串个数;
%emptyrate:空字符串比率;
rows = size(input,1);
emptynum = sum(cellfun(@isempty,input));
%
% for i = 1:rows
%   if isempty(input{i,1});
%       emptynum=emptynum+1;
%   end
%end
emptyrate = emptynum/rows;
end

3,log_add.m

function log_add(logfile,loginfo)
%%日志追加
%输入参数
%logfileid:日志文件;
%loginfo:需要记录的日志信息;
%%打开日志文件
fileID = fopen(logfile,'a+');%以追加的方式添加日志信息
loginfo = [datestr(now) '  ' loginfo];  %日志信息
%%记录日志
fprintf(fileID,'%s\r\n',loginfo);  %写入日志信息
%%关闭日志文件
fclose(fileID);
end

5,filter_data.m

function [filterflag,rule1_sum,rule2_sum] = filter_data(txtdata,rule1_sum,rule2_sum)
%%根据过滤规则返回是否符合过滤条件
%票价为空的数据,SUM_YR_1(下标15) 、sUM_YR_2〈下标16)任一为空
% 票价为o、平均折扣率不为o、总飞行公里数大于o的数据
%SUM_YR_1 (下标15)、sUM_YR_2(下标16)都为零
%AVG_DISCOUNT(下标为29)不等于o
%SEG_KM_SuM(下标为17)大于零﹔

%输入参数:
%txtdata:一行数据,cell向里﹔ 
%rule1_sum :规则一过滤的记录数 
%rule2_sum :规则二过滤的记录数

%输出数据:
%filterflag: 0:数据不符合要求,1:数据符合要求; 
% rule1_sum :规则一过滤的记录数
%rule2_sum :规则二过滤的记录数

%%过滤

index_15 = txtdata{1,15};
index_16 = txtdata{1,16};
%第一个过滤条件
if isnan(index_15)||isnan(index_16)||isempty(index_15)||isempty(index_16)
    filterflag = 0;
    rule1_sum=rule1_sum+1;
    return;
end
%第二个过滤条件
index_17 = txtdata{1,17};
index_29 = txtdata{1,17};

if index_15==0 && index_16==0
    if index_17>0 && index_29~=0
        filterflag=0;
        rule2_sum = rule2_sum+1;
        return;
    end
end
filterflag=1;

7,m7_2_3_trans.m

preTransfile = 'tmp/data_seled1.csv ' ; %数据文件
postTransfile = 'tmp/data_transed.csv ' ; %数据转换后保存的文件
[num,txt]=xlsread(preTransfile);
[rows,cols]=size (txt);

results = cell(rows,5 );
results (1,:)= {'L' 'R' 'F' 'M' 'C'};

load_date = datetime ( txt(2:end, 1) );
ffp_date = datetime ( txt(2:end,2) ) ;
L= load_date - ffp_date;
results(2:end, 1) = num2cell( roundn (hours( L ) ./ (24*30),-2) );
results(2:end, 2) = num2cell ( roundn(num(:, 1 )./30 , -2) );
results(2:end, 3) = num2cell( num ( : , 2) );
results(2:end, 4) = num2cell( num ( : , 3) );
results(2:end, 5) = num2cell( roundn (num (: , 4),-2) );

xlswrite(postTransfile,results) ; %写入数据文件

8.m7_3_zscore_data.m

%% 标准差标准化
clear;
% 参数初始化
%datafile = 'data/zscoredata.xls';  % 需要进行标准化的数据文件    
datafile = 'tmp/data_transed1.csv';  % 需要进行标准化的数据文件
zscoredfile = 'tmp/zscoreddata.xls'; % 标准差标准化后的数据存储路径文件

%% 标准化处理
[data,txt]=xlsread(datafile);  
zscoredata = zscore(data) ;  % 其中zscore函数为MATLAB内置的标准化函数
 
%% 数据写入
xlswrite(zscoredfile,[txt;num2cell(zscoredata)]);

附录1:雷达图(图2)

function spider(theta,data,color)

n=length(data);

[x_,y_] = pol2cart(theta(1),data(1));

for i=2:n

th=theta(i);

[x,y] = pol2cart(th,data(i));

plot([x_,x],[y_,y],'-','linewidth',0.75,'color',color);

hold on

x_=x;

y_=y;

end

[x,y] = pol2cart(theta(1),data(1));

plot([x_,x],[y_,y],'-','linewidth',0.75,'color',color);

function theta=back_ground(n,signal_name)

if nargin==0

n=5;

signal_name={'one','two','three','four','five'};

end

axis off

axis equal

hold on

theta_last=pi/2;

theta=zeros(n,1);

for i=1:n

theta(i)=2*pi/n*i+pi/2;

plot([0,5*cos(theta(i))],[0,5*sin(theta(i))],'k-','linewidth',2);

[x,y] = pol2cart(theta(i),6);

text(x,y,signal_name{i},'HorizontalAlignment','center')

for j=1:5

plot([j*cos(theta_last),j*cos(theta(i))],[j*sin(theta_last),j*sin(theta(i))],'--','linewidth',0.75,'color',[0.5,0.5,0.5]);

end

theta_last=theta(i);

end

x=[-0.70003,-0.41491,-0.1612,-0.16103,-0.25475;0.48293,-0.7994,2.4831,...

2.4243,0.3078;-0.31414,1.686,-0.57397,-0.53678,-0.17107;1.1609,...

-0.3771,-0.08675, -0.094838,-0.15803;0.056824,-0.0056164,-0.22678,...

-0.2302,2.1911];

signal_name={'ZL','ZR','ZF','ZM','ZC'};

[M,N]=size(x);

theta=back_ground(N,signal_name);

for i=1:M

switch i

case 1

color='y';

case 2

color='m';

case 3

color='b';

case 4

color='g';

otherwise

color='r';

end

spider(theta,x(i,:),color);

end

附录2:多组条形图(图3)

x=[-0.70003,-0.41491,-0.1612,-0.16103,-0.25475;0.48293,-0.7994,2.4831,...

2.4243,0.3078;-0.31414,1.686,-0.57397,-0.53678,-0.17107;1.1609,...

-0.3771,-0.08675, -0.094838,-0.15803;0.056824,-0.0056164,-0.22678,...

-0.2302,2.1911];

figure(1)

axes2=axes('position',[0.1,0.1,0.86,0.8]); %这个是figure里面图的位置和大小,分别为离下边,左边的距离,还有图的高和宽

bar(x);

set(gca,'XTickLabel',{'群1','群2','群3','群4','群5'}); %横坐标

legend('ZL','ZR','ZF','ZM','ZC'); %图例

xlabel('聚类类别'); ylabel('聚类中心');

附录3:条形图(图4)

clc;

clear all;

data=[5337,4198,15724,24656,12129];

b=bar(data,'BarWidth',0.6);%可以直接设置条形图的宽度

grid on;

set(gca,'XTickLabel',{'重要保持客户','重要发展客户','重要挽留客户','一般客户','低价值客户'})%设置横坐标数值

for i = 1:length(data)

%直方图上面数据对不齐,利用水平和垂直对齐

%利用text函数实现数据显示,并设置对齐方式,字体大小

text(i,data(i)+0.1,num2str(data(i)),'VerticalAlignment','middle','HorizontalAlignment','center','FontSize',12);

end

set(gca,'FontSize',12);%设置字体大小

xlabel('客户类别');

ylabel('数量(个)');

%axis([0 5 0 3.2]);%设置坐标轴显示范围

航空公司客户价值分析相关推荐

  1. python客户价值分析_Python数据分析与应用航空公司客户价值分析.ppt

    Python数据分析与应用航空公司客户价值分析.ppt 大数据,成就未来 * 大数据挖掘专家 * 大数据挖掘专家 大数据,成就未来 航空公司客户价值分析 * 目录 分析航空公司现状 1. 行业内竞争 ...

  2. 数据分析与挖掘实战-航空公司客户价值分析

    航空公司客户价值分析 项目背景 信息时代的到来注定营销焦点从产品中心转到了用户中心,客户关系管理成为企业的核心问题. 客户关系管理的关键问题则是客户分类,通过分类区分客户价值的有无和高低,针对不同类别 ...

  3. python客户价值分析_航空公司客户价值分析实例

    第8章 航空公司客户价值分析 传统的识别客户价值应用最广泛的模型主要通过3个指标(最近消费时间间隔(Recency).消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别 ...

  4. Python数据挖掘:利用聚类算法进行航空公司客户价值分析

    无小意丶 个人博客地址:无小意 知乎主页:无小意丶 公众号: 数据路(shuju_lu) 刚刚开始写博客,希望能保持关注,会继续努力. 以数据相关为主,互联网为辅进行文章发布. 本文是<Pyth ...

  5. 数据分析实战:航空公司客户价值分析

    一.背景目标 通过对航空公司客户数据分析,对客户进行分类: 比较不同客户的客户价值,并制定不同的服务和营销策略 二.数据探索分析 2.1 数据概况 数据时间范围: 2012年4月1日至2014年3月3 ...

  6. 毕业设计之 ---基于大数据分析的航空公司客户价值分析

    文章目录 0 前言 1 数据分析背景 2 分析策略 2.1 航空公司客户价值分析的LRFMC模型 2.2 数据 2.3 分析模型 3 开始分析 3.1 数据预处理 3.1.1 数据预览 3.1.2 数 ...

  7. 【毕业设计】大数据分析的航空公司客户价值分析 - python

    文章目录 0 前言 1 数据分析背景 2 分析策略 2.1 航空公司客户价值分析的LRFMC模型 2.2 数据 2.3 分析模型 3 开始分析 3.1 数据预处理 3.1.1 数据预览 3.1.2 数 ...

  8. 基于机器学习的航空公司客户价值分析与流失预测

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 面对激烈的市场竞争,各个航空公司相继推出了更优惠的营销方式来吸引更多的客户,国内某航空公司面临着常旅 ...

  9. 航空公司客户价值分析python实战

    航空公司客户价值分析(K_Means聚类分析) 最近在看黄红梅.张良均老师主编的<Python数据分析与应用>,拿书里的案例练练手. 本案例将使用航空公司客户数据,结合RFM模型,采用K_ ...

  10. 航空公司客户价值分析笔记

    面对激烈的市场竞争,各航空公司相继推出更优惠的营销模式来吸引客户,并通过建立合理的客户价值评估模型对客户进行分类,分析比较不同客户群体的价值,并制定相应的营销策略,对不同客户群体提供个性化的服务.现某 ...

最新文章

  1. 一.Linq to JSON是用来干什么的?
  2. Redis 官方可视化工具,功能真心强大!
  3. Exp6 信息收集与漏洞扫描 20164314
  4. C语言socket()函数解析(创建套接字)af地址族,ip地址类型(Address Family)INET(Inetnet)PF(Protocol Family)
  5. VTK:多块数据集用法实战
  6. ubuntu 14.04 如何设置静态ip
  7. Android之常用开发框架
  8. Kinect1和Kinect2的区别
  9. 为什么word中插入对象会自动关闭word_你常常忽视的Word文本操作小技巧
  10. 马斯克圣诞节晒太空飞船:明年4月测试,5年后飞火星
  11. listview去掉底部多出的边框黑色
  12. Javaweb尚硅谷网上书城项目
  13. GBK 与GB2312 互查 区位码
  14. android 微信 语音转文字,微信语音转文字功能
  15. java Doc转Pdf
  16. 战舰世界选服务器删除什么文件夹,《战舰世界》常见问题解决方案合集
  17. tempfile库:Python临时文件系统对象
  18. 还在为记不住js中的api烦恼吗?下面是我整理的我在学习js初级时用到过的部分api,希望能帮助到大家
  19. 金融风控评分卡建模全流程!
  20. 如何快速把多个mp4和m4a混合合并- 无需安装

热门文章

  1. python凹多边形分割_直线切割凹多边形
  2. CAD系统与PDM系统集成技术研究
  3. 小白也能通俗易懂的Mac环境变量配置教程
  4. linux安装rmp格式文件,在CentOS Linux上使用yum、dnf和rpm安装RPM文件(Packages)
  5. gitlab怎么将建好的项目移到某个组下
  6. 计算机视觉教程(第2版)1-8章期末复习
  7. origin 页边距紧凑设置
  8. visio一分二的箭头_visio双箭头怎么画? visio2013绘制双箭头直线的教程
  9. 复选框样式圆圈html,css怎么美化复选框样式
  10. oracle临时表空间自动清理,Oracle 临时表空间满的清理