统计学习导论:基于 Python 的实践与应用
前言
《统计学习导论:基于 Python 的实践与应用》是一部面向商学院和经济院系学生的统计学习教材。全书把数学原理、可复现代码与中国商业和金融案例放在同一条学习路径上,目标不是让读者只会运行代码,而是能够说明模型为何成立、信息边界在哪里,以及样本外证据能支持怎样的结论。
目标读者
主要读者是已修完微积分、线性代数、概率统计,并具备 Python 入门能力的商学院或经济学院本科高年级学生。本书可作为计量经济学、机器学习或商业数据分析的进阶教材。
研究生与金融业实践者是次要读者:研究生应完成推导、证明和研究设计任务;实践者应先完成第 1—2 章的数据与证据边界,再学习与所选任务相邻的基础模型章节;第 5 章的时间感知评价应在建立至少一个第 3 或第 4 章的基线后学习。任何路线均不得跳过训练—验证—测试边界和时间顺序要求。
先修知识
- 数学基础:能够计算导数、完成矩阵乘法,理解期望、方差、条件概率、抽样分布和假设检验。无需预先学习测度论或随机过程。
- 编程能力:能够用 Python 定义变量和函数,使用
numpy进行数组运算,使用pandas按公司与日期排序并在组内构造滞后变量,以及用matplotlib绘制带标题和坐标轴的图。第 1 章负责复核并补齐这些操作,但不从 Python 语法零基础开始。 - 统计习惯:能够区分总体与样本,愿意在解释模型结果前检查数据时点、变量定义和评价集。
统一运行环境
本书所有代码统一使用名为 peter 的共享 Conda 环境。首次使用时,在仓库根目录执行下列命令;pip 会保留已安装且可用的库,并补装 requirements.txt 中缺少的库。
conda env create -f environment.yml # 仅在 peter 尚不存在时执行
conda activate peter
python -m pip install -r requirements.txt若运行代码时出现 ModuleNotFoundError,继续在当前 peter 环境执行 python -m pip install 包名,并把该包名加入 requirements.txt。教材不要求安装精确的传递依赖版本,也不因环境中存在其他工具包而停止运行。
开始前诊断
每题按 0—2 分计分:0 分表示未完成,1 分表示思路正确但定义、计算或代码仍有实质缺口,2 分表示结果正确且能解释关键步骤。先独立作答;评分键默认折叠,完成前不要展开。
- 不查资料写出条件期望 \(E(Y\mid X)\) 与无条件期望 \(E(Y)\) 的区别。
- 令 \(A=\begin{pmatrix}1&2\\0&-1\\3&1\end{pmatrix}\)、\(b=(2,1)^\mathsf{T}\),手算 \(Ab\),并写出结果维度。
- 用
pandas按公司和日期排序,并构造一期滞后变量;解释为何不能跨公司移动。 - 在
peter环境中导入 NumPy、pandas 与 Matplotlib,构造一个小型 DataFrame,并绘制一张带标题和横纵轴标签的图。此题不依赖外部数据挂载;数据挂载另作构建前检查。
展开评分键、补修与异形复测
评分键:第 1 题指出条件均值随 \(X\) 取值变化,而无条件期望不附加该条件;第 2 题得到 \((4,-1,7)^\mathsf{T}\) 且维度为 \(3\times1\);第 3 题同时按公司和日期排序并使用公司内 shift(1);第 4 题三个库均可导入,且图题和两个轴标签齐全。每题按本节开头的 0—2 分规则评分。
定向补修:第 1 题失分,复习第 1 章“监督学习和无监督学习”附近的条件均值说明;第 2 题失分,完成第 3 章矩阵表示前的维度核对;第 3 题失分,复做第 1 章公司内滞后示例;第 4 题失分,按 readme.md 的环境启动命令完成最小绘图探针。教师可依据试教记录安排课内或课后补修;环境失败单列为运行阻塞,不计作知识错误。
异形复测:用 \(C=\begin{pmatrix}2&0\\-1&3\end{pmatrix}\) 与 \(d=(1,2)^\mathsf{T}\) 重做矩阵题;将公司列改名为 firm_id、日期列改名为 trade_date 重做滞后;用不同的三行 DataFrame 重画散点图;用“给定行业”举例重述条件期望。总分达到 7 分再进入第 2 章。
总分 7—8 分可进入第 2 章;5—6 分只补修失分项;0—4 分依次完成上述四个定向补修。环境或数据挂载失败必须记录为“未执行”,不得伪装成知识得分。
三条使用路线
- 14/16 周课程:按
outline.md的周计划学习,完成核心练习和跨章综合案例;实际课内外负担以教师走查和学生试教记录调整。 - 自学路线:每章先完成学习目标和章前诊断;若某章核心检索题未通过,不跳到依赖该章的后续内容,并按“阅读—手算—准备数据—建模—报告”分阶段完成。
- 实践者路线:先完成第 1—2 章,再以第 3 章回归或第 4 章分类建立基线,随后完成第 5 章的时间感知评价;再选择第 6—9 章、深度与事件模型(第 10—11 章)或无监督与推断(第 12—13 章)。高阶证明可后读,但样本外评价不可跳过。
本书结构
本书共分为 13 个核心章节,内容从统计学习框架推进到监督学习、模型评价、现代方法与推断扩展,主要案例置于中国金融与商业数据语境:
- 第1章:导论。从什么是统计学习开始,辨析监督学习和无监督学习的区别及其在宏观经济预测与客户市场分群中的不同应用。
- 第2章:统计学习理论基础。用损失函数、偏差—方差分解和样本外证据分析模型复杂度。
- 第3章:线性回归。以 2023 年第四季度全部合格 A 股公司的横截面为例,在完整合格样本上估计销售费用率与营业收入的同期条件关联,并另用固定 250 家公司样本展示图形;同时建立后续模型比较所需的线性基线。
- 第4章:分类方法。介绍逻辑回归、判别分析和朴素贝叶斯等模型,常用于企业信用违约预测和市场涨跌方向判断。
- 第5章:重采样方法。讲解交叉验证(Cross-Validation)和自助法(Bootstrap),这对于在有限的财务数据样本下稳健评估模型性能至关重要。
- 第6章:线性模型选择与正则化。先用 \(C_p\)、AIC、BIC 与调整 \(R^2\) 理解子集选择,再在共同前向折上以连续最大回撤比较训练均值、OLS、Ridge、Lasso、PCR 与 PLS 的 RMSE;另以二元回撤事件比较概率模型的 Brier 与 AUROC。惩罚强度和 PCR/PLS 成分数都只在训练期内部选择,两条响应路线不混合排名。
- 第7章:超越线性关系。放松线性假设,介绍多项式回归、样条光滑技术以及广义加性模型;先在连续价格响应上用共同前向折比较线性、多项式与自然样条的 MSE,再在二元回撤任务上用固定训练—验证边界比较事件率、线性 Logit 与唯一逻辑样条 GAM 的概率证据,两条 estimand 不混作同一模型排名。
- 第8章:基于树的方法。从基础决策树到 Bagging、随机森林(Random Forests)与 Boosting;它们是否优于线性或核方法,取决于数据结构、损失函数、调参和预先固定验证证据。
- 第9章:支持向量机。介绍最大间隔分类器与核方法(Kernel Methods),并在同一未来期比较线性与非线性边界。
- 第10章:深度学习。介绍多层感知机、卷积神经网络(CNN)、循环神经网络(RNN)和长短期记忆网络(LSTM)的结构偏好与验证边界。
- 第11章:生存分析与删失数据。利用 Kaplan–Meier 估计和 Cox 比例风险模型研究任何原因退市的发生时间与客户流失风险;混合退市事件不解释为企业破产。
- 第12章:无监督学习。通过主成分分析(PCA)进行高维降维和宏观经济指数构建,利用聚类分析描述预先固定横截面的相似性与公司画像;本章不把静态聚类解释为板块轮动。
- 第13章:多重检验。在量化投资中控制多重假设检验带来的错误发现率(FDR),防止开发出“伪量化策略”。
学习路径
可执行核心阅读路线
每章按“商业问题—数学原理—代码验证—结果解释—适用边界”学习。先读正文并手算最小例子,再运行章内代码;代码输出必须回到业务问题,不能只报告模型分数。标为 [拓展] 的证明或大型模型可以后读,但训练—验证—测试的时间顺序、基线比较和结论边界不能跳过。
综合案例开始前的统计准备
开始建模前先回答五个问题:决策者是谁,预测对象是什么,在什么时点作决定,当时可使用哪些信息,以及错误判断会带来什么成本。随后记录数据来源、观察期、样本单位和时间切分;固定随机种子只是为了复算,不代表结果具有普遍性。
章内标识与解答使用
[核心] 是主路线必学内容,[拓展] 保存高阶理论或扩展实验,[补救] 用于诊断后的定向复习。练习先独立完成,再查看折叠解答。完整解答用于反馈,不能替代首次作答。
第 12—13 章与其他章节使用同一学习方式:在 .qmd/.ipynb 内按顺序运行真实数据代码,立即查看 PCA/聚类或 BY/Holm/独立复现结果。数据读取、统计计算和结果展示都由当前文档直接完成;作者与读者共用同一份源码、R2 数据和 peter 环境。
数据获取与运行边界
本书优先使用中国上市公司财务和行情数据。在线教材在各章代码中明文使用 BOOK_DATA_DIR = Path('/home/ubuntu/r2_data_mount/data').resolve();stock/stock_basic_data.h5 因而表示该数据根下的 stock 子目录与文件。本地复现时替换引号中的绝对路径。公开数据的下载地址由 https://assets.qiufei.site/data/ 与相对路径组成;例如 stock/stock_basic_data.h5。真实数据不可用时,应明确写“未执行”,不能用模拟结果冒充市场证据。
跨章综合案例:上市公司风险预测与模型比较
第 2—9 章围绕同一商业问题逐步推进:在公司交易日 \(t\) 收盘后,只使用当时已知的信息,预测从 \(t\) 至 \(t+20\) 的 21 个公司交易日收盘价路径中的连续最大回撤,并识别其是否达到 10%。学生依次建立数据边界、线性基线、概率分类、前向验证、正则化、非线性模型、树模型和支持向量机,并在统一的未来留出期比较同一目标路线内的模型。测试期只用于最终评价,不能用于选变量、调参或选阈值。
数据与任务约定
| 项目要素 | 约定 |
|---|---|
| 样本单位 | 公司—预测日 |
| 决策时点 | 预测日收盘后,最早在下一交易日行动 |
| 特征 | m02_features:return_1d、momentum_5d、volatility_20d、volume_ratio_20d,均在预测日收盘时已知 |
| 连续目标 | max_drawdown_20d:在 \(t\) 至 \(t+20\) 的 21 个后复权收盘价中,运行峰值到其后谷值的最大跌幅,取值不大于 0 |
| 二元标签 | drawdown_event_20d:当且仅当 max_drawdown_20d 不高于 \(-10\%\) 时为 1 |
| 标签结束日 | label_end_date:同一公司未来第 20 个交易日;窗口不足时标签保持缺失 |
| 共享对象与键 | m02_shared_sample;有序字段为公司键、预测日、标签结束日、四项 m02_features、连续目标、二元标签与 split,唯一键为 order_book_id 与 prediction_date |
| 基线 | 连续路线使用训练期平均回撤;二元路线使用训练期事件率或多数类 |
| 评价 | 2012—2019 年训练、2020—2021 年验证、2022—2024 年封存测试;边界处删除标签窗口跨段的观测;分类同时检查区分度、概率误差和校准 |
| 结论边界 | 预测关联不等于因果关系,历史样本外表现不保证未来收益 |
各章分析任务
| 章节 | 学习任务 | 核心证据 |
|---|---|---|
| 第 2 章 | 构造并核验 m02_shared_sample |
有序字段、唯一键、连续目标与二元标签关系、日期边界、分段样本身份和训练期双基线 |
| 第 3 章 | 在同一对象上建立线性概率基线 | 原始分数范围、裁剪后的验证期 Brier、AUROC、残差诊断和非因果解释 |
| 第 4 章 | 比较逻辑回归、LDA、QDA 与朴素贝叶斯 | AUROC、PR-AUC、Brier 分数、校准与业务损失 |
| 第 5 章 | 用前向交叉验证评价模型 | 折叠日期、训练内调参与平均验证误差 |
| 第 6 章 | 分别比较连续回撤的 OLS/Ridge/Lasso/PCR/PLS 与二元回撤的 L2/L1/PCA-score/PLS-score 概率模型 | 连续路线报告同折 RMSE,二元路线报告 Brier、AUROC、变量收缩与得分解释;惩罚和成分数只在训练期内部选择,不跨响应排名 |
| 第 7 章 | 分别完成连续价格基函数比较与二元回撤逻辑样条比较 | 连续路线的同折 MSE/时间支持域;二元路线的同键 Brier、AUROC、四特征支持域和模型内预测形状,不跨 estimand 排名 |
| 第 8 章 | 比较剪枝树、随机森林与 Boosting | 同一验证键上的误差、重要性及其局限 |
| 第 9 章 | 比较线性与核 SVM,并完成最终留出评价 | 统一测试样本上的模型表和误差分析 |
| 第 12 章 | 用财务横截面完成 PCA 与聚类 | 载荷、得分、轮廓系数、稳定性和公司画像 |
| 第 13 章 | 对预先定义的检验族控制错误发现 | 效应量、原始与校正 p 值、依赖性说明和结论边界 |
学习成果核对表
每个任务只提交能支持统计判断的材料:一张清楚的数据与时点表、一段可运行且有解释的代码、一个基线、模型比较或推断结果、误差或敏感性分析,以及不超过 500 字的业务结论。若数据、时点或运行环境不足,应说明缺口以及它阻止了什么结论。