銀行全体へ広げる · E3

Digital Twin:事実を凍結して、別の未来を計算する

v20は銀行を予言する装置ではない。実績、仮定、月次の因果、再現性を分け、模型の出力を説明するための仕組みだ。

本文の説明・図・掲載コードだけで読み進められます。出典リンクは、権限のある人向け(非公開GitHub)です。GitHubで閲覧権限がある方だけ開けます。

この記事でわかること

  • 凍結した実績、シナリオ、モデルのパラメータ、シード値を混ぜない
  • 政策金利から預金量・貸出・調達・予測会計までを月ごとに追う
  • 再現できる試算でも、現実の予測精度や安全を保証するわけではない
この記事の目次
01 / READ THE SYSTEM

1. 最初に作るのは、未来ではなく「出発点の写し」

Digital Twinという名前から、現実の銀行をそっくり再現する装置を想像するかもしれません。MiniBankのv20は、学習用銀行の実績を一時点で写し取り、明示した架空の仮定の下で、別の条件なら数字がどうつながるかを計算する模型です。将来を保証するものでも、実際の市場データから学習した予測器でもありません。

出発点の写しをベースラインと呼びます。基準銀行と追加entityの試算表、グループ内の相互勘定、Treasuryの位置と方針、預金商品の価格と契約金利、融資残高と延滞区分、承認済みのリスクパラメータを集めます。取得時刻や論理営業日、入力元の利用可能性、警告も一緒に保存します。その後に実際の預金や貸出が動いても、保存済みのベースラインは書き換えません。

なぜ凍結するのでしょうか。午前の銀行と午後の銀行を材料に別々のシナリオを計算すると、差が金利の影響なのか、途中の取引の影響なのか切り分けられないからです。同じ出発点を固定して初めて、仮定を変えた比較に意味が生まれます。

欠けた材料にも意味を付けます。Treasuryの材料がなければ実行を拒み、預金価格の版がなければ架空の市場値を代わりに使ったと警告します。リスクのパラメータがなければ、その段階だけ欠測として理由を返します。数字を0に置き換えて、そろっているようには見せません。

出典:ベースラインの構成・凍結・欠測の扱い(非公開GitHub・要権限)

02 / READ THE SYSTEM

2. 事実、シナリオ、パラメータ、シードを分ける

ベースラインが「いま何があるか」なら、シナリオは「何が起きたと置くか」です。政策金利を何bp動かすか、1か月目に何%の預金が一時的に流出するか、何か月先まで計算するかを定めます。範囲は金利ショックが±500bp、初月の流出が0〜50%、期間が1〜24か月です。100bpは1.00パーセントポイントを表します。

モデルのパラメータは、その変化に銀行と顧客がどう反応すると置くかです。v20には九つあります。預金金利の追随率、定期金利を毎月付け替える割合、価格差に対する預金量の感応度、流入の強さ、月次の揺れ、そして新規貸出の上乗せ金利・量・需要の感応度・返済割合です。いずれも実績から推定した値ではなく、説明可能な架空の仮定です。

シード値は、月次の小さな揺れを同じ順番で再現するための番号です。「乱数を使うから確率的に正しい」という意味ではありません。同じシードを使えば、比較のたびに偶然の揺れが変わって結論を曇らせることを避けられます。

01凍結した事実出発点の残高と契約
02シナリオ金利・初月流出・期間
03モデルの版反応の強さを決める仮定
04シード値月次の揺れを再現する番号

出典:四つの入力と九つのパラメータ(非公開GitHub・要権限)

03 / READ THE SYSTEM

3. 月次の前半:金利が、価格と数量へ伝わる

計算は毎月、同じ順序で進みます。第1段階で政策金利を基準値とショックから決め、第2段階で預金金利へ伝えます。普通預金は追随率で金利を変え、定期預金は毎月一定割合だけ新しい金利へ付け替える模型です。過去の本物の契約を変更する処理ではありません。

説明用に、普通預金1,000万円、商品金利0.10%、政策金利ショック+100bp、追随率0.3を考えます。模型の普通預金金利は0.40%になります。市場金利の上昇幅1.00%に対し0.30%しか追随しないため、差が残ります。第3段階では、この差を預金量へ伝えます。初期の感応度0.10を使い、一時的な流出と揺れを除いて見ると、1か月の流出は約5万8,333円です。これは利用者が実際に引き出す予測ではなく、置いた式の結果です。

この模型の式は、金利差をパーセントポイント単位の数値で使います。市場の上昇幅1.00から預金金利の上昇幅0.30を引くと、追随しなかった差は0.70です。一時的な流出と揺れを除いたこの例は、1,000万円×感応度0.10×差0.70÷12=約5万8,333円となります。12で割って月次の量にする規則まで含めて、模型の仮定です。

第4段階は調達コストです。月初の残高から預金と借入の利息を計算します。預金利息は普通預金へ入金したと置き、借入利息は現金から払ったと置きます。利息が残高へ戻ることで、翌月の計算材料も変わります。

第5段階は貸出需要と収益です。既存貸出の固定金利は遡って変えず、新しい貸出の量と金利を変えます。架空の貸出残高合計1,200万円、月次新規貸出割合3%、需要感応度0.15、+100bpなら、新規貸出量は36万円×0.85=30万6,000円です。金利上昇で一本あたりの利息を多く取れるとしても、借りたい量が減るという反対向きの力が入ります。

出典:月次の第1〜5段階と計算式(非公開GitHub・要権限)

04 / READ THE SYSTEM

4. 月次の後半:資金不足から予測の会計へ

第6段階では、中央銀行預け金や短期運用の利息と、その月の現金の出入りをつなぎます。第7段階では、預金に対して必要な余裕資金に届かない分を月末の借入で埋めます。その借入の利息が発生するのは翌月からです。ここを同じ月にも課すと、借りる前の期間に費用を付ける誤りになります。

第8段階では、予測の貸借対照表と損益計算書を組み立てます。BSはその時点で何を持ち、何を返す義務があるか、PLは期間中にどの収益と費用が生じたかを表します。模型は、資産を残高から、資本を元の資本と損益から別々に求め、毎月一致を確かめます。単に差額を資本へ押し込めて帳尻を合わせるのではありません。

さらに、円に丸めた同じ金額を借方と貸方の両側へ使い、期末の試算表でも会計上のつり合いを確認します。追加entityでは現金の利息だけを動かし、連結はv19と同様に相互勘定の対応する部分を報告上で消去します。全entityに顧客融資モデルを持たせているわけではありません。

第9段階はリスクへの接続です。予測期末の貸出と流動性を、v18の信用・ALMの式へ渡します。既存貸出は区分の比率を保ったまま返済で減らし、新規貸出は正常区分として扱います。期待損失は表示しますが、予測のPLへ費用として入れません。会計の整合とリスクの評価は、関連していても別の確認です。

出典:月次の第6〜9段階、独立した会計恒等式、リスク接続(非公開GitHub・要権限)

出典:画面に返す九つの段階と実績・予測の型(非公開GitHub・要権限)

05 / READ THE SYSTEM

5. 再計算できることと、現実に当たることは違う

各実行には、使ったベースライン、シナリオの写し、モデルの版、式の版、シード値、結果とそのハッシュを保存します。ハッシュは保存内容を照合するための目印です。計算の中心であるtwin.simulateは、現在の表や時計を読み直さず、与えられた入力だけから結果を作ります。保存した入力で再計算し、保存結果と同じになるかを確かめられます。

比較は、同じベースライン、同じモデルの版、同じシード値の実行どうしに限ります。これなら、たとえば金利ショックを変えた差を読みやすくなります。モデルそのものの影響を調べる感応度分析では、各パラメータを一つずつ上下20%動かし、許容範囲内に収めて結果の変化を見ます。複数の仮定が同時に変わる相互作用までは測りません。

結果の各段階には、式、入力、出力、上流の段階、会計に相当する動きが残ります。「利益が落ちた」という結論だけでなく、「預金流出で借入が増え、翌月の支払利息が増えた」という説明を作るためです。

ただし、同じ入力から同じ答えが出ることは、式の前提が現実に合っている証明ではありません。再現性は計算の説明を助けますが、予測精度には別のデータ、検証、モデル評価が必要です。v20はその精度を保証しません。

出典:純粋な計算、再計算、比較、感応度分析(非公開GitHub・要権限)

06 / READ THE SYSTEM

6. 予測は元帳に入れず、見る権限も守る

模型が「150万円借りる」と計算しても、銀行の正式な借入にはなりません。v20の書込み先はtwinの記録と監査ログで、Posting Engineや元帳、グループ内移動の処理を呼ばない設計です。画面でも「実績(元帳)」と「予測(模型の出力)」を別のラベル・枠・色で示します。色だけに頼らず、言葉で区別することにも意味があります。

管理者なら誰でもグループ全体を見られるわけではありません。管理責任者は全entityと連結を見られますが、通常の担当者には基準銀行と役割のあるentityだけを返し、他entityの残高、相互勘定、連結を隠します。計算のために保存した入力はそのままに、返す内容を権限で絞ります。模型を新設したことで、既存の法人別の閲覧制限を迂回させないためです。

モデルの版は提案者とは別の管理責任者が承認します。また復旧中の書込停止では、モデルやシナリオの設定変更は止めますが、観測としてのベースライン取得と実行記録は許します。診断に役立つ一方、復旧途中の状態を写し得るので、その時点と警告を読む必要があります。

現行のdigest版3ではモデルとシナリオの設定は復旧検証の対象です。一方、診断記録であるベースラインと実行は対象外で、復元で失われても検知しません。「模型に関するすべてが同じように保護される」と考えないことが重要です。

出典:元帳との分離、役割、書込停止とdigest版3(非公開GitHub・要権限)

出典:返す内容をentityの権限で絞る実装(非公開GitHub・要権限)

07 / READ THE SYSTEM

7. この模型を、判断の出発点として使う

v20では預金や貸出が細かく描かれても、すべての動きを入れてはいません。定期預金の元本は満期や更改で動かさず、金利だけを付け替えます。借入は返済せず、顧客の延滞やデフォルトの区分遷移、繰上返済、定期預金の中途解約も扱いません。手数料、営業費用、税、配当、為替、時価評価、規制比率も対象外です。

既存貸出の利息は現金で受け取る簡略で、実際の未収計上と回収の時差は動かしません。模型の仮定を実績へ当てはめる調整、信頼区間、多数の試行から確率分布を推定する分析もありません。シードを変えて複数の線が出たとしても、それだけで「この範囲に将来が収まる確率」を語ることはできません。

実績との差を見る機能は、凍結時の実績、いまの実績、1か月目と期末の予測を別欄で返します。その差には、実際の取引、時間の経過、模型の仮定が混ざっています。どれが原因かを自動的に分解するわけではありません。元の実績の会計が崩れている場合も警告し、模型で覆い隠しません。

ここまで読むと、Digital Twinに投げる良い問いが変わります。「来年の利益はいくらか」と一つの答えを求めるより、「同じ出発点で、預金の追随率を変えると資金不足の経路はどう変わるか」「結論が最も依存する仮定は何か」と問います。事実と仮定を区別し、途中の因果を示し、限界を残したまま説明することが、この模型の価値です。

出典:模型の単純化、実績との差、予測保証をしない範囲(非公開GitHub・要権限)

SOURCE NOTES

出典と、確認できた範囲

コードの説明と、稼働環境の検証を分けます

以下のリンクは非公開GitHubへの出典で、閲覧権限が必要です。本文はリンク先を開かなくても読める構成です。固定コード・設計資料を参照していますが、今回、この読み物のために銀行の取引やDB操作、本番試験は実行していません。実装や資料にある検査と、こちらで実施した検証を混同しないようにしています。

  1. v20 Digital Twinの現行契約 ↗(非公開GitHub・要権限)
    凍結した事実、九つのパラメータ、月次因果、再現性、役割、分離、限界
  2. Digital Twinの結果の型 ↗(非公開GitHub・要権限)
    九段階の出力、実績と予測のラベル、比較・感応度・権限制限
  3. Digital Twinの基礎実装 ↗(非公開GitHub・要権限)
    入力凍結・模型・実行記録の責任分離
  4. v20の権限制限の補強 ↗(非公開GitHub・要権限)
    保存内容を維持しながらentity別に応答を絞る処理

MiniBankは学習・検証用の銀行アプリです。架空の金額や人物は、仕組みを説明するための例です。

つながる読み物

ここまで読んだ記録を、ひとつ。

自分のペースで。あとから取り消すこともできます。

全記事の目次へ戻る→