数据挖掘实战—航空公司客户价值分析

本文利用航空公司客户数据,结合RFM模型,采用K-Means算法进行客户分群,通过数据探索分析、预处理和特征构建,识别客户价值。分析结果显示,客户可分为5类:重要保持客户、重要发展客户、重要挽留客户、一般客户和低价值客户。通过对年龄、飞行次数、票价收入等特征的分析,揭示了不同客户群体的特征,为企业制定精准营销策略提供依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


案例数据及notebook百度网盘链接—提取码:1234 或者可以从我上传的资源里面找,下载不需要积分
传送门:


引言

  企业在面向客户制定运营策略与营销策略时,希望针对不同的客户推行不同的策略,实现精准化运营。通过客户分类,对客户群体进行细分,区分出低价值客户与高价值客户,对不同的客户群体开展不同的个性化服务,将有限的资源合理地分配给不同价值的客户,从而实现效益(利润)最大化。本文将使用航空公司客户数据,结合RFM模型,采用K-Means聚类算法,对客户进行分群,比较不同类别客户的价值,从而指定相应的营销策略。定义挖掘目标如下:

  • 借助航空公司数据对客户进行分类
  • 对不同的客户类别进行特征分析,比较不同类别客户的价值
  • 针对不同价值的客户制定相应的营销策略,为其提供个性化服务

本文数据挖掘主要包括以下步骤:

  1. 抽取航空公司2012年4月1日至2014年3月31日的数据
  2. 对抽取的数据进行数据探索分析数据预处理,包括数据缺失值与异常值的探索分析、数据清洗特征构建标准化等操作
  3. 基于RFM模型,使用K-means算法进行客户分群
  4. 针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化服务
    在这里插入图片描述

一、数据探索分析(EDA)

  航空公司数据属性说明如下:
在这里插入图片描述

%matplotlib inline
import pandas as pd
import numpy as np
import missingno as mg
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
air_data = pd.read_csv('data/air_data.csv',header=0,index_col=0)
air_data.head(10)

在这里插入图片描述

1.数据质量分析

1.1 缺失值分析

  缺失值可视化,图中的白线即为缺失值

# 缺失值可视化
mg.matrix(air_data)

在这里插入图片描述
  利用柱状图进行缺失值可视化,柱状图的高度代表非缺失比例
在这里插入图片描述
  定量展示每一列缺失值个数并排序

air_data.isnull().sum().sort_values(ascending=False)

在这里插入图片描述
  展示每一列的缺失值个数与缺失率以及缺失值的属性

def missing_percentage(df):
    dtypes = df.dtypes[df.isnull().sum() != 0]
    total = df.isnull().sum().sort_values(ascending=False)[df.isnull().sum() != 0]
    percentage = total*100 / len(df)
    return pd.concat([total,percentage,dtypes],axis=1,keys=['Total','Percentage','Dtypes'])

missing_percentage(air_data)

![在这里插入图片描述](https://img-blog.csdnimg.cn/202104052120

1.2 异常值分析

  用箱型图来识别异常值,箱型图识别异常值是以四分位数与四分位距为基础,同时结合业务逻辑,因为异常值并不代表是错误值,需要结合业务来考虑异常值在不在合理的范围内。

# 数据类别统计分析
air_data.dtypes.value_counts()

在这里插入图片描述

# 连续型变量
num_columns = air_data.loc[:,air_data.dtypes != object].columns
for var in num_columns:
    fig,ax = plt.subplots(figsize=(5,5))
    sns.boxplot(air_data[var],orient='v')
    ax.set_xlabel(var)

以AGE为例,很明显看出该特征有异常值,而且这个异常值对于业务来说属于噪声,应当进行删除异常值或者将异常值取为空,然后在进行补充
在这里插入图片描述
  对每个图进行分析,分析结果如下,这个是自身对业务的认知水平基础上的分析

FFP_TIER:会员卡级别中数据要么6要么5没有异常值
AGE:年龄中可以看到有些大于100岁,要对这些数据进行处理
FLIGHT_COUNT:观测窗口内的飞行次数没有小于0的值,其他不在箱子中的异常值是有价值
BP_SUM:总基本积分没有小于0的值,其他不在箱子里面的值是有价值
EP_SUM =EP_SUM_YR_1 +EP_SUM_YR_2 :总精英积分有1个值远高于其他值,这个我认为是有价值的异常值
SUM_YR = SUM_YR_1 + SUM_YR_2:观测窗口的票价收入,没有低于0的,有特别高的,我认为是有价值的异常值
SEG_KM_SUM :观测窗口的飞行里程数,没有小于0的值,有特别高,我认为是有价值的异常值
WEIGHTED_SEG_KM : 含义未知,跟里程数有关
AVG_FLIGHT_COUNT : 平均里程数 没有小于0的值,有特别高,我认为是有价值的异常值
AVG_BP_SUM:平均基本积分,没有小于0的,有特别高的,我认为是有价值的异常值
BEGIN_TO_FIRST:我猜测是第一次乘机时间至观测窗口结束时长,没有小于0的,有特别高的,我认为是有价值的异常值
LAST_TO_END:最后一次乘机时间至观测窗口结束时长,我猜测是时间间隔类数据,没有小于0的,有特别高的,我认为是有价值的异常值
AVG_INTERVAL : 平均乘机时间间隔,即(LAST_TO_END - BEGIN_TO_FIRST) / FLIGHT_COUNT,没有负值
MAX_INTERVAL : 最大乘机时间间隔,没有负值
EXCHANGE_COUNT : 积分兑换次数,没有负值
ADD_POINT_SUM : 具体含义未知,累积积分的一种,看着没有负值,之后统计分析的时候再看一下,这个值与ADD_POINT_SUM_YR_1和ADD_POINT_SUM_YR_2有关
Eli_Add_Point_Sum:具体含义未知,累积积分的一种,看着没有负值,之后统计分析的时候再看一下,
Ponits_Sum : 总累积积分,看着没有小于0的,有特别高的,我认为是有价值的异常值
Ponit_NotFlight:非乘机的积分变动次数,看着没有小于0的
总结:AGE有异常值

1.3 重复数据分析

在这里插入图片描述

2.数据特征分析

2.1 描述性统计分析
explore = air_data.describe().T
# count代表非空值个数
explore['null'] = len(air_data) - explore['count']
# 构建缺失值个数,最大值,最小值的表格
explore = explore[['null','min','max']]
explore.columns = ['空值个数','最小值','最大值']
# 按空值个数进行排序
explore.sort_values(by='空值个数',ascending= False,inplace=True)

在这里插入图片描述
在这里插入图片描述
  从表中可以看出,有3个连续型数据列有缺失值,年龄最大值为110岁,年龄中存在异常值。在三个含缺失值列中有两个是票价(SUM_YR = SUM_YR_1 + SUM_YR_2),票价为空值的数据可能是客户不存在乘机记录造成的。票价列还存在票价为0,折扣率为0,但总飞行里程数大于0的记录。这种数据业务上可以这么理解:客户乘坐了0折机票或者机票是通过非购买的其他途径获得。

2.2 分布分析

  从三个角度寻找客户信息的分布规律

2.2.1 客户基本信息分布分析

  针对客户基本信息中的入会时间、性别、会员卡级别和年龄字段进行分析

  1. 入会时间—各年份入会人数变化图
from datetime 
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值