当前位置: 首页 > news >正文

数据分析:函数

🔍 一、题目背景与核心概念

1.1 题目概述

本系列题目基于某店铺的会员消费数据 sales.csv,通过 RFM 模型 对用户进行价值评分,并筛选出最有价值的高消费用户。

  • DA46:实现对每个用户的 R、F、M 三个维度分别打分(1-4分)。
  • DA47:在评分基础上构建 RFM 综合标签,识别“444”类顶级优质客户并排序输出前5名。

🧩 二、RFM 模型详解

字母含义特性
R (Recency)最近一次消费距今天数越小越好(越近越好)
F (Frequency)一段时间内消费次数越大越好(越频繁越好)
M (Monetary)一段时间内消费总额越大越好(花钱越多越好)

🎯 目标:将用户按这三个维度划分等级,综合判断其商业价值。


📊 三、评分规则解析

✅ 四分位数划分法(Quantile-based Scoring)

使用 四等分(quartiles) 将数据分为四个区间:

对于 Recency(越小越好):
分数条件
4分≤ Q1(下四分位数)→ 最近消费过,最好
3分Q1 < x ≤ Q2(中位数)
2分Q2 < x ≤ Q3(上四分位数)
1分> Q3 → 最久没来,最差
对于 Frequency 和 Monetary(越大越好):
分数条件
1分≤ Q1 → 消费少/金额低
2分Q1 < x ≤ Q2
3分Q2 < x ≤ Q3
4分> Q3 → 消费最多/金额最高,最优

💡 注意方向相反!这是关键点!


💻 四、完整代码实现(Python + Pandas)

import pandas as pd# 读取数据
df = pd.read_csv("sales.csv")# Step 1: 对 R/F/M 分别评分(使用 qcut 自动按分布切分)
df["R_Quartile"] = pd.qcut(df["recency"], q=4, labels=[4, 3, 2, 1]).astype(str)   # 反向打分
df["F_Quartile"] = pd.qcut(df["frequency"], q=4, labels=[1, 2, 3, 4]).astype(str) # 正向打分
df["M_Quartile"] = pd.qcut(df["monetary"], q=4, labels=[1, 2, 3, 4]).astype(str)  # 正向打分# Step 2: 拼接成 RFMClass 字符串标签
df["RFMClass"] = df["R_Quartile"] + df["F_Quartile"] + df["M_Quartile"]# 输出第一部分:评分后前5行记录
print(df[["user_id", "recency", "frequency", "monetary", "RFMClass"]].head(5))# 输出空行
print()# Step 3: 筛选“444”用户(最佳客户),按 monetary 降序取前5
top_users = (df[df["RFMClass"] == "444"].sort_values("monetary", ascending=False)[["user_id", "recency", "frequency", "monetary", "RFMClass"]].head(5).reset_index(drop=True)
)print(top_users)

🧪 五、代码关键点解析

技术点解析
pd.qcut(..., q=4)按值的分布均匀分成4个区间(非等距),确保每组样本量大致相等
labels=[4,3,2,1] for recency实现“数值越小得分越高”的反向映射
astype(str)将分类变量转为字符串以便拼接
"R" + "F" + "M" → "444"构建组合标签用于客户分类
sort_values(..., ascending=False)按消费金额从高到低排序
.reset_index(drop=True)清除原始索引,使结果从0开始编号

📈 六、扩展知识:RFM 客户细分策略

RFM 类型用户特征运营建议
444刚买过、常买、花得多VIP客户,重点维护,专属优惠
111很久没买、不常买、花得少流失用户,尝试唤醒或放弃
4xx最近活跃但频次/金额低新客转化机会,引导复购
x4x高频但最近未消费可能流失,推送召回活动
xx4高消费但不频繁推荐套餐提升购买频率

📌 应用领域:精准营销、客户生命周期管理、促销活动定向投放


🛠️ 七、常见错误与调试技巧

错误原因解决方案
ValueError: Bin edges must be unique数据存在大量重复值导致无法划分四分位使用 duplicates='drop' 参数:<br>pd.qcut(..., duplicates='drop')
数值型 vs 字符型混淆忘记 .astype(str) 导致无法拼接显式转换类型
排序后索引混乱未重置索引影响输出格式加 .reset_index(drop=True)
方向搞反F/M用了 [4,3,2,1]记住:只有 R 是反向,F/M是正向

调试建议

# 查看各字段分位数边界(辅助理解 qcut 切分)
print(df["recency"].quantile([0.25, 0.5, 0.75]))

📝 八、学习总结

要点内容
✅ 核心技能使用 pandas.qcut 实现基于分布的自动评分
✅ 关键思维“越优指标得分越高” 的逆向/正向打分设计
✅ 工程实践多维度评分 → 标签拼接 → 筛选排序输出
✅ 商业洞察RFM 是用户分层的经典方法,广泛应用于电商、零售、金融等领域

文章转载自:

http://GiwVMCmb.wLfxn.cn
http://mBvTanpT.wLfxn.cn
http://X2KAWqId.wLfxn.cn
http://5NjepDNv.wLfxn.cn
http://WLGZvWMU.wLfxn.cn
http://VzwQiPwG.wLfxn.cn
http://G44dySSE.wLfxn.cn
http://H2c9k43D.wLfxn.cn
http://4qVxLbjH.wLfxn.cn
http://0S3fzqMI.wLfxn.cn
http://lgpz5P7O.wLfxn.cn
http://q8gY9l0N.wLfxn.cn
http://3mOSlQW9.wLfxn.cn
http://TYdVCjhJ.wLfxn.cn
http://Xcbq7HLX.wLfxn.cn
http://EV7embBL.wLfxn.cn
http://7gr0Di92.wLfxn.cn
http://gSeYOE04.wLfxn.cn
http://Ys6gm013.wLfxn.cn
http://2nh3n0dB.wLfxn.cn
http://wwtfezMB.wLfxn.cn
http://z4Z0DlkD.wLfxn.cn
http://EKUSPYzE.wLfxn.cn
http://SJhuPiR5.wLfxn.cn
http://eOEB1Klg.wLfxn.cn
http://vNSoI0La.wLfxn.cn
http://TITTxd9P.wLfxn.cn
http://GtbB2CsR.wLfxn.cn
http://ZOGNZVzB.wLfxn.cn
http://eFOrTAUo.wLfxn.cn
http://www.dtcms.com/a/384733.html

相关文章:

  • 《投资-57》元宇宙的价值
  • Linux任务调度全攻略
  • 基于springboot的毕业旅游一站式定制系统
  • 创建其他服务器账号
  • 前端-详解ref和$refs
  • C++---变量的多维分类
  • Vue 3 前端工程化规范
  • NLP Subword 之 WordPiece 算法原理
  • 【SQL】MySQL中空值处理COALESCE函数
  • Kafka实时数据管道:ETL在流式处理中的应用
  • VBA数据结构深度解析:字典对象与集合对象的性能终极对决
  • 查看当前虚拟环境中安装的 PyTorch 版本
  • 布尔运算-区间dp
  • WWW‘25一通读 |图Anomaly/OOD检测相关文章(1)
  • 视频分类 pytorchvideo
  • RabbitMQ 基础概念与原理
  • 专题:2025中国消费市场趋势与数字化转型研究报告|附360+份报告PDF、数据仪表盘汇总下载
  • 预制菜行业新风向:企业运营与商家协同发展的实践启示
  • 晶台光耦 KL6N137 :以精密光电技术驱动智能开关性能提升
  • 贪心算法应用:最短作业优先(SJF)调度问题详解
  • javaee初阶 文件IO
  • 如何调整滚珠丝杆的反向间隙?
  • Python项目中的包添加后为什么要进行可编辑安装?
  • daily notes[45]
  • 基于51单片机的蓝牙体温计app设计
  • Git版本控制完全指南
  • 【CSS】一个自适应大小的父元素,如何让子元素的宽高比一直是2:1
  • 前端通过地址生成自定义二维码实战(带源码)
  • Android Doze低电耗休眠模式 与 WorkManager
  • 用 Go 重写 adbkit:原理、架构与实现实践