☰
用RFM与K-means实现市场细分:数据分析到业务策略落地
2026/10/7 3:45:05 网站建设 项目流程

做了这么多年数据分析项目,有一个问题几乎每个老板都会问:我们的客户到底是谁?他们想要什么?怎么才能让每一分营销预算都花在刀刃上?回答这个问题,绕不开市场细分。市场细分不是把客户随便分成几组,而是通过数据分析,找出那些在消费行为、需求特征和决策逻辑上真正相似的人群,然后针对每一类人制定不同的产品、价格、渠道和沟通策略。这篇文章就从一个实战项目的角度,讲讲怎么用数据分析一步步把市场细分落地,从数据采集、特征工程、模型搭建到业务策略转化,全程都有可复现的代码和踩坑记录。适合正在做用户运营、CRM数据分析、营销策略的从业者,也适合想学习商业数据分析的入门者和学生。

1. 市场细分到底在分什么?先理清分析框架

很多人一听“市场细分”,第一反应就是拉出用户表,按年龄、性别、地区切几刀,再交叉透视一下。这种做法的确也算细分,但它只能回答“谁是谁”,回答不了“谁值得重点投入”“谁正在流失”“谁最有可能转化”这些真正影响业务决策的问题。做数据分析的都知道,模型算法从来不是项目成败的关键,前期的分析框架才是。框架没搭对,后面堆再多特征、调再多参数都是在错误的方向上做精细化的无用功。

1.1 从经验主义到数据驱动:细分的底层逻辑

我见过不少传统企业的销售负责人,他们对客户的判断完全靠一线经验和直觉。比如做白酒经销商的老板会告诉你:“四十岁以上的男性客户喜欢喝浓香型,酒桌上认品牌。”这种经验不能说错,但问题是没法规模化复制,也没法验证。销售总监跳槽了,这套认知就跟着人走了。而且经验判断往往是“幸存者偏差”的产物——你记住的永远是那些大客户和印象深刻的案例,那些沉默流失的客户几乎不会被纳入你的认知框架里。

数据驱动的市场细分,干的其实就是把“老师傅脑子里的经验”变成“公司账本上的资产”。具体来说,核心逻辑可以拆成四步:先定义业务问题,再确定细分维度,然后做数据采集和特征工程,最后用模型把相似的人群聚合到一起。每一步都要有可衡量的标准。细分的最终产出不是一张图表,而是一套可以执行的运营策略。

这里有个非常容易踩的坑:细分过度。有些团队一口气把客户分成二十几个群体,每个群体还起了特别文艺的名字。听起来很高大上,但落到运营环节就会发现,根本没那么多资源和精力去针对二十几个群体分别设计策略。我个人的标准是:细分的最终结果一定要满足三个条件——可衡量、可触达、可行动。每个分群要有清晰的量化边界,能通过某个渠道或内容触达得到,并且能对应到具体的运营动作。做不到这三点的分群,不管统计上多漂亮,都只是数据部门自嗨。

1.2 四个经典维度:人口、地理、心理与行为

市场细分的理论框架其实很成熟,经典的四类维度到现在依然适用,只是获取数据的方式变了。人口统计维度包括年龄、性别、收入、职业、教育程度;地理维度包括区域、城市等级、气候带、城乡属性;心理维度包括生活方式、价值观、消费态度;行为维度包括购买频率、购买金额、品牌偏好、渠道偏好、忠诚度等。

不同行业的细分侧重点完全不同。做B2C快消品,行为维度和心理维度往往比人口统计维度更有效,因为两个年龄和收入完全相同的用户,消费习惯可能截然相反。做B2B业务,人口统计维度里的“企业规模”“行业属性”则比个人画像重要得多。以我做过的一个区域白酒销售数据分析项目为例,当时我们做了四维度的初步分析,发现最有区分度的变量是:价格带偏好、购买场景(自饮、宴席、送礼)、复购周期和地域。单一维度根本说不清楚问题——同一个价位段的产品,自饮人群和送礼人群关注点完全不同;同为高频复购用户,有人喝的是口粮酒,有人是用来做宴席备货。只有把多个维度组合在一起,才能看到真正有业务意义的群体。

所以我的建议是:动手跑模型之前,先和业务方坐下来聊清楚,你们打算针对细分结果做什么动作。如果还没有清晰的动作规划,就老老实实从最经典的 RFM 模型开始,先把“谁值得重点维护”这个问题解决掉。等业务方尝到了数据细分的甜头,再慢慢往心理维度、行为维度做深。

2. 数据准备才是真正的大头:采集、清洗与特征工程

有句话不中听但属实:数据准备占整个项目的时间精力至少七成。很多初学者一上来就急着写聚类代码,结果特征还没构造好,跑出来的分群结果自己都解释不了。做市场细分,输入的数据质量直接决定了输出结果的业务价值。这个环节没有捷径,但可以把流程拆成清晰的两步:数据采集和特征工程。

2.1 数据从哪来:先盘活内部数据,再看外部补充

很多企业一谈数据,总觉得自己的数据不够,想先去采购第三方画像数据。但我的经验是,80%的细分场景用内部数据就能启动。CRM系统里的客户基本信息、订单交易流水、客服沟通记录、小程序或APP的浏览行为日志、促销活动的参与记录,这些都是现成的数据金矿。说到这儿提一嘴,有次做电商快递账单数据分析时发现,把订单数据和物流数据关联起来,能挖出很有价值的地域配送偏好信息——同一款产品,华东地区用户对发货时效的敏感度明显高于西南地区,这种特征放进细分模型里就是很好的分群变量。

外部数据不是不能用,而是要带着明确的问题去找。想做潜在客户拓展,可以引入公开的行业报告、第三方标签数据;想做竞品对比,可以采集公开的电商评价和社媒讨论。但需要注意合规底线,尤其是涉及个人信息的数据,采集和使用都要慎之又慎。我在自己的实操里,外部数据通常只作为辅助验证维度,不会作为细分模型的骨架。

具体到数据形态,最核心的通常是三张表:用户信息表、订单明细表、行为日志表。用户信息表提供静态画像,订单明细表提供价值数据,行为日志表提供兴趣偏好信号。三张表通过用户ID关联起来,构成细分分析的基础宽表。这一步用 Python 的 pandas 就能搞定,核心就是各种 merge 和数据透视操作。建议在做数据清洗时保留一个“清洗过程笔记”,每一处处理都记录下来,方便返工排查,也方便向业务方解释数据口径。

2.2 清洗与特征工程:决定细分质量的三件套

数据清洗的标准动作无非是处理缺失值、去重、剔异常值。但市场细分场景里,有些细节值得特别注意。比如订单金额字段,经常混进负数(退款)、0元订单(赠品)、超大金额(批发采购),这些都会干扰后续的聚类计算。再比如用户注册时间缺失的记录,看起来只占1%,但对新老客户分群影响很大。处理策略上,我习惯先看业务含义再做技术处理:退款记录不等于无效记录,它反映的是售后问题,可以在特征里单独建一个“退款率”字段,而不是简单删掉。

特征工程才是真正拉开水平差距的地方。原始的订单金额、购买次数可以直接入模,但更有区分度的往往是一阶特征和二阶特征的组合。比如:

  • 最近一次购买距今的天数(R)
  • 统计周期内的购买频次(F)
  • 统计周期内的消费总金额(M)
  • 购买品类数量(宽度)
  • 单品类购买集中度(深度)
  • 优惠券使用率(价格敏感度)
  • 平均下单到签收时长(时效敏感度)
  • 工作日与周末购买占比(购买时机偏好)

这些特征组合在一起,才能刻画出“一个用户的完整行为面貌”。特征不是越多越好,加特征时要想清楚业务含义,否则后面聚类结果很难解释。以 RFM 特征构建为例,一份可复用的 Python 代码如下:

import pandas as pd orders = pd.read_csv('orders.csv') orders['order_date'] = pd.to_datetime(orders['order_date']) reference_date = pd.Timestamp('2024-12-31') rfm = orders.groupby('customer_id').agg( recency=('order_date', lambda x: (reference_date - x.max()).days), frequency=('order_id', 'nunique'), monetary=('amount', 'sum') ).reset_index() # 异常值过滤 rfm = rfm[rfm['monetary'] > 0] rfm = rfm[rfm['frequency'] > 0]

这段代码只是最基础的骨架,真正的项目里还需要按业务窗口期做聚合。比如把订单数据分成近3个月和近12个月两个窗口,分别计算RFM特征,就能看出用户的近期活跃趋势和长期价值是否一致。这个细节在后面的细分模型里非常有用。

3. 细分模型的落地实操:RFM与聚类分析

框架搭好、数据备齐之后,才轮到模型上场。这里我不推荐一上来就搞XGBoost或者神经网络——市场细分本质上是一个“无监督+业务解读”的问题,可解释性比预测精度重要得多。如果一个分群结果连业务方都看不出所以然,模型再先进也没法闭环。真正在商业实战中高频使用、且出效果稳定的,就两样:RFM模型和K-means聚类。

3.1 RFM模型:最简单也最实用的客户分层

RFM模型的核心思想很简单:用三个指标描述一个客户的“价值面貌”——Recency(最近一次消费距今多久)、Frequency(期间内消费频次)、Monetary(期间内消费金额)。这三个指标组合起来,就能把客户分成若干有业务含义的层级。比如“最近才买、买得勤、买得多”的客户,显然是最核心的高价值忠诚客户;而“以前买得多,但很久没来了”的客户,就是典型的流失预警人群。

RFM模型的落地方式有两种流派。一种是用分位数打分,比如把每个指标按四分位分成4档,得到类似‘R=4,F=3,M=4’的编码,再按编码组合归类。另一种是直接不做打分,把三个指标当作连续变量喂给聚类模型。我个人建议先做打分制,因为打分制天然具备可解释性,业务方更容易理解“R=1、F=1、M=4”的意思是“很久没来的历史高客单客户”,而直接看连续数值很难形成这种直觉。

分位数打分有个关键细节要注意:R指标的方向是反的。最近一次消费相隔的天数越小,说明客户越活跃,所以R的分值应该越高。在处理时可以用排序rank的方式实现:

rfm['R_score'] = pd.qcut(rfm['recency'], 4, labels=[4, 3, 2, 1]) rfm['F_score'] = pd.qcut(rfm['frequency'].rank(method='first'), 4, labels=[1, 2, 3, 4]) rfm['M_score'] = pd.qcut(rfm['monetary'], 4, labels=[1, 2, 3, 4])

切分之后一般会汇总出一个客户类型表。比如总分12分以上的归为“高价值活跃客户”,总分4分以下归为“沉睡低价值客户”,中间各区段对应“成长型客户”“价格敏感型客户”“流失预警客户”等。需要注意的是,不同行业的RFM阈值差异很大:电商行业可能希望按30天、90天、180天来切R值;白酒这类动销周期较长的行业,R值窗口可能要拉到半年甚至一年。所以不要照抄别人的切分标准,要结合自己的业务周期来定。

3.2 K-means聚类:用Python实现行为细分

如果说RFM模型是手工规则版细分,那K-means就是自动化版细分。它的思路是把每个用户看作高维空间里的一个点,通过迭代计算,让同一簇内的点尽可能近、不同簇的点尽可能远。做K-means之前,有一个绝对不能省的动作:标准化。用户购买金额可能是几千上万,购买频次是个位数,如果不做标准化,金额变量会在距离计算中完全主导聚类结果,频次和活跃度特征就形同虚设了。

一个可以直接参考的聚类代码如下:

from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler features = rfm[['recency', 'frequency', 'monetary']] scaler = StandardScaler() features_scaled = scaler.fit_transform(features) kmeans = KMeans(n_clusters=4, random_state=42) rfm['cluster'] = kmeans.fit_predict(features_scaled) cluster_profile = rfm.groupby('cluster')[['recency', 'frequency', 'monetary']].mean() print(cluster_profile)

聚类跑完之后,千万不要直接看结果就收工。建议把几个聚类的特征均值打印出来,逐一核对它们在业务上是否说得通。我跑过一次K-means,聚类结果出来发现有个簇的全部是购买金额最低、但复购频次极高的客户,仔细一查才知道这些是参与秒杀活动的薅羊毛用户,和正常价格敏感型客户根本不是一类人,后续的运营策略必须分开设计。这种深入业务背景的解读,就是数据分析师区别于跑数工具人的价值所在。

3.3 聚类数K怎么选:肘部法则不是唯一答案

K值的选择是聚类分析里最经典的难题。肘部法则的做法是画出不同K值对应的簇内误差平方和(inertia)曲线,找一个“拐点”作为最优K。

import matplotlib.pyplot as plt inertia = [] for k in range(2, 9): km = KMeans(n_clusters=k, random_state=42) km.fit(features_scaled) inertia.append(km.inertia_) plt.plot(range(2, 9), inertia, marker='o') plt.xlabel('K') plt.ylabel('Inertia') plt.show()

但我自己的经验是,肘部法则的“拐点”经常不够明显,尤其是真实业务数据,曲线可能是平滑下降的,压根没有清晰的肘部。这时候要回归业务:你希望运营部门有能力对几个群体分别制定策略?团队资源能支撑几套差异化的文案和活动方案?如果业务只能消化4个分群,那统计上K=6再漂亮也没用。此外还可以参考轮廓系数来辅助判断,但最终拍板的依据应该是业务可解释性。我实际项目里最常用到的K值区间就是3到6,超过6个聚类之后,分群之间的差异会变得模糊,运营团队也记不住那么多群体的特征。

4. 细分结果的可视化与业务策略转化

模型跑出来只是第一步,更关键的是怎么把结果讲清楚、用起来。我见过不少项目,数据团队花了很大力气建模,最后交付一份几十页的PPT,业务方看了一头雾水,然后就没了下文。关键在于:细分结果必须被“翻译”成业务语言,并通过合适的可视化手段让分群特征一眼可见。

4.1 用图表让细分群体“看得见”

可解释性是市场细分项目的第一原则,可视化的意义正在于此。不同的图表适合回答不同的问题。散点图适合展示两个连续特征下的分群分布,比如横轴是消费频次、纵轴是消费金额,每个点代表一个用户,颜色代表分群结果,一眼就能看出不同群体的位置分布。如果有三个特征,可以先做PCA或t-SNE降维到二维再展示,但要注意降维后的坐标没有直接业务含义,只适合看聚类的分离程度。雷达图适合对比多个分群的特征结构,比如高价值客户群在“新品接受度”“品牌忠诚度”“价格敏感度”等维度的表现,能让业务方直观看到群体间的差异。热力图则常用于展示分群×产品类目的交叉偏好,比如某一类群对白酒礼盒装偏好极高,对光瓶酒几乎无感。

可视化工具方面,日常分析用Python的matplotlib和seaborn就足够了,Shapley这种需要专业工具,不必强求。给一个简单实用的散点图代码:

import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize=(10, 6)) sns.scatterplot(data=rfm, x='recency', y='monetary', hue='cluster', palette='Set2') plt.title('客户分群散点图:最近购买间隔 vs 消费金额') plt.show()

做可视化时我有个建议:图是用来辅助解释的,不是用来“炫技”的。如果一张图需要花十分钟解释轴的含义,那就是失败的可视化。对于业务方来说,最有效的往往就是简单的分群统计表和三五张特征对比图。把每个分群的人数占比、贡献营收占比、平均客单价、复购率列成一张表,比多么复杂的图都有说服力。

4.2 从细分到策略:产品、价格、渠道、促销的落地

细分本身没有价值,分完之后采取的行动才有。每次给业务方交付细分结果,我都会同时给出一张“分群×策略”的对应表。以之前提到的白酒销售项目为例,当时我们细分出四类核心人群:

  • 高端礼赠人群:消费金额高、看重品牌知名度、集中在中秋春节前两个月购买、对价格不敏感。针对这群人,主打产品是高端礼盒装,渠道以烟酒店和团购为主,促销策略是推出定制化包装和企业团购折扣。
  • 宴席采购人群:单次购买量大、购买频次低、决策周期短,通常在办宴席前一两周集中采购。针对这群人,需要提供整箱采购优惠、免费配送、开瓶返现等政策,还要打通酒店和婚庆公司的推荐渠道。
  • 自饮爱好者:高频复购、单次金额中等、对口感有偏好。这群人适合用会员积分体系和扫码领红包做留存,并通过社群运营持续提升复购率。
  • 年轻尝鲜群体:购买频次低、客单低、但乐于尝试新口味和小包装产品。针对这群人,重点是低门槛的入门产品组合、社交媒体种草和短视频内容营销。

这些策略看起来是营销部门的工作,但数据团队的价值在于用分群数据告诉业务方:这些群体的规模有多大、增长趋势如何、当前渗透率是多少、哪些群体的生命周期价值最高。没有数据支撑的策略只是猜测,有了数据支撑的策略才是可以验证和迭代的方案。

值得一提的是,有些细分结果还能反向指导产品研发。比如数据发现“自饮爱好者”群体中相当大比例的人喜欢低度化、轻口感的产品,这就给产品部门提供了一个很明确的新品研发方向。市场细分做到了这个层面,就不再是营销工具的附庸,而是整个企业决策体系的基础设施。

5. 常见问题与排查技巧实录

做了这么多细分项目,踩过的坑总结下来也就那么几类。提前知道这些坑,至少能帮你少走两个月的弯路。

5.1 细分结果业务不买账?问题往往不在算法

最挫败的场景莫过于:数据团队跑了一版自认为完美的分群,业务方看后却无动于衷,甚至来一句“这跟我之前想的差不多嘛,没什么新东西”。遇到这种情况,问题几乎可以肯定不是算法精度,而是沟通和参与环节出了问题。业务方没有参与特征定义和分群解读的过程,自然对结果没有ownership;或者分析结果用了太多业务方不熟悉的技术词汇,他们没有能力消化。

解决这个问题的办法是在项目一开始就拉业务方进来。搞一次workshop,让他们描述自己认知里的客户有哪些类型,再把数据里的特征对应上去。这样做有三个好处:一是确保特征方向不偏,业务方知道哪些字段在实操中有意义;二是业务方在讨论中会提供很多数据之外的经验信息,比如“这批客户可能是经销商刷单”,帮助数据团队排除脏数据;三是最终的细分结果一出来,业务方会主动认领属于自己的群体,因为他们从一开始就参与了定义。

还有一个很实用的技巧:给每个分群起名字的时候,尽量用业务方熟悉的语言。比如“高价值流失预警人群”,比“Cluster 0”直观一百倍。人对自己能叫出名字的东西,天然就有认同感。

5.2 静态细分的陷阱:如何让模型持续迭代

很多团队把市场细分做成一次性项目,跑完模型、出完报告就搁置了,这是最大的误区。市场是动态的,消费者的偏好和消费能力一直在变化。去年同期的高价值人群,今年可能已经流失了大半。所以细分模型必须定期更新,至少每个季度重跑一次,最好能做到月度迭代。

迭代不是简单重跑一遍聚类代码,还要对照历史分群做迁移分析:哪些用户始终停留在同一分群,哪些用户发生了分群迁移,迁移的原因是什么。分群迁移本身就是一个极其有价值的风向标。比如一个用户从“高价值忠诚客户”滑落到“价格敏感型客户”,往往意味着他的消费能力在下降或者竞争对手在分流,需要及时干预。这里有一个很实用的做法:给每个用户打上长期分群标签和当期分群标签,然后定期计算迁移矩阵,一旦发现某个迁移路径的规模异常扩大,立即溯源分析。

说句实话,市场细分做到最后,拼的不是模型和代码,而是对业务的理解深度和数据思维的扎实程度。工具都会过时,但“用数据回答业务问题”的能力永远稀缺。希望这篇实战记录能给正在做或者准备做市场细分的你带来一些启发,少走几步弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询