RFM客群细分AI:零售银行精准营销的数学内核

RFM客群细分AI:零售银行精准营销的数学内核

RFM模型不是新东西——1930年代直邮营销就在用了。但当它遇上K-Means和业务规则引擎,就能从"粗放分层"进化为"千人千面"。

一个经典的业务问题

某股份制银行零售部有120万个人客户,年度营销预算5000万。市场部的做法是:

按资产分层:AUM>50万(私行)、5-50万(财富)、1-5万(基础)、<1万(长尾)

每一层发一样的短信、推一样的产品

结果呢?短信打开率2.3%,理财转化率0.8%。5000万预算花完了,新增AUM才8000万——投入产出比不到2倍。

问题不在预算多少,而在于"一刀切"的分层太粗了。同样是AUM 10万的客户,一个是每月定投5000的基金爱好者,一个是三年前买了一笔理财就再没动过的沉睡户——他们的需求和触达策略完全不同。

RFM:三个维度看懂客户

RFM三个字母代表三个维度:

**R (Recency)**:最近一次交易距今天数——"多久没来了"

**F (Frequency)**:一段时间内的交易次数——"来得勤不勤"

**M (Monetary)**:一段时间内的交易金额——"花了多少钱"

用这三个维度给客户打分:

客户A:R=5天(刚来过)、F=24次/年(每月两次)、M=12万/年(中等消费)

客户B:R=180天(半年没来)、F=2次/年(几乎不来)、M=50万/年(单笔大额)

客户C:R=3天(经常来)、F=52次/年(每周一次)、M=2000元/年(小额高频)

传统做法是按每个维度分成5档(1-5分),然后加权求和。但问题来了:

R=5、F=1、M=1的客户和R=1、F=5、M=5的客户,总分都是7,但行为特征完全不同

5档分界线是人为定的,不同人定出来的结果不一样

三个维度的权重(R:0.4、F:0.3、M:0.3?)拍脑袋

这就是传统RFM的天花板——它只能做粗放分层,做不到精准细分。

K-Means:让数据自己说话

K-Means聚类不预设分界线,而是让数据自己找群组。算法很简单:

1. 随机选K个中心点

2. 把每个客户归到最近的中心点

3. 重新计算每个群组的中心点

4. 重复2-3直到中心点不再变化

from sklearn.cluster import KMeans

import pandas as pd

import numpy as np

从银行CRM系统提取RFM特征

rfm_data = pd.DataFrame({

    'customer_id': ['C001', 'C002', 'C003', ...],

    'recency': [5, 180, 3, ...],

    'frequency': [24, 2, 52, ...],

    'monetary': [120000, 500000, 2000, ...]

})

标准化(消除量纲差异)

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

rfm_scaled = scaler.fit_transform(rfm_data[['recency', 'frequency', 'monetary']])

K-Means聚类,选6个群组

kmeans = KMeans(n_clusters=6, random_state=42, n_init=10)

rfm_data['cluster'] = kmeans.fit_predict(rfm_scaled)

输出每个群组的特征

for i in range(6):

    group = rfm_data[rfm_data['cluster'] == i]

    print(f"群组{i}: {len(group)}人, R均值={group['recency'].mean():.0f}天, "

          f"F均值={group['frequency'].mean():.1f}次, M均值={group['monetary'].mean():.0f}元")

输出可能长这样:

群组0: 18.5万人, R均值=8天, F均值=28次, M均值=15000元 → 高频小额活跃户

群组1: 22.3万人, R均值=210天, F均值=1次, M均值=80000元 → 大额沉睡户

群组2: 15.7万人, R均值=15天, F均值=6次, M均值=320000元 → 高价值稳定户

群组3: 28.1万人, R均值=90天, F均值=3次, M均值=5000元 → 低频小额休眠户

群组4: 12.4万人, R均值=3天, F均值=15次, M均值=500000元 → 高频高额核心户

群组5: 23.0万人, R均值=45天, F均值=8次, M均值=45000元 → 中频中额成长户

每个群组都有清晰的业务含义,不再是简单的"高/中/低"三层,而是6种截然不同的客户画像。

从细分到策略:6个群组6种打法

细分不是目的,策略才是。

| 群组 | 画像 | 核心策略 | 推荐产品 | 触达方式 |

|------|------|---------|---------|---------|

| 高频小额活跃户 | 每月两次、小额为主 | 提额+交叉销售 | 信用卡分期、基金定投 | APP推送+短信 |

| 大额沉睡户 | 单笔大额、半年没来 | 唤醒+重新激活 | 高收益理财、大额存单 | 专属客户经理电话 |

| 高价值稳定户 | 定期交易、中高额 | 留存+增值 | 家族信托、保险、私行服务 | 客户经理面谈 |

| 低频小额休眠户 | 快要流失 | 挽留+低成本激活 | 短期理财、新手礼包 | 短信+公众号 |

| 高频高额核心户 | 最优质客户 | VIP维护+深度经营 | 专属产品、增值权益 | 一对一服务 |

| 中频中额成长户 | 有成长潜力 | 提升+引导升级 | 基金、保险、贷款 | APP+定向活动 |

关键洞察:不是所有客户都需要电话。高频小额活跃户用APP推送就够了,大额沉睡户才需要客户经理花时间打电话。精准触达=省钱+有效。

肘部法则:K选几最合适

K值不是拍脑袋选的。用肘部法则(Elbow Method)来确定最优群组数:

import matplotlib.pyplot as plt

inertias = []

K_range = range(2, 11)

for k in K_range:

    km = KMeans(n_clusters=k, random_state=42, n_init=10)

    km.fit(rfm_scaled)

    inertias.append(km.inertia_)

画肘部图

plt.plot(K_range, inertias, 'bo-')

plt.xlabel('K值')

plt.ylabel('组内平方和')

plt.title('肘部法则确定最优K')

plt.show()

找到"拐点"——惯性下降速度明显变缓的K值。实践中,零售银行客群通常K=5-8最合适,太少分不开,太多不好解释。

加一层业务规则:让AI更接地气

纯K-Means可能会把一些业务上不应该分开的客户分到不同组。比如同一个代发工资户,按RFM分到了不同群组,但业务上他们应该享受同样的代发工资客户权益。

解决方案:在K-Means之上加一层业务规则引擎。

override_rules:

  - name: "代发工资客户统一"

    condition: "customer.salary_account == true"

    action: "assign_to_cluster = 'salary_base'"


  - name: "黑名单客户单独标记"

    condition: "customer.risk_level >= 3"

    action: "assign_to_cluster = 'high_risk'"


  - name: "新开户30天内"

    condition: "customer.account_age_days <= 30"

    action: "assign_to_cluster = 'new_customer'"

规则优先于算法——业务规则是硬约束,K-Means是软分类。两者结合,既尊重数据规律,又符合业务逻辑。

实际效果

某城商行实施RFM+K-Means+业务规则的客群细分后:

**短信打开率**:从2.3%提升到8.7%(精准触达,不再是群发)

**理财转化率**:从0.8%提升到3.2%(推的是客户想要的产品)

**客户经理效率**:从每人维护200户提升到350户(只打该打的电话)

**营销ROI**:从1.6倍提升到4.8倍(预算花在刀刃上)

投入:2个数据分析师+1个业务专家,3周开发+2周验证。产出:第一年节省营销预算1200万,新增AUM 3.2亿。

什么时候不该用RFM+K-Means

**客户数据太少**:开户不到1000户,统计无意义

**交易频率极低**:比如房贷客户一年就1-2笔,F维度几乎没有区分度

**产品极其单一**:只卖一种产品的银行,M维度也是常量

**合规要求不允许差异化定价**:某些场景下利率/费率必须统一,细分的价值打折

RFM+K-Means最适合的场景是:客户基数大(5万+)、产品多样(3+品类)、交易频率适中(年2次+)的零售银行场景。

完整的数据处理脚本、K-Means聚类代码和业务规则YAML模板,见 financial-ai-skills 仓库(github.com/yuzhaopeng-up/financial-ai-skills)的 rfm-clustering 目录。

---

RFM是零售银行最经典、最实用的客群分析框架。加上K-Means的自动聚类和业务规则引擎的约束,它从1930年代的直邮工具进化为2025年的精准营销引擎。不需要大模型,不需要GPU,一个scikit-learn就能跑起来——关键是理解业务逻辑,让数学为业务服务,而不是为了算法而算法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容