K-Means聚类与异常检测:Beginner-Data-Science-Projects客户分群与信用卡欺诈识别实战指南
【免费下载链接】Beginner-Data-Science-ProjectsThis repository is a curated collection of hands-on data science projects tailored for beginners. Whether you're just starting your journey in data science or looking to strengthen your skills, these projects provide a practical and interactive way to apply your knowledge.项目地址: https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects
Beginner-Data-Science-Projects是一个专为新手打造的开源数据科学项目集合,其中最贴合「K-Means聚类」与「异常检测」两大主题的是客户分群项目和信用卡欺诈检测项目。本文将带你用真实数据跑通这两条经典路线:用K-Means 聚类给零售客户自动分群,用机器学习识别 0.97% 的欺诈交易,零基础也能看懂每一步。🚀
一、项目速览:聚类与异常检测各解决什么问题
| 主题 | 通俗理解 | 对应项目 |
|---|---|---|
| 🧩 K-Means 聚类 | 给数据"自动分组",不需要提前打标签 | 客户分群、商场客户分群、图像色彩压缩 |
| 🚨 异常检测 / 欺诈识别 | 在海量正常数据中揪出极少数"异常值" | 信用卡欺诈检测、交易异常检测 |
两者都是数据科学入门的"必考题":前者练无监督学习,后者练类别极度不平衡下的分类。
二、实战一:RFM + K-Means 客户分群
1. 数据从哪来?
项目基于 UCI 经典数据集:一家英国线上礼品零售商的541,909 条原始交易(2010.12–2011.12),数据文件见 data/online_retail.csv。
2. 三步清洗:把交易变成"客户档案"
在 02_data_cleaning.ipynb 中:
- 删除缺失 CustomerID 的行(135,080 行)
- 剔除以
C开头的取消订单(8,905 行) - 剔除数量/单价非正的脏数据
清洗后用RFM 框架把 39.8 万条交易聚合成4,338 名客户,每人一行:
| 特征 | 含义 |
|---|---|
| Recency 近度 | 最后一次购买距"快照日"的天数 |
| Frequency 频度 | 客户下过多少张发票 |
| Monetary 金额 | 累计消费总额 |
💡 关键技巧:RFM 原始分布严重右偏,项目先用
log1p对数变换再标准化,否则少数巨额客户会把聚类"带偏"。
3. K-Means 结果:两类客户清清楚楚
03_model_building.ipynb 对 k=2~10 全部试了一遍,轮廓系数在 k=2 时最高(0.433),肘部图也在 2→3 之间明显拐弯:
| 簇 | 人设 | 平均近度 | 平均订单数 | 平均消费 | 人数 |
|---|---|---|---|---|---|
| 0 | 流失/休眠客户 | 134 天 | 1.7 | £498 | 2,671 |
| 1 | 冠军客户 Champions | 26 天 | 8.4 | £4,548 | 1,667 |
结论非常落地:占 38% 的冠军客户贡献了绝大部分收入,而"最近一次购买距今多少天"是最强的流失预警信号。
📁 配套工具函数都沉淀在 utils.py 中(clean_transactions、build_rfm、find_optimal_k),可直接复用。
三、实战二:信用卡欺诈检测(异常识别)
1. 为什么"准确率"在这里是陷阱?
数据集 data/creditcard.csv 包含 50,492 笔交易,其中欺诈仅占 0.97%(保留了全部 492 笔欺诈样本)。这时一个"全部判为正常"的模型也能有约 99% 准确率,却一笔欺诈都抓不到——所以本项目重点考核精确率、召回率、F1 和 ROC-AUC。
2. 七个模型横评:随机森林胜出
03_model_building.ipynb 训练了 7 个模型(支持的地方均用class_weight='balanced'处理不平衡),核心结果如下:
| 模型 | 精确率 | 召回率 | F1 | ROC-AUC |
|---|---|---|---|---|
| 随机森林(调参后) | 0.9639 | 0.8421 | 0.8989 | 0.9789 |
| 随机森林(默认) | 0.9756 | 0.8421 | 0.9040 | 0.9803 |
| KNN (K=5) | 0.9756 | 0.8421 | 0.9040 | 0.9469 |
| SVM | 0.4555 | 0.9158 | 0.6084 | 0.9874 |
| 逻辑回归 | 0.2659 | 0.9263 | 0.4131 | 0.9776 |
💡 规律很清晰:SVM、逻辑回归等模型"宁可错杀"召回高但误报多;树模型(随机森林)精确率高,几乎不误伤正常交易,综合表现最好。特征重要性则由 PCA 分量 V14、V4、V10 主导,Amount 和 Time 贡献很小。
📁 评分函数(精确率/召回率/混淆矩阵/ROC 曲线)封装在 utils.py 的evaluate_model与plot_roc_curves中。
四、彩蛋:K-Means 还能"压图"
想直观感受聚类的威力?图像色彩压缩项目用 K-Means 在 RGB 空间中给像素分簇,把数万种颜色压成 16 色:压缩 6 倍,PSNR 仍达 27~29 dB,肉眼几乎看不出差别。


上面两张就是项目自带的样本原图(每张 27 万+ 像素、数万像素级颜色数),跑完 03_model_building.ipynb 就能看到 2 色、8 色、16 色、32 色的渐变效果。
五、快速上手:5 分钟跑起来
1️⃣ 克隆仓库:
git clone https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects2️⃣ 安装依赖(两个项目依赖完全一致:pandas、numpy、matplotlib、seaborn、scikit-learn):
pip install -r requirements.txt3️⃣ 按顺序打开三个 Notebook:01_eda→02_data_cleaning→03_model_building,每个文件夹都自带这份固定流程,README.md 里写明了预期结果。
六、延伸学习路径
| 想继续练 | 推荐项目 |
|---|---|
| 换个聚类场景 | 商场客户分群(含层次聚类) |
| 无监督异常检测 | Isolation Forest 交易异常检测(IsoForest ROC-AUC 0.945) |
| 有监督入侵检测 | KDD Cup 网络入侵检测 |
一句话总结:客户分群教你用 K-Means"无中生有"地找出群体结构,欺诈检测教你在极端不平衡下正确评估模型——把这两个项目跑通,无监督学习和异常检测的入门闭环就完成了。✅
【免费下载链接】Beginner-Data-Science-ProjectsThis repository is a curated collection of hands-on data science projects tailored for beginners. Whether you're just starting your journey in data science or looking to strengthen your skills, these projects provide a practical and interactive way to apply your knowledge.项目地址: https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考