Files
sanguo_quant_live/risk-management/research/06-data/research-data.md
T

212 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 风控研究数据准备
## 🎯 目标
准备风控研究所需的各类数据,保证研究的准确性和可验证性。
---
## 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-315年)
- **验证集**2021-01-01 ~ 2022-12-312年)
- **测试集**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. **数据验证**必须严格,避免垃圾数据污染研究结果
---
**本章完** ⚔️