1. 从“一视同仁”到“千人千面”:为什么航空公司必须做客户细分?

朋友们,大家好。今天我想和大家聊聊一个几乎所有公司,尤其是像航空公司这样拥有海量客户的企业,都会面临的“甜蜜的烦恼”:客户太多了,但资源是有限的。你不可能给每个客户都提供头等舱的贵宾服务,也不可能对每个客户都投入同样的营销预算。那怎么办?最笨的办法就是“一视同仁”,搞一刀切的促销活动,比如“所有会员里程双倍累积”。但结果呢?高价值的客户觉得没意思,这点优惠看不上;低价值的客户可能觉得还行,但贡献度依然上不去。钱花了,效果却没达到。

我在这行摸爬滚打这么多年,见过太多企业花冤枉钱。问题的核心在于,你没有真正“认识”你的客户。你不知道谁是你的“金主爸爸”,谁只是偶尔路过,谁又快要流失了。这就引出了我们今天要深入探讨的主题:基于RFM模型的航空公司客户价值细分。这听起来有点学术,但说白了,它就是一套帮你给客户“贴标签”、“分群组”的实战方法,目的是把有限的营销资源,像精确制导导弹一样,投放到最能产生回报的客户身上。

RFM模型其实是一个很经典的分析框架,它用三个核心维度来衡量客户价值:

  • R(Recency):最近一次消费时间。 客户上次坐你家飞机是什么时候?这个值越小,说明客户最近刚和你发生过互动,流失风险相对较低,活跃度高。
  • F(Frequency):消费频率。 在一定时间内,客户坐飞机的次数。次数越多,说明客户对你的依赖度或偏好度越高。
  • M(Monetary):消费金额。 客户花了多少钱。这是最直接的利润贡献指标。

把这三个指标组合起来,你就能快速对客户进行一个初步的划分。比如,一个“R值小、F值高、M值大”的客户,那毫无疑问是你的“VIP中P”,需要重点维护。而一个“R值大、F值低、M值小”的客户,很可能已经流失或者价值很低。

但是,直接套用经典的RFM到航空业,会有点“水土不服”。为什么?因为航空消费有个特点:机票价格受航线距离、舱位等级影响太大。一个经常坐长途经济舱的客户,总消费金额(M)可能比偶尔坐短途商务舱的客户还高,但后者带来的利润和潜在价值显然更大。所以,我们不能简单地看总票价,还需要引入“舱位等级”或“平均折扣率”这个因素。同时,客户成为会员的时间长短(L, Length)也是一个关键维度,老会员的忠诚度和生命周期价值通常更高。这就衍生出了更适合航空业的 LRFMC模型(L:入会时长,R:最近消费间隔,F:消费频率,M:飞行里程,C:平均折扣系数)。

我们的目标,就是利用航空公司真实的客户数据,通过数据挖掘的手段,自动地、科学地把客户分成具有不同特征的几大类。然后,针对每一类客户,制定出“投其所好”的精准营销策略。这整个过程,就是从数据到洞察,再从洞察到行动的完整闭环。下面,我就带你一步步走完这个实战流程,你会发现,用Python和一些常见的数据分析库,你自己也能动手实现。

2. 实战第一步:读懂你的数据——探索性数据分析(EDA)

在做任何模型之前,我们得先跟数据“交朋友”,了解它的脾气秉性。这一步叫探索性数据分析(EDA),就像侦探勘察案发现场,不放过任何蛛丝马迹。我们拿到手的是一份航空公司一段时间内的客户会员数据,包含入会时间、年龄、性别、飞行次数、飞行里程、积分情况等几十个字段。

2.1 数据质量检查:找出“脏数据”

数据从来都不是完美的,里面常常藏着缺失值、异常值甚至重复记录。不处理掉它们,模型的结果就会跑偏。

首先看缺失值。用Python的pandasmissingno库可以很直观地看到哪些字段缺了数据。比如,我们可能会发现“工作城市”、“年龄”等字段有空白。对于“年龄”这种数值型字段,如果缺失不多,且与其他特征相关性不强,用平均值填充是个稳妥的办法。但对于“工作城市”这种分类信息,或许可以单独归为一类“未知”。

然后是异常值。箱线图是我们的好帮手。比如在“年龄”这个字段的箱线图上,我们赫然发现有几个点的年龄超过了100岁甚至110岁。从业务常识判断,这极有可能是数据录入错误(比如把出生年份当成了年龄),属于“脏数据”,需要清洗掉。但要注意,不是所有脱离“箱子”的点都是坏的。比如“总飞行里程”特别高的点,那可能就是我们的“空中飞人”贵宾客户,这些是“有价值的异常值”,要保留。

最后是重复值。完全相同的多条记录通常没有分析价值,直接去重即可。

做完这些,我们才得到一份相对干净、可靠的数据,为后续分析打下基础。我自己的经验是,数据清洗往往要花费整个项目60%以上的时间,但这时间花得值,它决定了你上层建筑(模型)的稳固性。

2.2 数据特征分析:发现业务洞察

清洗完数据,我们就可以开始“欣赏”它了。通过描述性统计和可视化,我们能发现很多有趣的业务现象。

  • 客户画像:我们可以绘制入会年份分布图,发现会员增长趋势,或许在某个年份有爆发式增长(可能是由于某次成功的营销活动)。绘制性别比例饼图,看看男女会员占比是否均衡。绘制会员卡级别分布图,可能发现绝大部分客户都是基础级别,高级别会员凤毛麟角,这提示了会员升级体系的潜力或瓶颈。
  • 消费行为分析:这是重头戏。我们可以分析飞行次数和总飞行里程的分布。你会发现,大部分客户的飞行次数都集中在少数几次,但总有那么一小撮人,飞行次数和里程数远远把其他人甩在身后,这些就是我们的核心高价值客户群。再看票价收入分布,图形很可能呈现严重的“长尾分布”,少数客户贡献了大部分收入,这就是经典的“二八定律”在航空业的体现。
  • 活跃度与忠诚度分析:“最近一次乘机距离现在的时间”这个指标至关重要。它越短,说明客户最近刚飞过,活跃度高。我们可以分析这个时间的分布,如果发现时间间隔长的客户比例在增加,那就是一个危险的信号,说明客户流失在加剧。“平均乘机时间间隔”则反映了客户的乘机习惯是否稳定。

通过这些分析,我们不再面对冰冷的数字,而是对客户群体有了鲜活、立体的认知。我们知道他们是谁,他们怎么飞,他们的价值分布如何。这些洞察本身就能指导很多运营动作,比如针对长时间未飞行的客户启动唤醒活动。

2.3 相关性分析:寻找特征间的“默契”

我们有很多特征,但它们之间是不是有联系呢?比如,飞行次数多的客户,总里程是不是也一定多?积分多的客户,消费金额是不是也高?这时候就需要做相关性分析。

我们可以计算所有数值特征之间的相关系数矩阵,并用热力图可视化出来。颜色越深(比如深红色或深蓝色),代表正相关或负相关关系越强。通过热力图,我们可能发现“飞行次数”、“总飞行里程”和“总票价收入”三者之间高度正相关,这是符合直觉的。而“年龄”可能和其他大多数消费行为特征相关性都不强,这说明年龄可能不是一个强预测指标。

相关性分析有两个重要作用:一是帮助理解业务逻辑,验证我们的常识;二是为下一步的“特征工程”做准备,如果两个特征高度相关,我们可能只需要保留其中一个,避免给模型输入冗余信息,这被称为“属性规约”。

3. 数据预处理:为模型烹饪“食材”

原始数据就像未经处理的食材,我们需要把它洗切腌渍,做成模型能够消化吸收的佳肴。这一步直接决定了模型“吃”得好不好,学得准不准。

3.1 数据清洗:剔除杂质

基于EDA的发现,我们要动手清理数据了。针对航空数据,常见的清洗规则包括:

  1. 删除显著异常记录:比如我们之前发现的年龄大于100岁的记录,这明显不符合常理,直接删除。
  2. 处理票价异常记录:数据中可能存在“票价为0但飞行里程大于0”的记录。这可能是由于积分兑换、员工免票、合作伙伴赠票等原因产生的。从分析客户“货币贡献”的角度,这些记录会干扰M指标。通常的作法是将这些记录的票价视为缺失,或者根据里程和平均折扣率进行估算,但更常见的做法是,如果我们重点分析的是购买行为,可能会考虑暂时剔除这些记录,或在构建M指标时使用其他替代指标(如里程)。
  3. 填补缺失值:对于“年龄”的缺失,我们用整个客户群体的平均年龄来填充。对于“工作地”这类分类变量的缺失,可以单独设为“未知”类别。

清洗后的数据量可能会减少一点,但数据质量大大提升,所谓“宁缺毋滥”。

3.2 属性规约与特征构建:打造LRFMC指标

这是将通用RFM模型适配航空业的关键一步。我们不能直接用原始字段,而是要构造出LRFMC这五个新特征。

  • L(入会时长):用“观测窗口结束时间”(LOAD_TIME)减去“会员入会时间”(FFP_DATE),得到客户成为会员的天数。老会员的价值通常更高。
  • R(最近消费间隔):直接用数据中的“最后一次乘机至观测窗口结束时长”(LAST_TO_END)。这个值越小越好,代表客户最近刚飞过。
  • F(消费频率):在观测窗口期内的“飞行次数”(FLIGHT_COUNT)。次数越多,客户越活跃。
  • M(飞行里程):在观测窗口期内的“总飞行公里数”(SEG_KM_SUM)。这里我们用里程代替金额,避免了航线距离的偏差。
  • C(平均折扣系数):客户在观测窗口期内乘坐舱位所对应的“平均折扣率”(avg_discount)。这个指标非常关键!它反映了客户的舱位等级偏好和支付能力。一个总是买全价经济舱或折扣商务舱的客户,其C值会较高,价值也通常高于购买低折扣经济舱的客户。

这样,我们就从原始的几十个字段中,提炼出了最核心、最相关的五个特征,构成我们的分析矩阵。这个过程就是特征工程,是数据挖掘中的艺术。

3.3 数据变换:让模型站在同一起跑线

我们的五个特征,L是几千天的数字,R是几十上百天的数字,F是几次到几十次,M是几万到几十万公里,C是0到1之间的小数。它们的量纲和数量级差异巨大。而我们将要使用的K-Means聚类算法,是基于数据点之间的“距离”来划分的。如果不处理,数值大的特征(如M)会完全主导距离计算,数值小的特征(如C)就几乎不起作用了。

所以,我们必须进行标准化处理。最常用的方法是Z-score标准化,也就是将每个特征的数据转换为均值为0、标准差为1的分布。用Python的StandardScaler可以轻松实现。经过标准化,所有特征都被压缩到同一个尺度上,模型才能公平地考虑每一个特征的重要性。

至此,我们得到了一份干净、规整、标准化的数据集,每一行代表一个客户,每一列是LRFMC五个标准化后的得分。美味的“食材”已经备好,接下来就是“下锅建模”了。

4. 模型构建:用K-Means给客户“分群”

现在进入核心环节:如何把几万个客户分成有意义的几群?我们选择K-Means聚类算法。它原理直观,效率高,非常适合我们这种大样本量的客户细分场景。它的目标很简单:把相似的客户分到同一个组(簇)里,让组内的客户尽可能相似,组间的客户尽可能不同。

4.1 确定最佳客户群数量(K值)

K-Means需要我们事先指定要分成几类(K值)。选多少合适呢?这里需要结合业务理解和技术方法。从业务上讲,航空公司通常希望将客户分为3-5个价值等级进行差异化运营,分得太细管理成本高,分得太粗没有意义。

技术上,我们可以借助“手肘法”来辅助决策。其原理是计算不同K值下聚类结果的“误差平方和”(SSE),也就是每个点到其所属簇中心的距离平方和。随着K增大,SSE自然会下降(因为每个簇更精细了)。我们要找的是那个拐点,即再增加K值,SSE下降幅度突然变缓的点,形状像手肘一样。在Python中,我们可以遍历K从2到10的值,画出SSE曲线图。在实际操作中,我们可能会发现K=4或5时是一个不错的拐点。结合业务上希望分为重要保持、重要发展、重要挽留、一般、低价值这5类,我们最终确定 K=5

4.2 运行K-Means与解读聚类中心

确定了K=5,我们就可以运行K-Means算法了。使用sklearn库的KMeans类,几行代码就能完成建模。模型会输出两个关键结果:

  1. 每个客户的簇标签(0, 1, 2, 3, 4):这直接告诉我们每个客户属于哪一类。
  2. 每个簇的中心点坐标:这是一个5行(5个簇)5列(LRFMC五个特征)的矩阵。这是理解每一类客户特征的“钥匙”!

我们需要仔细分析这个中心点矩阵。由于数据经过了标准化,中心点的数值表示该簇客户在某个特征上相对于全体平均水平的偏离程度。正值表示高于平均水平,负值表示低于平均水平。

例如,我们可能得到类似下面的结果(数值为假设):

  • 簇0中心: L=0.8, R=-1.2, F=1.5, M=1.6, C=0.9
  • 簇1中心: L=-1.5, R=0.3, F=-0.8, M=-0.7, C=-0.5
  • 簇2中心: L=1.2, R=0.8, F=0.5, M=0.6, C=0.2
  • 簇3中心: L=0.1, R=-1.5, F=1.8, M=1.9, C=0.1
  • 簇4中心: L=-0.5, R=1.5, F=-1.2, M=-1.3, C=-0.8

4.3 可视化呈现:雷达图洞察客户群特征

数字不够直观,我们可以绘制雷达图来可视化这五个簇的特征。将五个特征(LRFMC)作为五个轴,把每个簇的中心点值在轴上标出并连线,就形成了一个五边形。通过对比五个五边形的形状,我们能一眼看出各类客户的差异。

比如,假设我们绘制出的雷达图显示:

  • 客户群1:在F(频率)、M(里程)、C(折扣率)上得分很高,在R(最近间隔)上得分很低(因为是负值,越小表示最近刚消费)。这说明他们是高频、高里程、高舱位消费,且最近刚飞过的客户。这不就是我们梦寐以求的“重要保持客户”吗?
  • 客户群2:在L(时长)上得分很低,在其他特征上得分也多为负值或接近0。这说明他们是新入会、消费频率低、里程少、舱位等级也低的客户,属于“新会员”或“低价值客户”。
  • 客户群3:在L(时长)上得分最高,在R(间隔)上得分也较高(正值,表示有一段时间没飞了),F/M/C适中。这像是入会时间长但近期不活跃的老会员,有流失风险,属于“重要挽留客户”。
  • 客户群4:在F和M上得分极高,在R上得分极低(负值大),但C值一般。这像是频繁飞行、里程多、最近很活跃,但主要乘坐经济舱的客户,可能是商务出差人士,属于“重要发展客户”(有潜力向更高舱位转化)。
  • 客户群5:在R上得分很高(正值大),其他特征得分都很低。这是典型的近期已流失的客户

通过雷达图,五类客户的形象瞬间清晰起来,从抽象的数字变成了可以理解的画像。

5. 从分群到策略:制定精准营销行动方案

客户分群不是终点,而是精准营销的起点。模型告诉我们“谁是谁”,接下来就要决定“对谁做什么”。

5.1 客户价值排名与标签定义

根据聚类中心的分析,我们可以对五个群体进行价值排序和命名:

  1. 重要保持客户(客户群1):高价值核心客户。他们是航空公司利润的基石。
  2. 重要发展客户(客户群4):高潜力客户。消费频繁且活跃,但舱位等级有提升空间。
  3. 重要挽留客户(客户群3):有流失风险的高价值客户。曾经贡献大,但近期活跃度下降。
  4. 一般客户(客户群2):低价值新会员或偶尔消费的客户。
  5. 低价值客户(客户群5):已基本流失的客户。

5.2 制定差异化营销策略

现在,我们可以“看人下菜碟”了:

  • 针对重要保持客户:策略核心是“保持与奖励”。提供最高级别的服务,如优先升舱、机场贵宾厅无限次使用、专属客服、生日礼物、高价值积分兑换权益。营销活动不是重点刺激他们消费(因为他们已经很活跃了),而是提升他们的忠诚度和归属感,防止被竞争对手挖走。可以推出“忠诚度进阶奖励”,飞行次数或里程累积到一定阶段给予超级奖励。
  • 针对重要发展客户:策略核心是“引导与升级”。他们飞得多,但花得不够“高端”。可以定向推送商务舱/头等舱的升舱优惠券、两舱体验活动。在积分累积上,向他们倾斜更多“舱位等级加成”,鼓励他们购买更高折扣的机票。将他们视为未来的“重要保持客户”来培养。
  • 针对重要挽留客户:策略核心是“唤醒与挽回”。他们长时间没有飞行,流失风险高。需要立即启动客户挽回计划。可以发送带有强烈吸引力的“回归礼包”,如大额折扣券、赠送定量的升级里程、调查问卷(了解不再飞行的原因)。电话回访可能比邮件更有效,表达关怀并了解需求。
  • 针对一般客户:策略核心是“培育与转化”。通过普适性的营销活动,如新航线推广、节假日特价机票、简单的积分兑换小礼品,保持他们的关注度,并尝试将其中一部分转化为更频繁的消费者。不宜投入过高成本。
  • 针对低价值客户:策略核心是“低成本维护”。可以暂时减少主动营销推送的频率,避免引起反感。当有极其优惠的、填充空余座位的“甩尾票”时,可以定向推送给他们。或者通过简单的生日祝福邮件保持最低限度的联系。

5.3 策略实施与效果监控

将分群结果导入到公司的CRM系统或营销自动化平台,为每个客户打上“价值标签”。市场、销售、客服团队都可以基于这个标签来开展日常工作。例如,客服热线可以优先接入高价值客户的来电;推送广告时,对不同人群展示不同的创意和优惠。

更重要的是,这是一个动态的过程。客户的价值会变化,今天的“重要发展客户”可能明天就成了“重要保持客户”,也可能变成“重要挽留客户”。因此,这个RFM-KMeans模型需要定期(如每季度)重新运行,更新客户的分群标签,监控各个人群的数量和特征变化趋势,从而及时调整营销策略。这才是数据驱动运营的真正闭环。

在我经历的项目中,实施这样的客户细分和精准营销策略后,客户的营销响应率通常能有显著提升,而营销成本却得到控制,因为钱花在了刀刃上。它让营销从一门“艺术”变得更像一门“科学”。希望这个详细的实战流程,能给你带来启发,不妨试着用你自己的数据跑一遍,你会发现,那些沉睡的数据,真的能开口告诉你业务的秘密。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐