母婴电商购物行为数据分析

基于阿里天池「淘宝母婴购物数据集」的端到端分析:从数据质量体检、生意节奏、品类结构, 到异常订单识别与囤货行为预测模型,输出可落地的运营建议。

交易记录 29,971 条 时间跨度 2012.07 – 2015.02 Python · pandas · scikit-learn 报告生成于 2026-10-08

目录

  1. 数据说明与质量体检
  2. 生意节奏:时间维度分析
  3. 卖什么:品类结构分析
  4. 怎么买:购买量分布与异常订单识别
  5. 谁在买:宝宝画像与品类偏好
  6. 商品属性挖掘
  7. 囤货订单识别模型
  8. 结论与运营建议
  9. 局限性说明与后续计划
  10. 项目复现方式

核心结论速览

🔴双11 是唯一的强爆发点,拉动 5.2 倍

11 月 11 日当日件数达到平日的 5.19 倍,且 2013、2014 两年 11 月均占全年件数的 30% 左右,规律稳定可复用。反观 618 仅 0.64 倍,说明在当时的淘系母婴品类中并不成立——结论不能照搬其他平台的常识。

📦复购由品类驱动,尿裤与奶粉是两大命脉

尿裤/湿巾与奶粉/辅食合计贡献 62% 的件数、65% 的笔数,但两者的购买逻辑完全不同:尿裤单笔 4.1 件属囤货型,奶粉单笔 1.5 件属高频补货型,运营策略应区别设计。

⚠️0.03% 的订单贡献了 27.5% 的件数

单笔最高达 10,000 件(童装/童鞋),一笔即占全部件数的 13.1%。这类订单更可能是批发或非真实消费,若不在分析前剥离,会显著拉高所有「平均值」类指标——本报告已做剔除对照。

🔍性别与品类偏好在本样本中无显著关联

卡方检验 p=0.79、Cramér's V=0.05,无法拒绝独立性假设。这是一个「没有差异」的结论,但它说明:基于性别的差异化推荐在本数据上缺乏依据,不宜作为运营抓手。

🤖囤货行为可被有效预测(PR-AUC 0.21 vs 随机 0.06)

逻辑回归在 5 折交叉验证下 ROC-AUC 达 0.778,PR-AUC 是随机基线的 3.4 倍。首要预测信号是「商品属性维度数」与品类,时间因素影响较弱。

🧭先质疑数据,再下结论

人均仅 1.0 笔交易的样本结构决定了「用户生命周期/RFM/性别预测」不可能成立(实测 AUC 0.493,等同随机)。识别出「哪些分析做不了」,和做出分析同样重要。

01数据说明与质量体检

在动手分析前,先确认数据能回答什么问题、不能回答什么问题。

29,971
交易记录
清洗后有效记录
76,250
购买总件数
含大额异常单
29,944
覆盖用户
人均 1.0009 笔
662
二级类目
归属 6 个一级类目
953
有宝宝档案用户
占交易用户 3.2%
2012.07–2015.02
时间跨度
完整年度仅 2013、2014

1.1 数据质量体检结果

检查项 结果 说明
交易表行数 29971 NaN
交易表用户数 29944 NaN
交易表商品数 28422 NaN
交易表时间跨度 2012-07-02 ~ 2015-02-05 NaN
交易表日期缺失 0 NaN
交易表属性为空 144 property 字段无内容
交易表购买量异常(<=0) 0 NaN
宝宝表行数 953 NaN
宝宝表生日缺失 0 NaN
宝宝表性别分布 0:489 / 1:438 / 2:26 0=女宝 1=男宝 2=未知(天池官方说明)
宝宝表生日异常(早于2000年) 1 NaN
人均交易笔数 1.0009 NaN
有复购的用户数 25 该样本按行抽样,复购用户极少
关键结构判断:29,971 笔交易对应 29,944 个用户,人均 1.0009 笔、仅 25 个用户存在复购。 这说明拿到的是一份按行随机抽样的样本,而非完整的用户行为序列。 因此本项目主动放弃了用户生命周期、RFM 分层、复购周期、性别预测等依赖「单用户多记录」的分析, 把重心放在交易、品类、时间、商品属性与宝宝画像这些样本能够支撑的方向上。

1.2 数据字段与口径

规模概览

指标 数值
交易笔数 29971
购买总件数 76250
覆盖用户数 29944
覆盖商品数 28422
一级类目数 6
二级类目数 662
时间跨度 2012-07-02 ~ 2015-02-05
平均单笔件数 2.54
单笔件数中位数 1
有宝宝档案的用户 952
完整年度交易笔数(2013-2014) 24777
需要说明的两处口径:
① gender 编码依天池官方 Overview 说明为 0=女宝、1=男宝、2=未知; 部分中文二手资料编码相反。本报告所有性别相关结论均做对称表述,不依赖该映射方向。
② 一级类目中文名依据社区整理的类目对照表,该对照表未包含在本次样本中; 所有图表均同时标注原始编码(如 28、50008168),便于核对。

02生意节奏:时间维度分析

回答三件事:生意在增长吗?一年中什么时候最好卖?大促到底能拉动多少?

2.1 整体趋势

图 2-1 月度交易趋势(2012.07–2015.02)
图 2-1 月度交易趋势(2012.07–2015.02)
图 2-2 完整年度对比:2014 年购买件数同比增长 19.9%
图 2-2 完整年度对比:2014 年购买件数同比增长 19.9%

2.2 季节性规律

图 2-3 年内月度销量分布(仅统计数据完整的 2013–2014 年)
图 2-3 年内月度销量分布(仅统计数据完整的 2013–2014 年)
📈稳定增长

2014 年购买件数同比 +19.9%,交易笔数同比增长,处于典型的行业扩张期。

🗓️双峰结构

两个完整年度的曲线形态高度一致:11–12 月为大促峰(约 31% + 20%),6 月为次高峰,2 月为全年低谷(春节效应)。

2.3 大促拉动效果

图 2-4 各电商大促节点对销量的拉动倍数
图 2-4 各电商大促节点对销量的拉动倍数

大促效应量化

大促 覆盖天数 总件数 大促日均件数 平日日均件数 拉动倍数 件数占全期比重(%)
双11 3 1250 416.7 80.2 5.19 1.65
双12 3 544 181.3 80.2 2.26 0.72
618 2 103 51.5 80.2 0.64 0.14
一个反直觉的发现:618 的拉动倍数只有 0.64(低于平日),而双12 也有 2.26 倍。 这说明在 2012–2014 年的淘系母婴品类中,618 尚未形成大促心智——该时期 618 是竞对平台的主场。 做数据分析不能直接套用「618 是大促」的行业常识,必须用数据验证。

2.4 周内节律与高峰单日

图 2-5 一周内的下单分布
图 2-5 一周内的下单分布

购买件数 Top10 单日

日期 星期 交易笔数 购买件数
2014-11-13 周四 49 10061
2013-12-20 周五 35 2841
2014-09-20 周六 45 2804
2015-01-12 周一 45 1552
2013-07-01 周一 26 1032
2014-10-21 周二 50 804
2014-11-11 周二 454 774
2014-07-02 周三 38 645
2013-02-22 周五 20 631
2014-10-07 周二 44 568

03卖什么:品类结构分析

从品类集中度与购买逻辑两个角度,判断商品结构是否健康。

3.1 一级品类结构

图 3-1 一级品类结构(件数口径 vs 笔数口径)
图 3-1 一级品类结构(件数口径 vs 笔数口径)

一级品类明细

品类 交易笔数 购买件数 商品数 笔数占比(%) 件数占比(%) 单笔平均件数
尿裤/湿巾 6963 28545 6580 23.23 37.44 4.10
童装/童鞋 4834 19763 4457 16.13 25.92 4.09
奶粉/辅食 12494 18792 12046 41.69 24.65 1.50
玩具/童车 1203 3666 1176 4.01 4.81 3.05
喂养/洗护 2367 3245 2115 7.90 4.26 1.37
妈妈专区 2110 2239 2048 7.04 2.94 1.06
🍼奶粉/辅食:高频低量

41.7% 的交易笔数、12,046 个商品,但单笔仅 1.5 件——典型的「高频补货 + 极度分散」的品类,是平台流量的基本盘。

🧷尿裤/湿巾:低频高量

笔数占比 23.2%,却贡献 37.4% 的件数,单笔高达 4.1 件——典型的囤货型品类,是平台 GMV 的压舱石。

👗童装/童鞋:被低估的第二梯队

件数占比 25.9%、笔数占比 16.1%,单笔 4.09 件,规模仅次于尿裤,通常容易被忽视。

3.2 二级类目集中度

图 3-2 二级类目帕累托图(Top 30 / 共 662 个类目)
图 3-2 二级类目帕累托图(Top 30 / 共 662 个类目)

集中度指标

指标 数值
CR5(前5类目件数占比) 31.83%
CR10 44.47%
CR20 56.13%
类目总数 662
HHI(赫芬达尔指数) 394.8
贡献后50%件数的类目数 14
集中度判读:CR10 = 44.5%、HHI = 394.8,属于中等集中度 + 长尾厚的市场结构。 头部没有绝对垄断品类,长尾的 662 个二级类目仍贡献了近半销量——这对平台意味着 类目运营不能只盯大单品,长尾选品的覆盖广度本身就是竞争力。

04怎么买:购买量分布与异常订单识别

购买量是理解「囤货 vs 即时消费」的核心,也是识别异常数据的最佳切入点。

4.1 购买量分布

图 4-1 购买量分布(对数双轴)与 Top10 档位
图 4-1 购买量分布(对数双轴)与 Top10 档位

购买量描述统计

指标 数值
平均数 2.54
中位数 1.00
众数 1.00
标准差 63.99
P90 2.00
P99 13.00
最大值 10000.00
单件购买占比(%) 87.87
囤货(≥3件)占比(%) 6.13
偏度 133.46
峰度 20133.78
为什么中位数比均值更可信:购买量中位数 = 1 件、众数 = 1 件,而均值被拉到 2.54 件, 偏度高达 133、峰度 20,134。这是一条极端右偏的长尾分布,任何用均值描述「典型用户行为」的结论都会被少数大单扭曲。

4.2 各品类的囤货倾向

图 4-2 各品类平均单笔件数与囤货单占比
图 4-2 各品类平均单笔件数与囤货单占比

品类囤货指标

品类 交易笔数 平均单笔件数 囤货笔数 囤货笔数占比(%)
尿裤/湿巾 6963 4.10 590 8.47
童装/童鞋 4834 4.09 493 10.20
玩具/童车 1203 3.05 337 28.01
奶粉/辅食 12494 1.50 330 2.64
喂养/洗护 2367 1.37 72 3.04
妈妈专区 2110 1.06 15 0.71
🧷尿裤/湿巾 = 真囤货

平均 4.1 件,8.47% 的订单一次买 ≥3 件,是唯一符合「囤货」直觉的品类。

🧸玩具/童车 = 高囤货率

28.0% 的订单买 ≥3 件(比例最高),但平均只有 3.05 件——多为整套/组合装购买,属于商品结构特征而非囤积行为。

🍚奶粉 = 不囤货

仅 2.64% 的订单买 ≥3 件,平均 1.5 件。奶粉单价高、保质期敏感,用户倾向少量多次购买。

4.3 异常订单识别

图 4-3 Top10 大额订单与整体贡献集中度
图 4-3 Top10 大额订单与整体贡献集中度

单笔件数 Top10 订单

排名 user_id auction_id cat1_name buy_mount 日期 占全部件数比重(%) 累计占比(%)
1 2288344467 39769942518 童装/童鞋 10000 2014-11-13 13.11 13.11
2 117730165 20409520643 尿裤/湿巾 2800 2013-12-20 3.67 16.78
3 173701616 36505037679 奶粉/辅食 2748 2014-09-20 3.60 20.38
4 1945590674 3920805463 尿裤/湿巾 1500 2015-01-12 1.97 22.35
5 32141414 9716351898 尿裤/湿巾 1000 2013-07-01 1.31 23.66
6 119395773 21753712913 尿裤/湿巾 700 2014-10-21 0.92 24.58
7 300205516 8728039815 尿裤/湿巾 600 2013-02-22 0.79 25.37
8 300857121 38276597770 尿裤/湿巾 600 2014-07-02 0.79 26.16
9 462029374 7398446291 尿裤/湿巾 500 2012-11-19 0.66 26.82
10 1671630112 41020683325 尿裤/湿巾 498 2014-10-07 0.65 27.47

异常订单对核心指标的影响

指标 数值
全部订单平均单笔件数 2.54
剔除 Top10 大单后的平均单笔件数 1.85
Top10 大单合计件数 20946
Top10 大单占全部件数比重 27.5%
Top10 大单笔数占比 0.033%
最大单笔件数 10000
最大单笔所属品类 童装/童鞋
最大单笔日期 2014-11-13
这是本报告最重要的一条数据质量结论。 排名第一的订单一次购买 10,000 件童装,单笔即占全部件数的 13.1%; Top10 大单合计占 27.5%。这意味着:
  1. 本项目的「购买件数」类指标必须同时给出「含/不含大单」两个口径,否则结论不可靠;
  2. 这些订单更可能来自批发账号或非真实消费场景,应在业务侧单独标记;
  3. 若用「件数」作为核心 KPI,会被极少数订单绑架——建议改用订单数 / 用户数作为主口径。

05谁在买:宝宝画像与品类偏好

结合宝宝生日与性别,观察「孩子月龄」是否驱动品类选择。

5.1 宝宝基础画像

图 5-1 有档案宝宝的出生年份与性别构成
图 5-1 有档案宝宝的出生年份与性别构成

出生年份分布

birth_year 宝宝数 占比(%)
2002 1 0.11
2003 3 0.32
2004 4 0.42
2005 3 0.32
2006 10 1.05
2007 20 2.10
2008 36 3.78
2009 51 5.36
2010 84 8.82
2011 146 15.34
2012 183 19.22
2013 219 23.00
2014 170 17.86
2015 22 2.31

5.2 月龄段 × 品类偏好

图 5-2 月龄段与主营品类的偏好指数
图 5-2 月龄段与主营品类的偏好指数

偏好指数明细(>1 表示高于平均)

月龄段 喂养/洗护 奶粉/辅食 妈妈专区 尿裤/湿巾 玩具/童车 童装/童鞋
0-6月 2.70 0.78 0.56 0.75 0.13 1.89
7-12月 0.80 0.77 0.23 0.98 2.85 1.35
13-24月 0.43 0.89 1.42 1.12 1.46 0.97
25-36月 1.15 1.27 1.07 0.86 0.31 0.66
3-6岁 0.48 1.20 1.40 1.20 0.44 0.40
6岁以上 0.00 1.49 1.28 0.95 0.00 0.28
👶0–6 月龄:洗护与童装

喂养/洗护偏好指数 2.70、童装/童鞋 1.89,新生儿阶段的需求高度集中在基础照护与衣着。

🧸7–12 月龄:玩具爆发

玩具/童车偏好指数 2.85,是整张表中最高值——宝宝开始有互动需求,玩具品类应在此阶段做重点推荐。

🍚6 岁以上:奶粉仍在买

奶粉/辅食偏好指数 1.49,说明「儿童成长奶粉」的需求周期远长于婴儿阶段,容易被运营忽略。

5.3 性别与品类偏好:一次假设检验

图 5-3 不同性别宝宝的品类偏好对比
图 5-3 不同性别宝宝的品类偏好对比

卡方独立性检验结果

指标 数值
卡方统计量 2.41
自由度 5
p 值 0.7899
结论 无显著差异 (p>=0.05)
Cramér's V(效应量) 0.051
样本量 929
结论:无显著差异。卡方统计量 2.41、自由度 5、p = 0.79(远大于 0.05),Cramér's V = 0.051, 效应量接近于零。
这意味着在这份数据里,“男宝家庭”与“女宝家庭”的品类结构几乎一样。 一个诚实的「无差异」结论,比强行编造出差异更有价值——它直接否定了「按性别做差异化推荐」这一运营假设。

06商品属性挖掘

property 字段被平台脱敏,但它仍然携带「商品描述丰富度」这一有效信号。

图 6-1 高频商品属性维度与属性维度数分布
图 6-1 高频商品属性维度与属性维度数分布

属性维度统计

指标 数值
无属性记录的交易占比(%) 0.48
平均属性维度数 8.68
属性维度数中位数 9.00
属性维度数最大值 21.00

高频属性键的取值丰富度

prop_key 取值数 出现次数 平均每值出现次数
21458 8820 25930 2.9
1628665 64 24140 377.2
25935 4 14059 3514.8
21475 118 7789 66.0
13023209 6608 7636 1.2
1633959 5724 6571 1.1
32047 3 6436 2145.3
122217803 5 5900 1180.0
122217801 40 5351 133.8
22019 40 5136 128.4
22009 73 5028 68.9
1628348 3 4443 1481.0
22066 22 4409 200.4
1628366 4 4313 1078.2
2397831 11 3800 345.5
🔢属性维度数是有效特征

平均每条交易带 8.68 个属性维度,中位数 9,最大 21。属性越多,通常意味着商品规格越复杂、越可能是大包装或组合装。

🏷️两类属性键

取值仅 3–5 种的多为枚举型属性(如规格、段位);取值上千种的更接近品牌或型号标识(如属性键 21458 有 8,820 种取值)。

🎯可直接转化为建模特征

属性维度数在后续囤货预测中成为最重要的特征(重要性 0.304),说明被脱敏的字段依然有挖掘价值。

本节的结论刻意保持克制:由于属性键与取值均被平台脱敏,无法还原「品牌 / 尺码 / 适用年龄」等具体语义。 在真实业务场景中,若有未脱敏的属性字典,这一字段可直接支撑「同款不同规格的选择偏好」分析。

07囤货订单识别模型

为什么是「囤货预测」而不是经典的「性别预测」?这是一个关于数据可行性的判断。

7.1 任务选择:一个必须说明的取舍

天池该数据集最经典的赛题是「根据购买行为预测宝宝性别」,但它需要单个用户的多条购买记录来构造用户级行为特征。 本次样本中带性别标签的用户仅 929 人,人均可用交易记录数 = 1.0 条,特征维度直接塌缩。

性别预测可行性实测

指标 数值
有性别标签的用户数 929
人均可用的交易记录数 1.0
性别预测 ROC-AUC 0.4931
随机基线 AUC 0.5
结论 接近随机水平,该抽样结构不支持性别预测建模
原因 每位标签用户仅有约 1 条行为记录,无法构造用户级行为特征
我们实际跑了这个任务:ROC-AUC = 0.4931,与随机猜(0.5)无异。 与其提交一个看起来能跑、实际无意义的模型,不如把算力投到数据能支撑的问题上。

7.2 正式任务:预测订单是否会囤货

目标定义:预测单笔订单的购买数量是否 ≥ 3 件(正类占比 6.13%),用于库存预占、包材准备与物流资源调度。

特征设计(44 维,严格排除 buy_mount 相关字段以避免标签泄漏):月份正余弦周期编码、周末/大促月标记、年内天数、 商品属性维度数、6 个一级类目 one-hot、Top30 二级类目 one-hot。

图 7-1 模型评估:ROC 曲线、PR 曲线与混淆矩阵
图 7-1 模型评估:ROC 曲线、PR 曲线与混淆矩阵

模型结果汇总

指标 数值
样本量 29971
正类(囤货单)占比 6.13%
特征维度 44
最优模型 逻辑回归
ROC-AUC (5折CV) 0.7782
PR-AUC (5折CV) 0.2101
最佳概率阈值 0.709
混淆矩阵 [[TN,FP],[FN,TP]] [[26060, 2074], [1271, 566]]

分类报告(按最佳 F1 阈值)

类别 precision recall f1-score support
0 0.953 0.926 0.940 28134.000
1 0.214 0.308 0.253 1837.000
accuracy 0.888 0.888 0.888 0.888
macro avg 0.584 0.617 0.596 29971.000
weighted avg 0.908 0.888 0.898 29971.000

7.3 特征重要性与业务解读

图 7-2 随机森林特征重要性 Top12
图 7-2 随机森林特征重要性 Top12
📊结果优于随机基线

5 折交叉验证下 ROC-AUC = 0.778、PR-AUC = 0.210,而随机基线 PR-AUC 仅 0.061,提升 3.4 倍。

🥇属性维度数是第一信号

重要性 0.304,远超其他特征。商品描述越复杂,越可能是大包装或组合装——这是可解释的业务逻辑。

⏰时间因素影响有限

年内天数、月份周期合计重要性约 0.19,说明囤货更多由「买什么」而非「什么时候买」决定。

关于模型选型的坦率说明:逻辑回归(PR-AUC 0.210)略优于随机森林(0.208)。 在 44 维、3 万样本、正类仅 6% 的场景下,两者的差距在噪声范围内。 我们保留了逻辑回归作为最优模型,因为它更快、更易解释、更不容易过拟合—— 这比追求零点几的指标提升更有工程价值。

08结论与运营建议

把上面的分析翻译成可执行的动作。

① 大促资源集中在 11 月,其余月份做节奏管理

11 月贡献全年约 31% 的件数,双11 单日拉动 5.19 倍。建议把年度大促预算的绝对大头压在 11 月, 12 月延续长尾承接,6 月做常规月度活动即可——数据不支持把 618 当作年度节点来投入。

② 尿裤与奶粉必须用两套不同的运营逻辑

尿裤/湿巾:单笔 4.1 件、囤货属性强 → 适合做大包装、满减、组合囤货,围绕「一次买够」设计促销结构。
奶粉/辅食:单笔 1.5 件、12,046 个 SKU 极度分散 → 适合做订阅制、周期购、精准补货提醒,用复购锁定用户而非用折扣冲量。

③ 建立大额异常订单的监控口径

0.03% 的订单贡献 27.5% 的件数,最大单笔 10,000 件。建议在数据平台侧设置单笔件数阈值告警, 并将这类订单在报表中单独列示;核心 KPI 建议以订单数 / 用户数为主口径,避免被个别订单绑架。

④ 按宝宝月龄做阶段化推荐(有数据支撑)

0–6 月推洗护与童装、7–12 月推玩具(偏好指数 2.85)、6 岁以上仍可推成长奶粉(1.49)。 月龄是比性别更有效的推荐维度——这一点已被数据验证。

⑤ 放弃按性别做差异化运营

卡方检验 p=0.79、效应量 0.05,性别与品类偏好在统计上无关联。把性别作为推荐特征或分群维度的收益极低,不如把资源投向月龄分层。

⑥ 用模型为库存与物流做准备

囤货预测模型可在订单生成时给出概率,识别出高概率囤货单(PR-AUC 0.21,是随机基线的 3.4 倍), 用于提前预占库存、准备大件包材,降低临时缺货与物流爆仓的风险。

09局限性说明与后续计划

主动交代边界,比假装没有边界更专业。

9.1 本次分析的局限

  1. 样本为按行抽样的子集。29,971 笔交易对应 29,944 个用户,人均 1.0 笔, 无法构造任何用户级行为特征,故 RFM、复购周期、用户生命周期、性别预测等分析均不成立。
  2. 无金额字段。数据只有购买数量(buy_mount)没有成交金额,所有「规模」结论均为件数口径, 不能等同于 GMV 口径。
  3. 类目与属性已脱敏。一级类目中文名依赖社区对照表,属性键无法还原语义, 因此品类命名与属性分析都保持克制表述。
  4. 时间截断。2012 年仅含 7–12 月、2015 年仅含 1–2 月,所有趋势与季节性分析只使用数据完整的 2013–2014 年。
  5. 性别编码存在资料冲突。官方 Overview 与部分中文资料编码相反,本报告已做对称处理以规避风险。

9.2 若拿到全量数据的后续计划

  1. 用户级特征工程:构造 RFM、品类偏好向量、购买周期,把性别预测与复购预测重新做一遍,预计 AUC 可显著提升。
  2. 引入金额字段(若可得):把件数口径升级为 GMV 口径,重做品类贡献与用户价值分层。
  3. 时间序列预测:用 SARIMA / Prophet 对月度销量建模,量化大促的滞后与透支效应。
  4. 商品关联分析:基于用户购买的商品集合做关联规则挖掘(Apriori),输出「买了尿裤还会买什么」的搭售策略。
  5. 线上化:把模型封装为 API,接入订单系统做实时囤货概率打分。

10项目复现方式

一条命令跑完全流程。

10.1 环境与运行

# 1. 安装依赖
pip install -r requirements.txt

# 2. 一键运行完整流程(加载 → 清洗 → 指标 → 绘图 → 建模)
python scripts/run_all.py

# 3. 生成这份 HTML 报告
python scripts/build_report.py

10.2 项目结构

mum-baby-analysis/
├── data/
│   ├── raw/                 原始数据(CSV)
│   └── processed/           清洗后的数据集
├── src/                     可复用的分析模块
│   ├── config.py            路径、配色、中文类目字典
│   ├── data_loader.py       数据加载与质量体检
│   ├── preprocess.py        清洗、特征工程、属性解析
│   ├── analysis.py          业务指标计算(8 个分析模块)
│   ├── visualize.py         16 张图表的绘制函数
│   ├── modeling.py          特征工程与模型训练/评估
│   └── report.py            报告生成
├── scripts/
│   ├── run_all.py           一键运行全流程
│   └── build_report.py      生成 HTML 报告
├── notebooks/
│   └── mum_baby_analysis.ipynb   交互式分析笔记
└── reports/
    ├── figures/             16 张图表
    ├── tables/              24 份指标明细表
    └── report.html          本报告
所有中间结果(reports/tables/*.csv)都会落盘,报告中的每个数字都可以追溯到对应的 CSV, 方便复核与二次分析。