在建模前发现会影响结论的数据问题,并给出可复核证据。
一句话:能源数据界的"尽调"工具——在任何人用这份数据训练模型、写论文、做交易决策之前,先回答三个致命问题:文件真的完整吗?这些户号真的是同一户吗?单位声明和数值真的相符吗? 每个结论附带可复核的证据链,不把"未验证"包装成"通过"。
这个工具的第一个战果是抓了我们自己:旗舰调查 LCL-SOURCE-RECOVERY.md 记录了如何发现一份公开发布、被广泛使用的 6 千万行能源数据集存在静默归一化(数值根本不是 kWh)与时间错位,并从官方 168 个分区完整恢复了真实数据。如果你用那份清洗版训练过模型——你的模型学到的是错的世界。
当前聚焦三个问题:文件损坏或截断、跨文件户号身份未知、能量与功率单位混用。检查只读输入,输出 JSON、Markdown 和 HTML(报告目录需在输入数据目录之外);不以单一质量分数认证数据。
为谁而做:用公开能源数据训练模型的研究者与企业团队、数据要素市场的数据买方、发布数据集的平台与主办方。商业叙事与落地方向见 docs/商业叙事与落地.md。
完整恢复报告:2013 年全部官方分区已恢复,共 93,087,837 条记录;2012 年重建了 5,552 户的分级映射。另发现旧 2012 文件归一化和时间错位,相关物理指标已撤回,后续使用官方原始数据。
- 2013 年文件与上游参考哈希一致,但文件本身被截断。
- 2012 年户号被编码为整数;现已重建映射,并明确区分读数匹配与依赖编码规则的证据。
- kWh 读数曾直接与 W 阈值比较;10,781 个通道的清单字段单位描述也存在冲突,已保留修复前后证据。
Python ≥ 3.11:
python3 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'
.venv/bin/pytest -q
.venv/bin/python scripts/reproduce_trust_cases.py最小案例使用合成样本,无需下载原数据;合成异常与真实证据明确区分。
.venv/bin/oed check source1.feather source2.feather -o checks/sources .venv/bin/oed check --dataset runs/lcl-original-ids-partial -o checks/dataset
可加 --checksums reference-sha256.json 比对参考版本,JSON 格式为文件名到 SHA-256 的映射。无参考哈希时显式标记 unknown。
发现阻断项时退出码 2;无阻断项时退出码 0,但报告可能是 review_required。CI 必须按所需检查项读取 JSON,不能把退出码 0 当作数据认证。
- Feather V2 / Arrow IPC:流式遍历批次、结构校验、参考哈希比对。
- LCLid:报告类型和样本,识别不兼容表示;不验证外部户号映射。
- OED 清单:schema、能量/功率单位与字段描述一致性、换算区间有效性。
- 实际 Parquet 内容:逐文件哈希、UTC 时间严格递增、必要列与类型、空时间、NaN/Inf 和质量标记检查。
- 内容检查已在 10,781 个文件、95,181,051 条读数上运行,结果与边界见 内容检查记录。
- 未验证:源测量是否准确、原始单位声明是否真实、完整覆盖范围、时区与户号映射。通过部分检查仍需这些外部证据。
工具保留转换、扫描、规则、预测基准等实验功能。它们不等同于本轮可信性检查:原质量分数未按时长归一化,原预测基准协议仍需统一,不能据此宣称模型排名或数据完整可信。
当前 69 项测试通过,覆盖文件损坏、哈希匹配但结构失败、身份表示冲突、未知项保留、单位换算及报告不覆盖输入等情况。
本机处理了 95,181,051 条去重读数;2013 只恢复了可解码批次,2012 户号独立隔离。因此不是完整 5,567 户跨年数据集。详见 大规模运行记录 和 Mac 操作手册。
真实检查报告在 cases/real-checks/,参考快照在 cases/evidence/。源码包包含三个小案例和证据报告,不包含全部大规模原始文件或 runs/ 数据。
下一步优先验证真实使用者能否借助这些检查避免错误分析;取得完整源文件与户号映射后,再扩展身份验证和覆盖范围检查。
历史项目介绍保存在 docs/PROJECT-ORIGIN.md,其中历史数字与计划不代表当前完成状态。