212 lines
4.9 KiB
Markdown
212 lines
4.9 KiB
Markdown
# 风控研究数据准备
|
||
|
||
## 🎯 目标
|
||
|
||
准备风控研究所需的各类数据,保证研究的准确性和可验证性。
|
||
|
||
---
|
||
|
||
## 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`:
|
||
```python
|
||
from sanguo.risk import DataValidityChecker
|
||
|
||
checker = DataValidityChecker()
|
||
is_valid = checker.check_dataframe(df)
|
||
```
|
||
|
||
**校验内容**:
|
||
- 价格不能为负
|
||
- 最高价 ≥ 开盘价/收盘价 ≥ 最低价
|
||
- 成交量不能为负
|
||
- 日期连续性检查
|
||
|
||
### 2.2 收益率计算
|
||
|
||
**对数收益率**(推荐用于风险计算):
|
||
```python
|
||
returns = np.log(close / close.shift(1)).dropna()
|
||
```
|
||
|
||
**简单收益率**:
|
||
```python
|
||
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. 总结
|
||
|
||
数据准备是风控研究的基础:
|
||
1. **数据必须完整准确**,否则研究结果不可靠
|
||
2. **分层测试**很重要,不同流动性股票风控参数不同
|
||
3. **压力测试**必须用历史真实情景+模拟极端情景
|
||
4. **数据验证**必须严格,避免垃圾数据污染研究结果
|
||
|
||
---
|
||
|
||
**本章完** ⚔️
|