ChronosGuard-TS 是一个面向时间序列算法与 ML Engineering 岗位的泄漏约束评估和在线诊断回放项目。它把严格时间切分、多步预测、split-conformal 区间、残差告警、事件级评估、artifact 证据链和在线回放放进同一条可复现链路;它是工程与评估原型,不是生产监控平台。
当前 main 为 0.4.0.dev0;最新冻结发布快照为 chronosguard-v0.3.0-ett-rolling(commit ce535d5)。v0.2 已完成 NASA SMAP/MSL audited 80-channel subset 评估,v0.3 已完成 ETTh1/ETTm1 四折 rolling-origin 预注册比较。两个真实阶段都保留负结果,不包装为生产可用或通用模型优势。v0.4 曾对 ETTh2/ETTm2 执行一次 formal Test,但独立 verifier 发现 33 个 staging 路径字段而拒绝发布;原 70-file artifact 保持不变,指标未获授权且 v1 永久关闭。future-v2 的 pending candidate → independent verifier → durable receipt 仍是 fail-closed scaffold,当前没有 v2 run 或 receipt。
在线演示:GitHub Pages 操作台(静态 synthetic_toy fixture;不发布真实 NASA/ETT 行级数据)
招聘方快速入口:v0.3 正式 Release · 一页式案例 · 简历与面试材料 · ETT v0.3 冻结报告 · 机器可核验作品集事实
Chrome 1440×1000 的真实
synthetic_toy工作台。Backtest 是只读 frozen Test; 模型由 ordered Selection MAE 选出,Test 指标只用于冻结后的评估。真实 NASA/ETT 结果不混入 toy 界面,统一由提交的 aggregate report 和作品集事实文件提供。
| 招聘方可快速核验的结论 | 冻结证据 |
|---|---|
| 强线性基线不能省略 | Compact PatchTST 仅在 1/8 个 ETT MAE 比较中胜 Ridge |
| 高召回不等于可部署 | NASA 匹配 92/103 events,但产生 3,309 个 false-events |
| 训练成功不等于结果可发布 | H2/M2 verifier 拦截 33 个 staging-path 字段 |
Windows PowerShell:
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[serve]"
.\.venv\Scripts\chronosguard.exe serve --port 8070macOS / Linux:
python3.11 -m venv .venv
.venv/bin/python -m pip install -e ".[serve]"
.venv/bin/chronosguard serve --port 8070浏览器打开 http://127.0.0.1:8070/。先查看 frozen Backtest,再切换到 Live replay
执行 replay、manual reading 与 reset;默认 artifact 不存在时服务使用内存中的
synthetic toy,不需要先训练或下载真实数据。
- 严格递增时间轴、有限值、唯一特征名和异常标签/原因一致性校验。
- Train / ordered Selection / Conformal / frozen Test 四阶段目标边界。
- 只使用过去
48点预测未来6点,任何目标 horizon 都不会跨分区。 - Seasonal Naive、Ridge Window AR、HistGradientBoosting Window 三种候选。
- 每个 horizon/feature 独立的有限样本 split-conformal 90% 区间。
- Calibration-only 多变量标准化残差分数和固定阈值。
- 不使用真实标签扩张预测点的事件合并、事件 F1 与检测延迟。
- Top-K residual feature ranking;明确不是因果根因解释。
- 本地可信
joblibbundle、score-before-commit、幂等、迟到拒绝、回放和重置。 - FastAPI + Canvas 运维工作台,支持 Backtest、Step、Replay、手工 reading 和移动端。
- NASA SMAP/MSL value-only 盲打分与 annotation-only 评估分离;原始标签缺陷显式 fail-closed/排除。
- ETT 四折 expanding-origin、Train-only scaler、Selection early stopping、经验区间校准、target-free Test forecast 冻结和充分统计量重算。
- ETTh2/ETTm2 隔离来源审计、多 seed 编排和 safetensors 门禁;独立 verifier 阻止了路径元数据无效的 v1 指标发布,后续版本默认 fail-closed。
deterministic telemetry / future public adapter
|
v
manifest + data audit
|
v
causal lookback/target windows
|
Train -> Selection -> Conformal -> Test once
| | |
| | +-> intervals + alert threshold
| +-> candidate ranking
v
Seasonal / Ridge / HGB forecasts
|
+-> strict JSON report
+-> trusted local model bundle
|
v
FastAPI online replay -> operations console
协议详见 DATA_PROTOCOL.md、ARCHITECTURE.md 和 ONLINE_PROTOCOL.md。
固定配置:seed 17、720 个小时、4 个变量、lookback 48、horizon 6。模型只在 Train 拟合;Selection 按 MAE 选模型;之后的独立 Conformal 段拟合区间和残差阈值;Test 只评估一次。
聚合机器证据见 synthetic_v1_summary.json,Run ID 为 9365b78dc84ed818;报告明确记录测量代码提交与干净工作区状态,不包含逐行 series。
| Model | Selection MAE | Test MAE | Test RMSE | 90% Coverage | Point F1 | Event F1 |
|---|---|---|---|---|---|---|
| Seasonal Naive | 0.3417 | 0.2336 | 0.5425 | 0.9119 | 0.4808 | 0.6667 |
| Ridge Window AR | 0.7946 | 0.5149 | 0.7612 | 0.9547 | 0.3146 | 0.5000 |
| HistGradientBoosting Window | 0.5377 | 0.3938 | 0.5627 | 0.8516 | 0.4348 | 0.4000 |
Seasonal Naive 被 Selection 选择。这个结果保留了“简单周期基线优于复杂候选”的负面结论,没有把模型复杂度包装成提升。Event F1 使用预先固定的 6 小时 truth-independent alert grouping;Point F1 仍使用原始预测点,不做 ground-truth point adjustment。
固定 Kaggle v1 archive 经 SHA-256 和完整 165-file tree 复核。上游 annotation CSV 冲突重复 P-2、缺失 T-10;ChronosGuard 在 annotation 文件物理移出目录时完成全部 82 个通道盲打分,监督主指标只覆盖 80 个恰有一行 annotation 的通道。完整报告见 nasa_smap_msl_v1.md 与 机器 JSON。
| Scope | Channels / points | Raw Point P/R/F1 | Predicted / true events | Event P/R/F1 |
|---|---|---|---|---|
| SMAP | 53 / 427,617 | 0.2454 / 0.5165 / 0.3328 | 3,046 / 67 | 0.0197 / 0.8955 / 0.0385 |
| MSL | 27 / 73,729 | 0.1103 / 0.2526 / 0.1536 | 355 / 36 | 0.0901 / 0.8889 / 0.1637 |
| Pooled audited subset | 80 / 501,346 | 0.2274 / 0.4837 / 0.3093 | 3,401 / 103 | 0.0271 / 0.8932 / 0.0525 |
Point 指标不做 point adjustment;Event 使用 gap=0 的预测侧连续分组和一对一最大匹配。总体 132,894 个 raw alerts、26.5% alert rate、3,309 个 false-alert events,说明 calibration 0.995 固定阈值虽然覆盖 92/103 个事件,却产生不可接受的告警碎片。该 v1 协议不会在看过 Test 后改阈值重跑。
上游文件明确使用 Test extrema 预缩放,因此只能写“供应方预处理后的 Test-label-blind 评估”,不能写原始链路绝对无泄漏;本结果也不是 full 82-channel reproduction,且指标定义与 Telemanom 论文 headline 不可直接横比。
Python 要求 3.10-3.12。以下流程面向开发者和审查者,会安装测试与模型依赖并生成 完整 toy artifact;首次查看界面只需使用前面的 60 秒演示命令。
# 在 ChronosGuard-TS 仓库根目录执行以下命令。
# 建议使用独立 Python 3.11 环境。
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev,serve]"
# 运行测试、核验作品集事实并生成完整 toy 工件。
.\scripts\run_project.ps1 test
.\.venv\Scripts\python.exe scripts\generate_portfolio_assets.py --check
.\scripts\run_project.ps1 smoke -Output artifacts\demo
# 启动工作台。
.\scripts\run_project.ps1 serve -Artifact artifacts\demo -Port 8070浏览器打开 http://127.0.0.1:8070/。
NASA v0.2 使用用户侧下载的固定 Kaggle v1 archive,raw bytes 不进入 Git 或 wheel:
.\scripts\run_project.ps1 nasa-download
.\scripts\run_project.ps1 nasa-audit
.\scripts\run_project.ps1 nasa-score -Output artifacts\nasa_smap_msl_v1_blind
.\scripts\run_project.ps1 nasa-evaluate `
-Artifact artifacts\nasa_smap_msl_v1_blind `
-Output reports\nasa_smap_msl_v1.json完整冻结协议见 NASA_PROTOCOL.md。上游文件使用 Test extrema 预缩放,且标签 CSV 冲突重复 P-2、缺失 T-10;因此正式主指标只允许写成 audited 80-channel subset,不能写 full 82-channel reproduction。
固定作者仓库 commit、CC BY-ND 4.0 根许可证文本与 ETTh1/ETTm1 精确 CSV 字节;采用 OT-only、336-step lookback、单个 720-step direct output 的 96/192/336/720 对齐前缀。每个数据集 4 个 expanding folds,严格分离 Train/Selection/Conformal/Test;所有模型与经验区间先冻结,再持久化不含 actual 的 Test forecast NPZ,最后才物化 Test target。机器报告见 ett_rolling_patchtst_v1.json,解释见 人类报告。
| Dataset | Horizon / duration | Ridge MAE | Compact PatchTST MAE | Relative change |
|---|---|---|---|---|
| ETTh1 | 96 / 4 days | 2.0007 | 2.1691 | +8.42% worse |
| ETTh1 | 192 / 8 days | 2.3238 | 2.5261 | +8.71% worse |
| ETTh1 | 336 / 14 days | 2.5151 | 2.5901 | +2.98% worse |
| ETTh1 | 720 / 30 days | 2.9770 | 2.8538 | -4.14% better |
| ETTm1 | 96 / 1 day | 1.2517 | 1.3207 | +5.51% worse |
| ETTm1 | 192 / 2 days | 1.6019 | 1.6805 | +4.91% worse |
| ETTm1 | 336 / 3.5 days | 1.9099 | 1.9729 | +3.30% worse |
| ETTm1 | 720 / 7.5 days | 2.2165 | 2.2448 | +1.27% worse |
Ridge 是 8 个点上回看 Test MAE 的最强固定基线;这个回看名称不参与训练或重跑。Compact PatchTST 仅胜出 1/8,因此不能写“Transformer 全面提升”。其经验区间覆盖也只有 ETTm1/96 达到 0.90,其余 7/8 低于目标;重叠时序 origins 不满足独立/交换性假设,不能写有限样本 coverage guarantee、置信区间或显著性。
ETT v0.3 使用 commit-pinned ETTh1/ETTm1 原字节;raw rows 与 checkpoint 保持本地 ignored:
.\scripts\run_project.ps1 ett-download
.\scripts\run_project.ps1 ett-audit
# 正式 Test 只能在 docs/ETT_PREREGISTRATION.json 提交且工作树干净后运行:
.\scripts\run_project.ps1 ett-run
.\scripts\run_project.ps1 ett-verify冻结边界见 ETT_PROTOCOL.md。当前实现是 OT-only、单个 720-step direct model 的 96/192/336/720 前缀比较,不是官方 multivariate PatchTST 表格复现。
ETTh2/ETTm2 使用独立 manifest 和 raw 目录,不复用或覆盖 v0.3 H1/M1 证据。来源字节、时间结构和许可证边界见 source audit,完整处置见 v0.4 development history 与 post-Test failure report。
.\scripts\run_project.ps1 ett-external-download
.\scripts\run_project.ps1 ett-external-auditH2/M2 v1 在 clean direct-child preregistration commit 上执行过一次 formal CUDA Test,并生成 30 个 advanced checkpoints、2 个 Ridge states、36 个 target-free forecasts、freeze manifest 和 candidate report。独立 verifier 随后发现 30 个 checkpoint audit path、2 个 Ridge path 和 1 个 freeze path 仍绑定 staging 目录,因此阻止公开报告。按冻结失败策略,v1 未重跑、未替换、未发布任何 H2/M2 指标。
后续开发将 legacy report/v1 与 future report/v2 分离:candidate 只能标记 completed_pending_independent_verification;只有 artifact 外的 no-overwrite receipt 持久化成功才授权发布,内存校验通过仍保持未授权。future runner 还会在首个 Test 指标前原子占用 repository/protocol-wide ledger,使更换 artifact 目录或移动失败目录都不能重开同一协议。当前旧 v1 runner 在 source-row 读取和模型导入前关闭,新的 formal run 必须另建 protocol/config/foundation/preregistration。
移动端保持同一组证据和交互:
上图为 Chrome 390×900 的真实移动 viewport;
synthetic_toy、ordered Selection / frozen Test 边界均完整显示。Frozen Test 隐藏写操作,切换到 Live replay 后才开放状态变更;它 不代表真实设备或生产监控。
chronosguard audit # synthetic manifest 与时间边界审计
chronosguard smoke # 完整 toy 训练、校准、Test 和 bundle;默认写 artifacts/demo
chronosguard run # 默认使用内建 ExperimentConfig;可用 --config 显式覆盖
chronosguard replay # 模型 bundle 在线回放与延迟摘要
chronosguard serve # 优先读取完整 artifacts/demo;不存在时回退内存 synthetic toy
chronosguard ett-download
chronosguard ett-audit
chronosguard ett-run
chronosguard ett-verify
chronosguard ett-external-download # source-only,无预测
chronosguard ett-external-audit # source-only,无预测
chronosguard ett-external-run # legacy v1 已关闭;future protocol 才可执行
chronosguard ett-external-verify --receipt-output PATH # receipt 路径必填且必须在 artifact 外
核心 synthetic 命令可直接从独立 wheel 运行。serve 只在默认 artifact 完全不存在时
回退 synthetic;空目录或只有部分文件仍 fail-closed。NASA/ETT 命令依赖不随 wheel 分发的
protocol、manifest、真实数据或冻结 artifact,需在仓库 checkout 中运行,或传入有效显式路径。
主要 JSON API 接口(另有 GET / 静态工作台):
GET /healthGET /api/bootstrap?view=backtest|liveGET /api/reportGET /api/online/statusPOST /api/replayPOST /api/online/scorePOST /api/online/reset
| 能力 | 状态 | 简历数字 |
|---|---|---|
| 数据契约、因果窗口、模型、区间和事件指标 | 已完成 | 可描述工程能力 |
| Synthetic 训练、在线回放与浏览器界面 | 已完成 | 只能作为 toy 演示 |
| NASA SMAP/MSL 来源、盲打分与评估协议 | 已完成 audited 80-channel baseline | 可引用真实协议与负面结果,不可写生产可用或 full 82-channel reproduction |
| ETT rolling-origin 真实预测 | 2 datasets × 4 folds 正式报告已验证 | 可引用绑定 physical duration 的原单位指标,不跨数据集混算 |
| compact PatchTST 真实比较 | 单 seed、8 个 horizon 比较,胜出 1/8 | 必须保留 Ridge 多数胜出的负结果;不可写官方复现、多 seed 或显著性 |
| v0.4 H2/M2 v1 postmortem | 70-file artifact、33 个 staging path 缺陷被独立 verifier 拦截 | 可描述 evidence lifecycle 与失败保留;不可引用任何 H2/M2 指标 |
| 生产告警收益、故障率和 SLA | 未验证 | 不可声称 |
下一阶段应使用真正未评分的新数据源建立独立 external-forecast v2;H2/M2 已不能再称为 unseen Test。NASA 的任何阈值或告警合并改进也必须另开预注册协议,不能覆盖 v0.2 负结果。
$env:PYTHONPATH = (Resolve-Path .\src).Path
.\.venv\Scripts\python.exe -m pytest -q
.\.venv\Scripts\python.exe -m compileall -q src tests scripts
.\.venv\Scripts\python.exe scripts\generate_portfolio_assets.py --check
node --check src\chronosguard\web\app.jschronosguard-v0.3.0-ett-rolling 发布快照为 105/105 PASS。当前
0.4.0.dev0 分支收集 203 项:201 passed, 2 skipped;两个 skip 都是
当前 Windows 环境无符号链接权限的路径门禁用例。另有一个上游 FastAPI
TestClient/Starlette 弃用警告,不影响功能。
原创代码采用 MIT License。第三方数据不随仓库分发,并继续遵循其原始许可; 来源、许可与不再分发边界见 THIRD_PARTY_NOTICES.md。

