# RFM 数据练习复现说明

本目录为 UCI Online Retail 的派生教学材料。原始数据记录 2010-12-01 至 2011-12-09 的交易，分析日期为 2026-10-03，R 的参考日期固定为 2011-12-10。

## 来源与加工

Chen, D. (2015). Online Retail [Dataset]. UCI Machine Learning Repository. DOI: [10.24432/C5BW33](https://doi.org/10.24432/C5BW33)。许可 CC BY 4.0。来源：[数据集页面](https://archive.ics.uci.edu/dataset/352/online+retail)；[官方 ZIP](https://archive.ics.uci.edu/static/public/352/online+retail.zip)。

派生加工包括筛选客户编号、取消订单、数量和单价，随后按客户汇总。保留完全重复行，不额外删除邮费或手工项目代码。M 是正向采购金额，不扣除取消记录，不是净收入或利润。所有价格仍为 GBP。

`six-customers-source.csv` 是原表六个固定编号的完整明细子集，共 402 行，并非统计代表样本。`rfm-six-customers.csv` 是这六个客户的筛选后结果。`rfm-all-customers.csv` 是完整有效客户结果。`analysis-summary.json` 保存口径、逐步行数、总量、样例和校验值。

## 复现步骤

下载官方 ZIP 与 [分析脚本](analyze_retail.py) 到本机。准备 Python 3、pandas 和 openpyxl，在下载目录运行：

```sh
python3 -m pip install pandas openpyxl
python3 analyze_retail.py online-retail.zip rfm-results
```

脚本只读 ZIP，不修改原表，将派生文件写入指定的 `rfm-results` 文件夹。可将最后一个参数改成自己的输出目录。原始 ZIP 约 22.6 MB，请从上面的官方地址获取。

官方 ZIP 的 SHA-256：`f5385cbb54bbebf7196389109c6b0621faab0c304e3702548165e71c84aede8b`。

内部 XLSX 的 SHA-256：`43465a06f2ccf7c8b5bd2892bc7defb52f97487934fe93b16ae4c3936424676d`。

## 检查点

顺序排除量加最终保留量应等于 541,909。最终有效客户为 4,338，订单号为 18,532。客户级 M 总和等于筛选后逐行数量乘单价的总和 8,911,407.904 GBP；展示金额可以四舍五入，但不要在每行计算前截断单价。

R 取日期差而非相隔小时数，客户 12347 应为 3 天。F 去重订单号而非计明细行，该客户应为 7 次。两项演示分组条件各自单独判断，不能误当作覆盖全部客户的分段。

原始表网页的缺失值标记不替代实际检查；本次文件中的 CustomerID 有 135,080 行为空。样本具有批发客户和有限观察期，不适合直接借用演示阈值进行营销决策。
