Context & Problem
In January 2026 I was part of the Actuaries in the Making (AIM) vacation work programme, which is run by the Actuarial Society of South Africa. My group was led by an actuary from Liberty, and our task was to price a funeral benefit that financial advisers could add to one of the company's risk products. The pricing had to start from the premium rates of a funeral product the company already sold online, and we had two weeks to do it. After several rounds of research, assumptions and changes to the pricing basis, we settled on a funeral rider to the risk product, together with a quote tool that projected the premiums five years ahead.
The rider passed the checks we had at the time. However, those checks only looked at the benefit on its own. I wanted to see how a funeral product priced in a similar way would behave inside an insurer that also sells other products, where every line draws on the same capital and a wrong assumption in one of them affects the company as a whole. I was also finishing my honours in risk analysis, so I asked for a case study brief that would make me build such an insurer.
The brief that came back described a new South African life insurer selling pensions for life and funeral cover. Its board wanted four things answered: what to charge, what the company owes on the policies it sells, how much capital the regulator requires under SAM, and whether it stays solvent over the next five years.
What I built
How I built it
Mdingi Life is built on three sets of real data. From Stats SA's registered deaths, distributed by DataFirst as unit records, I counted deaths by age, sex and year from 1997, and divided them by the UN's population estimates from World Population Prospects 2024 to get death rates. From the National Treasury's auction results for fixed-rate and inflation-linked government bonds, I fitted a yield curve for each auction day, and the gap between the two curves gives the inflation the market expects. From the Prudential Authority's Financial Soundness Standards, I took the parameters of the SAM standard formula. The customers, their policies, the running costs and the R400m of capital are invented, and the customers are drawn with a fixed seed so the same book comes out every time.
I used the death rates to fit and backtest the mortality models, and the chosen model, together with the yield curves, gives the pension prices and funeral premiums. Applied to the invented book, the same assumptions give what the company owes on its policies, and the standard formula turns that into the capital it must hold. The yield curves also feed a scenario generator, which produces 1,000 five-year paths for interest rates and inflation. I projected the company along each path and through five named stresses, with its IFRS 17 profit rolled forward alongside. The results are written to a single file, which a FastAPI service on Azure serves to the company's website.
The data
The raw data is what I downloaded: Stats SA's death records, the UN's population estimates, the National Treasury's auction results and the Prudential Authority's standards. The prepared data is what the models read after cleaning: death rates by age, sex and year, a yield curve for each auction day, the inflation the market expects, and the invented book. DataFirst's terms do not allow the death records to be republished, so the charts and tables below show counts, rates and summary statistics computed from them.
Each death record gives the year, the person's age and sex, and the cause of death. Not every death in South Africa is registered, and from 1997 to 2022 the registered deaths came to between 75% (1997) and 94% (2009) of the UN's estimate of all deaths. Registration is more complete at older ages. At 50 to 89, the ages the mortality models are fitted on, the share ranged from 79% for women in 1997 to 101% for men in 2006. The 2023 file holds only 6,693 records, all of them late registrations, so that year is left out, and 2024 is back to 80%.
Dividing the deaths at each age by the UN's population at that age gives a death rate. The models use the registered deaths as they are, and a version scaled up to the UN's totals was run only as a sensitivity. The rates rose to 2006 during the HIV epidemic, were lower again by 2019, and rose sharply in 2021 with COVID-19. The models are fitted from 2006, after the peak.
The Treasury publishes the result of every government bond auction. From April 2010 to September 2026 there are 4,705 results for 21 fixed-rate and 14 inflation-linked bonds. Leaving out the auctions where nothing was allocated gives 4,610 clearing yields. I screened out 9 that were more than one percentage point away from a curve fitted to the auctions around them, and repaired 3 settlement dates. The coupons and redemption dates of each bond come from the Treasury's Schedule of Domestic Debt. The gap between the fixed-rate and inflation-linked curves at one year gives the inflation the market expects, which over the 178 month-ends from January 2011 averaged 6.3%, ranged from −8.7% to 15.5%, and stood at 4.6% in September 2026.
From the Prudential Authority's Financial Soundness Standards I took the parts of the standard formula that apply to this company. Death rates rise by 15% for the funeral cover and fall by 10% for the pensions, with each later year's improvement one percentage point faster. Lapses rise or fall by 50%, and in the mass lapse 40% of policies are cancelled at once. Expenses rise by 10% with inflation 2 percentage points higher, and the risk margin is charged at a 6% cost of capital.
The customers are invented. I drew 5,000 pensioners and 50,000 funeral customers with a fixed seed, so the same book comes out every time, and then gave each drawn policy a weight, which sets the size and mix of the company's book.
Mortality models
I fitted three models of how death rates change over time: Lee-Carter, Cairns-Blake-Dowd and Renshaw-Haberman. Each was fitted twice, once on the full run from 1997 and once from 2006, after the peak of the HIV epidemic, and every model did better on the shorter run. To choose between them, I fitted each one to the deaths up to 2016 and asked it to predict 2017 to 2019, then compared the predictions with what was registered. The tests were that a model must beat simply repeating the last three years' rates, that the shorter run must beat the full run, that at least 90% of the observed rates must fall inside the model's 95% range, and that the price of a pension at 65 must be within 2% of the price on the observed rates.
Renshaw-Haberman, which adds a term for the year each person was born, came closest for both sexes and was chosen. It passed three of the tests and failed the third: only 55% of the observed rates for men and 79% for women fell inside its range. The model's central prices are kept, but its ranges are too narrow, so the ranges on the pension prices are lower bounds on the uncertainty. Fitted from 2006 to 2019, it prices a pension of R1 a year from 65 at R13.53 for a man and R16.05 for a woman, at a 4% interest rate. As a check I fitted the same models to the UN's death rates. There, Cairns-Blake-Dowd was chosen and the prices were R11.04 and R13.02, so the Stats SA prices are about 23% higher for both sexes. Most of that gap comes from the choice of model and fitting run, and the incomplete registration of deaths explains between a tenth and a third of it.
Scaling the deaths up for registration, averaging the models, letting each sex choose its own fitting run and smoothing the birth-year term all failed to fix the ranges. Each left them too narrow, made them too wide or priced a woman's pension below a man's, so the prices above stand, with ranges that are lower bounds.
Yield curves
A yield curve gives the interest rate for each length of time, and I needed one on the valuation date for each kind of bond, fixed-rate and inflation-linked. I compared three curves: a straight line joining the bonds' yields by maturity, Nelson-Siegel, and its extension by Svensson, which adds a second hump. The benchmark was simply to take each bond's own last clearing yield. Each curve was fitted on the auctions of the 91 days before an auction day and used to predict that day's clearing yields. The curve was chosen on the auctions from 2010 to 2017, and the auctions from 2018 to September 2026 were scored once, after the choice. The tests were that the chosen curve beats the benchmark, that Svensson beats Nelson-Siegel, and that the error is under 25 basis points, a quarter of a percentage point.
The straight line had the smallest error from 2010 to 2017 for both kinds of bond and was chosen. In validation it beat the benchmark by less than one basis point for both kinds, because the Treasury auctions the same few bonds week after week and most bonds' last yields are recent. Svensson did not beat Nelson-Siegel, and the fixed-rate error of 38.2 basis points failed the 25-point test, while the inflation-linked error of 23.5 passed. Nelson-Siegel would have done 2 to 2.5 basis points better out of sample, but the choice stands as it was made. The months of March to May 2020 alone add 6 to 9 basis points to the fixed-rate error.
A straight line through the yields gives a bond's yield, but pricing a pension needs the rate for each single future payment. On the valuation date I built that curve from the same bonds, setting the rate between one bond's maturity and the next so that every bond is priced exactly at its clearing yield. Beyond the longest bond the rate is held flat. The weakness of this method shows at the long end of the fixed-rate curve. R2042 and R2044 mature less than three years apart, which leaves 12.45% on the last stretch, held flat beyond 18 years, where Nelson-Siegel gives 10.55%. On the inflation-linked curve, whose longest bond runs 31 years, the rates stay between 3.5% and 4.6%.
Prices
A pension for life is priced as the value today of every monthly payment the customer is expected to live to receive. The death rates come from the Renshaw-Haberman model of the mortality section, multiplied by 0.7 because people who buy pensions tend to live longer than the population. The 0.7 is an assumption, since no South African pensioner data is public. An income that rises with inflation is discounted on the inflation-linked curve and a level income on the fixed-rate curve, both on the valuation date of 25 September 2026. A pension of R1 a year from 65, rising with inflation, costs R15.67 for a woman and R13.22 for a man. A level income costs about 55% to 65% as much, because fixed-rate yields near 9.5% to 10% discount it more heavily. The inflation-linked curve is worth a flat real rate of 4.2%, close to the 4% used in the mortality section. The ranges carry the uncertainty in the death rates only, and are lower bounds for the reason given there.
Funeral cover pays a fixed sum of R10,000 to R30,000 on death, and is priced on a separate table built for younger ages. I graduated Stats SA's registered death rates for 2024 and projected them with a Lee-Carter model for each of three groups of causes: HIV-related, external causes such as accidents and violence, and all other causes. After 2050 the improvement continues at each age's 2050 pace. I built this table with its results in view, so it is a judged basis that was never backtested. The deaths are not scaled up for registration, so if registration is incomplete the premiums are too cheap, and the SAM mortality stress carries that risk. Premiums are priced at 9% interest, with R180 a year of running costs rising at 5% and a 20% margin.
Customers choose how to pay. A level premium stays the same for life. An age-rated premium follows a schedule set at sale, starting lower and rising with age, and every five years the company may reprice the schedule for all age-rated customers together, without new medical checks. Because the repricing cannot be done customer by customer, SAM's rules still treat the policy as lasting for life, so every future premium on the schedule counts in the valuation. A woman who buys R15,000 of cover at 35 pays R43 a month level, or R23 to start on the age-rated schedule. The age-rated premium passes the level one at 49, and by 60 she has paid more in total. The customers who keep an age-rated policy the longest pay the most.
Balance sheet and capital
On the valuation date the company owes its customers a best-estimate liability (BEL) of R349.0m. This is the expected value of everything it will pay out, less the premiums it will receive, discounted on the curves of the yield section. The pensions account for R531.0m. The funeral line's BEL is −R182.0m, because the R706.1m of premiums it expects is more than its R188.7m of claims and R335.4m of running costs together. SAM adds a risk margin of R58.0m on top, which is roughly what another insurer would charge to take the book over: 6% a year on the capital it would have to hold until the last policy ends. Against this the company holds R807.0m of assets. R349.0m is in government bonds, chosen so that their value moves with the BEL when rates change at each of four terms on each curve. R418.9m is in a 182-day Treasury bill, and R39.0m is premiums held by collectors and cash at a bank. What is left after the BEL and the risk margin, R400m, is the company's own funds.
South African insurers have been regulated under the Solvency Assessment and Management framework (SAM) since July 2018. Under SAM an insurer has to hold enough capital to get through a year that is expected once in 200 years. That amount is the solvency capital requirement (SCR). The standard formula finds it by applying a set stress for each risk and measuring how far own funds fall, then combining the falls with set correlations. Mdingi Life's SCR is R222.2m, so its own funds cover it 1.8 times.
The largest charge, R112.0m, comes from fixed-rate yields rising. The funeral line's future profits are valued on the fixed-rate curve, and protecting them would mean selling bonds the company does not own, which the matching rule does not allow. Among the insurance risks, running costs rising is the largest at R97.7m, followed by customers cancelling at R89.4m. Both come almost entirely from funeral cover, so the funeral line produces most of the SCR although the pensions make up most of the BEL.
The book has 676 pensioners and 212,455 funeral policies. The mix is set by a rule: enough funeral cover that an error in the level of death rates leaves the total BEL unchanged, since what the pensions lose when people live longer, the funeral line gains. The offset only holds for the level of death rates. If they improved 1 point a year faster than assumed, the pensions would lose R18.0m and the funeral line would gain only R10.9m. SAM also treats mortality and longevity as separate risks with a correlation of −0.25, so it recognises only part of the offset, and both charges appear in the SCR.
The smallest charge, R2.7m, is for counterparty default: the firms that collect premiums and the bank that holds the company's cash. The company's largest credit exposure carries no charge at all. Of what it owns, 95% is South African government bonds and bills, and the standard formula charges nothing for default on rand government debt. Real South African insurers are in a similar position, because rand government bonds are the main way to match long-term rand liabilities, and South Africa's debt has been rated below investment grade by S&P and Fitch since 2017 and by Moody's since 2020. A loss of 23% on the government's bonds and bills would take cover down to 100%, and a loss of 52% would leave no own funds.
Five years ahead
The SCR describes the company on one date. To see how cover changes over time, I projected the company five years ahead on 1,000 simulated paths for the two bond curves. Each curve is reduced to a level and a slope, and each of the four follows its own autoregressive process, fitted to month-end curves from 2011 to September 2026. Inflation on each path comes from the gap between the two curves. At every year-end the book is valued again, its bonds are rematched and the SCR is worked out afresh. As a check on the paths, I compared the spread of a year's change in the 10-year rate with history: the paths spread 1.32 times as much for fixed-rate yields and 1.16 times for real yields, inside the 0.75 to 1.33 I allowed. The target was cover above 100% at every year-end on at least 95% of paths. Starting from R400m, 95.6% stay above it.
I also applied five named stresses: both curves 1.5 points lower at once, pensioners' death rates 20% lower for good, a year with the death rates of 2021 instead of 2019 (35% higher for women and 25% for men), 30% of funeral customers cancelling at once, and the first, third and fourth together. From R400m none takes cover below 100%, so none needs new capital. The lowest is pensioners living longer, at 161%. A wave of cancellations raises cover to 229%, because the policies that leave take their share of the SCR with them: own funds fall by R40m and the SCR by R65m.
Alongside SAM, I rolled the IFRS 17 accounts forward, which report profit rather than capital. At transition the risk adjustment is set equal to the risk margin, R58.0m, which works out to about an 82% confidence level. The contractual service margin (CSM), the profit not yet earned, is R38.6m at a 10% cost of capital. With rates as expected, profit rises from R20.4m in the first year to R50.0m in the fifth. Most of it is the finance result, the investment return on own funds and on the assets behind the liabilities: R14.0m of the first year's profit and R44.9m of the fifth's. The CSM barely moves, from R38.6m to R40.1m. Pensioners living longer would use up the pensions' CSM of R9.5m and leave a loss of R32.2m. The wave of cancellations would use up the funeral CSM of R29.2m and leave a loss of R11.4m.
I also started the same book from just enough capital for a cover of 100%, R218.3m, to see how often a company at the minimum falls below it. This is where the funeral premium choice makes a difference.
When every funeral customer pays a level premium, 63.7% of paths stay above 100% from the minimum. When half pay age-rated premiums, 22.7% do. With rates as expected, own funds grow by R20.7m in the first year against R31.9m with level premiums only, and after a year the charge for fixed-rate risk is R131.2m against R97.0m. Age-rated premiums are low at first and high later, so more of the profit arrives late, on the part of the fixed-rate curve where there are no bonds against it. The book with age-rated premiums is also 42% bigger, which raises the same charges, so these numbers mix the two effects.
Limitations
The customers are invented, and so are the assumptions that drive most of the capital. Two of the three largest charges, for running costs and cancellations, rest on invented assumptions, and the third, for fixed-rate yields rising, comes from the funeral line's future profits, which depend on the same assumptions. The pensions rest on a factor of 0.7 on population death rates, which is also an assumption. The ranges on the pension prices are lower bounds, and the funeral table was built with its results in view and was never backtested.
The interest rate model was fitted to the month-end curves from 2011 to September 2026, and the spread of its paths was checked against the same years, so it shows only that the paths are in line with that history. The sovereign stress applies one loss to the government's bonds and bills and holds the SCR where it is, while a real default would also move interest rates, the rand and how many customers cancel. SAM and IFRS 17 are applied only as far as this company needs them.

