经济金融研究想法发现流程
从研究方向 $ARGUMENTS 开始,经过系统化流程,输出经过数据验证的可执行研究方案。
流程概览
研究方向输入 ↓ 阶段1: 研究方向理解 — 解析研究领域(绿色金融/数字金融/ESG/碳经济学/宏观金融/公司金融) ↓ 阶段2: 文献综述 — 使用 MCP 工具搜索 OpenAlex/ArXiv/NBER/中文顶刊 ↓ 阶段3: 研究缺口识别 — 从文献中识别 3-5 个具体研究缺口 ↓ 阶段4: 想法生成 — 从缺口生成 8-12 个研究想法 ↓ 阶段5: 新颖性预检查 — 对每个想法快速检索 arXiv/NBER ↓ 阶段6: 【强制】想法-数据交叉验证 — 使用 idea_data_checker.py 验证每个想法的数据可行性 ↓ checkpoint(必须暂停,展示数据可行性表格给用户) ↓ 阶段7: 排序输出 — 按新颖性(40%) + 数据可行性(30%) + 发表潜力(30%) 排序 ↓ 输出: IDEA_REPORT.md + IDEA_DATA_CHECK.md
核心原则
数据优先原则(必须遵守)
数据验证必须前移到想法阶段,不等到数据获取阶段才发现无数据
传统流程(有问题): 想法生成 → 新颖性验证 → 实证设计 → 数据获取 ← 到这里才发现无数据! ↓ ↓ 浪费大量时间 不得不返回更换主题 改进流程(当前): 想法生成 → 【想法-数据交叉验证】→ 新颖性验证 → 实证设计 → 数据获取 ↓ ↓ 在此处检查数据可行性 数据已知可行,只需执行 无数据→立即告知用户 预先设计的获取方案
强制 checkpoint
阶段6(数据验证)完成后,必须暂停并展示数据可行性表格给用户,在用户确认前不得进入下一阶段。
输出文件
output/fin-ideas/ ├── IDEA_REPORT.md ← 完整想法报告(包含所有想法的详细信息) ├── IDEA_DATA_CHECK.md ← 数据可行性报告(阶段6输出) └── IDEA_CANDIDATES.md ← 精简版(TOP 3-5 最优想法) output/fin-novelty/ └── NOVELTY_PRECHECK.md ← 初步新颖性检查结果
阶段详解
阶段1: 研究方向理解
1.1 解析研究领域
根据用户描述,识别研究方向所属领域:
| 领域 | 核心关键词 | 典型数据需求 |
|---|---|---|
| 绿色金融 | ESG、碳排放、绿色债券、气候风险 | ESG评级、碳排放数据、财务面板 |
| 数字金融 | Fintech、数字普惠、移动支付、互联网金融 | 第三方支付数据、用户规模 |
| 碳经济学 | 碳交易、碳配额、碳关税、减排 | 碳市场数据、企业排放数据 |
| 宏观金融 | 货币政策、金融周期、系统性风险 | 宏观指标、金融市场数据 |
| 公司金融 | 融资约束、资本结构、并购、股利政策 | 财务面板、公司治理数据 |
| 资产定价 | 因子模型、异常收益、机构投资者 | 市场数据、因子数据 |
| 行为金融 | 投资者情绪、散户行为、羊群效应 | 交易数据、账户数据 |
| 金融科技 | 区块链、数字货币、API金融 | 平台数据、交易数据 |
1.2 提取用户约束
从用户输入中提取:
- 目标期刊:JF/JFE/RFS/经济研究/金融研究等
- 研究类型:实证/理论/综述/方法创新
- 偏好方法:DID/IV/RDD/机器学习等
- 数据偏好:A股/美股/全球/宏观
- 时间范围:样本期要求
阶段2: 文献综述
2.1 MCP 多源检索
必须按顺序执行以下检索:
yaml# 第1步:NBER 工作论文(预印本先行) CallMcpTool: user-nber-wp -> search_nber_papers query: "[核心关键词] + A股/China + 实证方法" year_from: 2023 # 第2步:OpenAlex 学术论文 CallMcpTool: user-openalex -> get_openalex_works query: "[研究领域] + [核心机制] + China" per_page: 30 # 第3步:中文顶刊(A股研究必查) CallMcpTool: user-brave-search -> brave_web_search query: "经济研究 金融研究 管理世界 [核心关键词] A股" num_results: 10 CallMcpTool: user-brave-search -> brave_web_search query: "中国工业经济 世界经济 [核心机制] 实证" num_results: 10 # 第4步:ArXiv 预印本(机器学习/计量方法) CallMcpTool: user-arxiv -> semantic_search query: "[研究领域] + China + empirical" max_results: 20
2.2 引文图谱构建
bashpython scripts/citation_graph.py "[研究方向关键词]" \ --depth 2 \ --max-papers 50 \ --output output/fin-literature/CITATION_GRAPH.json \ --report output/fin-literature/CITATION_REPORT.md
2.3 文献筛选标准
| 标准 | 要求 | 原因 |
|---|---|---|
| 期刊层次 | 顶刊优先(JF/JFE/RFS + 中文顶刊) | 质量可靠 |
| 时间范围 | 近5年为主 + 高引经典文献 | 前沿 + 理论基础 |
| 方法可靠性 | 识别策略清晰,稳健性检验充分 | 可作为方法参照 |
| 样本相关性 | A股/新兴市场 > 美股 | 中国市场特殊性 |
阶段3: 研究缺口识别
从文献综述中识别 3-5 个具体研究缺口:
- 未被检验的假设:文献中存在但未系统验证的命题
- 未被探索的场景:某方法/发现未在特定市场中验证
- 矛盾发现的解释:争议性结论的新解释
- 新数据带来的机会:新数据集开启的新方向
- 方法论的空白:某计量方法在特定场景未被使用
输出格式:
markdown## 研究缺口 ### 缺口1: [缺口名称] - **现有研究**:已有哪些相关研究 - **研究空白**:什么还没有被检验 - **为什么重要**:填补这个缺口的理论和实践意义 - **可行性**:数据和方法是否可行 ### 缺口2: [缺口名称] ...
阶段4: 想法生成
基于识别的研究缺口,使用 LLM 生成 8-12 个研究想法:
4.1 生成提示词模板
你是一名经济金融领域顶级学者。请基于以下研究缺口,生成8-12个可发表的实证研究想法。 研究领域:[领域名称] 研究缺口: 1. [缺口1描述] 2. [缺口2描述] ... 要求: 1. 每个想法必须明确对应一个研究缺口 2. 说明使用的识别策略(DID/IV/RDD/面板等) 3. 明确所需的核心数据 4. 指出边际贡献(理论/方法/数据) 5. 评估发表潜力(目标期刊) 输出格式: ## Idea 1: [标题] - **研究缺口**: [对应哪个缺口] - **核心机制**: [因果传导路径] - **识别策略**: [DID/IV/RDD/...] - **数据需求**: [核心数据集] - **边际贡献**: [理论/方法/数据创新] - **发表潜力**: [目标期刊] ...
4.2 想法格式模板
每个想法必须包含:
markdown## Idea N: [标题] ### 基本信息 - **研究缺口**: [对应哪个缺口编号和描述] - **研究问题**: [一句话描述核心问题] - **核心机制**: [因果传导路径,A→B→C] ### 方法设计 - **识别策略**: [DID/IV/RDD/面板/合成控制/机器学习] - **识别假设**: [关键识别假设是什么] - **估计方法**: [固定效应模型/工具变量/...] ### 数据需求 - **核心数据集**: [主要数据来源] - **时间范围**: [样本期] - **样本量**: [估计样本量] - **关键变量**: [Y、X、控制变量] ### 边际贡献 - **理论贡献**: [对现有理论的拓展或挑战] - **方法贡献**: [计量方法或分析方法的创新] - **数据贡献**: [新数据集或新变量] ### 发表潜力 - **目标期刊**: [最适合发表的期刊] - **新颖性**: [高/中/低] - **可行性**: [高/中/低] ### 初步信号(可选) - **文献支持**: [支持该假设的已有文献] - **机制合理性**: [理论机制是否成立]
阶段5: 新颖性预检查
对每个想法进行快速新颖性检查:
yaml# 对每个想法执行快速检索 CallMcpTool: user-nber-wp -> search_nber_papers query: "[想法核心关键词] + China + [方法]" year_from: 2023 CallMcpTool: user-openalex -> get_openalex_works query: "[想法核心关键词] + empirical + China" per_page: 10
输出:更新每个想法的"新颖性"字段,标记"高/中/低"
阶段6: 想法-数据交叉验证(强制)
这是流程中最关键的 checkpoint,必须执行
6.1 调用 IdeaDataValidator
pythonfrom scripts.idea_data_checker import IdeaDataValidator, quick_check # 准备想法列表(从阶段4生成) ideas = [ { "id": "idea_1", "title": "关税冲击与资本结构调整速度", "description": "利用DID分析2018年关税冲击对企业资本结构调整速度的影响", "keywords": ["tariff", "capital structure", "DID", "A-share"], }, # ... 更多想法 ] # 执行数据可行性验证 validator = IdeaDataValidator(ideas) report = validator.validate_all() validator.print_report(report)
6.2 验证报告解读
ValidationReport 包含以下关键字段:
| 字段 | 说明 |
|---|---|
available_count | 数据完全可行的想法数 |
partial_count | 部分可行的想法数 |
gap_count | 数据缺口的想泗数 |
auth_needed_count | 需要授权模拟的想法数 |
idea_results | 每个想法的详细验证结果 |
6.3 可行性评分标准
| 状态 | 评分 | 含义 |
|---|---|---|
| AVAILABLE | 1.0 | 数据完全可用,可立即推进 |
| PARTIALLY_AVAILABLE | 0.6 | 部分数据缺失,可推进但需补充 |
| DATA_GAP | 0.0 | 数据缺口严重,需先补充数据 |
| REQUIRES_AUTH | 0.3 | 需要用户授权使用模拟数据 |
6.4 checkpoint 展示模板
═══════════════════════════════════════════════════════════════════ 想法-数据可行性验证报告 ═══════════════════════════════════════════════════════════════════ 验证结果统计: ✅ 数据可行: 3 个想法 ⚠️ 部分可行: 5 个想法 ❌ 数据缺口: 2 个想法 🔐 需授权模拟: 2 个想法 ━━ ✅ 数据可行的想法 (3个) ━━ 1. [想法标题] 评分: 1.0/1.0 | 数据可行,可立即推进 数据: tushare (财务数据), akshare (免费备选) 2. [想法标题] ... ━━ ⚠️ 部分可行的想法 (5个) ━━ 1. [想法标题] 评分: 0.6/1.0 | 部分数据缺失,可推进但需补充 ⚡ 缺失数据: 融资融券数据(需Tushare Pro Token) 2. [想法标题] ... ━━ ❌ 数据缺口的想法 (2个) ━━ 这些想法当前无法推进,需要先补充数据。 1. [想法标题] 评分: 0.0/1.0 缺失数据: 上市公司海关进出口明细(HS8位码) 获取途径: CSMAR海关数据库(通过学校图书馆VPN) 网址: https://www.gtadata.com 成本/限制: 需CSMAR机构账号 2. [想法标题] ... ━━ 🔐 需授权模拟的想法 (2个) ━━ 1. [想法标题] 评分: 0.3/1.0 | 需要用户授权使用模拟数据 ───────────────────────────────────────────────────────────────── 批量数据行动建议: • 优先解决以下数据缺口: customs_trade, patent_data 下一步(请选择): (1) 补充数据——获取API Key或联系学校图书馆 (2) 授权模拟——仅用演示流程,结果不能发表 (3) 更换主题——选择数据更易获取的研究方向 ═══════════════════════════════════════════════════════════════════
6.5 用户决策点
必须等待用户明确选择,以下选项:
- 补充数据:获取 API Key 或联系学校图书馆
- 授权模拟:仅用演示流程,结果不能发表
- 更换主题:选择数据更易获取的研究方向
- 继续部分可行想法:对部分可行的想法继续推进
阶段7: 排序与输出
7.1 综合评分公式
综合评分 = 新颖性评分 × 0.4 + 数据可行性评分 × 0.3 + 发表潜力评分 × 0.3
| 评分维度 | 权重 | 评分标准 |
|---|---|---|
| 新颖性 | 40% | 高=10, 中=7, 低=4 |
| 数据可行性 | 30% | 可行=10, 部分=6, 缺口=0, 模拟=3 |
| 发表潜力 | 30% | 顶刊=10, 一区=8, 二区=6 |
7.2 输出排序后的想法报告
markdown# 研究想法报告 **研究方向**: [方向] **生成日期**: [日期] **想法总数**: N个(其中M个数据可行) ## 执行摘要 [3-5句话总结推荐想法的核心发现] ## TOP 3 推荐想法 ### 想法 1: [标题] ⭐⭐⭐ **综合评分**: X.X/10 | 维度 | 评分 | |------|------| | 新颖性 | X/10 | | 数据可行性 | X/10 | | 发表潜力 | X/10 | | **综合评分** | **X.X/10** | - **研究问题**: [一句话] - **识别策略**: [方法] - **核心数据**: [数据来源] - **边际贡献**: [创新点] ### 想法 2: [标题] ⭐⭐ ... ### 想法 3: [标题] ⭐ ... ## 所有想法列表 | 排名 | 想法 | 综合评分 | 新颖性 | 数据可行 | 发表潜力 | |------|------|---------|--------|---------|---------| | 1 | 想法1 | 9.2 | 高 | 可行 | 顶刊 | | 2 | 想法2 | 8.5 | 高 | 部分 | 一区 | | ... | ... | ... | ... | ... | ... | ## 数据需求汇总 ### 可直接使用的数据 - [数据源1]: [描述] - [数据源2]: [描述] ### 需要补充的数据 - [数据源]: [如何获取] ## 下一步 1. 选择一个想法继续推进 2. 进入 fin-novelty-check 进行完整新颖性验证 3. 进入 fin-experiment-design 进行实证设计
IdeaDataValidator API 参考
导入方式
pythonfrom scripts.idea_data_checker import ( IdeaDataValidator, IdeaDataRequirement, ValidationReport, Feasibility, quick_check )
核心类和方法
pythonclass IdeaDataValidator: def __init__(self, ideas: list[dict], verbose: bool = False) """初始化验证器 Args: ideas: 想法字典列表,每个字典应包含: - id: 想法唯一标识 - title: 想法标题 - description: 想法描述 - keywords: 关键词列表(自动从标题/描述提取) """ def validate_all(self) -> ValidationReport """对所有想法执行数据可行性验证,返回完整报告""" def validate_single(self, idea: dict) -> IdeaValidationResult """验证单个想法的数据可行性""" def print_report(self, report: ValidationReport) -> None """打印验证报告(带颜色)""" def quick_check(ideas: list[dict]) -> ValidationReport """一行调用:对所有想法进行验证并打印报告"""
数据需求定义
python@dataclass class IdeaDataRequirement: data_type: str # "financial_panel" | "customs_trade" | ... description: str # 对用户说明 required_variables: list[str] # 必须包含的变量 time_frequency: str # "daily" | "monthly" | "yearly" time_range: str # "2010-2024" sample_scope: str # "A股全样本" | "创业板" | ... data_sources_candidates: list[str] # 可能的来源 priority: int = 1 # 1=必须,2=重要但可替代,3=可选
验证结果解读
python# 检查所有想法的可行性 for result in report.idea_results: print(f"{result.idea['title']}: {result.feasibility.value}") print(f" 评分: {result.feasibility_score:.1f}/1.0") print(f" 建议: {result.recommendation}") # 如果有数据缺口 if result.gaps: print(" 数据缺口:") for gap in result.gaps: print(f" - {gap}") # 如果需要行动 if result.actions: print(" 行动:") for action in result.actions: print(f" - {action}")
MCP 工具快速索引
| 需求 | MCP Server | 工具 |
|---|---|---|
| NBER 工作论文 | user-nber-wp | search_nber_papers |
| OpenAlex 论文 | user-openalex | get_openalex_works |
| ArXiv 论文 | user-arxiv | semantic_search |
| 中文文献 | user-brave-search | brave_web_search |
| 论文全文 | user-context7 | get_context7_by_query |
| 研报补充 | user-eastmoney-reports | get_research_report |
关键约束
- 数据验证是强制 checkpoint:阶段6 必须暂停,不能自动继续
- 模拟数据需要明确授权:没有用户授权不能使用模拟数据
- 想法必须与研究缺口对应:每个想法必须明确指出填补哪个缺口
- 评分必须透明:展示所有维度的评分和权重
- 中文文献不可忽视:A股研究中中文顶刊是必查项
快速执行命令
bash# 完整流程执行 python scripts/research_framework/pipeline.py \ --topic "研究方向" \ --mode idea_discovery \ --output output/fin-ideas/ # 仅想法生成(不含数据验证) python scripts/research_framework/pipeline.py \ --topic "研究方向" \ --mode idea_generation # 仅数据验证 python scripts/idea_data_checker.py \ --ideas-file output/fin-ideas/IDEA_REPORT.md \ --report-file output/fin-ideas/IDEA_DATA_CHECK.md


