《商业数据分析》期末大作业 · 嘉兴大学 数据科学学院 · 2026 秋

基于 UCI Online Retail II 的
跨国零售用户价值与品类结构分析

以 UCI Machine Learning Repository 公开数据集(#502,CC BY 4.0)为对象, 完成「合规取数 → 清洗治理 → 10 类商业模型 → 37 张 Python 图表 → 22 组件交互大屏 → 商业洞察」的端到端流程。 全流程零爬虫、零 BI 软件,随机种子固定为 2026,克隆后一条命令即可完整复现。

数据源:UCI #502 白名单取数 · 非爬虫 CC BY 4.0 30.28 万行有效明细 随机种子 2026 · 可复现 全 Python 实现

核心指标概览

统计口径:清洗后有效明细 302,786 行,分析窗口 2009-12-01 ~ 2011-11-30(剔除不完整的末月)。

£567.6 万
总销售额
11,875 张发票 · 36 国
£488.22
平均客单价
3,726 位注册客户
84.96%
英国市场占比
市场集中度过高
80.0%
A 类 SKU 营收贡献
仅 996 个(22.17%)
10.65%
次月留存率
此后稳定 9%~12%
52.74%
二次购买转化率
忠诚客户 535 位(14.36%)
3,866
有效关联规则
最强提升度 16.11
+40.61%
圣诞品类同比增速
派对品类 +50.52%

交互式商业分析大屏

Pyecharts 生成 · 暗色主题 · 4 个标签页 · 20 个联动组件(KPI 卡 / 趋势图 / 结构图 / 热力图 / 漏斗 / 词云 / 明细表 / 时间轴筛选器)。

销售总览 客户洞察 商品结构 预测复盘 全屏打开 →

大屏演示(自动截图 + 轮播动画)

由 scripts/10_dashboard_screenshots.py 调用本机无头浏览器对离线大屏逐标签页实拍(1920×1080),并合成轮播 GIF——作为评分标准中「大屏演示截图或录屏」创新加分材料提交,论文中同步收录(图 5-7)。

四标签页轮播演示(GIF) 打开原图 →
大屏四标签轮播演示
Tab1 销售总览
Tab ① 销售总览KPI 卡 + 销售趋势 + 月度排名时间轴
Tab2 客户价值
Tab ② 客户价值RFM 玫瑰图 + 分群对比 + 留存曲线 + 复购漏斗 + 流失预警
Tab3 商品洞察
Tab ③ 商品洞察TOP10 + 品类环形 + 词云 + ABC + 关联规则榜
Tab4 预测与复盘
Tab ④ 预测与复盘预测置信带 + 回测对比 + 波士顿矩阵

商业分析模型与参数依据

10 类模型覆盖「卖什么 / 卖给谁 / 接下来会怎样」三大决策场景,每个参数与阈值均给出业务依据,并对关键阈值做了稳健性检验。

#模型关键参数与业务依据核心图
M1环比/同比 + 移动平均MA7 / MA30 / MA90 多周期平滑;剔除不完整末月(2011-12 仅 9 天)fig01 · fig25
M2RFM 八分类中位数切分(分布右偏,抗极值):R = 203 天,F = 2 次,M = £488.69fig26 · fig27
M3同期群留存月度粒度(周太碎、季太粗);保留率矩阵对角线 = 100% 用于验证计算fig28
M4帕累托 / ABC 分类A = 累计 80%,B = 累计 95%;销售额口径fig29
M5Apriori 关联规则support ≥ 0.01(有铺货价值)/ lift > 1.0(正向关联)/ conf ≥ 0.15(推荐可命中)fig30 · fig31
M6波士顿矩阵相对份额阈值 1.0(BCG 经典分界);增速阈值取大盘同比 7.62%fig32
M7SARIMA / Holt-Winters周周期 7 天;30 天留出回测;输出点预测 + 95% 置信区间fig33
M8K-Means 用户分群分位数变换→正态(消除 RFM 右偏);K 由轮廓系数确定(K = 2,0.7412);seed = 2026fig34
M9复购漏斗五级转化,定位「第 2 次购买」瓶颈fig35
M10客户流失预警观测窗/表现窗严格切分防泄漏;LogReg 主模型 + 时间外验证 + 能力边界检验fig36/37

预测回测结果(测试集 30 天)

模型阶数MAPERMSEAIC选用
Holt-Winters加法趋势(阻尼) + 加法季节(7)34.70%£11,169—选用
SARIMA(1,1,1)(1,0,1,7)36.33%£11,02313,879.5

稳健性检验① RFM 切分方式是否影响结论

切分方式阈值 R / F / M核心客群人数人数占比营收占比
中位数(采用)203 天 / 2.00 次 / £488.691,06928.69%69.99%
均值249 天 / 2.89 次 / £1,329.5657215.35%61.43%
60 分位126 天 / 2.00 次 / £671.7378421.04%62.84%

三种方案下「不足三成客户贡献六成以上营收」的结构均成立,结论稳健;同时可见均值切分会少识别约 500 名可运营客户,反向印证了采用中位数的理由。

稳健性检验② K-Means:K = 2 是数据本身的断点,而非参数没调好

证据对比口径结果结论
预处理方式log1p+Z-score / 99%缩尾 / 分位数变换0.4271 / 0.4269 / 0.7412低分是方法问题,不是数据问题
特征集(K=2)R/F/M 三维 / +AOV / +Tenure0.7412 / 0.6808 / 0.6364多加特征反而更差(共线与噪声)
算法一致性K-Means / Ward / GMM(K=2)0.7412 / 0.7412 / 0.7412三算法划分完全相同,与算法无关
bootstrap 稳定性重采样 100 次的 ARI(K=2)1.0000(K=6 仅 0.7770)扰动样本划分纹丝不动

最有力的一条证据:高价值忠诚群 1,965 人全部购买过 2 次以上,沉睡流失群 1,761 人全部只买过 1 次,无一例外。无监督算法自动切出的分界精确落在「是否完成第 2 次购买」上,而 1,965 ÷ 3,726 = 52.74%,与复购漏斗独立算出的复购率完全相等。

稳健性检验③ 波士顿矩阵增速口径

品类YoY(%)趋势年化(%)趋势 R²t 值象限一致
Party & Occasion50.5257.770.3703.60一致
Christmas & Seasonal40.61155.260.1311.82一致
Bags & Storage26.5337.530.3483.42一致
Home Decor & Lighting9.5716.710.0571.15不一致
Jewellery & Accessory-48.27-32.850.242-2.65一致

两口径 Spearman 相关 0.9636、象限一致 10/11,四象限划分稳健。但 Christmas 品类差值达 114.65 个百分点且趋势不显著(R² 仅 0.131、t = 1.82),月度波动系数 1.257 为全表最高——同比把旺季相位差算成了增速,其「高增长」应谨慎解读。全表仅 3 个品类趋势通过显著性检验(|t| ≥ 2.07),据此 §6.3 建议对不显著品类只给方向性意见、不做量化承诺。

客户流失预警:模型能力的边界

流失预警最容易被质疑的不是「AUC 多少」,而是三个更根本的问题:这个分数是模型的极限还是调参不够?换个时间窗口还成立吗?按概率阈值触达真的划算吗?本项目逐一给出可核查的答案。

① 分层可预测性:一次性客户的流失不可预测,这是数据的上限

客群客户数流失率预测特征CV_AUC结论
一次性客户(历史仅 1 次购买)1,59386.06%全量 RFM 行为特征(14 维)0.5481近乎随机,不可预测
一次性客户1,59386.06%首购特征集(6 维,换特征重试)0.5464换特征也救不回来
复购客户(历史 ≥2 次购买)1,66262.88%全量 RFM 行为特征(14 维)0.7022有实际预测能力

一次性客户占样本 49%,他们没有可供学习的行为历史。为排除「特征选得不好」这一解释,另用首购特征集(首购金额、品类数、距观测窗末天数等)重做,AUC 仍为 0.5464。这个「不可预测」本身就是业务结论:对这批客户做精准挽留是无效投入,资源应转向改善首购体验。

② 多窗口时间外稳健性:换个窗口还成立

表现窗窗口类型样本数流失率AUCKS
2011-08-31 ~ 2011-11-30主建模窗口(样本内拟合)3,25574.22%0.72920.3533
2011-05-31 ~ 2011-08-31前移 3 个月3,01680.01%0.74390.3662
2011-02-28 ~ 2011-05-31前移 6 个月2,68279.60%0.72010.3473
2010-11-30 ~ 2011-02-28前移 9 个月2,44879.49%0.71000.3411

三个时间外窗口 AUC 落在 0.7100–0.7439,波动仅 0.034 且无衰减趋势——模型学到的是跨时间稳定的行为规律,不是某个窗口的噪声。

② 续:窗口长度敏感吗?—— 不敏感

表现窗窗口类型样本数流失率AUCPR_AUCKS
2011-10-31 ~ 2011-11-30长度 1 个月3,55586.53%0.71720.93250.3343
2011-08-31 ~ 2011-11-30长度 3 个月(本文采用)3,25574.22%0.72920.86110.3533
2011-05-31 ~ 2011-11-30长度 6 个月3,01664.66%0.71980.79400.3358
2011-02-28 ~ 2011-11-30长度 9 个月2,68256.90%0.71140.72600.3230

「3 个月未购买即流失」是人为阈值。固定截止日 2011-11-30、只放宽表现窗长度后,四种长度 AUC 极差仅 0.018(0.7114–0.7292),排序能力对窗口长度不敏感;窗口越长流失率越低(86.53% → 56.90%),符合「窗口越长、被判流失的门槛越高」的直觉。

③ 阈值成本收益:按概率硬切不经济,应按期望损失排序

在 4 组「触达成本率 × 挽回率」情景下各扫描 6 档触达比例(5%–50%),所有情景的净收益都随触达比例单调上升,在扫描上限 50% 处仍未出现峰值。这说明高低概率客户之间的价值差异比概率差异更能决定「走了亏多少」。因此预警名单按 期望损失 = 流失概率 × 历史累计消费 排序,取前 300 位,合计期望损失 £365,989(相当于主样本 3,255 位客户历史累计消费总额 401.21 万英镑的 9.12%)。

④ 集成消融:不值得

逻辑回归与随机森林的交叉验证样本外概率等权平均后,AUC 仅从 0.7241 升至 0.7244(+0.0003),远不足以抵消复杂度与可解释性损失,故采用单一逻辑回归。方法细节:集成概率必须来自交叉验证的样本外预测,若直接用训练集拟合概率求平均,会得到 0.7625 这类虚高值。

商业建议与落地优先级

分析的价值最终要落到决策上。论文 §6.3 基于模型证据提出 5 条核心建议 (落在模板「3–5 条」要求内,均为中短期可排期执行)与 1 条战略性延伸建议, 每条都配了优先级与可观测的 KPI,使建议落地后能被反向检验。

建议核心模型证据量化预期效果优先级效果度量指标(KPI)
重要价值客户专属运营RFM:1,069 人(28.69%)贡献 69.99% 营收留存率每 +1pp ≈ 保住 £3.5 万/年P1该群季度留存率、人均年贡献额
ABC 重构库存资金配置帕累托:22.17% SKU 贡献 80% 销售额库存周转效率 +30%,不影响 80% 营收盘子P1A 类现货率、C 类 SKU 占比
组合陈列 + 捆绑优惠Apriori:3,866 条规则,最强提升度 16.11提升连带率与客单价P2连带率(件/单)、组合订单占比
提前 8 周备货 + CI95 安全库存预测 MAPE 34.70%,11 月峰值 £42.05 万降低旺季缺货损失,抑制季末积压P2旺季缺货率、季末滞销库存占比
分层召回沉睡客群K-Means:1,761 人(47.26%)全部仅购买 1 次,人均 £357召回 ROI ≥ 3:1(单次触达成本 <£5)P130 日回流率、单次召回成本
延伸建议:市场多元化(战略)结构分析:英国单一市场占 84.96%英国营收占比降至 80% 以下P3非英营收占比、德/法新客净增数

优先级口径:P1 低成本、收益确定,一个月内可启动;P2 需跨部门配合,一个季度内排期, 建议先小范围 A/B 验证;P3 属战略性结构调整,纳入年度规划而非季度考核。

一键复现

随机种子在 scripts/utils/config.py 中固定为 2026,任何人克隆后均可得到完全一致的结果。 已实测:干净目录导出复跑后 163 项产物(37 图 + 101 表 + 22 组件 + 论文等)字节级全部一致, 详见仓库 docs/复现验证报告.md。

# 1. 克隆仓库
git clone https://github.com/heee-a/business-data-analysis.git
cd business-data-analysis

# 2. 安装依赖(建议 Python 3.11+ 虚拟环境)
pip install -r requirements.txt

# 3. 一键复现全部结果(10 个阶段,约 8 分钟)
python run_all.py

# 常用参数:--list 查看阶段 | --only 4 5 仅出图 | --skip 1 2 跳过取数与清洗
×