Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...
全文链接: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五类,对聚类结果进行特征分析,其可视化图形如下:
点击标题查阅往期内容
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
左右滑动查看更多
01
02
03
04
根据雷达图分布,对客群的类别、指标情况、重要特征、运营建议进行归纳总结,分别如下:
基于航空公司数据的客户价值分析|附数据代码
在当今竞争激烈的航空市场中,深入了解客户价值对于航空公司制定精准营销策略、优化资源配置以及提升客户满意度等方面都有着至关重要的意义。本文旨在通过对航空公司客户相关数据的分析,运用聚类等数据分析方法,挖掘不同客户群体的特征,进而对客户价值进行评估与分析。
数据准备与预处理
首先,我们需要导入一系列常用的数据处理和可视化相关的库,代码如下:
同时,为了确保在图形绘制中能够正确显示中文字体等相关设置,我们会进行如下配置:
mpl.rcParams\['font.sans-serif'\] = \['SimHei'\]
mpl.rcParams\['axes.unicode_minus'\] = False
接着,从指定路径读取航空公司的客户数据文件,并查看前10行数据,了解数据的大致样貌,代码如下:
data = pd.read_csv(r'/Us.csv',encoding='utf-8')
data.head(10)
这一步能让我们直观看到诸如会员卡号、入会时间、性别、年龄等众多字段以及对应的数据内容。然后,我们可以通过data.info()
查看数据的详细信息,包括每列的数据类型、非空值数量等情况,以此来掌握数据的整体结构。还可以使用data.describe().T
对数据进行描述性统计分析,像各列数据的均值、标准差、最小值、最大值等统计指标,有助于我们初步了解各特征的分布情况。
此外,分析数据中的缺失值情况也很关键,通过data.isnull().sum().sort_values(ascending=False)
可以统计出每列的缺失值数量,并按照从多到少进行排序。针对存在缺失值的情况,我们做了相应的数据清洗操作,例如筛选出特定列非空的数据等,代码如下:
data=data\[data\['SUM\_YR\_1'\].notnull() & data\['SUM\_YR\_2'\].notnull()\]
t1 = data\['SUM\_YR\_1'\]!=0
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
(平均折扣率)
通过以下代码提取相关列数据并查看前几行:
df=data\[\["FFP\_DATE","LOAD\_TIME","LAST\_TO\_END","FLIGHT\_COUNT","SEG\_KM\_SUM","avg\_discount"\]\]
df.head()
然后,定义函数LRFMC
来进一步处理数据,构建包含LRFMC指标的数据结构。
为了消除数据不同特征之间量纲的影响,我们还定义了函数zscore_data
对数据进行标准化处理,代码如下:
def zscore_data(data):data2=(data-data.mean(axis=0))/data.std(axis=0)data2.columns=\['Z'+i for i in data.columns\]return data2
df4=zscore_data(df3)
df4.head()
客户K-Means聚类分析
接下来,运用K-Means聚类算法对处理好的数据进行聚类分析,以此来划分不同的客户群体。首先,我们设置聚类类别数目等参数,调用K-Means算法进行模型训练,代码如下:
k=5
# 调用k-means算法
# 输入聚类类别数目,n_jobs为并行数
#n_clusters就是K值,也是聚类值
#init初始化方法,可以是kmeans++,随机,或者自定义的ndarray
model.fit(df4) # 训练
通过model.labels_
可以获取每个样本所属的类别标签,进而统计各个类别的数目以及找出聚类中心等:
r1 = pd.Series(model.labels_).value_counts() # 统计各个类别的数目
r2 = pd.DataFrame(model.cluster\_centers\_) # 找出聚类中心
将相关结果进行整合,并输出到Excel文件中方便查看和后续分析。
同时,还可以将每个样本对应的类别信息整合到数据中,并输出到Excel文件,代码如下:
r3 = pd.concat(\[df4, pd.Series(model.labels_, index=df4.index)\], axis=1) # 详细输出每个样本对应的类别
r3.columns = list(df4.columns) + \['聚类类别'\] # 重命名表头
为了确定合适的聚类数目,我们通过循环计算不同聚类数目下的簇内误方差(SSE),并绘制折线图进行可视化展示,代码如下:
#n_clusters就是K值,也是聚类值#init初始化方法,可以是kmeans++,随机,或者自定义的ndarrayplt.xlabel("簇数量")
plt.ylabel("簇内误方差(SSE)")
对应的可视化图像如下:
其能够帮助我们直观判断选择多少个聚类类别比较合适。
客户群体特征分析与价值评估
基于聚类结果,我们绘制雷达图来对不同客户群体的特征进行可视化分析:
对应的雷达图如下:
从“客户群特征分析图”中,结合业务情况,我们对不同客户群体进行特征分析与价值评估:
客户群1:在平均折扣率(C属性)上表现最为突出,这类客户可以定义为重要挽留客户,航空公司需要格外关注他们的动态,以防其流失。
客户群2:其在最近消费时间间隔(R属性)方面数值最大,而在消费频率(F属性)、总消费金额(M属性)方面是最小的,属于低价值客户群体,对航空公司的贡献相对较低。
客户群3:在消费频率(F属性)、总消费金额(M属性)上数值最大,在最近消费时间间隔(R属性)上最小,这类客户是航空公司的重要保持客户,航空公司应重点投入资源,进行差异化管理,提升他们的忠诚度和满意度,进一步巩固他们的价值。
客户群4:在客户关系长度(L属性)、平均折扣率(C属性)上最小,可将其归类为一般客户,对航空公司来说其价值处于中等偏下水平。
客户群5:在客户关系长度(L属性)上最大,可定义为重要发展客户,虽然他们当前价值可能不是很高,但有着较大的发展潜力,航空公司可以采取相应措施促使他们增加消费。
综上所述,通过对航空公司客户数据的深入分析和聚类处理,我们清晰地划分出了不同价值的客户群体,航空公司可以依据这些分析结果,制定精准的营销策略,合理分配资源,实现更好的运营和发展。
关于分析师
在此对 Yuling Fang 对本文所作的贡献表示诚挚感谢,她完成智能医学工程专业学位,专注数据相关领域。擅长 Python、SQL、Tableau、Excel,在数据采集、数据统计、数据分析方面有着专业能力。
数据获取
在公众号后台回复“航空客户数据”,可免费获取完整数据。
本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群!
资料获取
在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。
点击文末“阅读原文”
获取全文完整代码数据资料。
本文选自《Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享》。
点击标题查阅往期内容
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
R语言基于树的方法:决策树,随机森林,Bagging,增强树
R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
spss modeler用决策树神经网络预测ST的股票
R语言中使用线性模型、回归决策树自动组合特征因子水平
R语言中自编基尼系数的CART回归决策树的实现
R语言用rle,svm和rpart决策树进行时间序列预测
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证
R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析
R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
R语言ISLR工资数据进行多项式回归和样条回归分析
R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型
R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量
R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
如何用R语言在机器学习中建立集成模型?
R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
在python 深度学习Keras中计算神经网络集成模型
R语言ARIMA集成模型预测时间序列分析
R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者
R语言基于树的方法:决策树,随机森林,Bagging,增强树
R语言基于Bootstrap的线性回归预测置信区间估计方法
R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析
R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
matlab使用分位数随机森林(QRF)回归树检测异常值
相关文章:

Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...
全文链接:https://tecdat.cn/?p38708 分析师:Yuling Fang 信息时代的来临使得企业营销焦点从产品中心转向客户中心,客户关系管理成为企业的核心问题(点击文末“阅读原文”获取完整代码数据)。 客户关系管理的关键是客…...
WebRTC的三大线程
WebRTC中的三个主要线程: signaling_thread,信号线程:用于与应用层交互worker_thread,工作线程(最核心):负责内部逻辑处理network_thread,网络线程:负责网络数据包的收发…...

Spring SpEL表达式由浅入深
标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…...
数据设计规范
目录 一、数据库设计的原则 二、表设计原则 三、其他设计规范 四、最佳实践 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据&#…...

基于SpringBoot的宠物寄养系统的设计与实现(源码+SQL+LW+部署讲解)
文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...
深度学习中的HTTP:从请求到响应的计算机网络交互
在现代深度学习应用中,HTTP(超文本传输协议)不仅仅是网页浏览的基础协议,它也在机器学习和人工智能的服务架构中扮演着至关重要的角色。本文将深入探讨HTTP在深度学习中的应用,并阐明它如何支持模型的训练、推理及API服…...

Agent系列:AppAgent v2-屏幕智能Agent(详解版)
引言 简介 方法 Agent 框架 Agent 交互 探索阶段 部署阶段 文档生成 高级功能 实验结果 总结 局限性 未来工作 1. 引言 大语言模型(LLM)如 ChatGPT 和 GPT-4 显著提升了自然语言处理能力,并且推动了智能体在自主决策中的应用。…...

艾体宝方案丨全面提升API安全:AccuKnox 接口漏洞预防与修复
一、API 安全:现代企业的必修课 在现代技术生态中,应用程序编程接口(API)扮演着不可或缺的角色。从数据共享到跨平台集成,API 成为连接企业系统与外部服务的桥梁。然而,伴随云计算的普及与微服务架构的流行…...

开源的Vue低代码表单设计器 form-create-designer v3.2.9 版本发布,新增10多种功能
form-create-designer 是一款开源的低代码表单设计器,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 项目采…...

Android Killer 无法调用jd-gui.exe
在Android Killer 时,点击图标转换为java代码时,调用jd-gui.exe 弹窗无法验证发布者,点击运行没反应 第一种方案:开启组策略(网上找的,没有效果) 键盘WinR ,在弹出窗口中输入gped…...

24.01.01 MyBatis
对sql拆分简化之后,更适合使用MyBatisPlus 搭建项目 引入依赖 <!--Mysql 驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--Druid数据库连接池--><dependenc…...

游戏引擎学习第70天
这一节没讲什么主要是关于接下来要干的任务 开发过程概览 我们正在进行最后的总结,并计划接下来的步骤。目前的目标是创建一个包含所有必要组件的游戏引擎原型版本,目的是让这些部分能够协同工作并展现预期效果。通过这一过程,可以实验和探…...
深入理解 Spring Cloud 中的 Eureka、Ribbon 和 Feign
1.eureka自我保护机制是什么? Eureka的自我保护机制是一种针对网络异常情况的安全保护措施,旨在防止因为网络问题导致的服务注册中心(Eureka Server)与微服务实例之间的通信故障。当网络分区或其他形式的网络故障发生时,即使微服…...

DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程
目录 暴力破解low方法1方法2 mediumhighimpossible 暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码、密钥或其他安全凭证的攻击方法。它是一种简单但通常无效率的破解技术,适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时。暴力破解的基…...

山高路陡,无人机代替滑轨吊运物资极大提高做作业效率降低成本
在山高路陡的地区,无人机代替传统的滑轨吊运物资,极大地提高了作业效率并降低了成本。以下是对这一现象的详细分析: 一、无人机吊运的优势 1. 提高作业效率: 无人机能够快速响应并执行吊运任务,尤其在高山、陡峭或交…...
数据的高级处理——pandas模块进阶——数据的统计运算
今天的学习用有好几处与书上的内容有出入,不只是因为pycharm中函数更新、弃用的问题,还是作者有些疏忽。不过影响不大,运行报错,GPT分析一下,原因很简单。这里不进行详细书名,在下边的代码上已经进行详细的…...

【Leetcode】3280. 将日期转换为二进制表示
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个字符串 date,它的格式为 yyyy-mm-dd,表示一个公历日期。 date 可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示&a…...

Vue3 中自定义hook
什么是hook?—— 本质是一个函数,把setup函数中使用的Composition API进行了封装,类似于vue2.x中的mixin。 自定义hook的优势:复用代码, 让setup中的逻辑更清楚易懂。 场景需求:现在我需要获取当前鼠标所点击的地方的…...

嵌入式系统 第七讲 ARM-Linux内核
• 7.1 ARM-Linux内核简介 • 内核:是一个操作系统的核心。是基于硬件的第一层软件扩充, 提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统, 决定着系统的…...

音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件
一、错误的命令 通过FFmpeg命令可以将mp4文件转换为ps文件,PS文件中包含PS流数据。 由于PS流/PS文件对应的FFInputFormat结构为: const FFInputFormat ff_mpegps_demuxer {.p.name "mpeg",.p.long_name NULL_IF_CONFIG_SMALL…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...