PricingLab

Insurance ALM: Solvency II balance sheet

PricingLab by Raganel Consulting, powered by MatLogica AADC

What it values

An insurer that has taken over a pension scheme’s obligations (a bulk annuity) must pay those pensions for decades, and holds bonds to do it. Under Solvency II, the European and UK capital regime, it has to show regulators a balance sheet: what the bonds are worth, what the promised pensions are worth (the best-estimate liability, BEL), an extra margin on top (the risk margin), the capital left over (own funds), the capital the rules require (the solvency capital requirement, SCR) and the ratio of the two (the solvency ratio). This model builds that balance sheet for a book of 1,200 pension members backed by 21 bonds. It also returns, from a single calculation, how the liability, the assets and the own funds move with each of the 21 assumptions behind them.

Who uses this kind of number

Actuaries and ALM (asset-liability management) teams at life insurers, reinsurers and bulk-annuity providers; investment teams matching bonds to pension payments; and risk and capital teams that explain to the board and the regulator why the solvency ratio moved.

Inputs

NameUnitDefaultMeaning
zero_1yfraction0.0435Zero-coupon rate at 1 year
zero_2yfraction0.042Zero-coupon rate at 2 years
zero_3yfraction0.041Zero-coupon rate at 3 years
zero_5yfraction0.04Zero-coupon rate at 5 years
zero_7yfraction0.0398Zero-coupon rate at 7 years
zero_10yfraction0.0402Zero-coupon rate at 10 years
zero_15yfraction0.0415Zero-coupon rate at 15 years
zero_20yfraction0.0425Zero-coupon rate at 20 years
zero_25yfraction0.0428Zero-coupon rate at 25 years
zero_30yfraction0.043Zero-coupon rate at 30 years
spreadfraction0.0095Investment-grade credit spread
longevitymultiplier1.0Multiplier on base mortality (below 1 = people live longer)
improvementfraction/yr0.0125Annual mortality improvement
inflationfraction/yr0.032RPI inflation (drives pension escalation, capped 5%)
expense_ppGBP/yr68Administration expense per policy
expense_inflfraction/yr0.035Expense inflation
makeham_aper yr0.00022Gompertz–Makeham A (age-independent mortality)
makeham_bper yr0.0000385Gompertz–Makeham B (scale of age-dependent mortality)
spread_hyfraction0.031High-yield spread (no effect on the gilt-ladder book)
equity_levelmultiplier1.0Equity level (no effect on the gilt-ladder book)
prepaymentfraction/yr0.06Mortgage prepayment (no effect on the gilt-ladder book)

Every input has a supported range; describe_model lists it. Any input you leave out takes its default.

Outputs

How the sensitivities are computed

The model projects every member’s pension, year by year, and discounts it on the zero curve. All 21 sensitivities of the liability come from that same calculation, in one forward pass and one backward pass (adjoint algorithmic differentiation), instead of 42 extra revaluations with each input nudged up and down. The stressed balance sheets behind the SCR are computed in the same call.

How they are checked

Every sensitivity can be recomputed by bump-and-revalue: nudge the input up and down and revalue. Here the bumped valuations run through a separate, plain calculation path, not the one that produced the sensitivities, so the check compares two independent routes to the same number. The check_against_bumping tool does this on demand and reports each gap and both timings.

Measured on 5 November 2026 at the default inputs, on two cores of an Intel Xeon 8280L: the largest gap across all 21 sensitivities was 0.0000025% of the largest sensitivity (2.5 × 10⁻⁸ in relative terms), against a tolerance of 2%. The one-pass calculation took 1.7 ms; bump-and-revalue needed 42 valuations and took 43.2 ms. Gaps here are measured against the largest sensitivity, because four inputs have exactly zero effect on the liability of this book (below) and a relative gap on zero is undefined.

What the model includes

Credit spread moves the assets but not the liability, so its liability sensitivity is exactly zero. The high-yield spread, equity level and mortgage prepayment inputs belong to a wider general-account portfolio and have no effect on this all-bond book.

It is designed to show how a Solvency II balance sheet, and each of its sensitivities, responds to a change of assumption on a realistic annuity book, in well under a second.

Worked example (default inputs)

Run on 5 November 2026 with every input at its default:

ItemGBP
Assets (market value)144,639,401
Best-estimate liability103,496,203
Risk margin3,835,006
Technical provisions107,331,210
Own funds37,308,192
SCR15,048,936
Solvency ratio247.9%

SCR by risk: longevity 10,722,978; spread 6,836,649; interest rate 1,819,658; expense 259,935; mortality 0; equity 0. Longevity is the largest, as expected for an annuity book: the risk is that pensioners live longer than assumed. Mortality is zero because higher mortality is a gain on annuities.

Some sensitivities of the liability, per 1.00 change in the input:

Inputd(BEL)
Zero curve at 30 years−352,575,397 (about −35,258 per basis point)
Zero curve at 15 years−248,894,272 (about −24,889 per basis point)
RPI inflation804,247,285 (about 80,425 per basis point)
Longevity multiplier−47,545,352 (about −475,454 per 1% higher mortality rates)
Expense per policy16,619 per GBP 1 of annual expense

The complete call, balance sheet with all stresses and all sensitivities of liability, assets and own funds, took 282 ms.

Three ways to use it

1. From an AI tool, through the hosted MCP endpoint. In any MCP client, add a remote server with this address and no authentication:

https://mypricinglab.com/lab/mcp

Then ask, for example: “Build the insurance ALM balance sheet at the defaults, then show what a 50 basis point fall in all zero rates does to the solvency ratio.” The tools are list_models, describe_model, price_model, check_against_bumping and run_model_function. The hosted service is free, needs no login, and runs on the simulated book.

2. In Excel. Install the PricingLab add-in and open the workbook PricingLab_InsuranceALM.xlsx. Instructions and downloads: https://mypricinglab.com/excel

3. On your own machine. The local install runs the same tools with no size caps, and your inputs never leave your machine. It is sent on request (Linux x86-64 today; ask about Mac and Windows): write to info@mypricinglab.com. Once installed:

pricinglab mcp      # MCP server for a local MCP client
pricinglab serve    # local web server for the Excel workbook

Details: https://mypricinglab.com/install

With login

A private hosted service, with your own book and assumptions, is available. Contact us.

Contact

PricingLab by Raganel Consulting, powered by MatLogica AADC. To run this on your own book, inside your own network, write to info@mypricinglab.com.

This page as Markdown · All models