Case 02 · 数据建模

A 股下行风险建模

金融数据挖掘课程项目 角色:独立完成 工具:Python · pandas · scikit-learn 样本:452 支 A 股 · 2005–2026

风险管理里,波动率常常不等于痛感。真正让人出局的是回撤。这个项目想回答一个问题:什么样的股票,在未来 60 天更容易出现大幅回撤?

01

问题

传统风险度量多用波动率或 Beta,但它们刻画的是“价格晃得厉害不厉害”,不是“会不会跌得很深”。对持有期较长的资金来说,后者才是真正的约束。

所以我把预测目标换成未来 60 个交易日的最大回撤,把它当作标签,再看哪些特征能提前区分高回撤与低回撤的股票。

02

我的工作

  • 清洗 452 支 A 股 2005–2026 的日度行情:复权、停牌、缺失值与新股上市初期的异常波动。
  • 构建 30+ 特征,覆盖动量、波动、流动性、估值与财务质量五类。
  • 用未来 60 日最大回撤构造标签,并按时间切分训练集与测试集,避免用到未来信息。
  • 先 MiniBatch K-Means 把股票分成 5 群,再在群内用 Lasso 做稀疏筛选,最终保留 8 个关键因子。
03

方法与数据

两步走:先用聚类把“不同类型的股票”分开,解决全样本异质性的问题;再用 Lasso 在每个群体内部筛因子,让模型自己决定哪些特征值得留下。

评估上以时间序列交叉验证为主,重点看模型在高回撤样本上的召回率——漏掉一次大回撤的代价,远高于多一次误报。

聚类不是为了“分得更细”,而是为了让回归假设在群内更成立。
04

关键结论

全样本放进一个模型时,因子关系被不同风格的股票互相抵消;分群之后,特征的解释力明显更稳定。最终 8 个因子进入模型,覆盖动量、流动性与波动三类。

452支 A 股样本
30+候选特征
8最终保留因子

这个项目最大的收获不是模型精度,而是流程:标签怎么定义、数据怎么切、指标怎么选,决定了结论可不可信。

05

交付与反思

交付物是一套可复跑的 Python 流程:从数据清洗、特征构造、聚类、Lasso 到回测评估。

如果继续做,我会加入行业中性化和宏观状态变量,并尝试用生存分析替代二分类,让“什么时候发生”也成为模型的一部分。

← 上一个案例:科大讯飞深度研究 返回首页 →