PD, LGD and EAD — the model parameters
PD, LGD and EAD are the three numbers that, multiplied together, give Expected Credit Loss. Each has its own data source, owner and approval process. Getting them wrong is the difference between a defensible audit and a qualified opinion.

The ECL formula
For Stage 1 loans, ECL is the present value of credit losses expected over the next 12 months: ECL = EAD × PD_12m × LGD × discount. For Stage 2 and 3, lifetime PD replaces 12-month PD, and the calculation is summed across each year of remaining life.
eir is the effective interest rate of the loan, captured at origination. lifetime_pd_curve is built from segment-level PD term structures stored in ifrs9.assumption.
# Stage 1 — 12-month ECL
ecl = ead * pd_12m * lgd * discount_factor
# Stage 2/3 — lifetime ECL
ecl = 0.0
for year in range(1, remaining_life_years + 1):
pd_marginal = lifetime_pd_curve[year] - lifetime_pd_curve[year - 1]
ead_year = expected_outstanding_at_year(year)
discount = 1.0 / ((1.0 + eir) ** year)
ecl += ead_year * pd_marginal * lgd * discount
PD — probability of default

PD is the probability that a loan will default within a given horizon. We calibrate PD per portfolio segment — a combination of product, member type and loan band — because default behaviour is materially different across segments. A KES 5,000 emergency loan to a long-standing member behaves nothing like a KES 2M business loan to a six-month-old member.
Calibration is annual, with a quarterly review. The annual recalibration uses 3 years of historical default data, fits a logistic regression on origination characteristics, and produces a PD term structure (12m, 24m, 36m, 48m, 60m) per segment.
| Segment | PD 12m | PD lifetime (36m) | Data source |
|---|---|---|---|
| NORMAL × Tenured ≥ 24m × Band 1 (≤50k) | 1.2% | 3.4% | Internal default register 2023-2026 |
| NORMAL × Tenured 12-24m × Band 2 (≤250k) | 3.8% | 9.7% | Internal default register |
| NORMAL × New < 12m × Band 1 | 6.4% | 14.1% | Internal + peer benchmark |
| EMERGENCY × Any × Band 1 | 4.1% | 5.2% | Internal (mostly 3-month tenor) |
| GROUP × Group ≥ 18m × Band 2 | 2.1% | 6.8% | Internal group default register |
| AGRICULTURE × Smallholder × Band 1 | 5.8% | 13.4% | Internal + AFC benchmark |
| BUSINESS × SME × Band 3 (≤1M) | 4.2% | 11.7% | Internal + CRB scorecard overlay |
LGD — loss given default
LGD is the percentage of the exposure that is lost after recovery efforts. A loan secured by clean title to land has a very different LGD than an unsecured emergency loan. LGD is calibrated per collateral type using actual recovery data from the last 36 months of write-offs.
| Collateral type | LGD | Recovery basis |
|---|---|---|
| Unsecured (clean) | 75% | Average actual recovery 2023-2026 |
| Chattel — vehicle (registered logbook) | 45% | Auction value 60% of MSRP, 24-month sale period |
| Chattel — household goods | 65% | Limited resale market |
| Land (title held) | 25% | Average sale at 75% of valuation |
| Land (charge only) | 40% | Slower realisation, partial recoveries |
| Group guarantee (Chama) | 35% | Internal group cohesion recoveries |
| Salary check-off (employer MoU) | 20% | Direct deduction, low loss |
| Savings collateral (member's own savings) | 5% | Set-off on default |
Σ (collateral_value × lgd) / total_exposure, floored at 5% and capped at 75%.EAD — exposure at default
EAD is what the lender stands to lose at the moment of default. For closed-end loans it is the outstanding principal plus accrued interest. For revolving facilities (overdraft, credit line) it adds undrawn commitment × a Credit Conversion Factor (CCF).
EAD is computed live by the engine from mfi.loan at the snapshot date. No manual override is permitted — if the EAD looks wrong, the underlying loan record is wrong.
| Product type | EAD formula |
|---|---|
| Closed-end loan (Stage 1/2) | outstanding_principal + accrued_interest |
| Closed-end loan (Stage 3) | outstanding_principal + accrued_interest – specific allowance |
| Revolving facility | drawn + undrawn × CCF (50%) |
| Group joint-liability loan | outstanding for the named borrower only; cross-default handled by staging rule |
Versioning and approval
Every assumption row is versioned. When the Risk Manager updates a PD or LGD, the old row is end-dated and a new row is created with the new value and a forward effective date. Runs already posted are not affected; the next run picks up the new assumptions.
- Risk Manager opens IFRS 9 → Configuration → Assumptions and clicks New version.
- System creates draft versions of all rows.
- Risk Manager edits PD / LGD values, attaches calibration memo.
- Risk Committee reviews — typically annually at year-end recalibration.
- CFO approves; effective date is set to the next quarter-end.
- Old version is end-dated; new version is the active assumption set.
ifrs9.manager permission and are flagged in the audit pack as 'assumption edited in place'.Discounting
ECL is discounted at the original effective interest rate (EIR) of the loan, captured at origination on mfi.loan.eir. EIR includes interest, fees and any premium/discount amortised over the life of the loan. For loans originated before EIR was captured (legacy migration), the nominal rate is used and the variance is documented in the audit pack.
Worked scenarios
Scenario — Annual PD recalibration — 2026 year end
| Character | Role |
|---|---|
| Kimani Mwangi | Risk Manager |
| Florence Achieng | CFO |
| David Karanja | Internal Audit |
| Aisha Hassan | External Audit Partner |
Timeline
- Nov 5: Kimani exports 36 months of default history per segment. 4,184 origination cohorts, 312 defaults. (ifrs9.defaults.export)
- Nov 12: Kimani fits logistic regression. New PD term structures generated. (Calibration memo drafted)
- Nov 20: Largest change: GROUP × Tenured PD 12m falls from 2.8% to 2.1% (clean year). NEW MEMBER × NORMAL PD 12m rises from 5.9% to 6.4%. (Diff report)
- Nov 28: Risk Committee reviews; one queries: 'Why is BUSINESS PD flat at 4.2% when CBK rate rose 200bps?' Kimani adds a macro overlay sensitivity to the memo. (Memo v2)
- Dec 5: Risk Committee approves new PDs effective 31-Dec. (Minute 6.4)
- Dec 18: Kimani creates new assumption version in system. CFO approves. Old version end-dated 30-Dec. (ifrs9.assumption v2)
- Dec 31: Q4 run uses new PDs. Total ECL impact of recalibration: +KES 0.4M (net of all segments). (ECL bridge attribution)
- Feb 8 (next year): Aisha samples 10 segments. Confirms calibration memo, sign-offs, and rebases each PD against her own back-test. All within tolerance. (Audit pack section 5)
Outcome — PD framework refreshed annually; auditor signs off without management letter point.
Reference
ifrs9.assumption fields
| Field | Type | Notes |
|---|---|---|
| assumption_type | Selection | pd_12m | pd_lifetime | lgd | ccf |
| segment_id | Many2one | Portfolio segment (product × tenure × band) |
| collateral_type | Selection | For LGD rows; unsecured/vehicle/land/etc |
| value | Float | Decimal probability (0.012 = 1.2%) or percentage as configured |
| valid_from | Date | First run date this applies to |
| valid_to | Date | Last run date; blank = current |
| version | Char | Calibration version label e.g. 'v2026.1' |
| calibration_memo_id | Many2one(ir.attachment) | PDF of calibration evidence |
| approved_by | Many2one(res.users) | CFO or Risk Manager |
| approved_date | Datetime | Sign-off timestamp |
Standard segment codes
| Code | Product | Member tenure | Loan band |
|---|---|---|---|
| NRM-T-B1 | Normal | ≥ 24 months | ≤ KES 50k |
| NRM-T-B2 | Normal | ≥ 24 months | ≤ KES 250k |
| NRM-M-B1 | Normal | 12-24 months | ≤ KES 50k |
| NRM-N-B1 | Normal | < 12 months | ≤ KES 50k |
| EMG-A-B1 | Emergency | Any | ≤ KES 50k |
| GRP-T-B2 | Group | Group ≥ 18 months | ≤ KES 250k |
| AGR-S-B1 | Agriculture | Smallholder | ≤ KES 50k |
| BUS-S-B3 | Business | SME | ≤ KES 1M |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Run errors with NoAssumptionForSegment. | A loan's segment has no active PD assumption row for the run's period_end. | Open IFRS 9 → Assumptions, check that the segment has rows with valid_from ≤ period_end ≤ (valid_to or open). Create or extend the missing version. |
| EAD on a Stage 3 loan looks too high. | Specific allowance is not being netted, usually because the prior period's allowance was reversed but not re-recognised. | Check mfi.loan.specific_allowance. If empty, run IFRS 9 → Tools → Recompute specific allowances for the period. |
| LGD comes out as 0% — ECL effectively zero. | Collateral type defaulted to 'savings collateral' (5%) and a value above the loan amount, so the engine treats it as fully cash-collateralised. | Verify on the loan: collateral_value ≤ loan amount. If excess collateral was captured, correct the value; LGD will reflect the true secured fraction. |
| Calibration memo missing from audit pack. | Memo was attached to the wrong assumption row, or to the user record instead of the assumption. | Open the active assumption row, scroll to the Calibration evidence tab, attach the PDF. Audit pack regenerates on next run or via Audit pack → Refresh. |
| PD doubled overnight on one segment. | New version was created with valid_from in the past — engine retroactively applied it. Should not happen with proper versioning. | Edit the new version, set valid_from to the next quarter-end. The current run will re-use the previous version. Document the near-miss in the change register. |

