# A Share Risk Attribution

> A股绩效归因/风险归因分析。当用户说"绩效归因"、"收益归因"、"Brinson"、"风险归因"、"attribution"、"超额收益来自哪里"、"为什么跑赢/跑输"、"组合分析归因"、"行业归因"、"风格归因"时触发。对投资组合进行系统性绩效归因（Brinson行业归因/风格因子归因），拆解超额收益来源（配置效应/选股效应/交互效应），评估投资能力。支持研报风格（formal）和快速归因风格（brief）。

- Skill: `aifinlab/a-share-risk-attribution` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add aifinlab/a-share-risk-attribution`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aifinlab/a-share-risk-attribution/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: aifinlab (https://skillmd.com/u/aifinlab)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aifinlab/a-share-risk-attribution

---


### 数据源
```bash
SCRIPTS="$SKILLS_ROOT/cn-stock-data/scripts"

# 各持仓股K线（计算区间收益）
python "$SCRIPTS/cn_stock_data.py" kline --code [CODE] --freq daily --start [起始日期] --end [结束日期]

# 各持仓股实时行情
python "$SCRIPTS/cn_stock_data.py" quote --code [CODE1],[CODE2],[CODE3],...

# 各持仓股财务指标（风格因子：PE/PB/市值/ROE等）
python "$SCRIPTS/cn_stock_data.py" finance --code [CODE]

# 基准指数K线（沪深300/中证500/中证全指）
python "$SCRIPTS/cn_stock_data.py" kline --code SH000300 --freq daily --start [起始日期] --end [结束日期]
# 中证500: SH000905  中证全指: SH000985  创业板指: SZ399006
```

### Workflow (5 steps):

**Step 1: 输入确认 — 组合与基准**

收集归因所需信息：
- **组合持仓**：代码、权重（或持仓市值）、所属行业
- **基准**：默认沪深300，用户可指定中证500/中证全指等
- **归因区间**：起止日期（默认最近一个季度）
- **归因类型**：Brinson行业归因（默认） / 风格因子归因 / 两者都做

汇总为输入表：
| 代码 | 名称 | 组合权重(%) | 行业(申万一级) |
|------|------|-----------|--------------|

如果用户未提供行业分类，通过 finance 接口获取后自动映射。

**Step 2: Brinson 行业归因**

通过 cn-stock-data kline 获取组合各股和基准在归因区间的收益率，按行业汇总：

| 行业 | 组合权重 Wp | 基准权重 Wb | 组合收益 Rp | 基准收益 Rb | 配置效应 | 选股效应 | 交互效应 | 合计 |
|------|-----------|-----------|-----------|-----------|---------|---------|---------|------|

**Brinson-Fachler 模型**（参考 references/attribution-guide.md）：
- 配置效应 = (Wp,i - Wb,i) x (Rb,i - Rb)
- 选股效应 = Wb,i x (Rp,i - Rb,i)
- 交互效应 = (Wp,i - Wb,i) x (Rp,i - Rb,i)
- 超额收益 = 配置效应 + 选股效应 + 交互效应

汇总：
- 总超额收益 = 组合收益 - 基准收益
- 配置效应合计 / 选股效应合计 / 交互效应合计
- 最大贡献行业 / 最大拖累行业

**Step 3: 风格因子归因**

通过 finance 获取各股财务指标，构建因子暴露矩阵，用回归法拆解收益：

**常用因子**：
| 因子 | 代理变量 | 说明 |
|------|---------|------|
| 市场(Beta) | 组合 vs 基准 | 系统性风险 |
| 规模(Size) | ln(总市值) | 大/小盘偏离 |
| 价值(Value) | 1/PE 或 BP | 价值/成长风格 |
| 动量(Momentum) | 过去3-6月涨幅 | 追涨/逆向 |
| 波动率(Volatility) | 近期日收益率标准差 | 高/低波偏好 |
| 质量(Quality) | ROE | 盈利质量 |

输出因子归因表：
| 因子 | 组合暴露 | 基准暴露 | 主动暴露 | 因子收益(%) | 因子贡献(%) |
|------|---------|---------|---------|-----------|-----------|

残差项 = 超额收益 - 各因子贡献之和（代表个股 alpha）

**Step 4: 时间序列分解（仅 formal 模式）**

将归因区间按月拆分，展示归因效应的时间演变：
| 月份 | 组合收益 | 基准收益 | 超额收益 | 配置贡献 | 选股贡献 | 交互贡献 |
|------|---------|---------|---------|---------|---------|---------|

识别：
- 超额收益的持续性 vs 偶发性
- 归因效应的稳定性（是否依赖单月大幅超额）
- 投资能力评估（配置能力 vs 选股能力）

**Step 5: 输出**

### 风格说明
| 维度 | formal（机构绩效归因报告） | brief（快速归因摘要） |
|------|--------------------------|---------------------|
| 篇幅 | 4-8 页 | 1-2 页 |
| Brinson 归因 | 完整行业归因表 + 瀑布图描述 | Top 3 贡献/拖累行业 |
| 因子归因 | 完整因子暴露与贡献表 | 主要因子贡献一句话 |
| 时间分解 | 按月归因表 + 趋势分析 | 省略 |
| 投资能力评估 | 配置能力/选股能力/IR评价 | 一句话定性评价 |
| 可视化 | 瀑布图/堆叠图/热力图描述 | 省略 |
| 免责声明 | 需要 | 不需要 |

### 关键规则
1. **数据完整性**：归因区间内所有持仓股必须有完整K线数据，缺失时提示用户
2. **基准一致性**：行业分类标准需与基准成分股行业分类一致（默认申万一级行业）
3. **权重归一化**：组合权重和基准权重需分别归一化至100%
4. **区间要求**：归因区间至少1个月，建议1个季度以上以获得有意义的结果
5. **残差控制**：Brinson 归因中配置+选股+交互应精确等于超额收益，不应有残差
6. **因子归因局限性**：明确说明回归法因子归因受样本量和多重共线性影响，结果为近似
7. **与其他 skill 联动**：对选股贡献突出的行业可用 a-share-sector 深入分析，对个股 alpha 可用 a-share-earnings-analysis 追溯
8. **多期归因**：如区间超过1个季度，采用 Carino 链接法进行多期归因，确保各期可加性

## 使用示例

### 示例 1: 基本使用

```python
# 调用 skill
result = run_skill({
    "param1": "value1",
    "param2": "value2"
})
```

### 示例 2: 命令行使用

```bash
python scripts/run_skill.py --input data.json
```

