Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用

news/2025/1/9 23:36:34/文章来源:https://www.cnblogs.com/tecdat/p/18663097

全文链接:https://tecdat.cn/?p=38708

原文出处:拓端数据部落公众号

分析师:Yuling Fang

信息时代的来临使得企业营销焦点从产品中心转向客户中心,客户关系管理成为企业的核心问题。客户关系管理的关键是客户分群,通过客户分群,区分无价值客户和高价值客户,同时更好的了解客户的特征,使企业能够针对不同价值客户指定优化的个性化服务方案,实现精细化运营。客户分群是关键节点。

任务/目标

根据航空公司观测窗口内的客户社会信息、乘机信息和积分信息对客群进行价值分类,为业务提供运营策划参考。

数据源准备

选取宽度为两年的分析观测窗口,抽取观测窗口内有乘机记录的所有客户的详细数据,共62988行。对原始数据进行探索和数据清洗。

缺失值处理。通过数据探索分析,发现gender、age、sum分别有3、420、689个缺失值,由于变更比总记录数较少,故直接删除处理。

异常值处理。通过对数据观察,发现原始数据中存在平均折扣率不为0、总飞行公里数大于0、票价却为0的数据,属于有异常情况,需要剔除。

特征转换

把不能处理的特征做一些转换,处理成算法容易处理的干净特征:

时间信息。会员入会时间距离观测窗口结束的时间,需要通过入会时间和观测窗口的结束时间相减得到。

省份信息。work_province列存在省份书写格式不统一、部分出现错别字的问题,使用jieba将work_province列拆分字符分类统一格式。

数据变换

构建包含L、R、F、M、C五项指标的新数据表,并对应属性定义表,得到LRFMC模型中五项指标的计算公式:

采用标准差标准化的方法数据进行标准化计算,每项数据减去每项指标数据的平均值,得到的差除于每项指标数据的标准差值。

聚类个数

通过K_means聚类方法进行机器学习,绘图观察误差平方和SSE与中心点个数k的关系,比较每个k值的SSE,使用肘部法寻找误差平方和SSE突然变小时对应的k值,得到k=5,将客户群体聚类划分为5个客群。

建模

LRFMC模型是根据实际场景基于RFM模型优化调整后得到的,是衡量客户价值和客户创造利益能力的重要工具和手段。

聚类结果

将客群按照客户价值聚类划分为五类贴上群体标签,记为1、2、3、4、5五类,对聚类结果进行特征分析,其可视化图形如下:

根据雷达图分布,对客群的类别、指标情况、重要特征、运营建议进行归纳总结,分别如下:

基于航空公司数据的客户价值分析|附数据代码

在当今竞争激烈的航空市场中,深入了解客户价值对于航空公司制定精准营销策略、优化资源配置以及提升客户满意度等方面都有着至关重要的意义。本文旨在通过对航空公司客户相关数据的分析,运用聚类等数据分析方法,挖掘不同客户群体的特征,进而对客户价值进行评估与分析。

数据准备与预处理

首先,我们需要导入一系列常用的数据处理和可视化相关的库,代码如下:

同时,为了确保在图形绘制中能够正确显示中文字体等相关设置,我们会进行如下配置:

 
  1.  
    mpl.rcParams['font.sans-serif'] = ['SimHei']
  2.  
    mpl.rcParams['axes.unicode_minus'] = False
 

接着,从指定路径读取航空公司的客户数据文件,并查看前10行数据,了解数据的大致样貌,代码如下:

 
  1.  
    data = pd.read_csv(r'/Us.csv',encoding='utf-8')
  2.  
    data.head(10)
 

这一步能让我们直观看到诸如会员卡号、入会时间、性别、年龄等众多字段以及对应的数据内容。然后,我们可以通过data.info()查看数据的详细信息,包括每列的数据类型、非空值数量等情况,以此来掌握数据的整体结构。还可以使用data.describe().T对数据进行描述性统计分析,像各列数据的均值、标准差、最小值、最大值等统计指标,有助于我们初步了解各特征的分布情况。
此外,分析数据中的缺失值情况也很关键,通过data.isnull().sum().sort_values(ascending=False)可以统计出每列的缺失值数量,并按照从多到少进行排序。针对存在缺失值的情况,我们做了相应的数据清洗操作,例如筛选出特定列非空的数据等,代码如下:

 
  1.  
    data=data[data['SUM_YR_1'].notnull() & data['SUM_YR_2'].notnull()]
  2.  
    t1 = data['SUM_YR_1']!=0
  3.  
    t2 = data['SUM_YR_2']!=0
 

经过上述一系列的数据预处理操作,我们为后续的客户价值分析打下了良好的数据基础。

LRFMC模型客户价值指标构建

在进行客户价值分析时,我们选取了几个关键的指标来综合衡量客户价值。其中,R代表最近消费时间间隔,具体是用最后一次乘机时间至观察窗口末端时长来衡量;F表示消费频率,也就是观测窗口内的飞行次数;M体现消费金额,由于航空票价受到距离和舱位等级等多种因素影响,这里的舱位因素考虑舱位所对应的折扣系数平均值,距离因素则是一定时间内累积的飞行里程;另外,考虑到航空公司的会员系统中,用户入会时间长短对客户价值有一定影响,所以增加了指标入会时间长度,即客户关系长度,通过观测窗口的结束时间减去入会时间(单位为月)来计算,也就是LOAD_TIME - FFP_DATE
综合起来,我们构建了LRFMC这5个指标,具体如下:

  • L:LOAD_TIME - FFP_DATE(会员入会时间距观测窗口结束的月数)
  • R:LAST_TO_END(客户最近一次乘坐公司距观测窗口结束的月数)
  • F:FLIGHT_COUNT(观测窗口内的飞行次数)
  • M:SEG_KM_SUM(观测窗口的总飞行里程)
  • C:AVG_DISCOUNT(平均折扣率)
    通过以下代码提取相关列数据并查看前几行:
 
  1.  
    df=data[["FFP_DATE","LOAD_TIME","LAST_TO_END","FLIGHT_COUNT","SEG_KM_SUM","avg_discount"]]
  2.  
    df.head()
 

然后,定义函数LRFMC来进一步处理数据,构建包含LRFMC指标的数据结构。

为了消除数据不同特征之间量纲的影响,我们还定义了函数zscore_data对数据进行标准化处理,代码如下:

 
  1.  
    def zscore_data(data):
  2.  
    data2=(data-data.mean(axis=0))/data.std(axis=0)
  3.  
    data2.columns=['Z'+i for i in data.columns]
  4.  
    return data2
  5.  
    df4=zscore_data(df3)
  6.  
    df4.head()
 

客户K-Means聚类分析

接下来,运用K-Means聚类算法对处理好的数据进行聚类分析,以此来划分不同的客户群体。首先,我们设置聚类类别数目等参数,调用K-Means算法进行模型训练,代码如下:

 
  1.  
    k=5
  2.  
    # 调用k-means算法
  3.  
    # 输入聚类类别数目,n_jobs为并行数
  4.  
    #n_clusters就是K值,也是聚类值
  5.  
    #init初始化方法,可以是kmeans++,随机,或者自定义的ndarray
  6.  
    model.fit(df4) # 训练
 

通过model.labels_可以获取每个样本所属的类别标签,进而统计各个类别的数目以及找出聚类中心等:

 
  1.  
    r1 = pd.Series(model.labels_).value_counts() # 统计各个类别的数目
  2.  
    r2 = pd.DataFrame(model.cluster_centers_) # 找出聚类中心
 

将相关结果进行整合,并输出到Excel文件中方便查看和后续分析。

同时,还可以将每个样本对应的类别信息整合到数据中,并输出到Excel文件,代码如下:

 
  1.  
    r3 = pd.concat([df4, pd.Series(model.labels_, index=df4.index)], axis=1) # 详细输出每个样本对应的类别
  2.  
    r3.columns = list(df4.columns) + ['聚类类别'] # 重命名表头
 

为了确定合适的聚类数目,我们通过循环计算不同聚类数目下的簇内误方差(SSE),并绘制折线图进行可视化展示,代码如下:

 
  1.  
     
  2.  
    #n_clusters就是K值,也是聚类值
  3.  
    #init初始化方法,可以是kmeans++,随机,或者自定义的ndarray
  4.  
     
  5.  
     
  6.  
    plt.xlabel("簇数量")
  7.  
    plt.ylabel("簇内误方差(SSE)")
 

对应的可视化图像如下:

其能够帮助我们直观判断选择多少个聚类类别比较合适。

客户群体特征分析与价值评估

基于聚类结果,我们绘制雷达图来对不同客户群体的特征进行可视化分析:

对应的雷达图如下:

从“客户群特征分析图”中,结合业务情况,我们对不同客户群体进行特征分析与价值评估:

  • 客户群1:在平均折扣率(C属性)上表现最为突出,这类客户可以定义为重要挽留客户,航空公司需要格外关注他们的动态,以防其流失。
  • 客户群2:其在最近消费时间间隔(R属性)方面数值最大,而在消费频率(F属性)、总消费金额(M属性)方面是最小的,属于低价值客户群体,对航空公司的贡献相对较低。
  • 客户群3:在消费频率(F属性)、总消费金额(M属性)上数值最大,在最近消费时间间隔(R属性)上最小,这类客户是航空公司的重要保持客户,航空公司应重点投入资源,进行差异化管理,提升他们的忠诚度和满意度,进一步巩固他们的价值。
  • 客户群4:在客户关系长度(L属性)、平均折扣率(C属性)上最小,可将其归类为一般客户,对航空公司来说其价值处于中等偏下水平。
  • 客户群5:在客户关系长度(L属性)上最大,可定义为重要发展客户,虽然他们当前价值可能不是很高,但有着较大的发展潜力,航空公司可以采取相应措施促使他们增加消费。
    综上所述,通过对航空公司客户数据的深入分析和聚类处理,我们清晰地划分出了不同价值的客户群体,航空公司可以依据这些分析结果,制定精准的营销策略,合理分配资源,实现更好的运营和发展。

关于分析师

 

在此对 Yuling Fang 对本文所作的贡献表示诚挚感谢,她完成了智能医学工程专业学位,专注数据相关领域。擅长 Python、SQL、Tableau、Excel,在数据采集、数据统计、数据分析方面有着专业能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/866827.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】2024年直播、短视频:抖音、小红书、快手行业报告汇总PDF合集分享(附原数据表)

原文链接: https://tecdat.cn/?p=38697 在当今数字化飞速发展的时代,直播、短视频行业已然成为了大众生活与商业运作中不容忽视的重要力量,正不断重塑着信息传播与消费的格局。 2024 年,这一领域更是呈现出多元且复杂的发展态势。从内容创作者生态来看,抖音、小红书、快手…

卫龙 IPO 多维度分析及运营创新解析报告-CSDN博客

全文链接: https://tecdat.cn/?p=38686 分析师:Dichuan Zheng 一、报告概述 本报告旨在对卫龙的 IPO 相关情况展开全面分析,涵盖外部环境、波特五力、内部状况、商业模式以及价值链等多方面内容,通过梳理卫龙的发展历程、关键要素等,为了解其上市背景及发展潜力提供参考依…

卷王公开查询设置(1.6版本)

1、公开查询设置页面说明 创建的流程为:问卷 -> 设置 -> 公开查询设置 -> 新增查询页面页面标题,设置查询页面的标题 页面查询描述信息,设置查询页面的描述 查询条件,点击设置可以选择多个查询条件,必须满足所有的查询条件才能输出结果 查询结果,可以控制每一个…

在Lazarus下的Free Pascal编程教程——打造有智能感知的用户设置操作界面

0.前言 我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”和“…

基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM

1.程序功能描述 基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP神经网络,RBF神经网络,LSTM网络.对比预测结果和预测误差。 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 3.核心程序for i = 1:floor(length(data1)/5);p1w(5*i-4:5*i,1) = [p1(i,1);p1(i,1);…

G1原理—2.G1是如何提升分配对象效率

大纲 1.G1的对象分配原理是怎样的 2.深入分析TLAB机制原理 3.借助TLAB分配对象的实现原理是什么 4.什么是快速分配 + 什么是慢速分配 5.大对象分配的过程 + 与TLAB的关系 6.救命的稻草—JVM的最终分配尝试G1如何分配对象+TLAB机制+分区协调机制 G1设计了一套TLAB机制+快速分配机…

《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下

《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下@目录1.Docker简介1.1Docker是什么1.1.1问题:为什么会有docker出现?1.1.2Docker理念1.1.3一句话1.2容器与虚拟机比较1.2.1容器发展简史1.2.2传统虚拟机技术1.2.3容器虚拟化技术1.2.4对比…

redis的zset | 跳表

redis的zset有两种数据结构:跳表和压缩列表 压缩列表除了一般元素外还包括列表长度、列表元素个数、尾部偏移量、列表结束标识等。在zset的长度较小的时候,用这个比较好 什么是跳表 跳表是在链表的基础上,增加了多层索引,利用多级索引的跳转快速实现查询。每次新增一个节点…

Python Matplotlib 教程- Matplotlib 如何进行数据点标记

Python Matplotlib 数据点标记 在数据可视化中,数据点标记是非常重要的部分。无论是绘制折线图、散点图还是柱状图,清晰地标记关键数据点可以帮助观众快速理解图表的核心信息。本篇文章将详细介绍如何在 Python 的 Matplotlib 中实现数据点标记,从基础使用到高级自定义,帮助…

P1803 凌乱的yyy / 线段覆盖

P1803 凌乱的yyy / 线段覆盖 题目 现在各大 oj 上有 \(n\) 个比赛,每个比赛的开始、结束的时间点是知道的。 yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。 所以,他想知道他最多能参加几个比赛。 由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参…

P1325 雷达安装

P1325 雷达安装 题目 假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围 \(d\)。你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内。 数据使用笛卡…

第4章 类型设计准则

第4章 类型设计准则​DO​:类应该由一组定义明确、相互关联的成员组成。 一个类,如果能用一句话描述清楚它的用途,那么它的设计是优秀的。1 类型(class、struct)和 namespace​DO​:namespace 用于组织类,通过 namespace 将相关功能按层次铺开,但不要有过深的层次、过多…