学習・技術検証用デモ — 本システムは実際の銀行サービスではありません。

公開情報をもとに構築した教育目的のシステムです。実在する個人情報・口座情報・機密情報・認証情報等を入力しないでください。

ミニ銀行ACADEMY SYSTEM LEARNING
教材メニュー
学習進捗0 / 134
あと134項目
ADVANCED · 発展COURSE 09 · BANKING ENGINEERING

銀行エンジニアリング 34:同じ時点の入力(スナップショット)と信用リスク

リスクを比べるには、同じ時点の同じデータで測る必要があります。入力を1つに凍結し、信用リスクを期待損失として計算します。MiniBank v18の式と、欠測の扱いを確かめます。

44 / 55
BANKING ENGINEERING · 銀行エンジニアリング

v8以降に実装した台帳・記帳エンジンなどを実際に動かし、正常時と異常時の両方から銀行システムの構造を学ぶ。

Prerequisite: BANKING SYSTEM

LEARNING GOALS

このページで学ぶこと

  • 入力を凍結する理由
  • 期待損失 = EAD × PD × LGD
  • 欠測を 0 とみなさない

PLAIN LANGUAGE

まず、ここだけつかむ

1

リスクを比べるには、同じ時点の入力(スナップショット)で測る必要があります。

2

信用リスクは、期待損失 = EAD × PD × LGD で、延滞の区分ごとに計算します。

3

入力が欠けたときは 0 とみなさず、理由と一緒に『欠測』として示します。

DIFFICULT PARTS, STEP BY STEP

難しいポイントを、順番にほどく

専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。

01

EAD/PD/LGD

やさしく言うと

貸出残高/返せなくなる確率/返せなくなったときの損失の割合です。

なぜ必要?

『返ってこない可能性』を金額で表すためです。

Minibankでは

risk.credit_calc。架空の仮定で、区分ごとの確率。

02

スナップショット

やさしく言うと

ある時点の入力を凍結した記録です。

なぜ必要?

あとから同じ結果を再現するためです。

Minibankでは

risk.snapshots。追記専用、入力ハッシュつき。

03

欠測

やさしく言うと

入力が得られないことです。

なぜ必要?

0 と区別しないと、リスクを過小に見積もるためです。

Minibankでは

sources の MISSING と理由。依存する指標は null。

Level 1 基礎:昼に測ったリスクと、夜に測ったリスクは比べられない

リスクの数字は、その時点の貸出、預金、障害の状況で決まります。測るたびに入力が変わると、数字が変わった理由が『状況が変わったから』なのか『測り方を変えたから』なのか分かりません。そこで、入力を1つの時点に凍結(スナップショット)し、その凍結した入力から、いくつものシナリオを計算します。

入力何を凍結するか
信用有効な融資契約ごとの、元金残高、未収利息、延滞の区分
ALM資金の位置、満期別のギャップ、方針、市場の基準値
預金価格営業日に有効な価格と、預金・定期預金の残高
インシデント過去90日の障害と、まだ解決していない障害の重大度・所要時間

Level 2 銀行業務:期待損失の計算

融資が返ってこない可能性を、金額で表したものが期待損失です。

期待損失 = EAD(貸出残高+未収利息)× PD(返せなくなる確率)× LGD(返せなくなったときの損失の割合)。延滞の区分ごとに確率を変えます。

  • ストレスでは、PD を2倍にし、LGD に10ポイントを足します(どちらも上限は100%)。上の表なら合計は209,000円になります。PD と LGD は教育用の架空の仮定で、実在の統計ではありません。
区分EADPDLGD期待損失
現在(延滞なし)1,000,000円1%45%4,500円
延滞(1〜29日)500,000円10%45%22,500円
30日以上の延滞200,000円40%45%36,000円
デフォルト確定100,000円100%45%45,000円
合計1,800,000円——108,000円(損失率 6%)

Level 3 システム:MiniBankでの実装

  • risk.capture が入力を凍結し、md5の入力ハッシュを付けて追記専用に保存する。状態が変わらなければ、2回取っても同じハッシュになる
  • 延滞の区分は、融資の画面と同じ規則(lending.aging)で決める。デフォルトを確定した契約は DEFAULT_CONFIRMED
  • 未収利息の計上が営業日に追いついていない契約は、入力に含めたうえで『古い未収利息』の注意を記録する。黙って0とみなさない
  • 算出は risk.credit_calc のような純粋な関数(読むのは引数だけ)。現在の時刻も、現在のGLも読まないので、あとから同じ結果を再現できる
  • 契約が0件でも、入力元は『欠測』ではなく正当な0件。ただし損失率は作らない(0除算を避け、null にする)

異常時:入力元が欠けている

段階内容
症状管理画面に『欠測の入力があります』と出る。市場・流動性の欄が『欠測』
原因の例Treasuryの方針の行が無い
MiniBankの動きその指標は値を出さず、理由を示す。合算からは除き、除いたことを明記する。預金価格が欠けたときだけは、預金金利にv13の市場の仮定を使い、そう置いたことを警告に残す
対応入力元を直してから、新しいスナップショットを取る。過去のスナップショットは変えない

Level 4 アーキテクチャ:再現できることが信頼の土台

リスクの計算を『いつ、誰が、何に基づいて』再現できないと、説明も監査もできません。入力の凍結、パラメータの版、シナリオ、モデルの版を全部保存し、同じ組み合わせなら同じ結果になるようにします。

どこを確認すればよいか

  • 管理画面『リスク管理』:スナップショットの一覧(入力元の状態・注意)、信用リスクの内訳
  • Lab:延滞した契約を作り、区分が変わることを確かめる

CHECK YOUR UNDERSTANDING

3問で理解チェック

答えを頭の中で考えてから、各項目を開いて確認してください。

Q1延滞30日以上の契約のPDは?
答え

架空の仮定で 40% です(承認済みの版)。

Q2契約が0件のとき、損失率は?
答え

作りません(null)。0除算を避けます。

Q3スナップショットを後から書き換えられますか?
答え

できません。追記専用で、入力ハッシュが合わなくなります。

ここまで読めましたか?

完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。

SOURCE TRAIL

根拠と関連教材

CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。

確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。

Implementation Status: IMPLEMENTED IN MINIBANK(この教材が扱うコードの範囲)

  • RELATED LESSON/docs/be-lending-delinquency-default延滞とデフォルトの区分
  • RELATED LESSON/docs/be-risk-market-liquidity-operational金利・流動性・オペレーショナル
  • CURRENT IMPLEMENTATIONsupabase/migrations/20260930140000_v18_risk.sqlrisk.capture融資・ALM・預金価格・インシデントを1つの時点に凍結する(欠測と注意を記録)
  • CURRENT IMPLEMENTATIONsupabase/migrations/20260930140000_v18_risk.sqlrisk.credit_calc信用リスク:EAD × PD × LGD(区分ごと、円未満切り捨て)
  • CURRENT IMPLEMENTATIONscripts/banking/v18-risk.test.mjs式の手計算、v13との一致、凍結と再現、欠測、元帳を書かないこと、決裁のDBテスト