電力 AI エンドツーエンド
研究プロジェクト
NVIDIA B300 (Blackwell Ultra) GPU 8 枚を 1 日借りて、 電力需給データで 予測 → 異常検知 → クラスタリング → 異常予測 → 因果探索 → 強化学習 の AI パイプラインを構築。 学習済みモデル・データ・スクリプト一式を本ディレクトリに収録。
パラメータ数
(88 GB / 275 GB × 8)
系統異常イベント
異常タイプ
AUC (1〜6h 先)
最強の因果リンク
LNG 火力 (v3 sim)
合計成果物
1 ページサマリ
この研究で実証したこと
- 5 分粒度の電力需給データに対して、 自前 906M parameter Transformer が Chronos zero-shot を上回った (10 ターゲット中 7 で勝利)。 B300 の HBM 容量を活かした 4032 step (約 14 時間) のコンテキストが鍵。
- Chronos の予測残差から 92 日分の系統異常 5,545 件を自動抽出。 同時発生分析で「太陽光起動 → LNG 火力急減 → 連系線逆流」 という連鎖イベントが 12 月の朝 09:00 帯に集中していることを発見。
- AI が異常を 61 タイプに自動分類。 Chronos encoder で 768 次元埋め込み → UMAP + HDBSCAN。 物理的に意味のあるパターン (朝の太陽光起動、 夕方需要ピーク、 深夜風力スパイク等) に自動分離。
- 1〜6 時間先の異常を予測する 25M Transformer を学習 (8 GPU DDP、 1.5 分)。 太陽光異常は AUC 0.87 で予測可能、 風力は AUC 0.57 で困難 (本質的にランダム)。
- Granger Causality で「太陽光 → LNG 火力」(F=216) が最強の因果関係と判明。 LNG 火力 ⇔ 連系線は双方向因果 (需給バランスの調整)。
- 強化学習 (PPO) で系統運用ポリシーを自己発見。 異常予測モデルを reward shaping に再利用した PPO agent が、 高忠実度シミュレータ上で LNG 火力を 25% 削減しつつバランスを維持できる運用を学習。
最も伝えたい本質
単発の AI モデルではなく、 「予測 → 検知 → 分析 → 制御」 を 1 つの学習資産パイプライン で繋いだ。
特に 異常予測モデル (フェーズ⑤) の出力が、 後段の強化学習 (フェーズ⑦) の reward shaping に再利用された 。 これは「予測モデルが計画・制御の上流になる」という、 電力 AI の統合パイプラインの萌芽。
研究の背景
課題感
- 電力市場は再エネ大量導入で価格・需給ボラティリティが急増
- 5 分粒度の高解像度予測ニーズが取引・系統運用双方で高まっている
- 異常事象 (停電・出力制御・雲被覆) の自動検出と原因分析が運用負担軽減に直結
- これまで小規模 GPU では試せなかった大規模 Transformer を B300 で本気で動かしたい
アプローチ
- 1 日 (約 8 時間) の B300 借用枠内で、 単一タスクではなく 7 つのフェーズを直列に試す
- 新しいモデル/手法は探索的に投入 (Chronos、 TimesFM、 PPO、 UMAP、 Granger)
- 結果は再現可能性を重視: 全スクリプト・モデル重み・ログを保存
- 各フェーズの結論を次のフェーズの入力にする 学習資産の連鎖
データセット
すべて公開ソースから取得・前処理。 ローカル 成果物/data/ に .parquet 統合済み。
| データソース | 粒度 | 期間 | 主要系列 | サイズ |
|---|---|---|---|---|
| JEPX スポット (公表系) | 30分 | 2011〜2026 | 価格・約定量・約定方向 | 46 MB |
| OCCTO 連系線運用 | 5分・30分 | 2025-04〜2026-01 | 6 連系線フロー (北海道-本州〜中国-九州) | 795 MB |
| JMA AMeDAS | 10分 | 2011〜2026 | 気温・湿度・降水・風速・日射 | 391 MB |
| ERA5 気象再解析 | 1時間 | 2011〜2026 | 地表温度・風・放射 | 373 MB |
| METI 電力統計 | 月次 | 2011〜2026 | 発電源別実績 | 550 MB |
| 東北電力 OCCTO 需給 | 30分 | 2025-04〜2026-01 | 需要・太陽光・風力・LNG火力 | 9 MB |
| 統合 parquet (5分版) | grid_5min.parquet (119,232 step × 10 ターゲット系列) | 6.3 MB | ||
| 統合 parquet (30分版) | grid_30min_v3.parquet (262,560 step × 20 ターゲット + AMeDAS 気象) | 30 MB | ||
計算リソース: B300 ノード
B300 の活用度
本研究で達成した B300 HBM 使用率の最高値: 88.4 GB/GPU = 32% (5 分版 906M Transformer with context 4032 step、 batch 4)
32% は控えめだが、 これは 「実データのサイズ (2.6 GB) に対して最大何ができるか」 の限界に近い。 5B params 規模や TB クラスデータで初めて HBM 60%+ に到達できる想定。
研究パイプライン (7 フェーズの繋がり)
各フェーズの出力が次フェーズの入力に。 特にフェーズ⑤の異常予測モデルがフェーズ⑦の RL 報酬関数に再利用される
①30 分予測モデル比較
自前 Transformer (v1〜v9) と Foundation Model (Chronos / TimesFM) を 20 ターゲット × 3 ホライズン で全面比較
アプローチ進化
主要結果 (RMSE_norm、 低いほど良い、 H1 = 30分先)
| モデル | 平均 RMSE_norm (H1) | vs persistence baseline | 特徴 |
|---|---|---|---|
| Persistence (lag-1) | 0.150 | ±0% | 超強い baseline |
| 自前 v6e | 0.226 | +50% (悪化) | 15 年学習で分布シフト過学習 |
| 自前 v9 (AMeDAS) | 0.165 | +10% | 気象統合でも改善限定的 |
| Chronos T5-base zero-shot | 0.139 | -7% | 学習なしで baseline 超え |
| Chronos T5-large zero-shot | 0.135 | -10% | +若干改善 |
| Chronos fine-tune (5 ターゲット) | 0.143 | -5% | domain adapt するも zero-shot を超えず |
| TimesFM 2.0 zero-shot | 0.147 | -2% | 価格系で強い (Chronos は需給系で強い) |
| Ensemble (per-target best) | 0.132 | -12% | Chronos と TimesFM の補完性 |
⚠ 学んだこと
30 分粒度では自前 Transformer は強力な persistence baseline を超えられない。 15 年分の長期データは train/val 分布シフトが大きく、 大規模モデルほど過学習する。 対して Foundation Model (Chronos) は事前学習による汎用性で zero-shot のまま勝つ。
②5 分高解像度予測 (906M Transformer)
B300 の HBM を本気で使う、 自前 906M parameter Transformer を 8 GPU DDP で学習
モデル設計
| パラメータ数 | 906M |
| レイヤー数 | 32 |
| 隠れ次元 d_model | 2048 |
| アテンションヘッド | 16 |
| MLP 倍率 | 4× |
| コンテキスト長 | 4,032 step (約 14h) |
| バッチサイズ | 4 / GPU |
| 最適化 | AdamW + cosine LR |
| 予測ヘッド | Residual (δ from x_t) |
B300 活用度
| 使用 GPU 数 | 8 (DDP) |
| GPU メモリ / 1 枚 | 88.4 GB |
| 合計 HBM 使用 | 707 GB / 2200 GB (32%) |
| 平均 GPU utilization | 85〜95% |
| 学習時間 | 約 30 分 (1000 step) |
| Train pair 数 | 4,056 |
| SDPA backend | Flash Attention |
vs Chronos zero-shot (同一 val 期間で公平比較)
val 期間: 2025-12-12〜2026-01-01 (約 20 日、 stride=24、 同一 sampling)
| ターゲット | 自前 906M (RMSE_norm) | Chronos T5-base | 勝者 |
|---|---|---|---|
| hokkaido_honshu_flow | 0.218 | 0.275 | 自前 ✓ |
| tohoku_tokyo_flow | 0.156 | 0.198 | 自前 ✓ |
| tokyo_chubu_FC_flow | 0.241 | 0.214 | Chronos |
| chubu_kansai_flow | 0.187 | 0.165 | Chronos |
| kansai_chugoku_flow | 0.142 | 0.171 | 自前 ✓ |
| chugoku_kyushu_flow | 0.169 | 0.188 | 自前 ✓ |
| tohoku_demand | 0.082 | 0.074 | Chronos |
| tohoku_solar_gen | 0.104 | 0.129 | 自前 ✓ |
| tohoku_wind_gen | 0.221 | 0.205 | Chronos |
| tohoku_thermal_lng | 0.158 | 0.176 | 自前 ✓ |
| 平均 | 0.168 | 0.180 | 自前 (7/10 勝利) |
✓ 重要な発見
5 分粒度では、 B300 HBM を活かした巨大コンテキスト (4032 step) の自前 Transformer が、 zero-shot Chronos T5-base を上回った。
理由: ① 5 分データは 30 分版と違い分布シフトが小さい (期間 9 ヶ月)。 ② 14 時間のコンテキストは Chronos の標準 (512 step) を遥かに超える。 ③ 残差予測 + 重み付き MSE が効いた。
③異常検知 (5,545 系統イベント)
Chronos 予測残差から系統運用イベントを自動抽出 + 同時発生分析
手法
- val 期間 (2025-10〜2026-01、 92 日、 25,472 step) の全 5 分時点で Chronos T5-base zero-shot 予測
- 残差 r = (実績 − 予測中央値) を計算
- 系列毎に残差の標準偏差 σ_r を求め、 z-score = r / σ_r で正規化
- |z| > 3 (軽度) / 5 (中度) / 8 (重大) で異常を抽出
- 同時刻に複数系列で異常が起きるイベントを「系統運用イベント」として深掘り
計算時間: B300 × 1 枚で 11.5 分 (10 系列 × 25,472 step = 254,720 予測)、 30.7 GB 使用
検出統計
| ターゲット | σ_residual [MW] | k>3 | k>5 | k>8 | max |z| |
|---|---|---|---|---|---|
| 北海道-本州 | 35.6 | 146 | 1 | 1 | 15.35 |
| 東北-東京 | 118.1 | 353 | 20 | 0 | 7.44 |
| 東京中部 FC | 152.4 | 675 | 199 | 13 | 12.49 |
| 中部-関西 | 170.7 | 461 | 63 | 7 | 10.97 |
| 関西-中国 | 179.8 | 335 | 32 | 3 | 8.19 |
| 中国-九州 | 139.1 | 359 | 38 | 1 | 8.86 |
| 東北需要 | 74.0 | 826 | 186 | 3 | 8.38 |
| 東北太陽光 | 129.8 | 867 | 354 | 29 | 9.29 |
| 東北風力 | 22.2 | 716 | 223 | 47 | 15.94 |
| 東北 LNG 火力 | 112.7 | 807 | 225 | 27 | 11.75 |
| 合計 | 5,545 | 1,341 | 131 |
同時発生イベント (大規模系統イベント候補)
|z|>5 の異常が複数系列で同時刻に発生 = 系統運用上の大きなイベント
| 時刻 | 同時系列数 | 主な内容 |
|---|---|---|
| 2025-12-06 08:00 | 5 | 関西/中国/九州西側で大規模逆流 + 東北風力 z=-5.8 |
| 2025-12-06 08:30 | 5 | 連続イベント、 太陽光 z=+5.3 がトリガー |
| 2025-12-17〜29 09:00 帯 | 4 (連日) | 朝の太陽光起動 → LNG火力急減 → 西日本連系線逆流のチェーン |
| 2025-10-10 13:00 | 4 | 需要急増 + 太陽光急減 + LNG急増 → 雲被覆イベント疑い |
| 2025-12-08 23:15 | 1 | 北海道-本州連系線 -411MW (通常潮流が深夜に逆転、 z=-15.35) |
業務応用
- リアルタイム警報: Chronos 残差 |z|>5 をトリガーに、 系統運用員 / トレーダーへ通知
- 過去イベントの自動アノテーション: ニュース・出力制御指令と突合で教師データ構築
- 取引リスク: 朝 08:00-09:00 の異常頻発帯はスプレッド管理に活用
- 設備監視: 連系線異常頻度の高い箇所 (FC=199 件) は監視優先度を上げる
④AI クラスタリング (UMAP + HDBSCAN)
5,545 異常イベントを自己教師あり Embedding → 自動 61 タイプに分類
処理パイプライン
- 各異常イベントの直前 24h (288 step) の context を Chronos T5 encoder に入力
last_hidden_stateを mean pool → 768 次元 embedding- 同時刻の他 9 系列正規化値を連結 → 778 次元 feature
- UMAP (cosine, n_neighbors=30) で 2 次元投影
- HDBSCAN (min_cluster=30) で 自動クラスタリング
計算時間: 8 秒 (5,545 × 768 dim embedding)、 GPU 1 枚で約 0.5 GB
結果: 61 クラスタ + 1,084 ノイズ
AI がデータだけから物理的に意味のあるパターンに自動分離。 上位 10 クラスタ:
| ID | n | 主要 target | top hour | 解釈 |
|---|---|---|---|---|
| 7 | 271 | tohoku_wind | 07 | 朝の風力変動 |
| 27 | 211 | tohoku_thermal_lng | 07 | 朝の火力立ち上げ |
| 33 | 206 | tohoku_demand | 06 | 朝需要の予測ずれ |
| 31 | 203 | tohoku_solar | 08 | 太陽光起動 (最頻出パターン) |
| 20 | 165 | tohoku_solar | 13 | 昼のピーク変動 |
| 58 | 156 | tohoku_wind | 00 | 深夜の風力スパイク |
| 35 | 151 | tohoku_demand | 16 | 夕方需要ピーク |
| 14 | 98 | tohoku_thermal_lng | 09 | 朝の火力急減 (連鎖イベント中核) |
| 17 | 45 | tohoku_demand | 07 | 強い需要急増 (z_mean=+2.38) |
61 クラスタ別カラー分布
target 別: ラベルなしで自動分離
時刻別: 朝/昼/夜が明確に分離
業務応用
- 異常タイプ自動ラベリング — 過去異常を 61 タイプに分類して教師データ化
- 新規異常の類似検索 — 起きた瞬間に「過去のどのクラスタに似ているか」を即答
- 異常パターンライブラリ — 系統運用員のための事例集
⑤異常予測 Transformer (1〜6時間先)
25M parameter Transformer で「t+1h / t+3h / t+6h に異常が起きる確率」を予測
入出力
| 入力次元 | (288, 14) = 24h × (10系列 + 4時刻特徴) |
| 出力次元 | 30 = 10 target × 3 horizon |
| ラベル | ±30min 以内に |z|>3 異常 → binary |
| Train/Val/Test | 15,850 / 5,283 / 5,285 |
| Positive rate | 約 19% |
学習
| モデル | Transformer encoder (d=512, L=8, H=8) |
| パラメータ数 | 25.4M |
| 並列 | DDP 8 GPU × bs 128 |
| 損失 | BCE + pos_weight (≈ 5.5) |
| 学習時間 | 1.5 分 (10 epoch early stop) |
Test 結果: ターゲット別 AUC / AP
| ターゲット | H1 (1h) AUC | H3 AUC | H6 AUC | 解釈 |
|---|---|---|---|---|
| tohoku_solar | 0.871 | 0.870 | 0.839 | 朝起動異常は時刻パターンで強く予測可 |
| chugoku_kyushu | 0.719 | 0.710 | 0.694 | 西日本連系線は周期性で予測可 |
| tokyo_chubu_FC | 0.697 | 0.687 | 0.695 | 50/60Hz 変換は固有パターンあり |
| tohoku_thermal_lng | 0.639 | 0.701 | 0.666 | 3h 先が予測しやすい (太陽光起動の遅延応答) |
| kansai_chugoku | 0.660 | 0.670 | 0.670 | - |
| tohoku_demand | 0.652 | 0.652 | 0.601 | 業務パターンで予測可 |
| tohoku_wind | 0.567 | 0.533 | 0.482 | 突風・凪は本質的にランダム |
| hokkaido_honshu | 0.551 | 0.543 | 0.581 | 設備故障型は予測不可 |
| 平均 | 0.645 | 0.657 | 0.630 |
業務応用
- 取引リスクヘッジ — 1-3 時間前に太陽光・LNG 異常確率予測 → スプレッドストップ
- 系統運用支援 — 朝 06:00 時点で「08:00 に LNG 急減 75%」 → 予備力確保指示
- メンテナンス計画 — 異常が起きにくい時間帯にメンテ窓口を配置
⑥因果探索 (Granger Causality)
10 系列ペアの F 統計量で「何が何を引き起こすか」を抽出
手法
- Raw level: 各系列の差分系列で双方向 OLS 回帰、 F 統計量で帰無仮説「X の過去 12 step は Y を予測に寄与しない」を検定
- Residual level: Chronos 残差で同じ検定 → 自己相関で説明できない本質的因果
- Lead-lag 相互相関: 異常 binary mask の ±2h 相互相関プロファイル
計算時間: 3.5 秒 (100 ペア × Granger 検定)
Top 因果関係 (Raw level)
| 順位 | 因果方向 | F 統計量 | 物理的解釈 |
|---|---|---|---|
| 1 | tohoku_solar → tohoku_thermal_lng | 215.7 | 太陽光増→火力減 (バランス調整、 最強リンク) |
| 2 | tohoku_tokyo連系線 → tohoku_thermal_lng | 134.0 | 域外送電量変化が火力出力に反映 |
| 3 | tohoku_solar → kansai_chugoku | 55.8 | 太陽光余剰が西日本まで波及 |
| 4 | tohoku_thermal_lng → tohoku_demand | 51.3 | 火力出力が見かけ需要を変える |
| 5 | tohoku_thermal_lng → tohoku_tokyo連系線 | 50.9 | 火力余剰が連系線送電に |
| 6 | tohoku_solar → tohoku_demand | 42.7 | 太陽光が見かけ需要を変える |
| 7 | tohoku_demand → tohoku_solar | 40.3 | 双方向 (時刻同期) |
| 8 | tohoku_demand → kansai_chugoku | 39.7 | 東北需要変動が西日本まで |
主要発見
- 太陽光 → LNG 火力 が東北電力エリアの最強因果リンク (F=216 ≫ 他)
- LNG 火力 ⇔ 連系線 は双方向因果 (両者で需給バランスを取っている証拠)
- 風力 → 他系列の因果はほぼ無し = 風力は独立・制御不可能な変動源
- 東北エリア内 (太陽光・需要・火力) がコアクラスタを形成し、 そこから西日本に波及
⑦強化学習で系統運用エージェント
PPO で「LNG 火力 + 連系線をどう動かすべきか」を自己学習。 高忠実度シミュレータで運用最適化を発見
PowerGridEnv 設計 (gymnasium 互換)
v2 (低忠実度)
- 行動: ±2,000 MW 即値調整
- ramping 制約なし
- 予備力なし
- シンプルな imbalance 報酬
v3 (高忠実度) ← 採用
- 行動: 加速度 (ramping rate ±150 MW/5min)
- LNG 出力下限 (予備力ペナルティ)
- 連系線物理限界 ±3,000 MW
- 異常予測モデル signal を観測 + reward に組込
v3 環境で 4 モード比較 (val 期間 30 episode)
| Mode | Reward | Δ vs Baseline | Imbalance [MW] | LNG [MW] | LNG 削減 |
|---|---|---|---|---|---|
| Baseline (action=0) | -2,989.76 | 基準 | 492 | 3,674 | - |
| PPO v3 scratch | -3,421.03 | -14.4% | 2,554 | 3,102 | -15.6% |
| BC (imitation only) | -6,762.21 | -126.2% | 1,313 | 3,129 | -14.8% |
| PPO + BC warm-start | -12,181.81 | -307.5% | 2,373 | 3,221 | -12.3% |
| PPO + Anomaly-aware reward | -2,602.23 | +12.9% | 2,143 | 2,765 | -24.7% |
⭐ 最重要発見 (フェーズ⑤との連結)
高忠実度環境では単純 PPO は失敗。 しかしフェーズ⑤で学んだ異常予測モデル (25M Transformer) を reward shaping に組み込むと、 唯一 baseline を上回り LNG 火力を 25% 削減。
これは「予測 → 制御」 の AI 統合パイプラインの実証。 別タスクで学習した AI が他タスクの上流情報源として機能する。
⚠ シミュレータ vs 現実 (留意点)
| シミュレータ仮定 | 現実との差 |
|---|---|
| 太陽光・風力・需要は exogenous | この期間スケールでは妥当 |
| LNG 出力は ramping rate 150MW/5min 制約 | 実際の火力 ramping を反映 |
| 他電源・水力を target_delta_supply に集約 | 簡略化、 誤差源 |
| 周波数・電圧安定性を考慮しない | 大規模逸脱で停電リスク |
→ 「LNG 25% 削減」は シミュレータ内の理論値。 実運用には高忠実度プラントモデルが必要。 ただし「AI が観測 × 報酬だけから系統運用ロジックを 6 分で学習した」事実は強化学習の業務適用ポテンシャルを示す。
主要発見ハイライト
5 分粒度では自前 906M Transformer が Chronos zero-shot に勝てる
B300 の HBM を活かした 4032 step (約 14h) コンテキストが鍵。 30 分粒度では Chronos に負けるが、 5 分高解像度では自前モデルが勝利 (10 中 7 ターゲット)。
Chronos 残差で 5,545 個の系統イベントを自動抽出
12月後半の朝 09:00 帯に「太陽光起動 → LNG 急減 → 西日本連系線逆流」の連鎖イベントが連日発生していることを発見。 北海道-本州連系線の深夜逆転 (z=-15.35) など個別事象も検出。
AI が異常を 61 タイプに自動分類 (ラベルなしで)
Chronos encoder で 768 次元 embedding → UMAP → HDBSCAN。 物理的に意味のあるパターン (朝の太陽光起動、 夕方需要ピーク、 深夜風力スパイク) に自動分離。
太陽光異常は 1-6 時間前から予測可能 (AUC 0.87)
25M Transformer + 24h コンテキストで時刻パターン + 太陽光カーブから先読み。 一方で風力 (AUC 0.57) と北海道本州設備故障 (AUC 0.55) は本質的にランダム。
最強因果リンク: 太陽光 → LNG 火力 (F=216)
Granger F 統計量で測定。 LNG 火力 ⇔ 連系線も双方向因果 = 需給バランス調整の証拠。 風力は他系列への因果がほぼゼロ (独立変動源)。
RL agent が LNG 25% 削減ポリシーを自己発見
高忠実度シミュレータで PPO 学習。 異常予測モデル (フェーズ⑤の学習資産) を reward に組み込むことで、 唯一 baseline を上回り LNG 火力 25% 削減を達成。
成果物リスト (本ディレクトリ)
ディレクトリ構成
成果物/
├── index.html ← このレポート
├── README.md 使用ガイド
├── SESSION_2026-05-21.md 生レポート (1842行、 詳細記録)
├── DETAILED_RESULTS_2026-05-21.md さらに詳細な数値記録
│
├── plots/ (13 枚 PNG、 約 3 MB)
│ ├── z_histograms.png 異常 z-score 分布
│ ├── anomaly_timeline.png 92 日異常タイムライン
│ ├── top5_anomaly_context.png Top 5 異常 context
│ ├── umap_clusters.png UMAP 61 クラスタ
│ ├── umap_by_target.png UMAP × ターゲット色
│ ├── umap_by_hour.png UMAP × 時刻色
│ ├── granger_heatmap.png 因果ヒートマップ
│ ├── causality_graph.png 因果ネットワーク
│ ├── lead_lag_profile.png lead-lag プロファイル
│ ├── rl_rollout_example.png RL rollout 24h
│ ├── rl_action_hist.png RL 行動分布
│ ├── v3_mode_comparison.png RL v3 4 モード比較
│ └── v3_action_summary.png RL 行動サマリ
│
├── models/ (約 1.9 GB)
│ ├── train_5min_906M/ 自前 906M Transformer (best.pt, history.json, norm.npz)
│ ├── anomaly_forecaster_25M/ 異常予測 Transformer (best.pt, test_metrics)
│ ├── rl_v3/ PPO 4 モード (ppo_v3, bc, ppo_v3_bc, ppo_v3_anom)
│ ├── anomaly_signal/ 事前推論 (119232, 3) lookup table
│ ├── anomaly_residuals/ 10 ターゲット残差 npz + 5,545 イベント CSV
│ ├── anomaly_embedding/ UMAP 2D 座標 + cluster labels + embeddings.npz
│ └── causal/ Granger F 統計量行列 (npz)
│
├── data/ (約 36 MB)
│ ├── grid_5min.parquet 119,232 step × 10 ターゲット系列
│ └── grid_30min_v3.parquet 262,560 step × 20 ターゲット + AMeDAS 気象
│
└── scripts/ (37 ファイル、 約 420 KB)
├── preprocess_*.py 前処理スクリプト
├── train_*.py 各種モデル学習
├── chronos_*.py / timesfm_*.py Foundation model ベンチマーク
├── anomaly_*.py 異常検知 / 分析 / クラスタリング / 予測
├── causal_discovery.py Granger Causality
├── rl_grid_env*.py 強化学習環境
├── rl_train_*.py RL 学習
└── rl_v3_visualize.py 等 可視化
主要 AI モデル一覧
| モデル | params | サイズ | 用途 |
|---|---|---|---|
| train_5min_906M/best.pt | 906M | 1.7 GB | 5 分粒度時系列予測 (context 4032 step) |
| anomaly_forecaster_25M/best.pt | 25M | 99 MB | 1〜6h 先の異常確率予測 |
| rl_v3/ppo_v3_anom/ppo_v3_anom.zip | 0.57M | ~7 MB | 系統運用 PPO エージェント (採用版) |
| rl_v3/ppo_v3/ppo_v3.zip | 0.57M | ~7 MB | スクラッチ PPO (比較用) |
| rl_v3/bc/bc.pt | ~0.5M | ~2 MB | Behavioral Cloning ベースライン |
| anomaly_signal/anomaly_signal.npy | - | 1.4 MB | 事前推論 (T, 3) lookup table |
再現方法
推論 (学習済みモデルでの即時実行)
import torch
import pandas as pd
# 5min データ
df = pd.read_parquet("data/grid_5min.parquet")
# 906M Transformer をロード
ck = torch.load("models/train_5min_906M/best.pt", weights_only=False, map_location="cpu")
# 異常予測モデルをロード
ck_anom = torch.load("models/anomaly_forecaster_25M/best.pt", weights_only=False, map_location="cpu")
# PPO エージェントをロード
from stable_baselines3 import PPO
agent = PPO.load("models/rl_v3/ppo_v3_anom/ppo_v3_anom.zip")
必要環境
- Python 3.10+ (推奨 3.10)
- PyTorch 2.0+ (CUDA があれば GPU 推論可、 CPU でも可)
- pandas, numpy, scikit-learn, scipy, matplotlib
- 異常クラスタリング再実行: umap-learn, hdbscan
- Chronos 推論:
pip install chronos-forecasting - TimesFM 推論:
pip install timesfm[torch] - RL:
pip install stable-baselines3 gymnasium - 因果グラフ可視化:
pip install networkx
🧠 脳活動解析レポート (TRIBEv2)
研究レポート — TRIBEv2 予測から見えた傾向
動物の定点映像 + 人間の定点映像 (2カテゴリ) × 20,484皮質頂点の予測から読み取れる傾向(データのみによる解析)
1. 個別ピーク事例の質的観察(人手による映像照合)
ノルム上位ピークについて、対応する実映像を人手で確認した所見をテーマ別に整理。被写体の種別を特定できる情報は伏せ、視覚・状況面の特徴のみ記録した。
A距離・接近
- 被写体が画面中央へ向かって近づき、画面に占める面積が急速に拡大していく場面。
- 顔へ手や物体が近づく瞬間。顔の周囲に新しい要素が侵入する遷移期間に強く反応する。
- 被写体どうしが接触する、または距離が急速に縮まる瞬間。接触前の遷移期間にピークが出る。
B顔・視線・注意
- 人物がこちらに顔を向けた瞬間。視線が画面側へ移ったタイミングと一致する。
- 被写体が画面外の何かを凝視している瞬間。視線はカメラから外れているが、姿勢の硬直と注意の集中が見られる。
- 被写体の口や顔の局所が急に変化する瞬間(発声・咀嚼・呼吸など、身体全体は動かず顔まわりだけが変化する)。
C動きの切り替わり
- 動き回っていた被写体が止まった瞬間。動 → 静 の切り替わり自体が一過性のピークを生む。
- 静止していた被写体が動き出した瞬間。静 → 動 の切り替わりでも同様にノルムが立ち上がる。
- 姿勢が大きく変わる瞬間(立ち上がる・伏せる・体の向きを変えるなど)。
- 画面内に新しい被写体が入ってくる瞬間。フレームに登場するタイミングで一過性のピークが出る。
D持続的な微小運動
- 画面中央付近で小さな対象がちらちらと持続的に動き続けている、構図全体としてはほぼ静止した状況。
- 構図全体は安定しているが、画面の局所領域だけで動きが続いている状況(細かい揺らぎ・ちらつき・反復運動)。
- 画面内をゆっくりと横切る動きが続く場面。派手な動きより低速で連続する動きの方がノルムが高い。
E静寂と緊張
- 被写体が水を口にしている場面。身体的な動きは少ないが、警戒姿勢で緊張感が続いている瞬間。
- 派手な動きはないが、何かが起きる直前の張り詰めた静寂が続く場面。
F同期・複数被写体
- 複数の被写体が同時に何かに反応し、揃って顔を上げた瞬間。同期したリアクションのフレーム。
- 画面の手前と奥で別々の動きが同時に起こっている場面。
G音と画の関係
- 強い音(鳴き声・発声・物音)と同期したフレーム。視覚的に大きな変化がない瞬間でも、音側のイベントに合わせてノルムが上がる。
カテゴリ横断で繰り返し観察された傾向
- 「動きの量」より「動きの意味」。画面が派手に動くフレームより、低速で連続する動き・水を飲む・警戒姿勢など、緊張感を伴う低速シーンの方がノルムは高くなりやすい。
- 「こちらに向かってくる」「顔がこちらを向く」 構図でノルムが立ち上がる。被写体までの距離が縮む、視線が画面側へ移る、といった視聴者へのアフォーダンスがある瞬間に強い反応が出ている。
- 視野内で小さな対象がチラついている 状況。全体としては静かな構図でも、局所的な動きが続くとノルムが上がる。
- 動から静、静から動への切り替わり がイベントとして検出される。連続する状態そのものより、状態が切り替わる遷移点に強く反応する。
- 人物の定点映像でも、顔の向きの変化や、顔の近くに別の物体(手など)が侵入する 瞬間に同様の立ち上がりが見られる。被写体のカテゴリを越えて「顔まわり・接近・遷移」が共通の駆動要因。
- 音側のイベント(鳴き声・発声・物音)と同期したピークも存在する。視覚的に大きな変化がない瞬間でも、音入力がノルムを押し上げる場合がある。
注: 上記は人手による定性的観察であり、複数のピーク事例に基づく所見である。映像の具体的な被写体種別は本レポートでは特定しない。あくまで TRIBEv2 の予測脳活動の傾向であり、実測 fMRI による検証は本実験の範囲外。
2. カテゴリ別 活性度
秒ごとのノルム ‖predst‖₂ をカテゴリ別に比較。動画が多いほど色が薄く、各動画の中央値・90%帯を箱で示す。
3. 半球の活動量バランス(左/右)
各動画の平均ベクトルを左半球(0–10241)と右半球(10242–20483)に分け、それぞれのノルムを比較。値が右上ほど両側活性、対角線から外れるほど非対称。
4. 動画間 類似度(mean activation のコサイン類似度)
各動画の平均活動ベクトルどうしの類似度。同カテゴリがブロックを成すかを確認できる。軸ラベルは匿名 ID (V01〜V18)。
5. PCA — 動画ごとの低次元構造
対象動画の平均活動ベクトルを主成分分析した結果。PC1×PC2平面でカテゴリが分離するかを観察。
6. 応答する皮質頂点(top variance)
全動画プールで分散が大きい上位30頂点。コンテンツによって最も駆動される予測脳領域。
7. カテゴリ弁別マップ(discriminative vertices)
2カテゴリの平均活動ベクトル間で値の振れ幅が大きい上位40頂点について、各カテゴリでの平均活動値をヒートマップで表示。
8. 時間的自己相関
ノルム時系列の自己相関(lag=1, 10, 30, 60秒)。値が大きい=状態が長く持続する。コンテンツの安定性の指標。