# 风控研究数据准备

## 🎯 目标

准备风控研究所需的各类数据，保证研究的准确性和可验证性。

---

## 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. **数据验证**必须严格，避免垃圾数据污染研究结果

---

**本章完** ⚔️
