4.9 KiB
4.9 KiB
风控研究数据准备
🎯 目标
准备风控研究所需的各类数据,保证研究的准确性和可验证性。
1. 所需数据类型
1.1 历史价格成交量数据
用途:
- 计算收益率
- 计算波动率
- 计算VaR/回撤等风险指标
- 回测风控策略
要求:
- 时间范围:至少5年A股历史数据
- 频率:日线数据足够(日内需要更高频)
- 字段:代码、日期、开盘、最高、最低、收盘、成交量
来源:
- Akshare(免费)
- TuShare(需要token)
- 聚宽数据导出
1.2 风险事件数据
用途:
- 验证极端风险应对
- 压力测试
- 案例分析
需要收集的风险事件:
| 事件 | 时间 | 类型 |
|---|---|---|
| 2015年股灾 | 2015-06 ~ 2015-08 | 系统性风险 |
| 2016熔断 | 2016-01 | 流动性风险 |
| 2018贸易战熊市 | 2018-01 ~ 2018-12 | 系统性风险 |
| 2020新冠疫情 | 2020-02 ~ 2020-03 | 黑天鹅 |
| 2022俄乌战争 | 2022-02 ~ 2022-05 | 系统性风险 |
| 2023AI牛市 | 2023-01 ~ 2023-04 | 波动率变化 |
1.3 流动性数据
用途:
- 流动性分层研究
- 流动性阈值设定
- 冲击成本模型验证
需要数据:
- 日均成交额
- 换手率
- 流通市值
- 买卖盘口数据(可选)
1.4 上市公司基本面数据
用途:
- 信用风险研究
- ST/*ST识别
- 退市风险识别
- 质押比例数据
需要数据:
- 是否ST/*ST
- 是否退市风险警示
- 大股东质押比例
- 财务指标
2. 数据预处理
2.1 数据有效性校验
使用我们开发的 DataValidityChecker:
from sanguo.risk import DataValidityChecker
checker = DataValidityChecker()
is_valid = checker.check_dataframe(df)
校验内容:
- 价格不能为负
- 最高价 ≥ 开盘价/收盘价 ≥ 最低价
- 成交量不能为负
- 日期连续性检查
2.2 收益率计算
对数收益率(推荐用于风险计算):
returns = np.log(close / close.shift(1)).dropna()
简单收益率:
returns = (close / close.shift(1) - 1).dropna()
2.3 缺失值处理
- 交易日缺失:A股本身有节假日,不需要填充
- 价格缺失:删除该日数据,不影响计算
- 停牌:停牌期间没有交易,不计算收益率
3. 数据集划分
3.1 时间划分
- 训练集:2016-01-01 ~ 2020-12-31(5年)
- 验证集:2021-01-01 ~ 2022-12-31(2年)
- 测试集:2023-01-01 ~ 当前(最新)
3.2 股票分层
按流动性分层测试:
- 大盘层:日均成交额 > 10亿
- 中盘层:1亿 < 日均成交额 ≤ 10亿
- 小盘层:0.3亿 < 日均成交额 ≤ 1亿
- 微盘层:日均成交额 ≤ 0.3亿
按市值分层测试:
- 大盘:流通市值 > 500亿
- 中盘:100亿 < 流通市值 ≤ 500亿
- 小盘:流通市值 ≤ 100亿
4. 数据存储方案
4.1 原始数据存储
risk-management/research/06-data/
├── raw/ # 原始数据
│ ├── daily_prices/ # 日线价格数据
│ ├── risk_events/ # 风险事件数据
│ └── fundamentals/ # 基本面数据
└── processed/ # 预处理后数据
├── returns/ # 计算好的收益率
├── risk_metrics/ # 计算好的风险指标
└── train_test_split/ # 训练测试划分
4.2 缓存机制
- 原始数据缓存避免重复下载
- 预处理结果缓存避免重复计算
- 缓存文件格式:parquet(高效读写)
5. 数据质量保证
5.1 检查清单
- 价格数据完整性检查
- 收益率分布检查
- 极值异常检查
- 日期连续性检查
- 涨跌停价格一致性检查
5.2 异常处理
- 明显异常价格(比如一字跌停价格错误)→ 删除
- 个别交易日缺失 → 忽略不影响
- 连续多个交易日缺失 → 剔除该股票
6. 压力测试数据准备
6.1 历史情景压力测试
使用历史上真实发生过的风险事件:
| 情景 | 起始日期 | 结束日期 | 测试内容 |
|---|---|---|---|
| 2015股灾 | 2015-06-01 | 2015-08-26 | 极端回撤风控应对 |
| 2020新冠股灾 | 2020-02-01 | 2020-03-23 | 黑天鹅风控应对 |
| 2022俄乌战争 | 2022-02-24 | 2022-04-30 | 系统性风险应对 |
6.2 模拟压力测试
生成极端模拟情景:
- 连续5日跌停单票
- 整体市场连续3日跌停
- 波动率突然翻倍
- 单票集中度达到上限后暴跌
7. 总结
数据准备是风控研究的基础:
- 数据必须完整准确,否则研究结果不可靠
- 分层测试很重要,不同流动性股票风控参数不同
- 压力测试必须用历史真实情景+模拟极端情景
- 数据验证必须严格,避免垃圾数据污染研究结果
本章完 ⚔️