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

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 python3.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, encodingutf-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. 数据预处理与特征工程高质量的分析始于干净的数据。航空数据清洗需结合业务逻辑我们重点关注两类问题记录票价空值可能表示客户无实际乘机记录零票价异常票价为零但折扣率非零且飞行里程为正数据矛盾清洗代码实现# 复制原始数据避免污染 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算法关键步骤包括确定最佳聚类数K值训练聚类模型评估聚类效果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_clustersk, random_state42) 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()航空客户分析通常选择K5对应五类典型客户群体。这与业务经验相符也便于后续制定差异化策略。3.2 训练聚类模型确定K5后训练最终模型k 5 kmeans KMeans(n_clustersk, random_state42) 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, axis1) angles np.linspace(0, 2*np.pi, len(labels), endpointFalse) angles np.concatenate((angles, [angles[0]])) # 闭合图形 # 绘制雷达图 fig plt.figure(figsize(10, 6)) ax fig.add_subplot(111, polarTrue) for i in range(k): values centers.iloc[i].values values np.concatenate((values, [values[0]])) ax.plot(angles, values, o-, linewidth2, labelfCluster {i}) ax.fill(angles, values, alpha0.1) ax.set_thetagrids(angles * 180/np.pi, labels) ax.set_title(航空客户群特征雷达图, pad20) ax.grid(True) ax.legend(locupper 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. 分析结果应用与策略建议数据价值在于落地应用。基于聚类结果我们可制定精准营销策略重要保持客户提供专属增值服务如免费升舱、贵宾厅增强客户粘性重要发展客户设计里程加速计划鼓励增加乘机频次重要挽留客户发送个性化召回优惠了解流失原因一般客户通过常旅客计划培养忠诚度低价值客户控制营销资源投入关注低成本获客渠道将聚类结果保存为Excel便于业务部门使用# 合并原始数据与聚类结果 final_data pd.concat([clean_data, pd.Series(clusters, nameCluster)], axis1) # 保存分析结果 with pd.ExcelWriter(airline_cluster_results.xlsx) as writer: final_data.to_excel(writer, sheet_name客户明细, indexFalse) cluster_centers.to_excel(writer, sheet_name聚类中心, indexFalse) # 添加业务解读 interpretation pd.DataFrame({ Cluster: range(5), 客户类型: [重要保持客户, 一般客户, 低价值客户, 重要发展客户, 重要挽留客户], 营销策略: [ 提供专属增值服务如免费升舱、贵宾厅, 通过常旅客计划培养忠诚度, 控制营销资源投入关注低成本获客, 设计里程加速计划鼓励增加乘机频次, 发送个性化召回优惠了解流失原因 ] }) interpretation.to_excel(writer, sheet_name业务解读, indexFalse)在实际项目中可进一步将分析过程封装为自动化报表或Dashboard定期更新客户分群结果形成数据驱动的客户管理闭环。