news 2026/7/6 23:44:50

LRFMC模型 Python 3.12 实战:5步完成航空公司客户价值聚类与雷达图可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LRFMC模型 Python 3.12 实战:5步完成航空公司客户价值聚类与雷达图可视化

LRFMC模型Python 3.12实战:5步完成航空公司客户价值聚类与雷达图可视化

在航空业这个竞争激烈的市场中,理解客户价值并采取针对性策略已成为企业生存发展的关键。传统RFM模型在分析航空客户时存在明显局限——飞行里程和折扣率的复杂性使得单纯以消费金额衡量客户价值变得不再准确。这正是LRFMC模型的价值所在,它通过五个维度全面评估航空客户价值,为企业资源分配提供科学依据。

本文将带您使用Python 3.12完整实现LRFMC模型分析流程,从数据清洗到可视化呈现,最终产出可直接用于业务决策的客户分群结果。不同于理论讲解,我们聚焦于可落地的代码实现和直观的结果解读,让数据真正产生商业价值。

1. 环境准备与数据加载

工欲善其事,必先利其器。我们首先配置Python 3.12的分析环境。建议使用Anaconda创建独立环境,避免包版本冲突:

conda create -n airline python=3.12 conda activate airline pip install pandas numpy scikit-learn matplotlib seaborn

航空公司客户数据通常包含会员基本信息、乘机记录、消费明细等。假设我们已获得包含以下关键字段的原始数据集:

  • 会员信息:FFP_DATE(入会日期)、LOAD_TIME(观测窗口结束时间)
  • 乘机行为:LAST_TO_END(最后一次乘机距结束时间)、FLIGHT_COUNT(飞行次数)
  • 消费特征:SEG_KM_SUM(总飞行公里数)、avg_discount(平均折扣率)

加载数据并初步探索:

import pandas as pd import numpy as np # 加载原始数据 raw_data = pd.read_csv('air_data.csv', encoding='utf-8') print(f"原始数据量: {len(raw_data)}条记录") print("数据概览:") print(raw_data.head(3)) # 检查缺失值 missing_values = raw_data.isnull().sum() print("\n缺失值统计:") print(missing_values[missing_values > 0])

典型的数据质量问题包括票价空值、异常零值记录等。这些"脏数据"会严重影响后续分析,必须谨慎处理。

2. 数据预处理与特征工程

高质量的分析始于干净的数据。航空数据清洗需结合业务逻辑,我们重点关注两类问题记录:

  1. 票价空值:可能表示客户无实际乘机记录
  2. 零票价异常:票价为零但折扣率非零且飞行里程为正,数据矛盾

清洗代码实现:

# 复制原始数据避免污染 clean_data = raw_data.copy() # 规则1:删除票价空值记录 clean_data = clean_data[clean_data['SUM_YR_1'].notnull() & clean_data['SUM_YR_2'].notnull()] # 规则2:删除异常零值记录 zero_fare = (clean_data['SUM_YR_1'] == 0) & (clean_data['SUM_YR_2'] == 0) nonzero_discount = (clean_data['avg_discount'] != 0) positive_distance = (clean_data['SEG_KM_SUM'] > 0) anomaly_index = zero_fare & nonzero_discount & positive_distance clean_data = clean_data[~anomaly_index] print(f"清洗后数据量: {len(clean_data)}条")

接下来构造LRFMC特征。这五个维度分别反映客户的不同价值侧面:

指标计算公式业务意义
L (客户关系长度)LOAD_TIME - FFP_DATE会员忠诚度时长
R (最近消费时间)LAST_TO_END客户活跃程度
F (消费频率)FLIGHT_COUNT客户乘机频次
M (飞行里程)SEG_KM_SUM客户贡献规模
C (平均折扣率)avg_discount客户价值质量

特征构造代码:

# 转换日期格式 clean_data['FFP_DATE'] = pd.to_datetime(clean_data['FFP_DATE']) clean_data['LOAD_TIME'] = pd.to_datetime(clean_data['LOAD_TIME']) # 计算L特征:会员时长(月) clean_data['L'] = ((clean_data['LOAD_TIME'] - clean_data['FFP_DATE']).dt.days / 30).round(1) # 其他特征直接映射 clean_data['R'] = clean_data['LAST_TO_END'] clean_data['F'] = clean_data['FLIGHT_COUNT'] clean_data['M'] = clean_data['SEG_KM_SUM'] clean_data['C'] = clean_data['avg_discount'] # 选择最终特征 lrfmc_data = clean_data[['L', 'R', 'F', 'M', 'C']]

由于各指标量纲差异大(如L是月数,M是公里数),必须进行标准化处理:

from sklearn.preprocessing import StandardScaler scaler = StandardScaler() lrfmc_scaled = scaler.fit_transform(lrfmc_data) lrfmc_scaled = pd.DataFrame(lrfmc_scaled, columns=['ZL', 'ZR', 'ZF', 'ZM', 'ZC']) print("标准化后数据样例:") print(lrfmc_scaled.head())

3. K-Means聚类建模

聚类分析是客户分群的核心。我们使用K-Means算法,关键步骤包括:

  1. 确定最佳聚类数(K值)
  2. 训练聚类模型
  3. 评估聚类效果

3.1 寻找最佳K值

肘部法则(Elbow Method)通过观察不同K值下SSE(误差平方和)的变化确定最佳聚类数:

import matplotlib.pyplot as plt from sklearn.cluster import KMeans sse = [] k_range = range(1, 10) for k in k_range: kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(lrfmc_scaled) sse.append(kmeans.inertia_) # 绘制肘部曲线 plt.figure(figsize=(8, 4)) plt.plot(k_range, sse, 'bo-') plt.xlabel('聚类数 K') plt.ylabel('SSE') plt.title('肘部法则确定最佳K值') plt.grid(True) plt.show()

航空客户分析通常选择K=5,对应五类典型客户群体。这与业务经验相符,也便于后续制定差异化策略。

3.2 训练聚类模型

确定K=5后,训练最终模型:

k = 5 kmeans = KMeans(n_clusters=k, random_state=42) clusters = kmeans.fit_predict(lrfmc_scaled) # 将聚类结果加入数据集 lrfmc_data['Cluster'] = clusters lrfmc_scaled['Cluster'] = clusters # 查看各类样本分布 cluster_dist = lrfmc_data['Cluster'].value_counts().sort_index() print("各类客户数量分布:") print(cluster_dist)

3.3 聚类中心分析

聚类中心反映各类客户的典型特征:

cluster_centers = pd.DataFrame( scaler.inverse_transform(kmeans.cluster_centers_), columns=['L', 'R', 'F', 'M', 'C'] ) cluster_centers['Cluster'] = range(k) print("各类客户特征中心值:") print(cluster_centers.round(1))

通过对比各维度数值,我们已能初步识别高价值客户群。但为了更直观理解,需要进一步可视化分析。

4. 客户价值可视化分析

4.1 雷达图绘制

雷达图能同时展示五个维度的特征,是呈现客户群特征的理想选择:

import numpy as np # 准备雷达图数据 labels = ['L', 'R', 'F', 'M', 'C'] centers = cluster_centers.drop('Cluster', axis=1) angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False) angles = np.concatenate((angles, [angles[0]])) # 闭合图形 # 绘制雷达图 fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(111, polar=True) for i in range(k): values = centers.iloc[i].values values = np.concatenate((values, [values[0]])) ax.plot(angles, values, 'o-', linewidth=2, label=f'Cluster {i}') ax.fill(angles, values, alpha=0.1) ax.set_thetagrids(angles * 180/np.pi, labels) ax.set_title('航空客户群特征雷达图', pad=20) ax.grid(True) ax.legend(loc='upper right', bbox_to_anchor=(1.2, 1.1)) plt.show()

4.2 业务解读与客户命名

结合雷达图和聚类中心,我们为每类客户赋予业务含义:

类别L(忠诚度)R(活跃度)F(频率)M(里程)C(折扣)客户类型
0重要保持客户
1一般客户
2低价值客户
3重要发展客户
4重要挽留客户

重要保持客户(Cluster 0)是最优质的客户群体:入会时间长、最近有乘机、频率高、里程多且不在意折扣。航空公司应优先保障这类客户的服务体验,防止流失。

5. 分析结果应用与策略建议

数据价值在于落地应用。基于聚类结果,我们可制定精准营销策略:

  1. 重要保持客户:提供专属增值服务(如免费升舱、贵宾厅),增强客户粘性
  2. 重要发展客户:设计里程加速计划,鼓励增加乘机频次
  3. 重要挽留客户:发送个性化召回优惠,了解流失原因
  4. 一般客户:通过常旅客计划培养忠诚度
  5. 低价值客户:控制营销资源投入,关注低成本获客渠道

将聚类结果保存为Excel,便于业务部门使用:

# 合并原始数据与聚类结果 final_data = pd.concat([clean_data, pd.Series(clusters, name='Cluster')], axis=1) # 保存分析结果 with pd.ExcelWriter('airline_cluster_results.xlsx') as writer: final_data.to_excel(writer, sheet_name='客户明细', index=False) cluster_centers.to_excel(writer, sheet_name='聚类中心', index=False) # 添加业务解读 interpretation = pd.DataFrame({ 'Cluster': range(5), '客户类型': ['重要保持客户', '一般客户', '低价值客户', '重要发展客户', '重要挽留客户'], '营销策略': [ '提供专属增值服务,如免费升舱、贵宾厅', '通过常旅客计划培养忠诚度', '控制营销资源投入,关注低成本获客', '设计里程加速计划,鼓励增加乘机频次', '发送个性化召回优惠,了解流失原因' ] }) interpretation.to_excel(writer, sheet_name='业务解读', index=False)

在实际项目中,可进一步将分析过程封装为自动化报表或Dashboard,定期更新客户分群结果,形成数据驱动的客户管理闭环。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 23:42:03

外文论文辅导平台哪家好?2026年主流服务对比与选择指南

撰写外文论文时,不少研究者都会遇到相似的困扰:学术表达不够地道、文献引用格式反复出错、整体结构缺乏逻辑性,甚至因为语言问题被导师或期刊反复退回。这些问题并不是个人能力不足,而是缺少一套系统化的写作指导和语言把关。于是…

作者头像 李华
网站建设 2026/7/6 23:41:23

AI 开源工具链复现:环境锁定比安装成功更重要

AI 开源工具链复现:环境锁定比安装成功更重要 一、pip install 成功只是开始 复现 AI 开源项目时,很多 README 写得很顺:安装依赖、下载模型、运行 demo。真正复现时却会遇到 CUDA 版本不匹配、依赖冲突、模型权重失效、数据集链接变化、默认…

作者头像 李华
网站建设 2026/7/6 23:40:55

Python取模运算深度解析:从循环索引到负数余数的工程实践

1. 项目概述:为什么一个“取余”符号值得你花一整晚去琢磨?你有没有在写循环时突然卡住——想让程序每5次迭代执行一次日志,结果发现i 5只触发一次,i % 5 0才真正管用?有没有调试过一个“明明该是星期三却显示星期一…

作者头像 李华
网站建设 2026/7/6 23:40:37

Web自动化测试中验证码处理与Cookie管理的实战策略

1. 项目概述:当自动化测试遇上验证码与Cookie做Web UI自动化测试的朋友,估计都绕不开两个“老大难”问题:验证码处理和Cookie管理。标题里的“12_web自动化测试 _验证码处理和cookie”,一看就是某个系列课程或实战总结的第十二章&…

作者头像 李华
网站建设 2026/7/6 23:40:21

ntpd vs chrony vs systemd-timesyncd:3 款 Linux 时间同步方案对比与选型指南

ntpd vs chrony vs systemd-timesyncd:3 款 Linux 时间同步方案深度评测与工程实践在分布式系统、金融交易和日志分析等领域,毫秒级的时间偏差都可能导致数据不一致或业务异常。本文将深入解析 Linux 生态中三大主流时间同步方案的技术特性,通…

作者头像 李华