type
Post
status
Published
date
Aug 15, 2025
slug
example-4
summary
本项目基于公开的百货商场数据集,系统性地实践了客户分群的数据分析全流程。目标在于深入洞察百货商场的客户构成,评估不同层次客户对销售业绩的影响,以期提升用户留存率与消费转化率,从而优化商场的整体经营状况。项目中,我完整实施了数据清洗、基于改进的LRFMPSX模型的K-Means聚类分析,并针对不同客户群体特征提出了精准的营销策略。本项目完整覆盖了从数据预处理、模型构建到业务解读的全流程。
tags
推荐
项目
category
知行合一
icon
password
Comment
在数据驱动的商业时代,理解客户是增长的基石。本文通过一个完整的客户细分项目,从数据清洗、特征工程到聚类分析,清晰识别出仅占2.3%却贡献核心价值的高活跃客户群体,并针对不同的客户群体制定了可直接落地的运营策略。
📝一、项目背景与目标
本项目通过复刻一个经典案例进行学习,核心目标是利用给定数据集,设计一套标准化的分析流程,旨在构建客户画像与分群模型,探索客户群体特征,并最终通过个性化的营销策略提升客户吸引力。我的个人目标是通过此项目,深入理解数据科学的完整工作流程,并掌握运用分析工具解决核心业务问题的方法。
本项目完整代码已发布于GitHub: https://github.com/IvyXiaZhou/Customer-segmentation/blob/main/Department store.py
二、数据理解与准备
项目数据来源于Github上的一个百货商场数据集,包含两张表:会员信息表(近19万条记录,4列:会员卡号、出生日期、性别、登记时间)与销售流水表(近189万条记录,15列,记录了2015-01-01至2018-01-03间的销售流水,包含会员卡号、消费产生的时间、消费金额、此次消费的会员积分等特征)。
数据清洗主要步骤如下:
(一)会员信息表处理
去除6条会员卡号重复的记录;因登记时间是计算会员活跃时长的关键字段且缺失率低,故删除其缺失记录;对缺失率较低的性别字段,使用众数填充;对缺失较多的“出生日期”列,提取其年代信息(如1995→1990)并筛选合理范围(1920-2020年)后,删除原“出生日期”列,最终保留“会员卡号”、“性别”、“登记时间”三列。
(二)销售流水表处理
删除“会员卡号”缺失(超过一半)的记录,并移除“收银机号”、“柜组编码”、“柜组名称”等与分析无关的列。
(三)数据合并与筛选
将清洗后的两张表通过“会员卡号”合并。为排除无效交易干扰,筛选出同时满足消费金额 > 0、会员积分 > 0、销售数量 > 0的记录作为有效数据。
最终,得到一个包含11个特征、738,462条样本的数据集,可用于初步分析。
三、探索性数据分析
本阶段旨在通过可视化探索数据分布与特征关系,以揭示潜在的商业洞察。分析首先区分会员与非会员,随后聚焦于会员群体。
(一)数据预处理与特征工程
为精确区分会员,我创建了一个“会员”字段:成功通过会员卡号与会员信息表匹配的记录标记为1(会员),反之为0(非会员)。为提升数据可读性,我将性别编码(0/1)转换为“女”/“男”;按出生年代将客户划分为青年(≥1990)、中年(1951-1989)与老年(≤1950)三组。
(二)会员基本信息分析
通过可视化分析,关键发现如下:

1.会员出生年代分布
1980年代(47,142人)和1970年代(43,407人)的会员是主力群体。值得注意的是,1990年代的会员人数(11,811人)仅为1980年代的1/4,表明商场在吸引年轻客群方面潜力巨大。
2.会员性别比例
大部分会员为女性,所占比例高达78.66%,男性会员仅占21.34%。
3.会员年龄分布
从会员的年龄层次来看,中年人为核心消费群体,占比为85.16%,青年和老年人分别占8.95%和5.89%。根据之前的出生年代判断,会员年龄主要集中在30-50岁的阶段。

(三)会员消费行为分析
1.会员与非会员的订单和消费金额占比
会员消费在订单量(53.18%)与总金额(53.99%)上的占比均略高于非会员,证实了会员体系对业务的价值。

2.季度和天数的消费偏好
为保证数据质量,我剔除了空值记录,得到一个包含393,482条会员消费记录的子集。针对该子集,展开如下操作:
(1)时间数据处理
从“消费产生的时间”这个字段的信息中提取年、月、日、小时,增加四列标注时间的字段,以便从时间维度上分析消费行为。
(2)计算订单数
使用自定义函数计算2015-2018年之间不同时间维度下(如季度、日)的平均订单数,使用均值能较好地排除异常值的干扰,反映会员的实际消费偏好。
通过绘制季度、天数这两个时间维度的消费趋势图,我发现总体时间偏好呈现出明显的规律:第二季度为消费高峰,第四季度次之,第三季度为淡季。会员平均消费间隔集中在25-26天。

3.不同年份的季度和天数消费差异
为排除2018年不完整数据的干扰,我深入分析了2015-2017年的数据,发现商场的销售模式经历了一些演变与稳定化过程。

在季度维度下,2015年的会员订单数呈现直线下降趋势,而在2016和2017年,订单数随着季度的推进而逐渐攀升,在第二季度达到第一个峰值,第三季度有所回落,在第四季度继续增长至最高点。
在消费间隔天数维度上,2015年的会员订单数分布较为离散,未呈现明显规律;而2016与2017年的订单数在间隔25-26天时出现显著峰值,显示出稳定的消费周期。
图表趋势与前期分析基本吻合。需说明的是,第四季度订单在均值计算中虽低于第二季度,但其订单总量实为全年最高,这表明年末是商场销售的最关键时期。
4.不同年份的月份消费订单和金额差异

由三年中不同月份的消费情况可知,月度消费趋势和季度消费趋势基本一致。在2015年,会员订单数和金额在2月份到达峰值后一路下滑,并在9-12月降至为零,这表明商场很可能在这段时间经历了停业整顿,致使数据异常。在2016和2017年,会员订单数和金额分别在4月和5月迎来小高峰,之后在波折中下降至8月和9月的谷底,最终在11月共同冲至年度顶峰。
分析证实,在正常运营年份,商场的销售旺季稳定出现在第二与第四季度,其中4月、5月、11月、12月是关键月份,而第三季度是典型的淡季,为商场进行门店升级、设备改造或策划引流活动提供了理想窗口期。
5.一天中各小时的销售订单数(折线图)

日内销售趋势显示,订单数自9时起稳步上升,于16时达到峰值,随后逐步下降,虽然在20时有小幅回升,但是未能改变下行趋势。全天最活跃的时段为14-17时,该时段内每小时订单数均超过20,000。
此后,我将处理后的会员消费数据保存为 vip_info.csv,供建模使用。
四、建模与分析
(一)LRFMPSX模型构建
加载 vip_info.csv 后,筛选掉登记或消费时间晚于截止日期(2018-01-03)的异常记录,得到包含42,548名会员的393,006条有效记录的数据集。
建模目标为针对每一位会员,计算其对应的 LRFMPSX 特征值,为客户分群做准备。
在特征选择方面,本项目在经典RFM模型基础上进行了扩充,引入了L、P、S、X四个维度,有助于构建更全面的客户画像。最终该模型选取的7个关键特征如下:
L (Length): 会员活跃时长
R (Recency): 最近消费时间
F (Frequency): 消费频率
M (Monetary): 消费总金额
P (Point): 总积分
S (Session): 消费时间偏好
X (Sex): 性别
特征工程的具体计算过程如下:
L与R:定义time_minus()函数计算时间差(月数)。其中,L 为会员从登记日期至截止日期(2018-01-03)的月数;R 为会员从最后一次消费日期至截止日期的月数。
F、M、P:以会员卡号聚合,计算每个会员的消费总次数 (F)、消费总金额 (M) 和总积分 (P)。
S:依据消费时间划分为5个时段:凌晨(0-5点)、上午(6-10点)、中午(11-13点)、下午(14-17点)、晚上(18-23点),并统计每个会员最常消费的时段(众数)作为其消费时间偏好 。
X:将性别编码转换为“男/女”标签。
完成上述计算后,我将7个特征合并为一个新的DataFrame,并以对应的字母作为列名,保存为 LRFMPSX.csv 文件,用于后续分析。
(二)构建客户画像
为提升业务可读性,我针对LRFMPSX特征进行了数据分箱,为其打上直观的业务标签。标签定义与分箱规则如下:
L (活跃时长):根据活跃月数,划分为 新用户 (≤3个月)、中等用户 (4-12个月) 与 老用户 (≥13个月)。
R (近期活跃度):将最近消费月数转换为天数。
F (消费频次):根据消费总次数,划分为低频消费 (≤5次)、中频消费 (6-19次) 与 高频消费 (≥20次)。
M/P (消费/积分能力):将消费金额(M)与积分(P)统一划分为低等级(<1万)、中等级 (1-10万) 与 高等级 (>10万) 三档。
S/X (消费时段偏好/性别):沿用原有标签。
完成标签转换后,我将数据保存为 consumers_profile.csv。该文件不包含复杂数值,便于业务团队直接阅读与使用。
为进一步提升画像的直观性,我开发了词云生成工具,可随机选取或指定会员卡号,将其所有画像标签(如“老用户”、“高频消费”)生成一张词云图。这项功能能让客户经理在数秒内快速把握客户特征,以实现数据洞察的高效传递。


(三)客户聚类分析(K-Means)
1.计算轮廓系数
聚类分析通常使用“距离”度量样本之间的相似性,然而LRFMP各特征的量纲与数量级差异巨大,例如消费金额M可达数万,而消费频率F通常为几十,为避免量纲对距离计算的主导,必须在聚类前进行数据标准化处理。
为了进行聚类分析,我先从LRFMPSX特征中选取了L、R、F、M、P五个核心数值型特征,再使用scikit-learn库中的StandardScaler对数据进行了Z-Score标准化处理,随后遍历K=2-6计算轮廓系数,绘制轮廓系数曲线,以此评估不同K值的聚类效果。结果显示,当K=2,即图中红色虚线对应的K值等于2时,轮廓系数最高,表明此设定下的聚类效果最佳。
2.预处理方法对比
为验证稳健性,我额外对比了Z-Score标准化与Min-Max归一化对聚类结果的影响,分别对经两种方法处理后的数据进行了聚类(K=2-5),并利用雷达图可视化不同簇的聚类中心,识别各客户群体的关键特征。
(1)Z-Score标准化处理后的雷达图
Z-Score标准化过程将数据转换为均值为0,标准差为1的分布,即一个标准正态分布。该方法的优点在于数据点转换后仍保持原数据中各样本点的相对关系,不易受极端异常值影响。
以下四张雷达图基于标准化后的数据,客户分别被分成了2,3,4,5类,每个颜色代表一簇,即一个群体。

当K=2,分出的两簇都有各自鲜明的特征和清晰的模式,类别1和类别2 在L维度上基本一致,在R维度上分别显示出凸起和凹陷,值得注意的是类别2的图形在F,M,P这三个维度上被拉得很开,有非常明显的凸起。由图形可知,两类客户的注册时间接近,但是类别1的最近消费时间较长,说明其消费行为不活跃;类别2的消费频率、金额和积分远超类别1,最近消费时间也较短,可见分群结果符合业务常识。
当K=3 ,类别3的形状和大小与其他两类有明显区别,显示出该客户群体消费频繁,金额和积分非常高。类别1和类别2在F,M,P维度上的形状几乎重叠,区别在于类别2比类别1在R和L维度上的凸起程度大一些,说明类别2 与类别1相比,注册时间更长,消费更不活跃,但两者同属于低频次和低消费群体,对商场业务的影响程度相差无几,不是非常有必要细分为两簇。
当K=4,类别1和类别2的形状相似,属于消费较高的组合;类别3和类别4的形状也相似,属于消费较低的组合,每组中两者的主要区别在于大小不同,由此可见聚类效果不够好,客户群体区分度不高,不如直接分成2类。
当K=5,消费较高组合的两簇与K=4时几乎没差别,而同属于消费较低组合的类别1 、3、5在F,M,P维度上重叠,仅在L和R维度上有点区别,相当于在低消费群体中再细分出一个消费间隔最久的流失客户群体,一个注册时间最长的老客户群体和一个最近有消费行为的新客户群体。
随着K值增加,聚类结果演变为:在已经分出一个明显的高消费群体的情况下,逐步细分低消费群体,逐渐背离业务部门应该重点关注高价值客户的现实情况。同时,簇的形状区分度也在下降,业务解释性变差,因此没有必要继续增加K值,选择K=2最为合理。
(2)Min-Max归一化处理后的雷达图
Min-Max归一化过程将所有数据都压缩到一个固定区间内,最常见的区间为[0,1],即原数据的最小值为0,最大值为1。

雷达图显示,无论把客户分成几簇,F,M,P这三个维度都被严重压缩,所有簇在这三个维度上的值都挤在中心近似于0的区间,模型更依赖L,R这两个维度进行分群,即F,M,P维度失效,客户群基本上由新老客户和活跃度区分。
这是因为归一法不改变原数据的分布形状,但对异常值非常敏感。然而客户数据中非常容易出现异常值,当极少数客户拥有巨大的F,M,P值,使用归一化处理数据会使大多数普通客户在这些维度上的差异消失,导致聚类模型无法有效区分不同客户群。另外,R这种指标的范围可能会不断变化,最大值会随时间推移而增加,使用归一化后,它的值在该维度上显得尤为突出,得到的聚类效果更不稳定。
对比两种预处理方法,Z-Score标准化在本数据集上表现更优,它对数据中的异常值,如超高消费客户不敏感,能较好地保留绝大多数数据的特征差异,正常发挥F,M,P三个维度的区分作用,从而得到清晰、稳健的聚类结果。
(四)两类客户的LRFMP均值分析
综合轮廓系数,雷达图的可视化效果和业务解释性,我确定最佳聚类数K=2,将全体客户划分为两个群体。随后,我计算了各类别在 L、R、F、M、P 五个特征上的均值,并通过绘制均值柱状图直观对比其差异,同时为两类客户分别赋予“0”和“1”的群体标签。

统计结果显示,群体“0”共包含41,570人,占总体的97.7%;群体“1”仅978人,占比2.3%,客户结构呈现出典型的长尾分布。
通过进一步对比两类客户的 LRFMP 均值,可以发现二者展现出截然不同的特征:
群体“1”(高价值活跃客户,以下简称高价值客户):其消费频率(F)、总金额(M)和积分(P)均远高于群体“0”,且最近消费时间(R)极短。尽管会员时长(L)相近,但其高活跃度与高贡献度,标志着他们是商场的核心资产。
群体“0”(一般价值客户):该群体呈现出会员时长(L)与最近消费时间(R)“双高”特征,即注册早但久未消费,同时其F、M、P值均处于低位,属于活跃度低、价值贡献度低的流失风险客户。
五、业务启示与建议
基于聚类分析结果,我识别出两类特征迥异的客户群体,证实商场业绩与少数高价值客户紧密相关,为此建议制定差异化的运营策略,以优化资源分配,提升整体客户价值。
(一)高价值客户:精细化维护
高价值客户群体虽仅占2.3%,却是商场收入的核心贡献者,应作为重点维护对象,投入专项资源以巩固其忠诚度。
1.建立专属服务体系
为排名前10%的客户建立个人档案,配备专属客户经理,提供包括私人导购、新品预览、专属热线与上门配送等VIP服务。服务过程中,客户经理应基于客户画像进行个性化推荐,注重需求匹配与价值传递,避免生硬推销,以提升客户体验与长期满意度。
2.设计差异化会员权益
提供增值服务,如时尚造型咨询、私人形象设计、贵重物品终身保养及无理由退换货等,打造超预期服务体验;定期举办高端专属活动,如新品发布会、设计师见面会与小众品鉴会,增强客户归属感与品牌认同。
3.构建数字化互动机制
利用数据分析预测客户需求,适时推送个性化新品信息与专属优惠;搭建会员专属社群与数字化互动平台,促进同层级客户社交连接。
商场需长期通过持续优化服务内容与创新体验,构建竞争壁垒,这不仅能巩固现有高价值客户关系,还有望吸引同类优质客户。
(二)一般价值客户:低成本效率维系
一般价值客户群体占比超过97%,虽个体价值低,但作为整体潜力可观,且有助于口碑传播,营销重点应在于防止流失、促进活跃,并挖掘其中有转化潜力的用户。
1.自动化精准触达
依托低成本数字化工具(如短信、App推送),在特定情境下自动触发优惠激励,如向久未消费客户发送“重逢礼券”、向即将过生日的客户赠送“生日专属券”,或基于客户的历史行为推荐相关商品。
2.设计激励性活动
通过推送无门槛优惠券、特权体验券(如“10元现金券”、“免费咖啡券”)激活沉默客户;加强积分体系运营,定期开展积分兑换活动或发送积分到期提醒,激发客户的积分消耗与回购行为。
3.策划轻量促销
在购物环节引入抽奖、捆绑促销(如“买三赠一”)等趣味性与性价比兼具的活动,吸引客户注意力,刺激即时消费。
(三)非会员群体:引导转化
针对非会员顾客,应着力将其转化为会员,以提高用户粘性,完善用户数据,为后续分析与触达奠定基础。在线下场景,通过收银台引导、会员专享价、扫码有礼、会员卡充值优惠等方式吸引注册;在线上场景,推出会员专享单品、新人礼包等权益,降低注册门槛,提升转化意愿。
六、总结与反思
本项目的价值在于通过客户分群,清晰识别出高价值客户与一般价值客户。通过实施“重点维护高价值客户、效率化运营一般客户、积极转化非会员”的差异化策略,商场可有效提升客户留存率、优化资源使用效率,并最终提升客户终身价值与营收稳定性。
在本项目中,我完整运用了Python数据分析技术栈,包括使用 Pandas、NumPy 进行数据清洗与处理,利用 Matplotlib/Seaborn 完成数据可视化,并基于 Scikit-learn 构建与评估聚类模型,提升了将业务问题转化为数据解决方案的能力。
从数据清洗的挑战中,我深刻体会到数据质量是所有分析结论的基石;而通过轮廓系数与雷达图确定最佳分群数(K=2)的过程,则让我认识到结合统计指标与业务解释性进行模型决策的重要性。
最终,我将聚类结果转化为差异化的营销策略。这一过程让我坚信数据分析的终极价值在于产出清晰、可落地的业务建议,从而真正驱动决策并创造商业效益。