← back

Non-Maturity Deposit Modelling

Turning savings and current accounts into a maturity profile
Anindya Kundu · a practical note

What it is

A non-maturity deposit (NMD) — a savings or current account — has money in it but no agreed end date. The customer can withdraw tomorrow or leave it for years. Every other product on the balance sheet has a maturity; these do not. An NMD model gives them one, so they can be placed on the IRRBB maturity ladder honestly rather than dumped into the overnight bucket.

Why a bank needs it

Treating a large, stable savings book as overnight money makes the bank look far more rate-sensitive than it is and distorts both EVE and NII. RBI and Basel (BCBS 368) expect a behavioural treatment, documented and defensible.

The method — an eight-step pipeline

  1. Load balances. Around five years of daily balance data.
  2. Percentage changes. For each day, the percentage drop versus a fixed number of business days back — one look-back per IRRBB bucket (1M = 30 rows, 3M = 90, and so on). The look-back is a row count, not calendar days.
  3. Non-Stable %. Per bucket, take the 95th-percentile worst drop, then de-cumulate so each bucket keeps only its own incremental volatility. The sum is the Non-Stable (flighty) portion; the rest is Stable.
  4. Load MEVs. Monthly macro variables — GDP, repo, 10-year yields, and others.
  5. Regression. Predict Non-Stable % from the economy, so it can be forecast and stressed. A savings book is modelled linear; a current-account book log-linear, which keeps the forecast positive.
  6. Pass-through rate (Beta / PTR). How much of a repo move passes to the deposit rate. That passed-through slice reprices, so it behaves like short money. Current accounts pay no interest, so their PTR is zero and this step is skipped.
  7. Core / Non-Core. See the formula below.
  8. Bucketing. Non-Core goes overnight; Core is spread across the longer buckets, starting at the bucket where volatility stops rising.
Stable  =  1 − Non-Stable
Core  =  Stable × (1 − PTR)  — capped at the BCBS limit of 90%
Non-Core  =  1 − Core  → overnight bucket

A worked example (illustrative)

Take a savings book with Non-Stable around 2% and a pass-through rate around 3.5%:

StepValue
Non-Stable~2%
Stable~98%
Core (raw) = Stable × (1 − PTR)~95%
BCBS cap90% — cap binds
Core (final)90%
Non-Core10% → overnight

A current-account book behaves differently: much higher Non-Stable, zero PTR, and a raw core below the 90% cap — so the cap does not bind and the model's own number is used.

Two enhancements beyond the standard build

How I validate

Every step is tallied to the bank's own validation workbook — the percentage changes, the percentile, the regression coefficients, the final core — agreeing to several decimals before the model is accepted. A subtle point that matters in practice: workbook column headers are often stale or mislabelled, so the formula cells, not the labels, are treated as authoritative.

Implementation

The method is platform-independent. I have built it in SAS (with SAS/STAT and SAS/ETS); the same logic builds in Python or R. The model is the decision, not the tool.

All figures are illustrative and show methodology only. This note does not reproduce any client's data, parameters, or code.