Applications · Section 3
Standalone program pricing
The underwriter takes SunCoast's risk profile, structures the renewal as a three-layer program, transforms the subject loss into ceded loss, and computes a technical premium from the ceded distribution. It is the first page to measure diversification within a program as capital.
The business problem
Section titled “The business problem”With the post-model report read, the underwriter at Caldera Re knows what SunCoast’s book looks like before any contract is applied (a $275.6M expected annual loss, a hurricane tail made up of many-storm trials, most of the expected loss in Texas and Louisiana rather than Florida). The report’s scope ends there. The next question is the one the underwriter is paid to answer:
The broker has proposed a structure and a price. Is SunCoast’s renewal adequately priced?
The proposed structure is the three-layer program SunCoast renews every year: Florida hurricane cover, an earthquake aggregate, and a whole-book backstop. The proposed premium is $32M across the three layers. To answer whether that is enough, the underwriter runs the program through the pricing pipeline: transform the subject loss into ceded loss, measure the ceded distribution, and convert those metrics into a technical premium. That price covers expected loss, expenses, and the cost of the capital held against the program. Under the site’s assumptions the proposed premium either clears the technical premium or falls short of it, and that result is one input to the underwriter’s decision.
The technical premium is the last of five stages that start from SunCoast’s subject loss.
The pipeline
Section titled “The pipeline”The standalone program-pricing pipeline has the same five stages as pricing a single contract, with one difference: the “transform” stage is now a whole program, whose net-of-inuring backstop depends on the two layers that inure to it.
Every stage is a component from an earlier chapter, applied to one task:
| Stage | What happens | Built in |
|---|---|---|
| 1. Subject loss | SunCoast’s year event loss table (YELT), validated and profiled | Risk profiling |
| 2. Program | Three layers composed from filter, occurrence excess, aggregate excess, connected by inuring | Programs |
| 3. Ceded distribution | Per-trial gross loss, by layer and for the program | Financial perspectives |
| 4. Metrics | EL, TVaR, capital on the ceded distribution | Metrics |
| 5. Technical premium | EL + expenses + cost of capital, with and without C1’s reinstatement premium | this page and Reinstatement premium |
Every input to the premium enters at one of these steps, starting with the structure; the interactive pricer varies the structure and the pricing policy together.
Step 1: the structure to price
Section titled “Step 1: the structure to price”SunCoast’s program is defined in full on the Programs page; the price depends on its structure:
| Layer | Covers | Structure | Proposed premium |
|---|---|---|---|
| C1 | Florida hurricane, per occurrence | $30M xs $10M, 1 reinstatement | $14M |
| C2 | CA/AZ earthquake, annual aggregate | $10M xs $15M | $5M |
| C3 | All-US, annual aggregate, net of C1, C2 | $50M xs $300M | $13M |
C3’s “net of C1 and C2” is the inuring edge: its subject loss is the book’s loss less what C1 and C2 paid, so the same loss is not recovered twice. Running the program across the 20-trial demo tier gives each layer’s ceded loss:
SunCoast's program ceded to Caldera Re, trial by trial. C1 tracks Florida hurricane trials; C2 pays on the earthquake aggregate in most trials; C3 — the All-US aggregate, net of C1 and C2 — hits its $50M limit in the four heaviest whole-book trials (trials 1, 2, 3, 13), pays $3.2M in trial 8, and otherwise pays nothing — including trial 4, where the gross book cleared its attachment but netting C1 and C2 pulled it back under. The layers peak in different trials, which is why the program's capital is lower than the sum of the layers'.
C1 pays out heavily in Florida hurricane trials and is capped at $60M by its one reinstatement, for which SunCoast pays a reinstatement premium. C2 pays on the earthquake aggregate in most trials, never more than its $10M limit. C3 (the backstop, net of C1 and C2) exhausts its $50M limit only in the four heaviest whole-book trials (plus a small payment in trial 8), and pays nothing in trial 4 even though the gross loss exceeded its attachment, because netting out C1 and C2 left the subject loss below $300M. The three layers’ ceded losses rarely peak in the same trial. That fact is quantified as the program’s capital number in Step 5, from the layer and program metrics computed on these ceded losses.
Step 2: measure the ceded distribution
Section titled “Step 2: measure the ceded distribution”With the ceded losses computed, the Toolkit metrics apply unchanged: the ceded distribution is a loss distribution like any other. For Expected loss (EL) and the tail, the loss-set reconciliation in the risk-profiling story already showed the pattern: EL adds across layers, the tail does not.
| Distribution | EL | VaR(90%) | TVaR(90%) |
|---|---|---|---|
| C1, FL hurricane | $17.39M | $60.00M | $60.00M |
| C2, CA/AZ earthquake | $5.03M | $10.00M | $10.00M |
| C3, All-US backstop | $10.16M | $50.00M | $50.00M |
| Sum of layers | $32.58M | — | $120.00M |
| Program | $32.58M | $82.26M | $87.28M |
The expected losses add exactly: $17.39M + $5.03M + $10.16M = $32.58M, the program EL, because expectation is linear. Trial by trial the program ceded is the sum of the layer ceded, so the means add. The tail is different. Measured by Tail Value at Risk (TVaR), the layers’ standalone TVaR(90%)s sum to $120M (each layer exhausts its limit in its own worst trials), but the program’s TVaR(90%) is $87.28M, $32.72M lower. That difference is the same diversification the risk profiling measured between perils, now between layers: their worst losses occur in different trials, so the program’s tail is well below the sum of the layers’ tails. This is TVaR’s sub-additivity in numbers.
Each distribution’s EL, and the difference between that EL and its TVaR(90%), are the inputs to the technical premium.
Step 3: from metrics to premium
Section titled “Step 3: from metrics to premium”The technical premium is the price computed from the metrics. The decomposition used here has three parts: the expected loss the reinsurer pays out on average, an expense load for running the business, and the cost of the capital held against the layer:
This site’s convention: the capital requirement is the unexpected loss, how far the tail extends beyond the expected loss, the part that capital (not premium) has to cover:
The expected loss is already paid for by the EL term, so capital is held only against the excess. The formula applies to a layer whose only income is its premium; on C1 the reinsurer also receives reinstatement premium, added in Step 4.
With the site’s assumptions ( confidence, a cost of capital rate , and an expense load ), each layer’s technical premium before reinstatement premium is:
| Layer | Expected loss (EL) | TVaR(90%) | Required capital () | Technical premium | Proposed |
|---|---|---|---|---|---|
| C1 | $17.39M | $60.00M | $42.61M | $22.52M | $14M |
| C2 | $5.03M | $10.00M | $4.97M | $5.78M | $5M |
| C3 | $10.16M | $50.00M | $39.84M | $14.65M | $13M |
| Sum | $32.58M | — | $87.42M | $42.95M | $32M |
"""Standalone pricing of SunCoast's program: ceded distribution -> premium.
Pricing reuses the Toolkit metrics (expected_loss, tvar) read off an AEP
curve -- the same helpers used everywhere on the site -- so nothing here is
re-derived. The technical premium of a layer is
P = EL + epsilon * EL + K * r_c, with K = TVaR_alpha - EL
i.e. expected loss, an expense load, and the cost of the capital the layer
ties up (its unexpected loss). The interesting part is the program view: the
capital a reinsurer holding all three layers must carry is the TVaR of the
*program* distribution, which is smaller than the sum of the layers' capital
because the layers do not reach their worst trials together. That gap is
diversification -- the same effect the portfolio roll-up story scales up.
"""
import numpy as np
import pandas as pd
from caldera_re.aep import aep
from caldera_re.expected_loss import expected_loss
from caldera_re.program_ceded import suncoast_program
from caldera_re.report import fields, heading, table
from caldera_re.tvar import tvar
from caldera_re.var import var
N = 20
ALPHA = 0.90 # confidence level for the tail / capital metric
R_C = 0.10 # cost of capital rate
EPSILON = 0.05 # expense load as a fraction of EL
# Market premiums the broker proposed for each layer (Caldera Re Bible).
MARKET = {'C1': 14.0, 'C2': 5.0, 'C3': 13.0}
def _curve(ceded: np.ndarray) -> pd.DataFrame:
"""Wrap a per-trial ceded array as an AEP curve for the metric helpers."""
return aep(pd.DataFrame({'trial_id': range(1, N + 1), 'loss': ceded}), n_trials=N)
def price(ceded: np.ndarray) -> dict:
"""Technical premium and its components for one ceded distribution."""
curve = _curve(ceded)
el = expected_loss(curve)
tv = tvar(curve, ALPHA)
k = tv - el # capital = unexpected loss
expense = EPSILON * el
capital_cost = k * R_C
return {
'el': el, 'tvar': tv, 'var': var(curve, ALPHA), 'k': k,
'expense': expense, 'capital_cost': capital_cost,
'technical': el + expense + capital_cost,
}
if __name__ == '__main__':
p = suncoast_program()
layers = ['C1', 'C2', 'C3']
# --- Per-layer standalone pricing ------------------------------------
heading(f"Per-layer standalone pricing "
f"(alpha={ALPHA:.0%}, r_c={R_C:.0%}, eps={EPSILON:.0%})")
priced = {}
rows = []
for name in layers:
r = priced[name] = price(p[name])
verdict = 'adequate' if MARKET[name] >= r['technical'] else 'underpriced'
rows.append((name, r['el'], r['tvar'], r['k'], r['technical'],
MARKET[name], verdict))
sum_k = sum(r['k'] for r in priced.values())
sum_tech = sum(r['technical'] for r in priced.values())
sum_market = sum(MARKET.values())
table(['Layer', 'EL', 'TVaR', 'K', 'Tech prem', 'Market', 'Verdict'], rows,
fmt=['{}', '{:.2f}M', '{:.1f}M', '{:.2f}M', '{:.2f}M', '{:.1f}M', '{}'],
footer=[('Sum', None, None, sum_k, sum_tech, sum_market, None)])
# --- Program view: capital is diversified ----------------------------
prog = price(p['program'])
div_capital = sum_k - prog['k']
print()
heading("Program view (Caldera Re holds all three layers)")
fields([
('Program EL', prog['el']),
('Program TVaR(90%)', prog['tvar']),
('Program capital K', prog['k']),
('Sum of layer capital', sum_k),
('Diversification in capital', div_capital,
f"{div_capital / sum_k:.1%} of the standalone sum"),
], fmt='{:.2f}M')
print()
verdict = 'adequate' if sum_market >= prog['technical'] else 'INADEQUATE'
fields([
('Program technical premium', prog['technical'],
'prices the program as one held book'),
('Sum of layer tech premiums', sum_tech, 'no diversification credit'),
('Total market premium', sum_market),
('Program adequacy', verdict,
f"{sum_market:.1f}M vs {prog['technical']:.2f}M technical, "
"before reinstatement premium"),
], fmt='{:.2f}M')
# --- Pricing ratios on the program -----------------------------------
program_limit = 30.0 + 10.0 + 50.0 # sum of layer limits placed
rol = sum_market / program_limit
loss_ratio = prog['el'] / sum_market
raroc = (sum_market - prog['el'] - EPSILON * prog['el']) / prog['k']
print()
heading("Program ratios")
fields([
('Rate on line (premium / placed limit)', rol),
('Loss ratio (EL / premium)', loss_ratio),
('RAROC ((premium - EL - exp) / K)', raroc),
], fmt='{:.1%}') Without reinstatement premium every proposed premium is below its layer’s technical premium, and C1’s $14M does not even cover its $17.39M expected loss. The comparison is incomplete for C1: its proposed premium is set on the assumption that SunCoast will pay again for the limit it restores, and that income is not in this table. C1’s reinstatement premium belongs in its price.
Step 4: reinstatement premium in the price
Section titled “Step 4: reinstatement premium in the price”C1 has one reinstatement at 100%, pro rata to the amount reinstated: when a storm erodes part of the $30M limit, the limit is restored and SunCoast pays that share of C1’s premium again. The reinstatement premium is computed from C1’s claims-order output on the reinstatement premium page. It is income in exactly the trials where C1 pays, and the full reinstatement premium in the trials where C1’s original limit is exhausted, so it lowers the required capital as well as the expected cost.
With a paid reinstatement, the contract’s income in trial is the premium plus the reinstatement premium, , with the reinstatement premium per dollar of premium. The premium is the same in every trial of an annual contract; the reinstatement premium is the part that varies. Write for the layer’s ceded loss in trial ( for C1) and for the premium rate of reinstatement (1 for C1’s first reinstatement at 100%). The reinsurer’s outcome, , is the gross net of reinstatement premium, and the capital is measured on it. The premium and the expected reinstatement premium together must cover the same three costs:
with the mean of over the trials. is on both sides: the capital depends on the premium, because the reinstatement premium in the tail is proportional to the premium. For one layer with for every , the trials rank the same by as by (a larger loss always gives a larger ), so the set of tail trials does not change and the equation has a closed-form solution:
The numerator is the technical premium before reinstatement premium. The denominator discounts it twice: by , the expected reinstatement premium per dollar of premium, and by times how much more of that premium is received in the tail than on average. is the mean of over the trials that set , the co-measure used for tail attribution on the perspectives page.
For Contract 1 at the site’s , and : , and the full limit is restored in each of the two 90% tail trials, so . The technical premium decreases from $22.52M to
| Contract 1 | Without reinstatement premium | With reinstatement premium |
|---|---|---|
| Expected loss (EL) | $17.39M | $17.39M |
| Expected reinstatement premium | $6.87M | |
| Capital (at each column’s technical premium) | $42.61M | $34.62M |
| Technical premium | $22.52M | $14.85M |
The reinstatement clause lowers C1’s upfront premium by $7.67M, 34% of it. The expected reinstatement premium offsets most of that reduction: $6.87M, paid in the trials where the layer pays. Expected income, premium plus expected reinstatement premium, decreases from $22.52M to $21.73M. The difference is the lower capital charge, 10% of the $7.98M by which the required capital decreases. The $34.62M differs from the $35.08M on the reinstatement premium page because it is measured at the technical premium, $14.85M, rather than at C1’s $14M. Compared with the $14.85M, C1’s proposed $14M is $0.85M short, a much smaller gap than the $8.52M without reinstatement premium.
"""Pricing with reinstatement premium: income that arrives in the loss trials.
Without reinstatement premium the technical premium is
P = EL + epsilon * EL + r_c * K, K = TVaR_alpha(L) - EL(L)
A paid reinstatement adds income P * u_j in trial j (u_j from
reinstatement_premium.reinstatement_factor), so the reinsurer's outcome per
trial is the ceded loss net of that income, X_j = L_j - P * u_j. The premium
and the expected reinstatement premium together cover the expected loss, the
expense load and the cost of the capital X ties up:
P + P * mean(u) = (1 + epsilon) * EL + r_c * K(X), K(X) = TVaR(X) - EL(X)
P appears on both sides, since the capital depends on the premium through X.
The fixed-point loop starts from the premium before reinstatement premium and
recomputes. Each step changes P by at most
r_c * max(mean(u), sum(beta) - mean(u)) / (1 + mean(u)) of the previous change,
which is below r_c / (1 + mean(u)) for one reinstatement at 100%; for Contract 1
the loop converges in under ten iterations. For one layer with
premium * rate < limit for every reinstatement, X ranks the trials as L does
and the fixed point has a closed form, which the script checks:
P = ((1 + epsilon) * EL + r_c * K) / (1 + mean(u) + r_c * (tail(u) - mean(u)))
with tail(u) the mean of u over the trials that set TVaR (Co-TVaR of u).
A program prices the same way. Only C1 carries a reinstatement, so the
program's reinstatement premium is C1's premium times u_j. Holding the
proposal's split between the layers, C1's premium is the share w of the
program premium P, and the program's income per trial is P * (1 + w * u_j):
the same equation with w * u_j in place of u_j. Its solution is the program
technical premium with reinstatement premium, the premium at the proposal's
split at which the program earns its cost of capital.
"""
import numpy as np
import pandas as pd
from caldera_re.aep import aep
from caldera_re.program_ceded import suncoast_program
from caldera_re.program_pricing import ALPHA, EPSILON, MARKET, R_C
from caldera_re.reinstatement_premium import LIMIT, reinstatement_factor
from caldera_re.report import fields, heading, table
from caldera_re.tvar import tvar
from caldera_re.utils import ep_index
def capital(x: np.ndarray, alpha: float = ALPHA) -> float:
"""K = TVaR - EL of a per-trial outcome (loss net of reinstatement premium).
N is the length of the array: one outcome per simulated trial.
"""
curve = aep(pd.DataFrame({'trial_id': range(1, len(x) + 1), 'loss': x}),
n_trials=len(x))
return tvar(curve, alpha) - x.mean()
def price_with_reinstatement(ceded: np.ndarray, u: np.ndarray,
alpha: float = ALPHA, r_c: float = R_C,
tol: float = 1e-10) -> dict:
"""Technical premium of a layer whose premium earns reinstatement premium.
With u = 0 this is the technical premium before reinstatement premium.
"""
el = ceded.mean()
p = (1 + EPSILON) * el + r_c * capital(ceded, alpha) # before reinstatement premium
for _ in range(100):
k = capital(ceded - p * u, alpha)
p_next = ((1 + EPSILON) * el + r_c * k) / (1 + u.mean())
if abs(p_next - p) < tol:
break
p = p_next
else:
raise RuntimeError('technical premium did not converge in 100 iterations')
return {'technical': p_next, 'k': capital(ceded - p_next * u, alpha),
'reinstatement_premium': p_next * u.mean()}
def tail_mean(values: np.ndarray, by: np.ndarray) -> float:
"""Mean of values over the trials that set TVaR of `by` (a Co-TVaR)."""
worst = np.argsort(-by, kind='stable')[:ep_index(len(by), ALPHA)]
return float(values[worst].mean())
def program_view(p: dict, with_reinstatement: bool, alpha: float = ALPHA,
r_c: float = R_C) -> dict:
"""The SunCoast program at its proposed premiums, and its technical
premium at the proposal's split, with or without C1's reinstatement
premium."""
prog = p['program']
offered = sum(MARKET.values())
u1 = reinstatement_factor(p['C1'], LIMIT, 1) if with_reinstatement else 0 * prog
w1 = MARKET['C1'] / offered
rip = MARKET['C1'] * u1
k = capital(prog - rip, alpha)
margin = offered + rip.mean() - (1 + EPSILON) * prog.mean()
tech = price_with_reinstatement(prog, w1 * u1, alpha, r_c)
return {'offered': offered, 'reinstatement_premium': rip.mean(),
'income': offered + rip.mean(), 'k': k, 'raroc': margin / k,
'technical': tech['technical'],
'shortfall': tech['technical'] - offered}
if __name__ == '__main__':
p = suncoast_program()
c1 = p['C1']
u = reinstatement_factor(c1, LIMIT, 1)
before = price_with_reinstatement(c1, 0 * u)
after = price_with_reinstatement(c1, u)
closed = (((1 + EPSILON) * c1.mean() + R_C * capital(c1))
/ (1 + u.mean() + R_C * (tail_mean(u, c1) - u.mean())))
assert abs(closed - after['technical']) < 1e-8
heading("Contract 1 standalone: technical premium")
table(['', 'Without', 'With reinstatement premium'], [
('Expected loss', c1.mean(), c1.mean()),
('Expected reinstatement premium', 0.0, after['reinstatement_premium']),
('Capital K', before['k'], after['k']),
('Technical premium', before['technical'], after['technical']),
], fmt=['{}', '{:.2f}M', '{:.2f}M'])
print(f"\nmean(u) = {u.mean():.3f}, tail(u) = {tail_mean(u, c1):.3f}: "
"in both tail trials C1 restores its whole limit")
without, with_ = program_view(p, False), program_view(p, True)
print()
heading(f"SunCoast program at the proposed ${without['offered']:.0f}M")
table(['', 'Without', 'With reinstatement premium'], [
('Expected reinstatement premium', without['reinstatement_premium'],
with_['reinstatement_premium']),
('Expected premium income', without['income'], with_['income']),
('Program capital K', without['k'], with_['k']),
('Program technical premium', without['technical'], with_['technical']),
('Shortfall (technical - proposed)', without['shortfall'], with_['shortfall']),
], fmt=['{}', '{:.2f}M', '{:.2f}M'])
fields([('RAROC without', without['raroc'], f'vs {R_C:.0%} cost of capital'),
('RAROC with', with_['raroc'])], fmt='{:.1%}') The script does not use the closed form. It iterates: start from the premium without reinstatement premium, compute the capital on , solve the equation for a new with that capital held fixed, and repeat. Each iteration changes by at most of the previous step, less than for one reinstatement at 100%, so the loop converges (in under ten iterations for C1), and it needs no assumption about which trials form the tail. That matters for a program, where one layer’s reinstatement premium can change the ranking of the whole program’s trials: the script prices SunCoast’s program the same way, in Step 5.
C2 and C3 have no paid reinstatement, so their technical premiums are the same in both views. With C1’s at $14.85M, the three layers’ technical premiums sum to $35.28M, compared with the $32M proposed, and the benchmark in the program view is lower still.
Step 5: the program view (who gets the diversification)
Section titled “Step 5: the program view (who gets the diversification)”The sum-of-layers technical premium is computed as if three different reinsurers each held one layer alone, with its own standalone capital. But the program is placed as one structure. A reinsurer holding all three layers at 100% (the basis every figure in this story is quoted on) would hold the capital of the program distribution, not the sum of the layers’, and because the layers’ losses rarely peak together, that is a much smaller number. Caldera Re’s own position is different again: it holds unequal participations (14.5%, 20%, and 10%), and a mixed-weight position is not a uniform scaling of the program distribution. Capital for the portfolio Caldera Re actually holds is the subject of the portfolio analytics story; this page prices the placement itself.
Capital for SunCoast's program. Each layer priced on its own needs the capital shown; the three sum to $87.4M. But a reinsurer holding all three carries the capital of the program distribution — $54.7M, because the layers rarely hit their worst trials in the same year. The $32.7M gap (37% of the naive sum) is diversification, and it accrues only to whoever holds the whole program.
The three layers’ standalone capital sums to $87.42M. The program, held as one portfolio, requires $54.71M. The $32.72M gap,5 37% of the undiversified sum, is the diversification benefit, and it accrues only to whoever holds the whole program. Split the layers across three reinsurers and it is zero; each holds its full standalone capital.
With reinstatement premium the program is priced by the Step 4 equation. Only C1 has a reinstatement, so the program’s reinstatement premium is C1’s premium times C1’s . At the proposal’s split between the layers, C1’s premium is 14/32 of the program premium, and the program’s income per trial is : the same equation with in place of . Its solution is the premium at the proposal’s split at which the program earns its cost of capital. Fixing the split is a choice: reinstatement premium is paid only on C1’s share, so the benchmark changes with the split. The same $32M divided as $16M, $5M and $11M has a technical premium of $31.54M and clears; at the split of the layers’ own technical premiums the technical premium is $32.59M. The verdict below is for the split the broker proposed.
| Required capital (), without | Technical premium, without | Required capital () at the technical premium, with | Technical premium, with | |
|---|---|---|---|---|
| Sum of layers (no diversification credit) | $87.42M | $42.95M | $79.44M6 | $35.28M |
| Program (held together) | $54.71M | $39.68M | $47.09M | $32.37M |
In both views the diversification is worth about $3M of premium: $3.27M without reinstatement premium, and $2.69M with it when the program is priced at the same split as the layers’ own technical premiums ($2.91M at the proposal’s split). That is the capital value of holding the layers together rather than apart, which the reinsurer can keep as margin or give up to reduce the quote; either way, a system that prices each layer in isolation does not account for it, and systematically overcharges for programs whose layers diversify.
The program technical premium, not the layer sum, is the benchmark for the $32M proposal, and it is $32.37M with reinstatement premium and $39.68M without.
Step 6: the verdict
Section titled “Step 6: the verdict”Whether the proposal clears depends on counting C1’s reinstatement premium.
| Ratio | Without reinstatement premium | With reinstatement premium | What it says |
|---|---|---|---|
| Rate on line (premium / limit) | 35.6% | 35.6% | $32M proposed premium on $90M of placed limit |
| Loss ratio (EL / premium income) | 101.8% | 84.7% | Expected loss per dollar of premium, and of premium plus expected reinstatement premium |
| Risk-adjusted return on capital (RAROC) | −4.0% | 9.0% | Profit after expected loss and expenses, per dollar of capital; below the 10% that capital costs |
| Technical premium | $39.68M | $32.37M | The premium at which the program earns 10% |
| Shortfall against $32M | $7.68M | $0.37M |
Two of these values are artifacts of the demo portfolio. A 36% program rate on line is far above the roughly 18% (low-attaching) to 3% (remote) schedule of a real layered catastrophe program, and an 85% expected loss ratio inverts the market pattern, where premium is a multiple of expected loss. Both are inherited from Caldera Re’s arithmetic-convenience premiums.7 The ratios’ definitions (what each one computes from the distribution and the quote) apply to real placements; their values here do not.
Without reinstatement premium the program has a negative expected underwriting result: $32M of premium and $32.58M of expected loss, a loss ratio above 100% and a negative return on capital. That view excludes $6.48M of expected income. With that income counted, the program is narrowly short. It returns 9.0% on its capital, compared with Caldera Re’s cost of capital of 10%, and the proposed $32M is $0.37M below the $32.37M at which it would earn exactly that. A program that earns 9.0% on capital that costs 10% returns less than that capital costs on every dollar held against it, even though it does not “lose money” on a claims basis. The reinstatement premium also reduces the capital held against the proposal ( at the proposed $32M), from $54.71M to $47.18M; a model that added the income and left the capital on the gross loss would count one of its two effects.
The method produces these figures, but they are not a quote. At 20 trials the program TVaR (and with it the capital charge and the $0.37M gap) is based on the worst two trials, so this walkthrough demonstrates how an underwriting team computes its answer; a real team would compute the same figure from a production-scale run before treating the margin as a negotiating position.
With reinstatement premium the $0.37M shortfall depends on the 10% cost of capital: at 8% the proposal clears.
How the answer moves with the assumptions
Section titled “How the answer moves with the assumptions”The price in Steps 1 to 6 is for one structure and one set of assumptions. But the technical premium is conditional on a cost of capital rate and a confidence level, both policy choices rather than facts about the risk. It depends equally on the structure: the limit placed, which layers are in the program, and whether the capital is held as a diversified portfolio or layer by layer. The explorer below reprices the program with every one of those as an input, with or without C1’s reinstatement premium. It starts on the as-placed structure (all three layers, the diversified capital basis, the site’s and , reinstatement premium counted), so its initial display is the $32.37M technical premium from Step 5, with the $32M proposal as the dashed line.
The build-up bar shows the cost the premium must cover: expected loss, plus a 5% expense load, plus the cost of capital on the program's unexpected loss. With C1's reinstatement premium counted, part of that cost is paid by the expected reinstatement premium, the capital is measured on the loss net of it, and the solid line marks the technical premium the proposal is compared with; without it, the bar's end is the technical premium. The dashed line is the broker's proposed premium, held fixed at the quote for the as-placed structure, so varying the inputs is a technical-premium sensitivity, not a re-quote. Vary them and the technical premium changes: raise the cost of capital and the capital term increases; reduce the C3 limit and both its expected loss and its TVaR decrease (the $32M proposal does not change, which is why the verdict can change; a real broker would re-price a smaller limit); raise confidence α and TVaR increases. Switch from diversified to standalone and Capital K increases from the program's own figure to the sum of the layers'; that difference is the diversification benefit (a capital amount); the tiles show the saving on premium (layer technical premiums summed, less the program's), which only the holder of the whole program collects. The lower strip shows the program's per-trial ceded loss; the highlighted bars mark the worst trials that the TVaR averages. Capital K is measured at the technical premium, and the per-trial arrays are rounded to cents, so it can differ from the page's figure in the last digit; the RAROC tile uses the capital at the proposed premium.
With reinstatement premium, whether the $32M proposal clears depends mostly on the cost of capital. The C3 limit changes the structure: reduce it from $50M and the backstop’s expected loss and TVaR both decrease, and the technical premium with them. The proposed $32M is unchanged, since it is the broker’s quote for the placed structure, so this is a sensitivity, not a re-quote. The capital basis determines the diversification benefit: held layer by layer rather than as one portfolio, the capital held against the program increases from $54.71M to $87.42M without reinstatement premium, and the $32.72M diversification benefit is zero when the layers are held apart. At the placed structure, no cost of capital or confidence level the explorer offers makes the proposal clear without reinstatement premium: it does not cover the program’s expected loss.
The explorer shows one setting of the sliders at a time; to record the answer across a range of settings, the sweep below fixes the two policy parameters, cost of capital and confidence, to a grid and reprices the program at each point, in both views:
"""How SunCoast's program technical premium moves with the pricing policy.
The technical premium is not a single number — it is a number *given* a cost of
capital rate and a tail confidence level, both of which are policy choices, not
facts about the risk. This sweep prices the program (held as one book) across a
grid of those two parameters and compares each result to the broker's proposed
$32M, so the assumptions are visible rather than buried. Each point is priced
twice: without C1's reinstatement premium, and with it (the program technical
premium at the proposal's split, reinstatement_pricing.program_view).
Capital is read off the program's own ceded distribution (the diversified view),
so these are the premiums the reinsurer holding all three layers would require.
"""
import pandas as pd
from caldera_re.aep import aep
from caldera_re.expected_loss import expected_loss
from caldera_re.program_ceded import suncoast_program
from caldera_re.program_pricing import MARKET
from caldera_re.reinstatement_pricing import program_view
from caldera_re.report import heading, table
from caldera_re.tvar import tvar
from caldera_re.utils import ep_index
N = 20
EPSILON = 0.05 # expense load as a fraction of EL
PROPOSED = sum(MARKET.values()) # total premium the broker proposed (C1 + C2 + C3)
def technical_premium(curve, alpha, r_c):
"""P = EL + epsilon*EL + (TVaR_alpha - EL) * r_c from an AEP curve."""
el = expected_loss(curve)
tv = tvar(curve, alpha)
capital = tv - el
return el + EPSILON * el + capital * r_c
if __name__ == '__main__':
p = suncoast_program()
heading("Program technical premium vs cost of capital (alpha = 90%)")
rows = []
for r_c in [0.06, 0.08, 0.10, 0.12]:
without = program_view(p, False, 0.90, r_c)['technical']
with_ = program_view(p, True, 0.90, r_c)['technical']
rows.append((r_c, without, with_, with_ - PROPOSED))
table(['r_c', 'Without', 'With reinstatement premium', 'Shortfall (with)'], rows,
fmt=['{:.0%}', '{:.2f}M', '{:.2f}M', '{:+.2f}M'])
print()
heading("Program technical premium vs confidence level (r_c = 10%)")
rows = []
for alpha in [0.80, 0.90, 0.95]:
without = program_view(p, False, alpha, 0.10)['technical']
with_ = program_view(p, True, alpha, 0.10)['technical']
rows.append((alpha, ep_index(N, alpha), without, with_, with_ - PROPOSED))
table(['alpha', 'k', 'Without', 'With reinstatement premium', 'Shortfall (with)'],
rows, fmt=['{:.0%}', '{}', '{:.2f}M', '{:.2f}M', '{:+.2f}M'])
print("\nWithout C1's reinstatement premium the proposed $32M is short at every")
print("point: it does not cover the program's expected loss. With it, the")
print("shortfall is a few hundred thousand dollars at the site's 10% and turns")
print("into a margin below it. At alpha = 95% the 20-trial tail is one trial.") With reinstatement premium, whether the proposal clears depends on the cost-of-capital policy, not the loss data. At the site’s 10% the program is short by $0.37M; it clears at any cost of capital below 9.0%, the program’s own return on capital. At 8% the technical premium is $31.60M, below the proposed $32M, and at 6% it is $30.82M. AM Best’s cost-of-equity range (see the Consider callout in Step 6) spans both results: the proposal clears at the 7.5% CAPM figure ($31.40M) and is $2.65M short at 16.0% ($34.65M). The two blended figures are inside the sweep’s range, and the proposal clears at both: the technical premium is $31.46M at 7.66% and $31.08M at the 6.66% first-quarter-2025 figure. Changing the confidence level changes the technical premium far less: $31.86M at 80%, where the proposal clears, and $32.78M at 95%. Without reinstatement premium the proposal is short at every point of both sweeps. A technical premium is a framework for making assumptions explicit, not a single objective price.
More trials raise the cost of each repricing, and a program’s inuring edge constrains the order of that work.
At production scale
Section titled “At production scale”The production scale page covers the concerns of running a pipeline on production data: row counts, loss-set bookkeeping, currency, reproducibility, and the partition-by-trial structure of every pipeline in this chapter. A program adds one constraint to that structure. The inuring edge means C3 cannot be priced until C1 and C2 are evaluated: at scale this is a topological sort over the program’s dependency graph (cheap, because the graph is tiny) that orders the genuinely expensive part, which is evaluating each layer across 10,000 to 1,000,000+ trials. That part stays embarrassingly parallel: partition by trial, evaluate, reduce (once per stage).
The order is between contracts, not between trials: within each stage every trial is still evaluated on its own, so the partition holds. The price is a pure function of (subject loss, program structure, pricing parameters): change the cost of capital and the whole portfolio is repriced deterministically, to the cent.
What carries forward
Section titled “What carries forward”Standalone program pricing is five stages (subject loss → program → ceded distribution → metrics → technical premium), and it answers a precise question: is this program adequately priced on its own? For SunCoast’s renewal the answer depends on counting C1’s reinstatement premium. Without it, the $32M proposal does not cover the program’s expected loss; with it, the program’s technical premium is $32.37M, and the proposal is short by $0.37M at the site’s 10% cost of capital, earning 9.0% on capital that costs 10%. The pricing also measured the $32.72M of capital diversification that results from the layers not peaking together, and that only the holder of the whole program benefits from.
This page measured diversification within one cedent’s program, between three layers. The same mechanism operates between SunCoast’s program and every other program on Caldera Re’s portfolio: Japanese earthquake and European windstorm. Measuring it across the whole portfolio, rather than asserting it, is the portfolio analytics story; pricing one new contract against that diversified portfolio (what a new contract adds to the capital Caldera Re already holds) is a marginal-pricing application (planned), the goal of the rest of this Applications chapter.
Footnotes
Section titled “Footnotes”-
David R. Clark, “Basics of Reinsurance Pricing”, Casualty Actuarial Society study note, 1996, revised 2014. The standard study-note treatment of reinsurance pricing in full: loss costs, ceding commissions, expenses, and profit loads, plus the judgment the basic tools require. On reinstatements (p. 43): they are available “pro-rata as to amount” and less often “pro-rata as to time”, and “relatively few contracts include reinstatements pro-rata as to time” because of the seasonal nature of catastrophes such as hurricanes. ↩
-
Ana J. Mata, Brian Fannin, and Mark A. Verheyen, “Pricing Excess of Loss Treaty with Loss Sensitive Features: An Exposure Rating Approach”, GIRO Convention, Institute and Faculty of Actuaries, 2002. When a treaty has loss-sensitive features, the premium and expenses become random variables that depend on the aggregate loss, and profitability is assessed in expectation across them. ↩
-
Anderson and Dong, “Pricing Catastrophe Reinsurance with Reinstatement Provisions Using a Catastrophe Model”, eqs. (11)–(12) and (29)–(30). Sets the upfront premium plus the expected reinstatement premium equal to the expected layer loss, “ignoring expense and risk load charges”, and shows that pricing from the average annual loss alone “is equivalent to assuming that there are unlimited free reinstatements”. Ana J. Mata, Brian Fannin, and Mark A. Verheyen, “Pricing Excess of Loss Treaty with Loss Sensitive Features: An Exposure Rating Approach”, GIRO Convention, Institute and Faculty of Actuaries, 2002, list reinstatements among the loss-sensitive features (Table 1) and estimate the expected reinstatement premium of a layer with two paid reinstatements at 100% from its aggregate loss distribution (Table 8). ↩
-
Ana J. Mata, “Pricing Excess of Loss Reinsurance with Reinstatements”, ASTIN Bulletin 30(2), 2000, §4. Following Sundt (1991), sets expected total premium income, the upfront premium plus the expected reinstatement premiums, equal to the expected loss for a pure premium. For a loaded premium it solves , so the load is set on the loss net of reinstatement income; the paper notes that such a solution need not exist. Jean-François Walhin and José Paris, “Excess of Loss Reinsurance with Reinstatements: Premium Calculation and Ruin Probability of the Cedent”, Blätter der DGVFM 25(1), 2001, price the same net position under the proportional hazard transform, a result Mata’s §4.3 reaches in closed form. ↩
-
Unrounded, the standalone sum is 87.42083 and the program 54.70538, a gap of 32.71545, displayed as $32.72M; the displayed pair differs by $32.71M. The rounding convention is stated in the Caldera Re appendix. ↩
-
Unrounded, the three layers’ capital at their own technical premiums with reinstatement premium sums to 79.437, displayed as $79.44M; the displayed parts, 34.62 + 4.97 + 39.84, add to 79.43. The rounding convention is stated in the Caldera Re appendix. ↩
-
Luyang Fu and C. K. Khury, “Optimal Layers for Catastrophe Reinsurance”, Variance 4(2), 2010. Prices a layered catastrophe program from roughly 18% rate on line at the lowest attachment down to about 3% at the most remote, with premium a large multiple of each layer’s expected loss. Kenneth A. Froot, “The Market for Catastrophe Risk: A Clinical Examination”, Journal of Financial Economics 60(2–3), 2001. Documents that premium multiple market-wide. ↩
-
C. J. Exley and A. D. Smith, “The Cost of Capital for Financial Firms”, British Actuarial Journal 12(1), 2006, §6.3.1. Beyond the returns shareholders require, holding capital incurs cash-flow costs “collectively known as frictional costs, including double taxation and agency costs”, the double taxation arising because interest on invested capital is taxed again at the corporate level. Michael Sherris, “Risk Based Capital and Capital Allocation in Insurance”, Institute of Actuaries of Australia Biennial Convention, 2007, puts the same set as “agency costs, taxation and financial distress costs” and calls them deadweight losses. Robert C. Merton and André F. Perold, “Theory of Risk Capital in Financial Firms”, in Donald H. Chew (ed.), Corporate Risk Management, Columbia University Press, 2008, pp. 131 to 161, is the origin of the view. ↩
-
Exley and Smith, “The Cost of Capital for Financial Firms”, §2.2.2. Under the capital asset pricing model “the systematic component, traditionally denoted by b, determines required expected returns. The other components of risk do not affect expected returns.” George Zanjani, “Pricing and capital allocation in catastrophe insurance”, Journal of Financial Economics 65(2), 2002, opens on the same tension: catastrophe reinsurance prices run “substantially in excess of expected losses”, yet the risk “appears to be unrelated to financial asset returns and small relative to the capital market”. ↩
-
Rodney E. Kreps, “Investment-Equivalent Reinsurance Pricing”, Proceedings of the Casualty Actuarial Society, 1998. The assets a reinsurer allocates to a contract “arise from premium and from surplus, both of which are invested”, so the paper treats the risk load as an opportunity cost represented “as a (partially offset) cost of liquidity” and sets the mean internal rate of return on those assets equal to the target yield. The offset is Kreps’s; subtracting one rate from another is this site’s reduction of it. Stephen P. D’Arcy, “Capital Allocation in the Property-Liability Insurance Industry”, Casualty Actuarial Society and The Actuarial Foundation, 2011, records that capital is allocated by line “both to calculate the expected amount of investment income and to determine the return on capital”. ↩
-
Carrier Management, “Global Reinsurers Meet Cost of Capital for Second Consecutive Year”, September 2025. Reporting AM Best’s Reinsurers Meet Cost of Capital for Second Consecutive Year (August 2025): the median CAPM cost of equity for the reinsurers studied was 7.5% against 16.0% under the market-derived capital pricing model (MCPM); the weighted average cost of capital, which covers debt and equity, was 7.66% in 2024, 8.1% in 2023 and 6.66% in the first quarter of 2025. ↩