machine-learning-for-trading 第 23 章实战:从 SEC 披露构建金融知识图谱、Graph RAG 与时序防泄漏特征工程
【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading
本指南完整讲解开源仓库 machine-learning-for-trading(《Machine Learning for Trading》第 3 版配套代码)中第 23 章"Knowledge Graphs for Financial AI"的技术路线:从向量检索的局限出发,说明何时值得为金融问题引入显式图结构;随后以 10 个 notebook 为主线,深入 LLM 辅助的供应链知识图谱构建、13F 机构持仓属性图、安全 Graph RAG、图衍生 ML 特征、统计金融网络、三时间戳防泄漏框架以及生产级工程决策。读完你将掌握一套"可回放、可审计、防泄漏"的金融知识图谱构建与评估方法论,并能在仓库中直接复现全部流程。
为什么金融问答需要显式图结构
向量检索(第 22 章的 RAG 基础)让基于证据的金融问答成为可能,但它作用于孤立的文本块。依赖所有权链条、供应商网络、风险传染路径或关系变更时点的提问,需要的是可遍历、可审计、可复用的显式结构,而不是文本块之间的模糊相似度匹配。知识图谱以节点表示实体、带类型的边表示关系、属性承载来源与时间信息(provenance),正好补齐了这一层。
仓库 23_knowledge_graphs/README.md 开篇即点出本章的立场:知识图谱的构建应当被当作治理问题(身份 identity、模式 schema、来源 provenance)来对待,而不是为了追求新颖性。全章以 7 个小节推进,对应关系如下:
| 小节 | 主题 | 核心观点 |
|---|---|---|
| 23.1 | 关系结构何时解锁金融洞察 | 多跳、结构拥挤或时序演化的提问才值得为图买单 |
| 23.2 | 构建金融知识图谱 | LLM 提取 + 身份、模式、来源契约,保证图谱可回放、可审计 |
| 23.3 | Graph RAG:确定性关系推理 | 五阶段架构,把关系逻辑交给数据库、把语言生成交给 LLM |
| 23.4 | 从图谱到机器学习特征 | 中心性、拥挤度、共同持股与跨图交互变成表格特征 |
| 23.5 | 金融网络:从相关到组合 | 经典 MST 与相关网络方法如何补充显式 KG,GNN 的实用定位 |
| 23.6 | 时序完整性与防泄漏评估 | 三时间戳模型(事件、披露、提取)与 cutoff 安全特征协议 |
| 23.7 | 构建 KG 就绪管线:工程决策 | 引擎选型、本体范围、text-to-Cypher 安全、schema 版本化 |
23.1 先问"这真的是图问题吗"
判断标准很直接:查询是否多跳(multi-hop)、结构是否拥挤(crowded)、关系是否随时间演化(temporally evolving)。表格式数据库的强项是等值连接与聚合;向量检索的强项是语义相似。而"这两家基金共同持有哪些股票""哪家公司同时被多家 S&P 100 公司列为主要供应商""谁通过机构持仓在两只股票之间构成间接通道"这类问题,在表上要做重复自连接(self-join),在图上只是一次两跳遍历。
13F 数据集是天然的二分图:季度披露持仓的机构(institution)连接它们持有的股票(stock)。05_institutional_holdings_kg.py 中共享持仓查询的 Cypher 等价写法如下:
MATCH (a:Institution {name: "..."})-[:HOLDS]->(s:Stock) <-[:HOLDS]-(b:Institution {name: "..."}) RETURN s.label, s.issuer内存图实现里这一条查询对应两次集合求交inst1_stocks & inst2_stocks。仓库同时给出一个重要提醒:共享持仓只暴露潜在连接,并不等于测量了价格共动——"两个机构是否因共同持股而在抛售时放大价格冲击"是下游 23.4 节特征要检验的假设,notebook 本身不做此推断。
23.2 供应链知识图谱:LLM 提取 + 身份解析 + UNWIND 批量加载
数据准备:SEC 披露语料
01_sp100_sec_download.ipynb 从 SEC EDGAR 加载 S&P 100 公司的 10-K 与 8-K 文件。仓库 02_supply_chain_kg_construction.py 通过data.load_sec_filings("10-K", universe="sp100")读取语料,并断言必需的列(symbol、company_name、form、filing_date、accession_no、year、text、text_length)无缺失、(symbol, accession_no)无重复、text长度与text_length一致。随仓库分发的语料共601 份 10-K 文件,覆盖 101 家公司,2020–2025 年。
有限关系词汇表与提取提示词
模式设计的第一步是限定关系词汇。仓库只允许三种关系:
RELATIONSHIP_TYPES = ["HAS_SUPPLIER", "COMPETES_WITH", "HAS_CUSTOMER"]提取提示词(EXTRACTION_PROMPT)明确约束了输出格式:JSON 数组、键为subject/predicate/object、主词用全称官方名、宾语用缩写(如TSMC而非全称)、实体名不超过 5 个词、只提取显式陈述的关系。系统提示词 + 用户提示词(截取文件前 6000 字符)经apply_chat_template拼装后批量送入模型。
批量推理管线
核心提取函数extract_relationships_batch把多条文本在一次前向传播中完成生成(padding=True, truncation=True, max_length=4096,max_new_tokens=512,do_sample=False保证确定性),JSON 解析器_parse_json_triples负责剥离多余前导/尾随文本,只保留predicate在允许集合内的三元组。参数化单元格(Papermill 可覆盖)默认值:
| 参数 | 默认值 | 说明 |
|---|---|---|
MAX_COMPANIES | 0 | 限制送 LLM 的公司数(仅当RERUN_EXTRACTION=True时生效);0 = 全语料 |
LLM_BATCH_SIZE | 2 | 每 GPU 批的文本数(Qwen2.5-7B 约 14GB,2 条在 24GB 卡上留有余量) |
RERUN_EXTRACTION | False | False 时加载仓库自带的提取缓存,无需 GPU |
MODEL_NAME | Qwen/Qwen2.5-7B-Instruct | 可选Qwen/Qwen3-8B(原生思考模式需ENABLE_THINKING=True) |
MAX_NEW_TOKENS | 512 | 思考模式下建议提到约 2048(CoT 消耗 token) |
SEED | 42 | 全局随机种子 |
提取性能是真实记录在案的实现事实:仓库注明,原始生产运行以批大小 2 处理 601 份文件,在 NVIDIA RTX 3090 上约 27 分钟、占用约 14GB 显存,且 CPU 再生不被支持。
可回放的提取缓存
仓库随包分发缓存 output/supply_chain_cache/extracted_triples.parquet(约 11KB)及其 sidecar 元数据extracted_triples.meta.json。缓存验证器_validate_cache做四重检查:SHA-256 内容哈希比对、列名与(subject, predicate, object)精确一致、行数落在[100, 50_000]合理区间、行数与 meta 的row_count一致。任何一步漂移都会直接报错,而不是静默使用损坏数据。meta 中记录model_name、max_companies、written_at,把"提取身份"钉死在文件上——参数里改MODEL_NAME并不能追溯性地改变已提交缓存的生产者,代码会明确打印"缓存的生产者是 X"而非声称当前参数。
实体解析:让同名实体收敛为同一节点
实体解析是让图谱可用的关键。缓存中 133 个不同主词字符串里,51 个原样匹配公司名,61 个只是大小写/标点/词序变体,21 个指向运营子公司或品牌——每个拼写若不合并都会成为独立节点,污染下游所有度数统计。仓库采用三层解析:
- 规范键(canonical key):
entity_key剥离大小写、标点、公司后缀(inc/corp/co/plc/ltd/llc/holdings/the/nv/sa/ag等 23 个)并排序 token。排序是唯一能合并词序不同拼写的规则,在缓存上恰好合并了SCHWAB CHARLES CORP与The Charles Schwab Corporation这一组四种拼写。 - 文件者名册(filer roster):从语料本身构建官方名称表,命中的实体直接采用官方拼写——这正是"被列为竞争对手的实体"与"自己提交过 10-K 的实体"成为同一节点的原因。
- 别名表(alias map):覆盖从不向 SEC 提交文件的实体,如
Taiwan Semiconductor Manufacturing Company → TSMC、Foxconn Technology Group → Foxconn、Advanced Micro Devices → AMD、Amazon Web Services → AWS。
此外还有通用实体过滤器GENERIC_ENTITY_NAMES("suppliers"、"third parties"、"consumers" 等类别短语)和谓词感知规则(HAS_SUPPLIER宾语含 "supplier" 即拒绝),防止把非命名实体写成节点。解析后用(subject, predicate, object)三元组去重。
值得注意的设计取舍:无法匹配名册的实体(如被模型命名为KAYAK而实际属于Booking Holdings Inc.)不强行合并,保留为独立节点并在输出中显式列出"名册无法覆盖的主词"。生产管线会用公司层级(corporate hierarchy)解决,这里如实标注边界。
Neo4j 批量加载:UNWIND + MERGE
加载采用UNWIND 批量事务:单个 Cypher 语句把成百上千条关系在一次事务中写入,而非逐条执行。每个谓词有独立的 MERGE 模板,例如:
UNWIND $batch AS row MERGE (c:Entity {name: row.subject}) SET c:Company MERGE (s:Entity {name: row.object}) SET s:Supplier MERGE (c)-[:HAS_SUPPLIER]->(s)注释明确解释了为什么 MERGE 必须落在:Entity {name}上、角色只作为第二标签附加:若按角色标签合并,Microsoft 会因"提交文件的公司 / 被列为供应商 / 被列为客户"三个身份而分裂成三个节点。共享数据库的章节还要求清理时只删除本 notebook 创建的关系,避免误伤08_8k_event_extraction写入的:Company事件边。
供应链图谱的统计口径与边界
图统计部分如实报告:几乎每个被提取的供应商只被一家公司点名,共享供应商只占少数。这是 10-K 披露性质的产物——文件者只列出被要求披露的供应商,只有被多家依赖的供应商才会重复出现。因此共享供应商度数是提取图上的敞口集中度诊断,不等同于中断概率或因果传播概率,用前必须先人工复核被提取实体。
23.3 Graph RAG:把关系逻辑还给数据库
Graph RAG 与向量检索的本质区别在 03_graph_rag_qa.py 中体现为一条安全协议:问题先路由到预写 Cypher 模板,而不是自由生成 Cypher;生成的查询必须通过只读 schema 校验,并强制日期约束与行数上限。五个阶段分别是:问题路由 → 模板化查询 → 只读校验 → 确定性数据库执行 → LLM 用结果组织语言回答。
只读 schema 白名单
校验器持有三张白名单:允许的标签{Institution, Stock, Sector}、允许的关系{HOLDS, IN_SECTOR}、允许的属性集合(available_from, cik, cusip, equity_13f_value, issuer, label, name, report_date, sector, shares, value),并设置禁用关键词集合:
BLOCKED_KEYWORDS = { "CALL", "CREATE", "DELETE", "DETACH", "DROP", "LOAD CSV", "MERGE", "REMOVE", "SET", }关键运行参数:ROW_LIMIT = 25、TIMEOUT_SECONDS = 2.0,确保任何生成的查询都无法全表扫描或长时间挂起。
生产者快照契约:查询层不自行定义事实
查询层通过GraphSnapshot节点与生产者绑定:读取ch23_13f快照的属性,断言其source_sha256与本地 13F parquet 的 SHA-256 一致,断言cohort_policy == "earliest-report-period formation, fixed forward",并核对图内节点/关系计数与快照记录的institution_count/stock_count/holding_count完全吻合。as-of 日期由生产者拥有:CUTOFF_DATE为空时读取latest_available_from,用户传入更早日期是合法回看,传入更晚日期则直接断言失败——因为图无法回答它没有文件支撑的日期。这类断言把"查询层引用了一个生产者从未写过的图"这类静默错误变成显式失败。
点对点时间约束
所有点位查询强制h.available_from <= $cutoff_date。13F 持仓有两个日期:report_date(季度末持仓基准日)与available_from(该季度持仓首次公开的提交日,约晚六周)。用report_date做时点查询是前视(look-ahead),用available_from做季度对比则错位一个季度——两个日期回答两种不同的问题,05_institutional_holdings_kg.py 的report_period_calendar把每个报告期的提交窗口与lag_days打印出来,让缺口可见而非假设。
04_rag_comparison_benchmark.ipynb 则在真实 13F 数据上把图检索与向量检索(sentence-transformers嵌入基线)对照,度量支持召回率(support recall)与检索 token 成本,区分直接查找型与多实体型问题。
23.4 从图谱到机器学习特征
05_institutional_holdings_kg.py 定义了 13F 属性图 schema:三类节点Institution(cik, name, equity_13f_value)、Stock(cusip, issuer, label, sector)、Sector(name);两类关系HOLDS(shares, value, report_date, available_from)与IN_SECTOR。注意两个命名纠偏:equity_13f_value是管理人在形成季度的美国上市多头股票市值(曾叫aum,但 13F 不含现金、债券、境外与私募仓);label是缩短的发行人显示名(曾叫ticker,但 13F 按 CUSIP 键控、根本没有 ticker)。
数据净化与形成队列
真实 13F 数据经三处关键净化:
- 衍生品行拆分:
put_call为空的才是多头持股行;期权行(CALL/PUT)被排除出图并单独汇报规模。把所有三类行加总会把 put 与持股混为一谈,是符号错误而非舍入错误。 - 形成队列(formation cohort):只在最早报告期一次性地选出机构与股票队列,之后所有报告期沿用同一队列。若用全部报告期排名,未来成员会泄漏进早期时点查询。
- CUSIP 合并拼写:按 CUSIP 分组聚合发行人拼写("MASTERCARD INC" 与 "MASTERCARD INCORPORATED" 是一个证券),取承载披露价值最多的拼写为
canonical_issuer,避免 Neo4j 按 CUSIP MERGE 后出现"队列声称的规模大于图实际规模"的矛盾。
拥挤度与共同持股
内存图InMemoryGraph提供节点/边插入与按边类型的邻接查询,支撑四类教学查询:共享持仓、拥挤度(HOLDER_FLOOR = 2,即holder_count > 2)、跨机构网络路径、按板块聚合持仓。Jaccard 共同持股相似度把二分图投影为股票-股票相似图:
$$J(s_i, s_j) = \frac{|,\text{Holders}(s_i) \cap \text{Holders}(s_j),|}{|,\text{Holders}(s_i) \cup \text{Holders}(s_j),|}$$
仓库诚实标注了统计边界:10 家机构的队列里 Jaccard 只能取少量小整数比,头部存在大量并列,"前 N 相似对"的排序主要由字母序决断,因此代码打印并列组规模而非假装存在排序;持仓重叠是否驱动价格共动是 23.5 节要检验的假设,本 notebook 不测价格共动,这个队列规模也测不出来。
拓扑特征与跨图交互
09_knowledge_graph_features.py 把供应链图(Neo4j 中ch23_supply_chain快照)与第 4 章 13F parquet 合并成特征矩阵,输出宽/长两种格式:
- 拓扑类:
pagerank、betweenness(nx.betweenness_centrality)、clustering、in_degree、out_degree; - 供应链集中度:供应商 HHI(赫芬达尔指数)与竞争敞口;
- 机构拥挤度:13F 持仓派生;
- 跨图交互:
supplier_dependency × ownership_hhi、betweenness × n_holders(即systemic_exposure,见pl.col("betweenness") * pl.col("n_holders")的实现)、relationship_churn、centrality_momentum等动态列。
特征元数据为每个特征给出分类与解读(如 betweenness 为 "Bridge or bottleneck position")。这些特征的下游消费者是第 12 章(表格模型)与第 14 章(潜在因子模型)。
23.5 统计金融网络:相关网络、MST 与 GNN 的实用定位
显式 KG 之外,统计金融网络文献提供互补视角。10_network_portfolio_construction.ipynb 从美国股票构建相关网络与最小生成树(MST),按中心性给资产排序,构造网络多样化组合,并运行传染模拟。其方法论根基是 Mantegna(1999)的层级结构研究、Marti 等(2021)的二十年综述,以及 Konstantinov 等(2023)的金融网络组合管理。
06_gnn_feature_engineering.ipynb 在股票相关网络上训练简化的 **GAT(图注意力网络)**生成关系嵌入,再把"仅表格 ridge 回归"与"拼接学习嵌入的混合模型"对照。仓库使用torch_geometric实现,参考文献涵盖 GCN(Kipf & Welling 2017)、GraphSAGE(Hamilton 2018)与 GAT(Veličković 2018)。定位是务实的:GNN 嵌入作为特征补充而非替代显式 KG,其结论需经受与表格基线同等的评估纪律。
23.6 时序完整性与三时间戳防泄漏
三时间戳模型
08_8k_event_extraction.py 从 SEC 8-K 文件提取结构化事件四元组(subject, relation, object, timestamp),用 FinReflectKG CheckRules 规则校验,规范化实体格式,把未通过 schema 的事件搁置(hold back),并以可回放 run identity加载事件图。8-K 语料约 1249 份文件 × 101 家公司 × 2020–2025,MAX_FILINGS = 50为默认演示规模(0 = 全语料,约 10 倍运行时长)。
每个图边携带三个日期,分别回答三个不同的问题:
| 时间戳 | 含义 | 用途 |
|---|---|---|
| event time | 文件文本中提取的事件发生日 | 事件本身何时发生 |
| public/disclosure time | 信息向公众公开的提交日 | 时点查询的可见性边界 |
| extraction time | 管线产出该 KG 边的时间 | 提取身份与快照排序 |
07_dynamic_kg_temporal.py 明确警告了一个排序陷阱:GraphSnapshot是共享标签,13F 快照没有extraction_time,Neo4j 把 null 排在所有值之上,因此ORDER BY extraction_time DESC LIMIT 1会选中 13F 快照而不是 8-K 快照。修复方式是显式命名生产者:8-K 快照打上snapshot_kind: '8k_events'标签,查询按snapshot_kind匹配。
cutoff 安全快照与关系更替
代码用CUTOFF_LAG_DAYS = 60从最新公开日回推 cutoff,visible_at_cutoff只保留public_time <= cutoff的边,其余边被隐藏并计数(验证"cutoff 后的事件对可见图不可见")。随后build_snapshots以WINDOW_DAYS = 90的固定窗口滚动公开事件流,每个窗口统计n_edges、n_subjects、n_objects,相邻窗口间的**关系更替(relationship churn)与中心性漂移(centrality drift)**成为动态特征。
关键概念辨析:披露过滤器(disclosure filter)只按公开日过滤,而三时间戳模型要暴露的是披露过滤器挡不住的那种泄漏——例如事件生效日(effective date)晚于宣布它的文件日,代码在面板 (b) 中绘制"从事件日到披露日的有符号滞后",并明确"不把滞后截断到零"。
23.7 生产级工程决策
第 23.7 节把整章收敛为四类工程决策:
- 引擎选型:Neo4j 承担持久化与 Cypher 查询;
networkx承担图分析与 MST;torch_geometric承担 GNN;轻量教学场景可用仓库自实现的InMemoryGraph。连接统一走环境变量(默认bolt://localhost:7687,用户neo4j/password),verify_connectivity()在启动时即验证。 - 本体范围:关系词汇表有限且可枚举(供应链 3 类、13F 2 类、8-K 事件类 + CheckRules 校验),拒绝自由形式的关系。
- text-to-Cypher 安全:模板路由 + 只读 schema 白名单 + 禁用关键词 + 行数上限 + 超时 + 生产者快照契约,层层设防;代码还要求用**敌意控制集(hostile control set)**审计校验器——不仅用为通过而写的查询,更要用试图绕过它的查询。
- schema 版本化:缓存与快照携带内容哈希、生产者身份、写入时间与 run_id;实体解析规则(后缀表、别名表、通用实体表)均为显式配置,可版本化演进。
在仓库中复现全部流程
运行方式
# 从仓库根目录运行任一 notebook 脚本 uv run python 23_knowledge_graphs/<notebook>.py # 测试模式(Papermill 缩减数据) uv run pytest tests/test_notebooks.py -v -k "23_knowledge_graphs" # 无显示环境(headless) MPLBACKEND=Agg PLOTLY_RENDERER=json uv run python 23_knowledge_graphs/<notebook>.pyNeo4j 与 GPU 前提
以下 notebook必须有运行中的 Neo4j 实例:02_supply_chain_kg_construction、05_institutional_holdings_kg、08_8k_event_extraction、03_graph_rag_qa、07_dynamic_kg_temporal。典型启动方式(notebook 文档块中给出的 docker compose 命令):
docker compose --profile kg up -d neo4j docker compose run --rm ml4t python 23_knowledge_graphs/02_supply_chain_kg_construction.py供应链与 8-K 提取管线默认使用经vLLM 兼容端点提供的 Qwen2.5-7B;本地缓存路径默认无需 GPU,重新提取(RERUN_EXTRACTION=True)需要 CUDA GPU 与ml4t-gpu镜像。13F 数据经data.load_institutional_holdings_13f()加载,其 parquet 由 data/equities/positioning/13f_download.py 生成,缺失时加载器抛出带下载指引的DataNotFoundError。
Notebook 全景
| 类别 | Notebook | 内容 |
|---|---|---|
| 图构建 | 01_sp100_sec_download.ipynb | 加载并检查 S&P 100 的 10-K/8-K 文件,提取前验证覆盖度与文本质量 |
| 图构建 | 02_supply_chain_kg_construction.ipynb | Qwen2.5-7B 提取供应商/客户/竞争关系,实体解析,加载 Neo4j,可视化供应链图 |
| 图构建 | 05_institutional_holdings_kg.ipynb | 13F 属性图,共享持仓与拥挤度查询,Jaccard 共同持股相似度 |
| 图构建 | 08_8k_event_extraction.ipynb | 8-K 事件四元组提取,FinReflectKG CheckRules 校验,可回放 run identity 加载 |
| 检索与评估 | 03_graph_rag_qa.ipynb | 受控 text-to-Cypher 问答,只读 schema 校验、日期约束与行数上限 |
| 检索与评估 | 04_rag_comparison_benchmark.ipynb | 图检索 vs 向量检索基准:支持召回率与检索 token 成本 |
| 特征与网络 | 09_knowledge_graph_features.ipynb | 供应链拓扑(PageRank/betweenness/HHI)+ 13F 拥挤度 + 跨图交互特征矩阵 |
| 特征与网络 | 10_network_portfolio_construction.ipynb | 相关网络与 MST,中心性排序,网络多样化组合,传染模拟 |
| 特征与网络 | 06_gnn_feature_engineering.ipynb | 简化 GAT 生成关系嵌入,表格基线 vs 混合模型对照 |
| 时序完整性 | 07_dynamic_kg_temporal.ipynb | 三时间戳分离,cutoff 安全快照,关系更替与中心性漂移,泄漏验证 |
仓库还随包提供了供应链图的成品可视化 figure_23_3_supply_chain_network.png,以及可交互版本supply_chain_d3.html/supply_chain_interactive.html,便于在浏览器中探索 S&P 100 供应链拓扑。
依赖关系与章节定位
上游依赖:第 4 章(基本面与另类数据,13F 机构持仓加载器)、第 10 章(文本特征工程,NER 与文件解析模式)、第 22 章(RAG 基础)。下游消费:第 12 章(表格模型消费跨图特征)、第 14 章(潜在因子模型消费共同持股与拥挤特征)、第 24 章(自主智能体使用结构化检索、记忆与证据追踪)。
章节专属库:neo4j(Cypher 客户端)、networkx(图分析与 MST)、torch_geometric(GAT)、edgartools(SEC EDGAR 文件摄入)、sentence-transformers(RAG 对照的嵌入基线)。
核心参考:本章在多个关键点上引用了公开文献——FinReflectKG(2025)与 FinDER(2025)作为金融 KG 问答基准;Graph RAG(Edge 等,2024)作为查询聚焦摘要方法;RAG 综述(Peng 等,2024);金融 KG 构建高精度管线(Elhammadi 等,2020,COLING);FinKG 核心金融知识图谱(Kertkeidkachorn 等,2023);动态金融知识图谱(Miao 等,2019);MST 与金融网络层级结构(Mantegna 1999;Marti 等 2021);金融网络与组合管理(Konstantinov 等,2023,JPM);股票价格脆弱性(Greenwood & Thesmar 2011,JFE)与银行生态系统系统性风险(Haldane & May 2011,Nature);以及图神经网络系列(GCN、GraphSAGE、GAT)与反洗钱图卷积实验(Weber 等,2019)。完整条目见 23_knowledge_graphs/README.md 的 References 节。
小结
第 23 章的价值不在于"把数据放进图里"这一动作本身,而在于把图构建当作治理问题:稳定实体身份(规范键 + 名册 + 别名)、有限关系词汇表、边级来源(内容哈希、生产者身份、run_id)、确定性关系查询(Graph RAG 把关系逻辑留给数据库)、泄漏感知的特征工程(三时间戳模型与 cutoff 协议)。这套纪律让知识图谱从"新颖"变成"有用"——可回放、可审计,也能安全地服务于预测、组合构建与风险分析。
【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考