Skip to main content

合成控制法政策效应分析系统 — 评估宏观经济政策对A股市场影响的自动化因果推断工具

Project description

合成控制法政策效应分析系统

CI Python License Tests

评估宏观经济政策对 A 股市场影响的自动化因果推断工具——基于合成控制法(Synthetic Control Method)

pip install . && scm-analysis --user-file data/user_input.csv

快速上手

安装

git clone https://github.com/Z7X2C7/scm-policy-analysis && cd scm-policy-analysis

# 基础安装(CLI)
pip install .

# 带 GUI 桌面端
pip install .[gui]

# 开发模式(含测试/格式化工具)
pip install -e ".[dev]"
pre-commit install

准备数据

data/user_input.csv 中写入政策和股票信息,格式如下:

policy_name policy_date treatment_stock_code treatment_stock_name donor_stock_code donor_stock_name
政策名称 2024-01-15 002594.SZ 比亚迪 601238.SH 广汽集团
  • policy_name — 政策名称(必填)
  • policy_date — 政策发布日期(必填)
  • treatment_stock_code / treatment_stock_name — 处理股票,至少填一项
  • donor_stock_code / donor_stock_name — 供体池股票,可选
    • 提供 → 全量使用,不做截断,SCM 算法自动分配权重
    • 留空 → 系统调用 DeepSeek API 按同行业规则自动补充

已有示例文件可直接使用:

cp examples/sample_input.csv data/user_input.csv

运行

命令行 (CLI):

# 使用默认数据文件
scm-analysis

# 指定文件和分析参数
scm-analysis --user-file data/my_policy.csv --pre-months 18 --post-months 12

# 强制刷新缓存
scm-analysis --force-refresh --no-cache

桌面应用 (GUI):

python -m src.gui
# 或
python run_gui.py

查看结果

结果保存在 output/ 目录:

  • output/report.html — 完整分析报告
  • output/result/ — 政策效应汇总 CSV
  • output/charts/ — Matplotlib / Plotly 图表
  • output/placebo/ — 安慰剂检验结果

核心流程

用户 CSV  →  数据校验  →  提取/补充供体池
                              ↓
                       baostock 行情
                              ↓
                       月度综合指标
                              ↓
                        SCM 权重求解
                              ↓
                   空间安慰剂检验 + 时间安慰剂检验
                              ↓
                         HTML 报告

合成控制法

src/sc_optimizer.py 基于 scipy.optimize.minimize 求解权重:

  • 约束:权重非负、求和为 1、每只股票权重 ≤ 0.5
  • 政策效应:处理单元实际值 − 合成控制值
  • MSPE:政策前均方预测误差,衡量拟合质量

双重安慰剂检验

类型 方法 目的
空间安慰剂 将每只供体股票假想为处理单元,重新跑 SCM 真实效应是否显著大于随机效应
时间安慰剂 将政策日期向前平移 3/6 个月,重新跑 SCM 效应是否确实由该政策事件导致

详见 架构文档


目录结构

├── src/                  # 源代码
│   ├── config.py         # 全局配置(环境变量驱动)
│   ├── sc_optimizer.py   # SCM 核心优化(SLSQP + NNLS 备选)
│   ├── synthetic_control.py  # 高层调度 + 留一法检验
│   ├── data_fetcher.py   # baostock 行情获取(带缓存)
│   ├── data_processor.py # 日度→月度指标计算
│   ├── weight_calculator.py  # 4 指标等权 → composite_indicator
│   ├── data_validator.py # 数据校验 + AI 补全
│   ├── policy_generator.py  # 政策-股票映射表生成
│   ├── donor_pool_cleaner.py  # 供体池清洗
│   ├── post_treatment_placebo.py  # 时间安慰剂检验
│   ├── visualization.py  # 报告与图表
│   ├── placebo_visualization.py  # Nature 期刊风格图表
│   └── gui/              # PyQt6 桌面应用
├── tests/                # 62 个 pytest 测试
├── docs/                 # 文档
├── main.py               # CLI 入口
├── run_gui.py            # GUI 入口
├── pyproject.toml        # 包配置
└── data/                 # 数据与缓存

环境变量

变量 说明 默认值
DEEPSEEK_API_KEY DeepSeek API 密钥(供体补充/数据补全) 空(跳过 AI 功能)
DEEPSEEK_MODEL 模型名 deepseek-chat
LOG_LEVEL 日志级别 INFO

可复制 .env.example.env 填写。核心分析功能完全不需要 API Key,仅可选的数据补全和供体推荐依赖 AI。

开发

pip install -e ".[dev]"    # 安装开发依赖
pre-commit install         # 安装 pre-commit 钩子
pytest tests/ -v           # 运行 62 个测试
ruff check src/            # 代码检查
black src/                 # 自动格式化

技术栈

  • SCM 求解: scipy.optimize.minimize (SLSQP) + NNLS 备选
  • 行情数据: baostock (免费 A 股数据)
  • 可视化: Matplotlib / Plotly / Seaborn
  • AI 辅助: DeepSeek API(可选)
  • 桌面端: PyQt6
  • 质量工具: pytest / ruff / black / isort / mypy / pre-commit

许可证

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scm_policy_analysis-1.0.0.tar.gz (85.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scm_policy_analysis-1.0.0-py3-none-any.whl (94.1 kB view details)

Uploaded Python 3

File details

Details for the file scm_policy_analysis-1.0.0.tar.gz.

File metadata

  • Download URL: scm_policy_analysis-1.0.0.tar.gz
  • Upload date:
  • Size: 85.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for scm_policy_analysis-1.0.0.tar.gz
Algorithm Hash digest
SHA256 5c599bc917f800c263e15242d04db0e03eaf2e04bf9d240ce7913ce1f61d5520
MD5 5cc315c1f8ab730c56b36b9ed7cb75d3
BLAKE2b-256 3817b5625b763e716dfc3d635bce952bcff335cccf483a278a17cebb0452e873

See more details on using hashes here.

File details

Details for the file scm_policy_analysis-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for scm_policy_analysis-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 84714a0aecab8e737e80531a5648d83207dfd106dcb46ac7a6f4a6ad69162e6a
MD5 264d5eaa88d13eed8f7e5baade131677
BLAKE2b-256 66cd399de88094e9e38cb3474e0ab127e3706bdc76e5eb06f75f17f001d4b821

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page