1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LSTMからハイブリッドへ:降雨流出解析プロトタイプ作成 Step 3 タンクモデル + LSTM残差補正を実装する

1
Posted at

LSTMからハイブリッドへ:降雨流出解析プロトタイプ作成 Step 3 タンクモデル + LSTM残差補正を実装する

はじめに

前回までに、以下の2段階を作成しました。

Step 1:
  LSTM単独モデル

Step 2:
  実効雨量・先行降雨指数などの水文特徴量を追加

今回は Step 3 として、タンクモデルなどの物理・概念モデルを追加し、さらにLSTMで残差を補正するハイブリッドモデルを作成します。

プロトタイプ名は以下です。

RainfallRunoffHybrid_Prototype_r001

参考のために、ZIPファイルを置いておきますので、ダウンロードして活用してください。


今回の目的

今回の目的は、以下です。

1. 簡易タンクモデルで物理モデル流量 Q_phys を計算する
2. 観測流量 Q_obs との差 residual を求める
3. LSTMで residual を学習する
4. Q_hybrid = Q_phys + residual_pred として最終流量を計算する
5. タンクモデル単独とハイブリッドモデルを比較する

モデルの考え方

Step 1・Step 2では、LSTMで流量を直接予測しました。

雨量・気温・蒸発散量・水文特徴量
        ↓
LSTM
        ↓
流出高 q_mm_day

一方、Step 3では、まずタンクモデルで流量を計算します。

雨量・蒸発散量
        ↓
タンクモデル
        ↓
物理モデル流量 Q_phys

その後、観測流量との差を残差として定義します。

residual = Q_obs - Q_phys

LSTMはこの残差を学習します。

入力:
  雨量・気温・蒸発散量
  実効雨量
  API
  累積雨量
  前日流量
  物理モデル流量 Q_phys

出力:
  residual_pred

最終的な流量は以下です。

Q_hybrid = Q_phys + residual_pred

全体イメージ

step 3の全体イメージです。

ChatGPT Image 2026年7月5日 17_20_12.png


フォルダー構成

RainfallRunoffHybrid_Prototype_r001/
├─ docker/
│  ├─ Dockerfile
│  └─ requirements.txt
├─ docker-compose.yml
├─ .env
├─ configs/
│  ├─ hybrid_config.yaml
│  └─ hybrid_config_quick.yaml
├─ data/
│  ├─ raw/
│  └─ processed/
├─ src/
│  ├─ generate_sample_data.py
│  ├─ preprocess.py
│  ├─ hydrology_features.py
│  ├─ model_tank.py
│  ├─ datasets.py
│  ├─ model_lstm.py
│  ├─ train_hybrid.py
│  ├─ evaluate.py
│  ├─ predict.py
│  ├─ metrics.py
│  └─ utils.py
├─ outputs/
│  ├─ models/
│  ├─ figures/
│  ├─ metrics/
│  └─ predictions/
├─ scripts/
└─ docs/

追加した主なファイル

ファイル 内容
src/model_tank.py 2段タンクモデル
src/preprocess.py 水文特徴量とタンク流量、残差を作成
src/model_lstm.py LSTM残差補正モデル
src/train_hybrid.py 残差LSTMの学習
src/evaluate.py タンク単独とハイブリッドの評価
configs/hybrid_config.yaml 通常設定
configs/hybrid_config_quick.yaml 簡易テスト設定

タンクモデル

今回のタンクモデルは、プロトタイプ用の簡易2段タンクモデルです。

雨量 P
  ↓
上段タンク
  ├─ 速い流出 Q_quick
  └─ 下段タンクへ浸透
        ↓
      下段タンク
        └─ 遅い流出 Q_slow

タンクモデルイメージ図
ChatGPT Image 2026年7月5日 17_26_22.png

最終的な物理モデル流量は以下です。

Q_phys = Q_quick + Q_slow

この Q_phys をLSTMの入力にも使います。


学習対象

LSTMの学習対象は、観測流量そのものではなく、タンクモデルの残差です。

residual = Q_obs - Q_phys

これにより、LSTMは物理モデルが表現しきれなかった非線形応答やバイアスを補正します。


設定ファイル

features:
  dynamic_inputs:
    - precip_mm
    - temp_c
    - pet_mm
    - eff_rain_hl7_mm
    - eff_rain_hl30_mm
    - api_k85_mm
    - api_k95_mm
    - rain_sum_3d_mm
    - rain_sum_7d_mm
    - rain_sum_30d_mm
    - q_prev_mm_day
    - doy_sin
    - doy_cos
    - q_phys_mm_day

Step 2の特徴量に、q_phys_mm_day を追加しています。


実行方法

簡易テスト

docker compose run --rm rainfall-runoff-hybrid bash scripts/run_quick_test.sh

個別に実行する場合

docker compose run --rm rainfall-runoff-hybrid python src/generate_sample_data.py
docker compose run --rm rainfall-runoff-hybrid python src/preprocess.py --config configs/hybrid_config.yaml
docker compose run --rm rainfall-runoff-hybrid python src/train_hybrid.py --config configs/hybrid_config.yaml
docker compose run --rm rainfall-runoff-hybrid python src/evaluate.py --config configs/hybrid_config.yaml

出力される図

outputs/figures/
├─ loss_curve_hybrid.png
├─ hydrograph_hybrid_test.png
├─ scatter_obs_pred_hybrid.png
└─ residual_comparison_hybrid.png

ハイドログラフ比較図

![観測流量・タンクモデル・ハイブリッドモデルの比較](./outputs/figures/hydrograph_hybrid_test.png)

散布図

![観測値と予測値の散布図](./outputs/figures/scatter_obs_pred_hybrid.png)

残差比較図

![残差比較図](./outputs/figures/residual_comparison_hybrid.png)

評価指標

評価では、以下の2つを比較します。

1. tank_physical
2. hybrid_tank_lstm

評価指標は以下です。

指標 内容
NSE 観測流量と予測流量の一致度
KGE 相関・ばらつき・バイアス
RMSE 平均二乗誤差の平方根
MAE 平均絶対誤差
Bias 全体的な過大・過小評価
Peak Error ピーク流量誤差

今回の位置づけ

今回の RainfallRunoffHybrid_Prototype_r001 は、LSTM単独モデルからハイブリッドモデルへ進む最初の段階です。

Step 1:
  LSTM単独モデル

Step 2:
  水文特徴量を追加したLSTM

Step 3:
  タンクモデル + LSTM残差補正

この段階では、まだ高度な物理制約付きモデルや微分可能水文モデルは使いません。

まずは、物理モデルの出力をLSTMで補正する、分かりやすいハイブリッド構成を確認します。


注意点

今回のタンクモデルは、プロトタイプ用の簡易モデルです。
実流域へ適用する場合は、以下が必要です。

  • タンクモデル構造の妥当性確認
  • パラメータ同定
  • 実測雨量・流量による検証
  • 洪水イベントごとの評価
  • 水収支の確認
  • 未経験豪雨に対する外挿性の確認

まとめ

今回は、降雨流出解析プロトタイプのStep 3として、タンクモデル + LSTM残差補正を実装しました。

RainfallRunoffHybrid_Prototype_r001

この構成では、物理モデルの説明性を残しつつ、LSTMで残差や非線形応答を補正します。

次の段階では、タンクモデルのパラメータ最適化や、微分可能タンクモデルへの拡張を検討できます。


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?