Skip to content

Repository files navigation

ChronosGuard-TS

ChronosGuard CI

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。

项目仓库:nikashen/ChronosGuard-TS

在线演示:GitHub Pages 操作台(静态 synthetic_toy fixture;不发布真实 NASA/ETT 行级数据)

招聘方快速入口:v0.3 正式 Release · 一页式案例 · 简历与面试材料 · ETT v0.3 冻结报告 · 机器可核验作品集事实

60 秒演示

ChronosGuard desktop operations console

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 8070

macOS / 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;明确不是因果根因解释。
  • 本地可信 joblib bundle、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.mdARCHITECTURE.mdONLINE_PROTOCOL.md

Synthetic v0.1 结果

固定配置: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。

NASA SMAP/MSL v0.2 真实数据结果

固定 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

NASA audited-subset event burden

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。

ETT v0.3 rolling-origin 真实预测结果

固定作者仓库 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

ETT Ridge versus compact PatchTST MAE

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 表格复现。

v0.4 development 与 H2/M2 v1 处置

ETTh2/ETTm2 使用独立 manifest 和 raw 目录,不复用或覆盖 v0.3 H1/M1 证据。来源字节、时间结构和许可证边界见 source audit,完整处置见 v0.4 development historypost-Test failure report

.\scripts\run_project.ps1 ett-external-download
.\scripts\run_project.ps1 ett-external-audit

H2/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。

Candidate to verifier evidence lifecycle

移动端保持同一组证据和交互:

ChronosGuard mobile operations console

上图为 Chrome 390×900 的真实移动 viewport;synthetic_toy、ordered Selection / frozen Test 边界均完整显示。Frozen Test 隐藏写操作,切换到 Live replay 后才开放状态变更;它 不代表真实设备或生产监控。

CLI 与 API

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 /health
  • GET /api/bootstrap?view=backtest|live
  • GET /api/report
  • GET /api/online/status
  • POST /api/replay
  • POST /api/online/score
  • POST /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.js

chronosguard-v0.3.0-ett-rolling 发布快照为 105/105 PASS。当前 0.4.0.dev0 分支收集 203 项:201 passed, 2 skipped;两个 skip 都是 当前 Windows 环境无符号链接权限的路径门禁用例。另有一个上游 FastAPI TestClient/Starlette 弃用警告,不影响功能。

License

原创代码采用 MIT License。第三方数据不随仓库分发,并继续遵循其原始许可; 来源、许可与不再分发边界见 THIRD_PARTY_NOTICES.md

About

Leakage-aware time-series evaluation, conformal anomaly detection, and online replay

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages