tyaro/banto-ai

Industrial AI research for forecasting, anomaly detection, adaptive commissioning, and predictive analytics within the Banto ecosystem.

0

stars

123

commits

Python

primary language

Sep 6, 2026

updated

README

banto-ai

Banto ecosystem における、予測・異常検知・適応型試運転・予知分析のための Industrial AI 研究リポジトリです。

このリポジトリは banto-industrial から意図的に分離しています。実験、評価プロトコル、モデル試作、連携契約を扱う研究用ワークスペースです。生産設備の制御動作は、Banto Hub と PLC/制御システムが引き続き担当します。

現在の研究基盤には、外部依存ゼロの共通benchmark runner、統計baseline、モデル別の隔離実行環境があります。TimesFM 3.0は研究比較専用、Chronos-2はcommercial-evaluationとして、専用環境でCPU smoke、合成データ、MetroPT-3限定rolling-origin benchmarkを実行済みです。Toto 2.0 4Mも同じForecaster/MetroPT契約でCPU smokeとMetroPT-3 rolling-origin benchmarkを実行済みです。core runtimeへML依存は混入させていません。今回の結果は実設備一般の性能を示しません。

研究テーマ

テーマ最初に検証する問い
時系列 foundation model 評価TimesFM-3、Chronos-2、Toto、Granite TTMなどは、産業設備に近い信号で単純なbaselineを上回るか?
自前の時系列 Transformer内部を理解・検証できる最小限の多変量予測モデルは何か?
多変量・分位点予測点予測だけでなく、校正された予測範囲を出せるか?
異常検知予測残差や正常エンベロープで、誤警報を抑えつつドリフトを早期検知できるか?
Continual learning異常データが「正常」を汚染することなくモデルを適応させられるか?
Commissioning auto-tuning構造化された試運転レシピから、安全でレビュー可能な設備プロファイルを作れるか?
合成産業データ顧客データがない段階でも、現実的でラベル付きの信号を生成できるか?
Banto Hub 連携本番導入に必要な read-only、shadow、承認済み引き渡しの境界は何か?

基本方針

  • 顧客データはこのリポジトリにコミットしません。合成データまたは再配布が明確に許可された公開データだけを使います。
  • 研究成果はレビューと明示的な昇格が完了するまで、助言情報として扱います。
  • PLC の安全ロジック、インターロック、非常停止、ハード保護上限は、AI レイヤーの外側で常に優先されます。
  • 本番中の適応処理はデフォルトで無効にします。試運転モードと shadow モードは明示的な状態として扱います。
  • すべての結果に、データの出所、設定、コードリビジョン、評価指標、既知の制約を記録します。

event-aware anomaly evaluation v0.2

正式な 10 seed × 12 layout replay と read-only analysis を完了しました。engineering gate は pass でしたが、5つの performance promotion gate はすべて fail のため、この baseline は昇格せず比較用として扱います。詳細は docs/results/anomaly-multiseed-v02-evaluation-2026-09-05.md を参照してください。これは TimesFM3 の性能結果ではありません。

2026-09-06に同じ正式artifactのfailure diagnosticsを完了しました。engineering整合性はpass、performanceは未評価で、canonical detectionを保持した因果的supportは0/240でした。結果と制約はdocs/results/anomaly-multiseed-v02-failure-diagnostics-2026-09-06.mdに記録しています。これはexploratoryな異常検知診断であり、TimesFM3の性能結果やmodel/thresholdの採用判断ではありません。

次のstdlib detector比較はv0.3実装前preregistrationのS0監査に合格し、計画を凍結しました。S1の独立再監査はP0〜P3 0件で合格し、S1は完了しました。S2では3候補の純粋scoring、phase/profile、episode merge、causal matchingとadversarial testsを実装し、S2監査もP0〜P3 0件で合格しました。S3 deterministic runnerも固定inventory、paired materialization、完全ledger、安全停止、provenance、non-overwrite publisherを実装し、S3監査はP0〜P3 0件、S3_READY=yesINTEGRATION_READY=yesです。CI run 34044283016はPython 3.12/3.14の全工程greenでした。S3は安全な再現実行の土台であり、性能結果・本番利用許可ではありません。次はS4 platform/runtime/native Windows acceptanceとdry/smoke consumer freezeで、formal run、性能評価、promotion、formal output rootはS4受入まで閉鎖します。利用境界は評価toolの説明を参照してください。

ライセンス

このリポジトリのソースコードと文書は MIT License です。

研究対象モデルのコードライセンスと学習済み重みのライセンスは別物として管理します。TimesFM 3.0の重みは research-only として扱い、MITのリポジトリライセンスによって利用条件が緩和されることはありません。

リポジトリ構成

文書の現在状態、凍結計画、過去結果、実行手順の読み分けは docs/README.md を入口にしてください。

docs/
  architecture.md                 Banto Hubとの責務境界と成果物フロー
  time-series-model-survey.md     時系列モデル候補、ライセンス、実現可能性の調査
  research-implementation-plan.md 段階的な研究・実装計画と判断gate
  research-roadmap.md             長期的な研究フェーズと完了条件
  timesfm-notes.md                TimesFM 3.0評価プロトコル
  chronos2-notes.md               Chronos-2の隔離・評価契約
  toto2-notes.md                  Toto 2.0 4Mの隔離・評価契約
  public-dataset-survey.md        公開産業時系列データの選定と取得境界
  results/                        実測結果(合成/研究専用)
  adr-0003-timesfm3-isolation.md  TimesFM 3.0の依存・実行隔離
  adr-0004-chronos2-isolation.md  Chronos-2の依存・実行隔離
  adr-0005-public-dataset-boundary.md 公開データのsource pinと変換境界
  commissioning-learning.md       試運転・校正・昇格の設計
  initial-issues.md                最初に作成するIssue 5件の案
schemas/                       manifestを検証するJSON Schema
examples/                     安全な合成fixtureとsample manifest
src/banto_ai/                  外部依存なしのPhase 0共通runtime
tests/                         Python標準unittest
experiments/
  timesfm3/                    foundation model のベンチマーク
  synthetic-data/              産業設備に近いデータの再現可能な生成
  online-learning/             適応とドリフトの実験
environments/
  timesfm3/                    専用venv向け入力とpackage/checkpoint来歴
  chronos2/                    Python 3.14 CPU専用lockと固定証跡
  toto2/                      Toto 2.0 4Mの専用lockと固定証跡
models/
  mini-transformer/            小さく検証しやすい予測ベースライン
  industrial-tsfm/             産業向けモデルの研究
datasets/                      データポリシーとローカル配置
tools/
  smoke.py                    clean checkout用のmanifest/naive smoke
  safety_check.py             repository safety guard
  timesfm3/                   TimesFM 3のpreflight/準備/offline CPU smoke
  chronos2/                   Chronos-2のpreflight/準備/smoke/benchmark
  toto2/                      Toto 2.0 4Mのpreflight/準備/offline CPU smoke/benchmark
  data-generator/              データ生成ユーティリティ
  evaluator/                   共通の評価指標とレポート

進め方

  1. 非公開データや顧客データはリポジトリ外に置き、ローカルのデータ識別子だけを参照します。
  2. 新しいベンチマーク結果を追加する前に、小さな experiment manifest を作成します。
  3. 改善を主張する前に、単純なベースラインと比較します。
  4. モデル成果物には、設定と評価レポートを必ず添付します。
  5. 実験を PLC に直接接続したり、制御パラメータを自動書き込みしたりしません。

次の一歩

最初の実装マイルストーンは、合成産業データ上で naive/古典的 baseline と複数の時系列モデルを同条件で比較できる、再現可能なベンチマークです。

現時点では TimesFM 3.0 の学習済み重みは非商用・非本番用途に限定されるため、研究比較専用とします。商用利用可能候補として Chronos-2、Toto 2.0、Granite TTM/TSPulseなどを同時に評価します。

Chronos-2初期評価

Chronos-2は固定checkpointのsize/SHA-256検証、公式API direct CPU smoke、Banto tool smoke、past-only/known-futureの初期rolling benchmarkまで完了しました。provenance拡張後のBanto tool smoke正本はartifacts/chronos2/cpu-smoke-provenance-2026-09-04.jsonで、verification_status=verified、cold elapsed 12.057009100011783秒です。known-future 7 modelsではaggregate MAE 0.1691488806622826、WIS 0.15937026919725228で1位でしたが、単一seed・少数origin・合成データの結果です。known-futureはorigin時点で確定済みの計画値を模した条件に限り、実績値の先読みを認めません。詳細はdocs/results/chronos2-initial-evaluation-2026-09-04.mdを参照してください。

公開実データの第一候補はUCI MetroPT-3、次候補はUCI hydraulic systemsです。MetroPT-3はsource pin toolで実archive検証済みで、status=cached_verifiedverification_status=verifiedです。正本manifestはdatasets/manifests/metropt3-source.json、手順はtools/public-data/README.md、CLIはtools/public-data/prepare_metropt3.pyです。SHA-256・member hash・license・source revision・verified_atを固定し、raw dataはGitへ置きません。標準化datasetの取込、Public-only quality gate、統計baseline、Chronos-2、TimesFM 3.0の限定forecast評価が完了し、実測結果はdocs/results/metropt3-import-2026-09-04.mddocs/results/chronos2-metropt3-evaluation-2026-09-04.mddocs/results/timesfm3-metropt3-evaluation-2026-09-04.mdに記録しました。詳細はdocs/public-dataset-survey.mddocs/adr-0005-public-dataset-boundary.mdを参照してください。

Python 3.14専用venvとrepository外cacheで再現します。各runは既存出力を上書きしないため、cleanなartifact pathで実行してください。

py -3.14 -m venv ..\.venv-banto-ai-chronos2
$chronosPython = '..\.venv-banto-ai-chronos2\Scripts\python.exe'
& $chronosPython -m pip install -r environments\chronos2\requirements-windows-cpu-py314.lock
& $chronosPython tools\chronos2\preflight.py --cache-dir C:\banto-cache\chronos2 --format both
& $chronosPython tools\chronos2\prepare_checkpoint.py --cache-dir C:\banto-cache\chronos2 --accept-apache-2.0
& $chronosPython tools\chronos2\run_smoke.py --cache-dir C:\banto-cache\chronos2 --output artifacts\chronos2\cpu-smoke-provenance-2026-09-04.json
& $chronosPython tools\data-generator\generate.py --config examples\configs\synthetic-motor-small.json --output artifacts\generated\synthetic-motor-small
& $chronosPython tools\chronos2\run_benchmark.py --config examples\configs\benchmark-chronos2-baselines-past-only.json --cache-dir C:\banto-cache\chronos2
& $chronosPython tools\chronos2\run_benchmark.py --config examples\configs\benchmark-chronos2-known-load.json --cache-dir C:\banto-cache\chronos2
& $chronosPython tools\chronos2\run_matrix.py --config examples/configs/benchmark-matrix-chronos2-small.json --cache-dir C:\banto-cache\chronos2

Chronos-2 matrix設定はseeds [17, 42]×horizons [1, 3]×context lengths [6, 12]の8 cellsです。base benchmarkのmodel parameter context_length=12はChronos backendに渡す入力上限で、matrix axisのcontext lengthは各cellの実入力長です。6と12はいずれも上限内です。Chronos専用のdataset/benchmark/matrix出力を使い、既存出力は上書きしません。実model matrixは8/8 cells success/0 failureで、結果はdocs/results/chronos2-matrix-2026-09-04.mdに記録しています。

Chronos-2はApache-2.0ですが、今回のmatrixは2 seed・合成データ・CPUのみの小標本です。欠損・regime・fault評価、origin拡大、known-future計画値契約は未実施です。拡張した評価条件をclean savepointから再実行することも未実施です。commercial-evaluationを継続し、まだproduct-candidateへ昇格しません。

TimesFM 3.0の共通Forecaster adapter、official APIの遅延import境界、license/provenance検証、fake backend testsは実装済みです。公式backendはadapterごとに初回forecast時だけロードし、以後は安全に再利用します。benchmark coreにはoptional modelを注入するregistry境界があり、通常のbaseline CLI/CIからtimesfmtorchnumpyはimportされません。environments/timesfm3/requirements.intimesfm[torch]==3.0.0のtop-level exact pinであり、完全なtransitive lockではありません。専用環境でのCPU smokeと、LastValueとの小規模rolling-origin benchmark結果は記録済みです。ただし、単一generator、少数origin、短いcontext/horizon、弱いbaselineによる限定評価であり、一般性能と実設備性能は未評価です。

正式CPU smoke 2回の測定値は docs/results/timesfm3-cpu-smoke-2026-09-04.md に記録しています。単一synthetic windowの結果であり、実設備性能や製品採否を示しません。

rolling-origin benchmarkの実測値は docs/results/timesfm3-rolling-benchmark-2026-09-04.md に記録しています。clean savepointから実行したrun3をprimary reproducibility runとし、run1/run2はdirty pre-savepointの再現性確認として残しています。TimesFM 3.0はこの限定条件のcomposite値でpoint forecastとWISがLastValueを上回りましたが、native intervalのcoverageはnominal 80%未達です。AとdegCの異なる単位を混合した値のため、物理量としての直接解釈やtarget構成の異なるrunとの比較は行いません。結果はPhase 2完了や製品採用の根拠ではありません。

統計baselineを含むpast-only/known-loadのtarget別比較は docs/results/timesfm3-baselines-comparison-2026-09-04.md に記録しています。known-loadは計画値をorigin時点で取得できるsynthetic oracle-styleの別scenarioであり、実績先読みや本番効果を意味しません。MetroPT-3のTimesFM 3.0比較は docs/results/timesfm3-metropt3-evaluation-2026-09-04.md に記録しています。TimesFM 3.0はこの限定条件で3 targetすべてのMAE/RMSE/WISが最良でしたが、Phase 2完了・採用判断には進みません。次は複数seed/horizon/context/origin、モデル単独resource測定、ライセンス適合候補との同一契約比較です。

複数seed/horizon/contextを反復するmatrix runnerを追加しました。seedはrun metadataだけでなくgenerator configへ反映し、seedごとにdatasetを一度生成・品質確認して各cellで再利用します。dataset fingerprintに加えてobservations.jsonl自体のSHA-256を記録し、異seedで観測内容が同一なら停止します。出力の主集計は単位を分離したby_model_targetのseed間cell-macro summaryであり、raw predictionのpooled metricではありません。base configのraw bytes hashと開始code revisionを固定し、cell終了時・matrix publish直前まで不変であることを検証します。これは評価範囲拡大の基盤で、Phase 2完了を意味しません。

2 seeds×2 horizons×2 context lengthsの実TimesFM matrixは8 cellsすべて成功し、結果を docs/results/timesfm3-matrix-2026-09-04.md に記録しました。TimesFM 3.0は温度の4条件でMAE最良でしたが、電流では4条件ともmoving-average等に劣りました。2 seeds・少数originのcell-macroであり、Phase 2完了や製品採用の根拠にはしません。MetroPT-3同一契約比較は完了済みで、次はseed/origin/条件の拡大、cold/warmとモデル単独resourceの分離、欠損・regime・fault slice、ライセンス適合候補との同一契約比較です。

Toto 2.0 4M は tools/toto2/README.md の専用環境・外部cacheから実行します。MetroPT-3のcontext=120、horizon=15、target 3、past-only covariate 11は変更せず、adapter内の先頭8点paddingだけでpatch_size=32のeffective input length=128へ揃えます。実smokeと数値benchmarkは完了し、結果を docs/results/toto2-metropt3-evaluation-2026-09-04.md に記録しました。Totoのknown-future/exogenous requestは拒否します。さらに、2 seeds×2 horizons×2 context lengthsのToto 4M matrixも8/8 cells successで完了し、正本とtarget別metrics、runtime、制約を docs/results/toto2-matrix-2026-09-04.md に記録しました。次はseed/origin拡大、missing/stale/fault/regime slice、model-only resource測定、22M、公開/実設備一般化です。

controlled evaluation の受入境界は docs/toto2-controlled-scenarios.md に定義しています。2026-09-05にcontrol、target fault、target quality、covariate qualityの4 trackを、seed 17/29/42/73/101、horizon 15/30、context 64/120、test origin 384で実行し、4 matrix各20/20 success、acceptance passとなりました。各matrix 10,800 predictions、計43,200、cross-model rankingは禁止です。正式なhash、paired delta、runtime、制約は docs/results/toto2-controlled-evaluation-2026-09-05.md に記録しています。これはsynthetic/4M/CPUの受入結果であり、実設備性能やPhase 2完了、製品採用を示しません。実行順は4 matrix → analyzerで、コマンドは tools/toto2/README.md に記載しています。

Phase 0の実行確認は、外部依存を導入せず python tools/smoke.pypython tools/safety_check.py で行えます。Phase 1の最小generatorは次で実行できます。

TimesFM 3の実評価は、リポジトリ外のcacheを明示して次の順に実行します。checkpoint準備だけがdownloadを行い、smokeはlocal_files_only=Trueでcache miss時に停止します。

python tools/timesfm3/preflight.py --cache-dir C:\banto-cache\timesfm3 --format both
python tools/timesfm3/prepare_checkpoint.py --cache-dir C:\banto-cache\timesfm3 --accept-research-only-license
python tools/timesfm3/run_smoke.py --cache-dir C:\banto-cache\timesfm3 --output artifacts\timesfm3\cpu-smoke.json

このrunはresearch-only/non-productionであり、Banto Hub/PLCへのwrite pathを持ちません。実測値はartifactと結果文書へ記録し、単一windowの結果を一般性能として扱いません。

TimesFM 3をrolling-origin benchmarkへ接続する場合は、専用venvで次を実行します。prepare_checkpoint.pyで取得・検証済みの、リポジトリ外cacheだけを指定してください。実行時はlicense acceptance、固定revision、checkpointのサイズ/SHA-256、インストール済みtimesfm==3.0.0を確認し、ネットワークを禁止します。

python tools/data-generator/generate.py --config examples/configs/synthetic-motor-small.json --output artifacts/generated/synthetic-motor-small
python tools/timesfm3/run_benchmark.py --config examples/configs/benchmark-timesfm3-small.json --cache-dir C:\banto-cache\timesfm3 --accept-research-only-license

小規模matrixは同じ専用venvとcacheで次のように実行します。sampleはpast-onlyを標準とし、2 seeds×2 horizons×2 context lengthsの8 cellsです。既存のdataset/cell/matrix出力は上書きしません。

python tools/timesfm3/run_matrix.py --config examples/configs/benchmark-matrix-timesfm3-small.json --cache-dir C:\banto-cache\timesfm3 --accept-research-only-license

benchmark-timesfm3-small.jsonはLastValueとTimesFM 3を同じequipment/origin/targetで比較します。validation/test originは高コスト実モデル向けに決定的なstrideと最大数を設定し、その選択結果はresult.jsonのprovenanceへ保存します。TimesFM 3はnative quantile、baselineはvalidation residual by leadを使います。今回のsampleでは将来のload_proxyを本番で計画値として確実に知れる前提を置かず、全covariateをpast-onlyにしています。このため既知将来値を使う実験は、計画値であることを別途データ契約に明記したconfigで行います。

python tools/data-generator/generate.py --config examples/configs/synthetic-motor-small.json --output artifacts/generated/synthetic-motor-small
python tools/data-generator/check_quality.py --dataset artifacts/generated/synthetic-motor-small
python tools/evaluator/run_benchmark.py --config examples/configs/benchmark-small.json

上記はsrc layoutのclean checkoutから実行する標準手順です。python -m banto_ai ... を使う場合は、先に python -m pip install -e . --no-deps を実行してください。

出力先の既定値は artifacts/generated/<dataset_id> です。既存ディレクトリは上書きせず、観測値、ground-truth event、generator config、dataset/split manifest、fingerprint、summaryを分離して出力します。[start,end) のinterval境界、UTC timestamp、equipmentごとのstrictly increasing timestamp、canonical JSON/JSONLの順序とSHA-256計算方法を記録します。quality checkerはcatalogのsampling interval、unit、quality keys、event構造、splitの完全被覆・record_count、generator configとのsemantic consistency、fingerprint整合性、future leakageを検査します。

Windowsを含む開発手順とモデル別のplanned environmentは CONTRIBUTING.md に記載しています。

調査結果は docs/time-series-model-survey.md、具体的な作業計画は docs/research-implementation-plan.md、Issue案は docs/initial-issues.md を参照してください。

Toto event slice post-hoc解析

既存Toto 2.0 4M matrix予測のevent slice post-hoc解析も完了しました。8/8 cells analyzed、excluded 0、8,640 predictionsで、motor_current faultのforecast未coverを含む解釈上の限界を docs/results/toto2-event-slices-2026-09-04.md に記録しています。再推論なしの研究用集計であり、anomaly detection性能、missing/stale robustness、実設備一般化、製品昇格を示しません。次はfault target専用scenario、missing/stale専用評価、seed/origin/event位置拡大です。Phase 2は未完了です。

ステータス

Phase 0 research foundation implemented。Phase 1 savepoint 1(seed再現可能synthetic industrial data generator)とSavepoint 2(共通benchmark runner/統計baseline)を実装済みです。TimesFM 3.0はCPU smoke、小規模rolling-origin benchmark、8-cell matrix、MetroPT-3同一契約比較を実行済みです。Chronos-2は固定snapshot検証、公式API/Banto tool CPU smoke、past-only 6 models/known-future 7 modelsの初期rolling benchmark、実model 8-cell matrix、MetroPT-3公開実データのnative/point-calibrated評価を実行済みです。Toto 2.0 4Mは固定snapshot検証、CPU smoke、MetroPT-3公開実データの6 model/3 target評価、2 seeds×2 horizons×2 context lengthsの8-cell matrix、formal controlled 4-track acceptanceを実行済みです。MetroPT-3評価は24時間・1設備・16 test origins・単一CPU・forecast-onlyの限定条件で、Chronos nativeはpartial、Chronos point-calibrated、TimesFM 3.0、Toto 2.0 4Mはsuccessでした。Toto controlledは4 matrix各20/20 success、80/80 cells、acceptance passですが、synthetic/4M/CPUの契約受入であり、実設備性能やmodel採用判断を示しません。詳細はdocs/results/toto2-metropt3-evaluation-2026-09-04.mddocs/results/toto2-matrix-2026-09-04.mddocs/results/toto2-controlled-evaluation-2026-09-05.mddocs/results/timesfm3-metropt3-evaluation-2026-09-04.mddocs/results/chronos2-metropt3-evaluation-2026-09-04.mdを参照してください。origin/日/設備拡大、model単独resourceの分離評価、欠損・regime・fault slice、known-future対past-onlyの追加比較、Chronos再実行の再現性は次工程です。Phase 2は完了していません。本番デプロイ経路も未実装です。

合成データは研究用の制御されたfixtureであり、実設備の挙動を代表すると主張しません。顧客データ、raw設備データ、秘密情報は生成物・設定・Git履歴へ入れません。大量生成データはGit無視領域へ置き、commit対象は小さいconfig/fixtureだけにします。

Contributors

tyaro

123 commits

tyaro/banto-ai

Industrial AI research for forecasting, anomaly detection, adaptive commissioning, and predictive analytics within the Banto ecosystem.

0

stars

123

commits

Python

primary language

Sep 6, 2026

updated

README

banto-ai

Banto ecosystem における、予測・異常検知・適応型試運転・予知分析のための Industrial AI 研究リポジトリです。

このリポジトリは banto-industrial から意図的に分離しています。実験、評価プロトコル、モデル試作、連携契約を扱う研究用ワークスペースです。生産設備の制御動作は、Banto Hub と PLC/制御システムが引き続き担当します。

現在の研究基盤には、外部依存ゼロの共通benchmark runner、統計baseline、モデル別の隔離実行環境があります。TimesFM 3.0は研究比較専用、Chronos-2はcommercial-evaluationとして、専用環境でCPU smoke、合成データ、MetroPT-3限定rolling-origin benchmarkを実行済みです。Toto 2.0 4Mも同じForecaster/MetroPT契約でCPU smokeとMetroPT-3 rolling-origin benchmarkを実行済みです。core runtimeへML依存は混入させていません。今回の結果は実設備一般の性能を示しません。

研究テーマ

テーマ最初に検証する問い
時系列 foundation model 評価TimesFM-3、Chronos-2、Toto、Granite TTMなどは、産業設備に近い信号で単純なbaselineを上回るか?
自前の時系列 Transformer内部を理解・検証できる最小限の多変量予測モデルは何か?
多変量・分位点予測点予測だけでなく、校正された予測範囲を出せるか?
異常検知予測残差や正常エンベロープで、誤警報を抑えつつドリフトを早期検知できるか?
Continual learning異常データが「正常」を汚染することなくモデルを適応させられるか?
Commissioning auto-tuning構造化された試運転レシピから、安全でレビュー可能な設備プロファイルを作れるか?
合成産業データ顧客データがない段階でも、現実的でラベル付きの信号を生成できるか?
Banto Hub 連携本番導入に必要な read-only、shadow、承認済み引き渡しの境界は何か?

基本方針

  • 顧客データはこのリポジトリにコミットしません。合成データまたは再配布が明確に許可された公開データだけを使います。
  • 研究成果はレビューと明示的な昇格が完了するまで、助言情報として扱います。
  • PLC の安全ロジック、インターロック、非常停止、ハード保護上限は、AI レイヤーの外側で常に優先されます。
  • 本番中の適応処理はデフォルトで無効にします。試運転モードと shadow モードは明示的な状態として扱います。
  • すべての結果に、データの出所、設定、コードリビジョン、評価指標、既知の制約を記録します。

event-aware anomaly evaluation v0.2

正式な 10 seed × 12 layout replay と read-only analysis を完了しました。engineering gate は pass でしたが、5つの performance promotion gate はすべて fail のため、この baseline は昇格せず比較用として扱います。詳細は docs/results/anomaly-multiseed-v02-evaluation-2026-09-05.md を参照してください。これは TimesFM3 の性能結果ではありません。

2026-09-06に同じ正式artifactのfailure diagnosticsを完了しました。engineering整合性はpass、performanceは未評価で、canonical detectionを保持した因果的supportは0/240でした。結果と制約はdocs/results/anomaly-multiseed-v02-failure-diagnostics-2026-09-06.mdに記録しています。これはexploratoryな異常検知診断であり、TimesFM3の性能結果やmodel/thresholdの採用判断ではありません。

次のstdlib detector比較はv0.3実装前preregistrationのS0監査に合格し、計画を凍結しました。S1の独立再監査はP0〜P3 0件で合格し、S1は完了しました。S2では3候補の純粋scoring、phase/profile、episode merge、causal matchingとadversarial testsを実装し、S2監査もP0〜P3 0件で合格しました。S3 deterministic runnerも固定inventory、paired materialization、完全ledger、安全停止、provenance、non-overwrite publisherを実装し、S3監査はP0〜P3 0件、S3_READY=yesINTEGRATION_READY=yesです。CI run 34044283016はPython 3.12/3.14の全工程greenでした。S3は安全な再現実行の土台であり、性能結果・本番利用許可ではありません。次はS4 platform/runtime/native Windows acceptanceとdry/smoke consumer freezeで、formal run、性能評価、promotion、formal output rootはS4受入まで閉鎖します。利用境界は評価toolの説明を参照してください。

ライセンス

このリポジトリのソースコードと文書は MIT License です。

研究対象モデルのコードライセンスと学習済み重みのライセンスは別物として管理します。TimesFM 3.0の重みは research-only として扱い、MITのリポジトリライセンスによって利用条件が緩和されることはありません。

リポジトリ構成

文書の現在状態、凍結計画、過去結果、実行手順の読み分けは docs/README.md を入口にしてください。

docs/
  architecture.md                 Banto Hubとの責務境界と成果物フロー
  time-series-model-survey.md     時系列モデル候補、ライセンス、実現可能性の調査
  research-implementation-plan.md 段階的な研究・実装計画と判断gate
  research-roadmap.md             長期的な研究フェーズと完了条件
  timesfm-notes.md                TimesFM 3.0評価プロトコル
  chronos2-notes.md               Chronos-2の隔離・評価契約
  toto2-notes.md                  Toto 2.0 4Mの隔離・評価契約
  public-dataset-survey.md        公開産業時系列データの選定と取得境界
  results/                        実測結果(合成/研究専用)
  adr-0003-timesfm3-isolation.md  TimesFM 3.0の依存・実行隔離
  adr-0004-chronos2-isolation.md  Chronos-2の依存・実行隔離
  adr-0005-public-dataset-boundary.md 公開データのsource pinと変換境界
  commissioning-learning.md       試運転・校正・昇格の設計
  initial-issues.md                最初に作成するIssue 5件の案
schemas/                       manifestを検証するJSON Schema
examples/                     安全な合成fixtureとsample manifest
src/banto_ai/                  外部依存なしのPhase 0共通runtime
tests/                         Python標準unittest
experiments/
  timesfm3/                    foundation model のベンチマーク
  synthetic-data/              産業設備に近いデータの再現可能な生成
  online-learning/             適応とドリフトの実験
environments/
  timesfm3/                    専用venv向け入力とpackage/checkpoint来歴
  chronos2/                    Python 3.14 CPU専用lockと固定証跡
  toto2/                      Toto 2.0 4Mの専用lockと固定証跡
models/
  mini-transformer/            小さく検証しやすい予測ベースライン
  industrial-tsfm/             産業向けモデルの研究
datasets/                      データポリシーとローカル配置
tools/
  smoke.py                    clean checkout用のmanifest/naive smoke
  safety_check.py             repository safety guard
  timesfm3/                   TimesFM 3のpreflight/準備/offline CPU smoke
  chronos2/                   Chronos-2のpreflight/準備/smoke/benchmark
  toto2/                      Toto 2.0 4Mのpreflight/準備/offline CPU smoke/benchmark
  data-generator/              データ生成ユーティリティ
  evaluator/                   共通の評価指標とレポート

進め方

  1. 非公開データや顧客データはリポジトリ外に置き、ローカルのデータ識別子だけを参照します。
  2. 新しいベンチマーク結果を追加する前に、小さな experiment manifest を作成します。
  3. 改善を主張する前に、単純なベースラインと比較します。
  4. モデル成果物には、設定と評価レポートを必ず添付します。
  5. 実験を PLC に直接接続したり、制御パラメータを自動書き込みしたりしません。

次の一歩

最初の実装マイルストーンは、合成産業データ上で naive/古典的 baseline と複数の時系列モデルを同条件で比較できる、再現可能なベンチマークです。

現時点では TimesFM 3.0 の学習済み重みは非商用・非本番用途に限定されるため、研究比較専用とします。商用利用可能候補として Chronos-2、Toto 2.0、Granite TTM/TSPulseなどを同時に評価します。

Chronos-2初期評価

Chronos-2は固定checkpointのsize/SHA-256検証、公式API direct CPU smoke、Banto tool smoke、past-only/known-futureの初期rolling benchmarkまで完了しました。provenance拡張後のBanto tool smoke正本はartifacts/chronos2/cpu-smoke-provenance-2026-09-04.jsonで、verification_status=verified、cold elapsed 12.057009100011783秒です。known-future 7 modelsではaggregate MAE 0.1691488806622826、WIS 0.15937026919725228で1位でしたが、単一seed・少数origin・合成データの結果です。known-futureはorigin時点で確定済みの計画値を模した条件に限り、実績値の先読みを認めません。詳細はdocs/results/chronos2-initial-evaluation-2026-09-04.mdを参照してください。

公開実データの第一候補はUCI MetroPT-3、次候補はUCI hydraulic systemsです。MetroPT-3はsource pin toolで実archive検証済みで、status=cached_verifiedverification_status=verifiedです。正本manifestはdatasets/manifests/metropt3-source.json、手順はtools/public-data/README.md、CLIはtools/public-data/prepare_metropt3.pyです。SHA-256・member hash・license・source revision・verified_atを固定し、raw dataはGitへ置きません。標準化datasetの取込、Public-only quality gate、統計baseline、Chronos-2、TimesFM 3.0の限定forecast評価が完了し、実測結果はdocs/results/metropt3-import-2026-09-04.mddocs/results/chronos2-metropt3-evaluation-2026-09-04.mddocs/results/timesfm3-metropt3-evaluation-2026-09-04.mdに記録しました。詳細はdocs/public-dataset-survey.mddocs/adr-0005-public-dataset-boundary.mdを参照してください。

Python 3.14専用venvとrepository外cacheで再現します。各runは既存出力を上書きしないため、cleanなartifact pathで実行してください。

py -3.14 -m venv ..\.venv-banto-ai-chronos2
$chronosPython = '..\.venv-banto-ai-chronos2\Scripts\python.exe'
& $chronosPython -m pip install -r environments\chronos2\requirements-windows-cpu-py314.lock
& $chronosPython tools\chronos2\preflight.py --cache-dir C:\banto-cache\chronos2 --format both
& $chronosPython tools\chronos2\prepare_checkpoint.py --cache-dir C:\banto-cache\chronos2 --accept-apache-2.0
& $chronosPython tools\chronos2\run_smoke.py --cache-dir C:\banto-cache\chronos2 --output artifacts\chronos2\cpu-smoke-provenance-2026-09-04.json
& $chronosPython tools\data-generator\generate.py --config examples\configs\synthetic-motor-small.json --output artifacts\generated\synthetic-motor-small
& $chronosPython tools\chronos2\run_benchmark.py --config examples\configs\benchmark-chronos2-baselines-past-only.json --cache-dir C:\banto-cache\chronos2
& $chronosPython tools\chronos2\run_benchmark.py --config examples\configs\benchmark-chronos2-known-load.json --cache-dir C:\banto-cache\chronos2
& $chronosPython tools\chronos2\run_matrix.py --config examples/configs/benchmark-matrix-chronos2-small.json --cache-dir C:\banto-cache\chronos2

Chronos-2 matrix設定はseeds [17, 42]×horizons [1, 3]×context lengths [6, 12]の8 cellsです。base benchmarkのmodel parameter context_length=12はChronos backendに渡す入力上限で、matrix axisのcontext lengthは各cellの実入力長です。6と12はいずれも上限内です。Chronos専用のdataset/benchmark/matrix出力を使い、既存出力は上書きしません。実model matrixは8/8 cells success/0 failureで、結果はdocs/results/chronos2-matrix-2026-09-04.mdに記録しています。

Chronos-2はApache-2.0ですが、今回のmatrixは2 seed・合成データ・CPUのみの小標本です。欠損・regime・fault評価、origin拡大、known-future計画値契約は未実施です。拡張した評価条件をclean savepointから再実行することも未実施です。commercial-evaluationを継続し、まだproduct-candidateへ昇格しません。

TimesFM 3.0の共通Forecaster adapter、official APIの遅延import境界、license/provenance検証、fake backend testsは実装済みです。公式backendはadapterごとに初回forecast時だけロードし、以後は安全に再利用します。benchmark coreにはoptional modelを注入するregistry境界があり、通常のbaseline CLI/CIからtimesfmtorchnumpyはimportされません。environments/timesfm3/requirements.intimesfm[torch]==3.0.0のtop-level exact pinであり、完全なtransitive lockではありません。専用環境でのCPU smokeと、LastValueとの小規模rolling-origin benchmark結果は記録済みです。ただし、単一generator、少数origin、短いcontext/horizon、弱いbaselineによる限定評価であり、一般性能と実設備性能は未評価です。

正式CPU smoke 2回の測定値は docs/results/timesfm3-cpu-smoke-2026-09-04.md に記録しています。単一synthetic windowの結果であり、実設備性能や製品採否を示しません。

rolling-origin benchmarkの実測値は docs/results/timesfm3-rolling-benchmark-2026-09-04.md に記録しています。clean savepointから実行したrun3をprimary reproducibility runとし、run1/run2はdirty pre-savepointの再現性確認として残しています。TimesFM 3.0はこの限定条件のcomposite値でpoint forecastとWISがLastValueを上回りましたが、native intervalのcoverageはnominal 80%未達です。AとdegCの異なる単位を混合した値のため、物理量としての直接解釈やtarget構成の異なるrunとの比較は行いません。結果はPhase 2完了や製品採用の根拠ではありません。

統計baselineを含むpast-only/known-loadのtarget別比較は docs/results/timesfm3-baselines-comparison-2026-09-04.md に記録しています。known-loadは計画値をorigin時点で取得できるsynthetic oracle-styleの別scenarioであり、実績先読みや本番効果を意味しません。MetroPT-3のTimesFM 3.0比較は docs/results/timesfm3-metropt3-evaluation-2026-09-04.md に記録しています。TimesFM 3.0はこの限定条件で3 targetすべてのMAE/RMSE/WISが最良でしたが、Phase 2完了・採用判断には進みません。次は複数seed/horizon/context/origin、モデル単独resource測定、ライセンス適合候補との同一契約比較です。

複数seed/horizon/contextを反復するmatrix runnerを追加しました。seedはrun metadataだけでなくgenerator configへ反映し、seedごとにdatasetを一度生成・品質確認して各cellで再利用します。dataset fingerprintに加えてobservations.jsonl自体のSHA-256を記録し、異seedで観測内容が同一なら停止します。出力の主集計は単位を分離したby_model_targetのseed間cell-macro summaryであり、raw predictionのpooled metricではありません。base configのraw bytes hashと開始code revisionを固定し、cell終了時・matrix publish直前まで不変であることを検証します。これは評価範囲拡大の基盤で、Phase 2完了を意味しません。

2 seeds×2 horizons×2 context lengthsの実TimesFM matrixは8 cellsすべて成功し、結果を docs/results/timesfm3-matrix-2026-09-04.md に記録しました。TimesFM 3.0は温度の4条件でMAE最良でしたが、電流では4条件ともmoving-average等に劣りました。2 seeds・少数originのcell-macroであり、Phase 2完了や製品採用の根拠にはしません。MetroPT-3同一契約比較は完了済みで、次はseed/origin/条件の拡大、cold/warmとモデル単独resourceの分離、欠損・regime・fault slice、ライセンス適合候補との同一契約比較です。

Toto 2.0 4M は tools/toto2/README.md の専用環境・外部cacheから実行します。MetroPT-3のcontext=120、horizon=15、target 3、past-only covariate 11は変更せず、adapter内の先頭8点paddingだけでpatch_size=32のeffective input length=128へ揃えます。実smokeと数値benchmarkは完了し、結果を docs/results/toto2-metropt3-evaluation-2026-09-04.md に記録しました。Totoのknown-future/exogenous requestは拒否します。さらに、2 seeds×2 horizons×2 context lengthsのToto 4M matrixも8/8 cells successで完了し、正本とtarget別metrics、runtime、制約を docs/results/toto2-matrix-2026-09-04.md に記録しました。次はseed/origin拡大、missing/stale/fault/regime slice、model-only resource測定、22M、公開/実設備一般化です。

controlled evaluation の受入境界は docs/toto2-controlled-scenarios.md に定義しています。2026-09-05にcontrol、target fault、target quality、covariate qualityの4 trackを、seed 17/29/42/73/101、horizon 15/30、context 64/120、test origin 384で実行し、4 matrix各20/20 success、acceptance passとなりました。各matrix 10,800 predictions、計43,200、cross-model rankingは禁止です。正式なhash、paired delta、runtime、制約は docs/results/toto2-controlled-evaluation-2026-09-05.md に記録しています。これはsynthetic/4M/CPUの受入結果であり、実設備性能やPhase 2完了、製品採用を示しません。実行順は4 matrix → analyzerで、コマンドは tools/toto2/README.md に記載しています。

Phase 0の実行確認は、外部依存を導入せず python tools/smoke.pypython tools/safety_check.py で行えます。Phase 1の最小generatorは次で実行できます。

TimesFM 3の実評価は、リポジトリ外のcacheを明示して次の順に実行します。checkpoint準備だけがdownloadを行い、smokeはlocal_files_only=Trueでcache miss時に停止します。

python tools/timesfm3/preflight.py --cache-dir C:\banto-cache\timesfm3 --format both
python tools/timesfm3/prepare_checkpoint.py --cache-dir C:\banto-cache\timesfm3 --accept-research-only-license
python tools/timesfm3/run_smoke.py --cache-dir C:\banto-cache\timesfm3 --output artifacts\timesfm3\cpu-smoke.json

このrunはresearch-only/non-productionであり、Banto Hub/PLCへのwrite pathを持ちません。実測値はartifactと結果文書へ記録し、単一windowの結果を一般性能として扱いません。

TimesFM 3をrolling-origin benchmarkへ接続する場合は、専用venvで次を実行します。prepare_checkpoint.pyで取得・検証済みの、リポジトリ外cacheだけを指定してください。実行時はlicense acceptance、固定revision、checkpointのサイズ/SHA-256、インストール済みtimesfm==3.0.0を確認し、ネットワークを禁止します。

python tools/data-generator/generate.py --config examples/configs/synthetic-motor-small.json --output artifacts/generated/synthetic-motor-small
python tools/timesfm3/run_benchmark.py --config examples/configs/benchmark-timesfm3-small.json --cache-dir C:\banto-cache\timesfm3 --accept-research-only-license

小規模matrixは同じ専用venvとcacheで次のように実行します。sampleはpast-onlyを標準とし、2 seeds×2 horizons×2 context lengthsの8 cellsです。既存のdataset/cell/matrix出力は上書きしません。

python tools/timesfm3/run_matrix.py --config examples/configs/benchmark-matrix-timesfm3-small.json --cache-dir C:\banto-cache\timesfm3 --accept-research-only-license

benchmark-timesfm3-small.jsonはLastValueとTimesFM 3を同じequipment/origin/targetで比較します。validation/test originは高コスト実モデル向けに決定的なstrideと最大数を設定し、その選択結果はresult.jsonのprovenanceへ保存します。TimesFM 3はnative quantile、baselineはvalidation residual by leadを使います。今回のsampleでは将来のload_proxyを本番で計画値として確実に知れる前提を置かず、全covariateをpast-onlyにしています。このため既知将来値を使う実験は、計画値であることを別途データ契約に明記したconfigで行います。

python tools/data-generator/generate.py --config examples/configs/synthetic-motor-small.json --output artifacts/generated/synthetic-motor-small
python tools/data-generator/check_quality.py --dataset artifacts/generated/synthetic-motor-small
python tools/evaluator/run_benchmark.py --config examples/configs/benchmark-small.json

上記はsrc layoutのclean checkoutから実行する標準手順です。python -m banto_ai ... を使う場合は、先に python -m pip install -e . --no-deps を実行してください。

出力先の既定値は artifacts/generated/<dataset_id> です。既存ディレクトリは上書きせず、観測値、ground-truth event、generator config、dataset/split manifest、fingerprint、summaryを分離して出力します。[start,end) のinterval境界、UTC timestamp、equipmentごとのstrictly increasing timestamp、canonical JSON/JSONLの順序とSHA-256計算方法を記録します。quality checkerはcatalogのsampling interval、unit、quality keys、event構造、splitの完全被覆・record_count、generator configとのsemantic consistency、fingerprint整合性、future leakageを検査します。

Windowsを含む開発手順とモデル別のplanned environmentは CONTRIBUTING.md に記載しています。

調査結果は docs/time-series-model-survey.md、具体的な作業計画は docs/research-implementation-plan.md、Issue案は docs/initial-issues.md を参照してください。

Toto event slice post-hoc解析

既存Toto 2.0 4M matrix予測のevent slice post-hoc解析も完了しました。8/8 cells analyzed、excluded 0、8,640 predictionsで、motor_current faultのforecast未coverを含む解釈上の限界を docs/results/toto2-event-slices-2026-09-04.md に記録しています。再推論なしの研究用集計であり、anomaly detection性能、missing/stale robustness、実設備一般化、製品昇格を示しません。次はfault target専用scenario、missing/stale専用評価、seed/origin/event位置拡大です。Phase 2は未完了です。

ステータス

Phase 0 research foundation implemented。Phase 1 savepoint 1(seed再現可能synthetic industrial data generator)とSavepoint 2(共通benchmark runner/統計baseline)を実装済みです。TimesFM 3.0はCPU smoke、小規模rolling-origin benchmark、8-cell matrix、MetroPT-3同一契約比較を実行済みです。Chronos-2は固定snapshot検証、公式API/Banto tool CPU smoke、past-only 6 models/known-future 7 modelsの初期rolling benchmark、実model 8-cell matrix、MetroPT-3公開実データのnative/point-calibrated評価を実行済みです。Toto 2.0 4Mは固定snapshot検証、CPU smoke、MetroPT-3公開実データの6 model/3 target評価、2 seeds×2 horizons×2 context lengthsの8-cell matrix、formal controlled 4-track acceptanceを実行済みです。MetroPT-3評価は24時間・1設備・16 test origins・単一CPU・forecast-onlyの限定条件で、Chronos nativeはpartial、Chronos point-calibrated、TimesFM 3.0、Toto 2.0 4Mはsuccessでした。Toto controlledは4 matrix各20/20 success、80/80 cells、acceptance passですが、synthetic/4M/CPUの契約受入であり、実設備性能やmodel採用判断を示しません。詳細はdocs/results/toto2-metropt3-evaluation-2026-09-04.mddocs/results/toto2-matrix-2026-09-04.mddocs/results/toto2-controlled-evaluation-2026-09-05.mddocs/results/timesfm3-metropt3-evaluation-2026-09-04.mddocs/results/chronos2-metropt3-evaluation-2026-09-04.mdを参照してください。origin/日/設備拡大、model単独resourceの分離評価、欠損・regime・fault slice、known-future対past-onlyの追加比較、Chronos再実行の再現性は次工程です。Phase 2は完了していません。本番デプロイ経路も未実装です。

合成データは研究用の制御されたfixtureであり、実設備の挙動を代表すると主張しません。顧客データ、raw設備データ、秘密情報は生成物・設定・Git履歴へ入れません。大量生成データはGit無視領域へ置き、commit対象は小さいconfig/fixtureだけにします。

Contributors

tyaro

123 commits

Languages

Python

100.0%