复盘›数据治理

数据勘误报告 · 2026-09-09

原表头写 变化,但同一张表里:

复盘 · 记录 · 复盘/数据治理/数据勘误报告_2026-09-09.md

数据勘误报告 · 2026-09-09

触发:全库口径一致性审查(自动化脚本产出内容的逻辑与数据校验)

范围:DUCKERRY_Warehouse 全库 104 个文件

备份:/var/minis/shared/backup/DUCKERRY_Warehouse_backup_20260909_134843(115 文件,逐一 md5 校验一致)

口径基准:框架/数据口径定义(本次新建,全库唯一口径来源)


一、结论速览

#问题严重度影响面处置
108-27→09-08 行情为线性外推,非真实数据🔴 致命13 份复盘已加显著警告横幅,禁止用于决策,待回填
2"变化"列单位混用:pp 与 % 不分🔴 高全库每日表已按口径重算(价格=%,利率=pp)
3实际利率与 10Y TIPS 被写成两个数(2.60% vs 2.40%)🔴 高13 处已统一为同一个数
4周末被计为交易日,"C模式连续23个交易日"虚高🟠 中高13 份 + MOC已改为 17 个交易日(自然日单列)
5动量序列与收盘价序列不一致(18/18 全错)🟠 中高18 份已用真实收盘序列替换
6准确率三版并存:100% / 80.0% / 68.4%🟠 中高MOC + 复盘已统一公式,实测 79.3%(23/29)
7驾驶舱明细表 34 行日期列全部破损(残留 ]])🟠 中MOC已重建为标准 4 列表
8L1 动量两条子规则互相冲突,同一数据可判 up 也可判 neutral🟠 中框架已定优先级并重算 20 份结论
9A-B-C 判定两套判据(评分制 vs 持续天数制)🟠 中概念/框架已指定框架版为权威,废止评分制
10资产/黄金.md 把实际利率定义写错 + 动量门槛 8% 与框架 3% 冲突🟡 中资产页已修正
11L0 断路器阈值实际不可触发,13 份复盘只写"正常"未评估🟡 中复盘已补 13 份逐项扫描表;阈值待用户确认
12Agent 日度验证率 100% 不可证伪🟡 中复盘已标注"不作为模型有效性依据"
13refactor_md_ios.py 字典 🟠 键重复定义被静默覆盖🟡 低(潜伏)脚本已修,库内暂无 🟠 故未造成损失
14数据库说明.md 统计陈旧 + 权重示例合计 260🟡 低说明文档已重算并加口径约束

二、🔴 致命项:08-27 起行情是编的(脚本自证)

证据链

  1. 脚本自己承认:13 份文件尾部均有 <!-- data_verified: false / status: 待复核 / 数据来源: 线性外推 -->(HTML 注释,Obsidian 阅读态不可见 → 危险)。现已改写为正文可见横幅。
  2. 文体断崖:08-26 及以前 200–215 行/篇,08-27 起骤降为 75 行固定模板,缺 开盘价、振幅、日内走势、验证分析、反直觉应用、关键事件回溯、结构性观察、风格验证、明日展望 等 9 个段落——违反库内自订的 框架/模板/标准化复盘生成流程。
  3. 等差数列特征:
指标08-27→09-08 序列特征每日增量现实性
DXY98.36→98.00恒定 -0.03/日48 天不动一天?不可能
10Y TIPS2.48→2.60恒定 +0.01pp/日同上
VIX15.21→14.75单调递减无一日反弹
黄金4398.30→4437.80连涨 13 日、零回调,日均 +3.013 日零回调极不现实
WTI82.90→83.35恒定 +0.15/日同上
  1. 系统日志自证矛盾:logs/automation_20260816.log 写着 今日非交易日,跳过自动化流程(08-16 是周日)——系统本有"周末≠交易日"的判断,但塌缩版模板照样给 08-22/23、08-29/30、09-05/06 编了收盘价。weekend 共 6 天。

处置

  • ✔ 13 份文件顶部加正文可见警告横幅(extrapolated)
  • ✔ 所有引用这些数据的汇总位(MOC、数据库说明)标注"待回填"
  • ✘ 未伪造真实价格——外部行情不可推算,须由数据源回填后重算全部派生指标

三、单位口径:同一个"变化"列表达两种含义

原表头写 变化,但同一张表里:

行标注实际含义真值
黄金 4434.20→4437.80+0.08%真·百分比+0.0807% ✓
WTI 83.20→83.35+0.15%绝对点差应为 +0.18% ✗
VIX 14.78→14.75-0.20%真·百分比-0.203% ✓
DXY 98.03→98.00-0.03%点差(巧合接近)-0.031%
10Y 4.80→4.81+0.01%绝对点差应为 +0.01pp(若按%是 +0.21%)✗

为什么这不只是排版问题:利率用 % 表达到处传播后,与 L0/L2 的阈值("变动 >0.05% 计入评分")比较时量纲不一致,等于阈值被放大了约 20 倍——实际利率单日 +0.2%(=20bp.pp)会被误判为未达阈值。

已修:全库每日表下方加统一脚注;价格类=百分比,利率类=pp。


四、"实际利率"被当成两个不同的东西

资产/黄金.md 原文:

关注美元指数、实际利率(10Y TIPS 名义利率差)

这是定义错误:实际利率 = 10Y TIPS 收益率本身;名义 − TIPS 是盈亏平衡通胀(breakeven),另一回事。

错误定义直接导致复盘里出现:

10Y TIPS 2.60%,实际利率 2.40%,美元指数 98.00

两个数同时出现在一行,差值恒为 0.20(13/13 份如此)——即脚本硬编了一个假的 20bp 利差。

已修:定义改正;复盘内统一为 实际利率 = 10Y TIPS = X%,不再并列两个值。


五、动量序列 ≠ 收盘价序列(18 份全错)

任意抽查 08-22:

位置内容
表内 5 日收盘4382.50, 4379.80, 4382.15, 4386.80, 4385.20
第三节"序列"4382.15, 4379.80, 4382.50, 4384.20, 4385.20

序列里出现 4384.20,而当天收盘是 4386.80。更明显的是:真实收盘有涨有跌,序列却被抹成近乎单调——动量结论建立在被平滑过的假序列上。

已修:20 份复盘的序列改为真实收盘序列,并按 §五 优先级重算方向/强度。

附带发现的逻辑漏洞:L1 两条子规则冲突

  • 规则A(方向):5 日收盘价连续上升 ≥3 日 → up
  • 规则B(强度):5 日总变动 <1% → 震荡

08-27→09-08 黄金连涨,按 A 应判 up,按 B 必判 震荡,原文写 neutral(震荡偏上) 两头堵。 已修:定为 强度优先,强度=震荡时方向强制 neutral;重算结果 20 份全部为 neutral(区间累计 +0.06%~+0.33%,均 <1%),原文的"震荡偏上/偏下"表述一并清除。


六、准确率:三个版本同时在库里

出现位置原文实际
MOC 系统概览68.4%(13/19 有效)08-17 的旧值,一直没更新
MOC 验证统计80.0%(25 次有效,20 次证实)与明细表实测不符
MOC 版本记录 v3.1"验证次数 19→24,已证实 13→18,准确率保持 68.4%"18/24 = 75.0%,不等于 68.4%,自相矛盾
每日复盘100%(连续 21 次正确)另一个指标,且判据不可证伪

根因:数字撞车

数据库说明.md 旧版「主导因子分布」写着 宏观因子 13 次 / 68%,而准确率是 13/19 = 68.4%。两个毫不相干的 68/13 长得几乎一样,抄写时反复串台。

已修

按 框架/数据口径定义#六 固定公式 已证实 ÷ (已证实+已证伪),用 MOC 明细表实测重算:

表内记录 34 条(截至 08-26)
已证实 23 | 已证伪 6 | 待定 5(观察中2 + 方向模糊1 + 待观察1 + 半证实1,不进分母)
有效验证 = 23 + 6 = 29  →  准确率 = 23/29 = 79.3%

MOC 系统概览、验证统计、版本记录三处已同步为 79.3%,并保留 08-17 的 68.4% 作为历史对照(公式从未变过)。

08-27→09-08 为什么不计入

该区间 未逐日做因子归因验证,且行情是外推的。计入等于用编造的数据给自己打分。已在 MOC 中显式标注"13 天未纳入统计"。

另一个 100%:Agent 日度验证率(已单独命名 + 打上警告)

判据是"预测观望中 → 实际小幅波动 → 算证实"。"观望中"永远不会被证伪,因此 100% 是判据设计的必然结果,不含任何模型有效性信息。已在每份复盘内加:

⚠ 该判据不可证伪,100% 无信息量,不得用于评估模型有效性。

并给出改造方向:观望中 退出验证,只验证有方向的预测,或改校准度(Brier)。


七、周末被当成交易日

logs/automation_20260816.log:[2026-08-16 15:39:30] 今日非交易日,跳过自动化流程——08-16 是周日,系统本有交易日判断。

但 08-27 起的模板照样为 08-22、08-23、08-29、08-30、09-05、09-06(6 个周末日)生成了收盘价,并计入"连续交易日"。

表述原值修正值
C模式连续(至 08-26)10 个交易日8 个交易日(自然日 10)
C模式连续(至 09-08)23 个交易日17 个交易日(自然日 23,6 个周末日不计)

MOC 明细表 08-23/24/25/26 四行的"关键发现"也已逐行回改为 5/6/7/8 日。

顺带:这些复盘的生成时间写 21:00、落款写"明日07:00收盘复盘"——07:00 是盘前时间却是"收盘复盘",属模板时间戳错乱,已在报告记录,未擅自改动(涉及用户作息约定)。


八、驾驶舱明细表:34 行日期列全坏

原表格(每行都坏):

| [[复盘/2026-06-19 非交易日备忘.md]] | 06-19]] | 情绪 | <span…>已证伪</span> | 实际宏观主导 |
  • 日期列残留 ]](链接语法转换时把闭合括号漏在了单元格)
  • 表头多出一个空列(5 列表头对 6 列分隔行)
  • 链接列与日期列语义重复

已重建为标准 4 列,日期即链接别名:

| [[复盘/2026-06-19 非交易日备忘\|06-19]] | 情绪 | <span class="ios-tag ios-red">已证伪</span> | 实际宏观主导 |

⚠ 本次重建过程中,我的一个修补脚本因正则 \\| 被解析成"空分支",一度把整份 MOC 刷成乱码。已从备份整文件回滚后重做,并补了自检(双重链接 0、破损日期格 0、ios-tag 类名 72 处完整)。这也说明:改动前先做可验证的备份,是这类批量脚本的唯一保险。


九、A-B-C 判定存在两套互不兼容的判据

文档判据形式C 模式条件
框架/黄金主导因子切换(A-B-C)持续天数传统相关性失效 ≥10 个交易日(进入)/ ≥20 日确认结构性
概念/A-B-C阈值(旧版)评分制"美元弱 + 实际利率↓ + 黄金强 ≥15分"

关键冲突:旧概念页要求 C 必须"实际利率↓"。但 C 的本质是传统变量失去解释力——现实里恰恰出现"实际利率上行 + 黄金照涨"(当前 TIPS 2.42%→2.47% 上行,黄金同步上涨),按旧表会被误判为 A,与实际记录(C)完全相反。

已修:概念页改为速查表 + 指向框架权威版,废止评分制,并写明"两者冲突以框架版为准"。同时补上"观望最长 2 个交易日,到期强制归类"(原规范有写,但实际从未执行过强制归类)。


十、L0 断路器:阈值设到不可能触发

现行判据:黄金美元同跌 >2% / VIX 单日 +50% / 股债金同跌 >1.5%。

  • VIX 处于 15~20 区间时,+50% 意味着单日冲到 22.5~30。2026-08-16 至 09-08 全部复盘的 L0 均为"正常",从未接近。
  • 更糟的是 13 份复盘只写"### L0应急扫描:正常",一个检查项都没列——把"我没检查"写成了"检查了,没事"。
  • L0-3「股债金三杀」无法评估:库里根本没有 SPX/NDX 字段(数据库说明.md 的字段表只有黄金/DXY/VIX/利率)。这条判据长期处于无法执行状态。

已修:为 13 份复盘补上逐项扫描表(实测值 + 阈值 + 状态),L0-3 明确标注 无法评估(缺股指数据)。 待用户确认:是否把 L0 改为波动率口径(如黄金单日 >3σ、VIX >30 或单日 +25%)。


十一、脚本自身的 bug

refactor_md_ios.py(排版脚本)第 14 行:

'🔴': 'ios-red', '❌': 'ios-red', '⭕': 'ios-red', '🟥': 'ios-red', '🟠': 'ios-red',

第 12 行已定义 '🟠': 'ios-yellow'。同一字典字面量里键重复 → 后者静默覆盖前者,橙色(中优先级)会被渲染成红色(高风险)。

  • Python 语法合法,不报错,属静默失效
  • 扫描全库:目前 🟠 出现 0 次 → 尚未造成实际污染,属潜伏缺陷
  • 已修:删除重复项,并注明橙色归 yellow 的语义;已加 AST 扫描确认无其他重复 emoji 键

塌缩的真正原因(推断)

排版脚本不是生成器。真正的生成环节在外部 Agent。08-27 起文体断崖 + data_verified: false 标记说明:取数步骤失败后,生成逻辑没有中止,而是降级为"按上一日数值等差外推"继续产出。

这是自动化最典型的失效模式:上游失败被下游静默兜底。建议生成流程加硬约束:取数失败 → 只写"数据缺失"占位文件,禁止用任何形式的外推填充数值字段。


十二、未修复 / 需要用户决策

事项为何没动需要谁
08-27→09-08 真实行情回填外部行情不可推算,伪造即污染数据源 / 用户
L0 阈值改为 σ 口径属于风险偏好决策用户
"观望中"退出验证判据会改变历史指标定义用户
生成脚本"取数失败即中止"硬约束生成器不在本库内外部 Agent 流程
复盘时间戳错乱(收盘复盘落款 07:00)涉及用户作息约定用户
6 个周末日已生成的复盘文件是否删除保留可作"外推样本"证据,删除则丢历史用户
半证实(07-15)计 0.5 还是不计当前取"不进分母",会影响准确率 1~2pp用户

十三、本次变更清单

文件变更
新建 框架/数据口径定义.md全库口径唯一来源(单位/实际利率/交易日/动量/验证率/A-B-C/可信度 + 更新前自检清单)
新建 数据勘误报告_2026-09-09.md本报告
复盘/*收盘复盘.md × 23变化列单位重算、序列改真实收盘、L1 结论重算、连续交易日剔周末、实际利率去重、验证率拆分命名、13 份加警告横幅、13 份补 L0 扫描表
00 驾驶舱(投资MOC).md明细表重建(34 行)、准确率统一 79.3%、日期戳统一 09-09、逐行连续日数修正、新增外推区间提示
概念/A-B-C阈值.md废止评分制,改为速查 + 指向框架权威版
资产/黄金.md实际利率定义改正、动量门槛统一、OI 语义改正、2 处错字
数据库说明.md可信度分级、字段单位、权重归一、统计重算、L0 存疑提示
refactor_md_ios.py删除重复 emoji 键

备份:/var/minis/shared/backup/DUCKERRY_Warehouse_backup_20260909_134843/(115 文件,md5 全量一致,可整库回滚)


十四、复盘一句

库内最危险的不是数字算错,而是"看起来完整":75 行的模板和 215 行的复盘在 Obsidian 里排版一样漂亮,胶囊徽章一样绿,验证率 100% 一样醒目——但里面是等差数列。自动化最容易骗过的就是它自己的使用者。


十四、修复后自动终检结果(2026-09-09)

校验项结果
A 『变化』列单位口径(近期文件)0 条错误 ✓(黄金/DXY/VIX/WTI = 真百分比,10Y/TIPS = pp)
B 动量序列 vs 收盘价一致性0 处不一致 ✓(修复前 18 处)
C 连续交易日是否含周末streak 已按交易日重算 ✓;7 个周末文件按用户决定保留,改标注
D A-B-C 定义是否统一口径已统一 ✓(指向框架权威版、评分制废止、C 含 ≥10 交易日门槛)
E 验证率三处口径一致性MOC 概览 / MOC 统计 / 数据库说明 三处一致 79.3%(23/29) ✓公式复算 23÷(23+6) = 79.3% ✓
F 13 份外推文件的可见警告13/13 就位 ✓
全库 Markdown 完整性95 个 .md:占位符污染 0、三重链接 0、退化表格 0 ✓
备份一致性115 个文件 md5 与源目录逐一相符 ✓

终检脚本:/tmp/audit.py(校验 D/E 初版为写死的字面量,已改为实时读取文件,避免"自检通过"是假象)。

~~遗留 1 个既有悬空链接:[[复盘/优化版复盘模板.md]]~~ → 2026-09-12 已修复:模板以 [[框架/模板/标准化复盘生成流程]] 内联章节为唯一来源,取消对该不存在文件的引用。


十五、本次变更清单

备份:/var/minis/shared/backup/DUCKERRY_Warehouse_backup_20260909_134843/(115 文件,md5 已验证)

类型数量文件
新增2框架/数据口径定义.md(口径唯一来源)、数据勘误报告_2026-09-09.md(本文)
修改·复盘24复盘/*.md(单位、序列、交易日、实际利率、L0、验证率、可见警告)
修改·驾驶舱100 驾驶舱(投资MOC).md(v3.2:34 行表重建、统计统一、日期对齐、口径链接)
修改·规范2数据库说明.md、框架/标准化复盘生成流程.md(新增硬闸门 G1–G5 + v1.1)
修改·定义2概念/A-B-C阈值.md、资产/黄金.md
修改·脚本1refactor_md_ios.py(移除重复 🟠 键)
删除0未删除任何文件;未删除任何价格记录

修复原则(重要)

  1. 只改派生值,不改观测值:涨跌%、连续交易日、动量序列、实际利率恒等式——均可由已记录的收盘价推出,故直接重算。
  2. 绝不编造行情:08-27→09-08 的黄金/DXY/VIX/WTI/利率数值原样保留并标注 extrapolated。这些数字仍然是假的,只是不再假装是真的,也不再被派生指标二次放大。
  3. 历史错误保留可见:MOC 用删除线保留原文并说明为何错,不做无痕改写。