Going Spectral: Why and how to implement spectral pricing challenges the constant cost of capital (aka risk-adjusted return on capital or RAROC) assumption commonly used insurance pricing—an assumption the weighted average cost of capital calculation reveals as invalid. The presentation demonstrates the advantages of using spectral risk measure (SRM) pricing rules, illustrating how SRMs not only generalize traditional methods like CoXTVaR but also address their limitations. Instead of prescribing a single solution, SRM methods offer a range of results corresponding to different risk appetites. Capital allocation is interpreted as sourcing capital from investors with the lowest return requirements across the risk spectrum.
Running the examples requires loading some Python libraries. See blog post version of this presentation for the code.
1 Listen to Management
Management’s Complaint
Too many actuarial pricing models
over-weight tail catastrophe risk, and
under-weight earnings-hit volatility risk.
This behavior drives portfolio steering and reinsurance purchase decisions materially at odds with management’s risk preferences.
Diagnosis
Management’s complaint is entirely explained by an assumption that the cost of capital is constant.
The assumption is often implicit and hidden.
Prescription
Stop assuming the cost of capital is constant!
There are other good alternatives … enter Spectral Risk Measures (SRMs).
2 ToyCo Model
Example: Scenario Losses and Portfolio Statistics
Table 1: Assumptions for ToyCo two-unit portfolio across 10 equally likely scenarios.
X1
X2 net
X2 ceded
X2
total
0
36.0
0.0
0.0
0.0
36.0
1
40.0
0.0
0.0
0.0
40.0
2
28.0
0.0
0.0
0.0
28.0
3
22.0
0.0
0.0
0.0
22.0
4
33.0
7.0
0.0
7.0
40.0
5
32.0
8.0
0.0
8.0
40.0
6
31.0
9.0
0.0
9.0
40.0
7
45.0
10.0
0.0
10.0
55.0
8
25.0
40.0
0.0
40.0
65.0
9
25.0
40.0
35.0
75.0
100.0
EX
31.700
11.400
3.500
14.900
46.600
CV
0.215
1.299
3.0
1.545
0.455
Unit X1 is non-cat
Unit X2 is cat exposed, shown split into net and ceded to 35 xs 40 cover
Example: Pricing
Keep these numbers in mind!
Market pricing for the total portfolio earns a 15% return on a fully capitalized basis
Premium , capital , total assets , and return are related by where and are the discount rate and factor
Facts imply , loss ratio 87%, and premium to surplus ratio of 1.15:1
3 The “Industry Standard Approach”
Portfolio Pricing
In order to make insurance a trade at all, the common premium must be sufficient to compensate the common losses, to pay the expense of management, and to afford such a profit as might have been drawn from an equal capital employed in any common trade.”
Adam Smith, Book 1, Ch X, Part I, 5th Edition, 1789
Portfolio Pricing
Adam Smith’s pricing rule
Portfolio pricing rule
Common loss = expected loss
Dollar cost of capital (CoC), reflects
different forms of capital: equity, debt, reinsurance;
each with different cost rates.
Premium is a technical price and excludes expenses, investment income
Determining the Cost of Capital
Constant CoC assumption
Constant cost of capital (CCoC) is a standard assumption, ignoring alternatives
Vary across lines of business (too hard)
Vary across layers of capital (debt, equity, reins.)
CCoC of capital is called target return on capital, WACC, opportunity cost of capital, average CoC
CCoC assumption Dollar CoC = (average CoC) × (amount of capital)
CCoC Premium = expected loss + (avg CoC) x (amount of capital)
CCoC Critique
Capital cost and capital use both vary by layer
Different costs manifest in WACC calculation!
Published daily in credit yield curves (Treasury AAA Junk yields at fixed duration)
Capital allocation methods assume all capital has the same cost
Average CoC amount of capital
(Avg cost of capital across layers) (Avg use of capital across layers)
Average(cost of capital by layer use of capital by layer)
Compare unless and are uncorrelated
Cost and use are correlated because higher layers are bigger and cheaper (per unit of capital)
Cat exposed layers use a lot of cheap capital CCoC will overstate cost of cat risk and be too tail centric
CCoC Pricing Rule Formula
“The [actuarial analyst] must understand symbols and speak in words.”John Maynard Keynes
For premium , expected loss , capital , assets , and cost of capital
using and for risk discount factor and rate of discount, ,
Price of binary loss of with probability is
CCoC Pricing Rule Formula
CCoC pricing rule has strange formulation
for a 15% target return, and
Rule is additive for independent losses!
Rule does not “discount” all but max loss because coverage is for a given loss and larger losses
for all shows a positive margin
Interpretation: re-weighting of scenarios or probabilities?
Outcome x (Adjustment x Probability) not (Outcome x Adjustment) x Probability
0.87 x EL: weight all scenario (probabilities) by factor of 0.87
Increase worst possible outcome probability to 0.13
CCoC Pricing Rule Formula
Left plot shows CCoC risk (probability) adjustment factor distortion function relative to base at 1 (dashed line), equals
All outcome probabilities except the largest (“100%-percentile”) discounted by 0.87
Largest outcome probability increased to 0.13 (red star)
Right plot shows ToyCo total loss outcome as a quantile plot
Low (good) loss outcomes shown on left
High (bad) loss outcomes shown on right
Obvious Question
What about using other distortions?
The all-or-nothing nature of CCoC seems unsatisfactory and is numerically unstable
What other options are available?
How are different choices interpreted?
Do business decisions vary materially by distortion?
Alternatives to CCoC Assumption
Re-weight using risk-adjusted probabilities
Imagine spreadsheet of equally likely scenarios. Want to re-weight with risk-adjusted probabilities. What properties must rational adjusted probabilities possess?
Non-negative
Sum to 1
Weight should increase with increasing loss
All bad outcomes that occur at a lower losses also occur for any larger loss
Spectral distortion functions are a systematic way to derive weights satisfying 1-3
4 The Spectral World: Why and How
Spectral Pricing
SRM pricing uses a distortion function to add a risk load
Distortion functions make bad outcomes more likely and good ones less, resulting in a positive loading
Distortions express a risk appetite, Mango called them a “care/don’t care curve”
Many existing methods, including CCoC and CoXTVaR, are special cases of SRMs
Portfolio SRM premium has a natural allocation to individual units
Different distortions can produce same total portfolio pricing but have materially different natural allocations to units, reflecting distinct risk appetites
Different allocations, in turn, drive materially different business decisions
Spectral Pricing
A distortion function maps a probability to a larger probability, used to fatten the tail
Increasing
Concave (decreasing derivative)
can be interpreted as the (ask) price to write a binary risk paying 1 with probability and 0 otherwise; c.f. for CCoC
, the survival function of a random variable on sample space
Recall expected Loss cost
Spectral Pricing
is the risk-adjusted survival function
Spectral pricing rule associated with a distortion is given by It is intrepreted as a price, technical premium, risk-adjusted loss cost, or risk measure
Integration by parts trick gives an alternative expression which makes the spectral risk adjustment explicit
measures risk attitude to losses with an exceedance probability across the spectrum of losses as varies
Distortion Functions and Insurance Statistics
Figure 1: A distortion in orange compared to expected loss in blue (left). Relation to meaningful insurance statistics for each layer of loss (right).
Spectral Pricing Rules Have Nice Properties
All risk measures with the following four properties are SRM rules
Alternative cat investors: accept mid-single digits for uncorrelated bond returns TVaR distortion
Active brokering in market expends great effort to match risk with capital
Calibrate a Set of Distortions to Market Pricing
Distortions calibrated to common market pricing benchmark
15% return with full capitalization
For PH lower parameter is more expensive; for others a higher parameter
These parameters are moderate, realistic dual parameter ranges
TVaR means average worst proportion of outcomes
Distortions have one parameter and are easy to parameterize in Excel using Solver
Table 8: Distortion parameters at 15 percent target pricing.
P
COC
param
error
method
ccoc
53.565
0.150
0.150
0.0
ph
53.565
0.150
0.720
3.2978e-10
wang
53.565
0.150
0.343
1.2525e-08
dual
53.565
0.150
1.595
-3.3927e-07
tvar
53.565
0.150
0.271
7.6102e-06
What is the “Market ”?
Figure 2: Five distortions calibrated to 15 percent return pricing (left). The minimum of CCoC and TVaR pricing (right).
Distortions correspond with investor’s risk tolerances. Figure is consistent with thesis that cat (TVaR) and equity (CCoC) are two most important source of capital.
ToyCo Tranching between CCoC Equity and TVaR Debt Investors
Tranche with debt (or cat bond) attaching at quantile of loss
Turns out to be sub-optimal
Premium, Return and Loss Ratio by Tranche by Market Agent
metric
Premium
ROE
Loss ratio
layer
Equity
Debt
Total
Equity
Debt
Total
Equity
Debt
Total
distortion
ccoc
45.957
7.609
53.565
0.150
0.150
0.150
0.938
0.460
0.870
tvar
48.762
4.803
53.565
0.349
0.043
0.150
0.884
0.729
0.870
min_g
45.658
4.803
50.461
0.132
0.043
0.078
0.944
0.729
0.923
Rows: pricing from each agent and minimum across agents (min_g)
Columns: equity and debt correspond to capital tranches
Key takeaway: min_g price for the equity layer is not placeable
min_g of 45.658 lower than equity agent’s price 45.957 and debt’s 48.762
Neither equity nor debt agent’s distortion is uniformly lower over full range of the equity tranche sub-optimal tranching
Optimal Capital Structure
Optimal spit occurs at because the CCoC and TVaR distortions cross at , see Figure 2
Pricing by tranche by break point, with implied placeable premium and its split between tranches
metric
Premium
ROE
Loss ratio
layer
Equity
Debt
Total
Equity
Debt
Total
Equity
Debt
Total
distortion
ccoc
42.913
10.652
53.565
0.150
0.150
0.150
0.958
0.516
0.870
tvar
46.018
7.548
53.565
0.547
0.055
0.150
0.893
0.729
0.870
min_g
42.913
7.548
50.461
0.150
0.055
0.078
0.958
0.729
0.923
The table shows both layers are now placeable
Placeable Premium vs. Debt Attachment Point
Pricing for equity and debt tranches, and implied total placeable premium, compare to premium using the minimum distortion by size of equity layer
See next slide for graphic
Placeable Premium vs. Debt Attachment Point
Orange line shows total cost of capital varying with different debt/equity splits
Material costs from sub-optimal tranching of capital
Potential cost savings explain active broker rôle in reinsurance markets
7 Appendix
Actuarial Chestnuts — 1 of 2
Margin or return?
Distinguish capital from equity
Insureds concerned with margin to premium
Investors concerned with return to capital
Cat risk has cheap capital but expensive premium
Leverage reconciles the two viewpoints
aka premium is expensive for whom?
Actuarial Chestnuts — 2 of 2
Capital vs equity
Equity: book value of owner’s residual interest
Capital: net assets subordinate to policyholder claims
Five Parametric Families of Distortion Functions
The “usual suspect” distortions
CCoC: for and where , are discount rates
PH proportional hazard: ,
Wang:
Dual: ,
TVaR:
Higher , , and and lower correspond to higher prices
Algorithm for (Linear) Natural Allocation
Compute unit average loss grouped by total loss & sum group probabilities
Sort by ascending total loss (all values now distinct)
Compute survival function S
Apply distortion function g(S)
Difference step 4 to compute risk adjusted probabilities Q
Compute sum-products by unit and in total with respect to Q to obtain SRM pricing and natural allocation pricing by unit
Step 1 replaces with the conditional expectation , a random variable defined by
See PIR Algorithms 11.1.1 p.271 and 15.1.1, p.397 for more detail
Python source for presentation (RMarkdown): use Code drop down at top of page
Mildenhall and Major (2022) for the theory of spectral risk measures, natural allocation, and implementation details
Actuarial Standards Board (2019) Modeling Standard of Practice for US Actuaries
References
Actuarial Standards Board. (2019). Modeling. Actuarial Standard of Practice No. 56, (56).
Mildenhall, S. J., & Major, J. A. (2022). Pricing insurance risk: Theory and practice. John Wiley & Sons, Inc.
Source Code
---title: 'Going Spectral'subtitle: "Why and how to implement spectral pricing."date: 2025-02-23date-modified: last-modifiedcategories:- presentations- insurance- risk- pricing- pirauthor: - name: Stephen J. Mildenhall orcid: 0000-0001-6956-0098 corresponding: true email: mynl@me.combibliography: - library.bib - books.bibcolorlinks: truecsl: style.cslfig-format: svglink-bibliography: truelink-citations: truenumber-offset: 0number-sections: truenumber-depth: 1# tbl-align: left# fig-aling: leftreference-section-title: 'References'format: html: smooth-scroll: true citations-hover: true crossrefs-hover: false footnotes-hover: true link-external-icon: true link-external-newwindow: true page-layout: article fig-responsive: true lightbox: true ft_obj-contained: false toc: true toc-depth: 3 toc-title: 'In this post:' code-line-numbers: false code-overflow: wrap code-fold: true code-tools: true code-copy: true # revealjs: # slide-level: 2 # output-file: slides.html # options: # vertical-align: top # pptx: # slide-level: 2 # reference-doc: "master.potx" beamer: fontsize: 18pt citecolor: smcolor classoption: handout,t # ignore pauses etc. colorlinks: true colortheme : orchid filecolor: smcolor fonttheme : structurebold innertheme : metropolis keep-tex: true linkcolor: smcolor outertheme : metropolis slide-level: 2 # toc-depth: 1 # toc-title: 'Contents' toc: false urlcolor: smcolor pdf-engine: lualatex pdf-engine-opts: - '-interaction=nonstopmode' header-includes: - \geometry{paper=legalpaper, landscape, truedimen, right=1.5cm, left=0.5cm, top=0cm, bottom=1cm, mag=2000} - \usepackage{xcolor} - \definecolor{smcolor}{HTML}{3333B2} - \setbeamertemplate{footline}[frame number]execute: cache: true # incremental: only recalc if any block changes freeze: auto # re-render only when source changes (global) daemon: 600 # stay alive for 600 second error: false # ignore errors ??image: img/banner.png---## Abstract {.unnumbered}:::::: {.columns}::: {.column width="40%" .px-3}{width=100%}:::::: {.column width="60%"}\small**Going Spectral: Why and how to implement spectral pricing** challenges the constant cost of capital (aka risk-adjusted return on capital or RAROC) assumption commonly used insurance pricing---an assumption the weighted average cost of capital calculation reveals as invalid. The presentation demonstrates the advantages of using spectral risk measure (SRM) pricing rules, illustrating how SRMs not only generalize traditional methods like CoXTVaR but also address their limitations. Instead of prescribing a single solution, SRM methods offer a range of results corresponding to different risk appetites. Capital allocation is interpreted as sourcing capital from investors with the lowest return requirements across the risk spectrum.There is also a [shorter verion](shorter.qmd) of this presentation.\normalsize:::::::::## Setup CodeRunning the examples requires loading some Python libraries. See [blog post](/posts/presentations/2025-02-23-Going-Spectral/index.qmd) version of this presentation for the code.<!-- DEETS from fourier post. -->```{python}#| echo: false# xlabel: lst-setup-code# xlst-cap: Basic setup Python code.import matplotlib as mplimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom aggregate import build, qd, Distortion, Portfoliodef my_ff(x):"""My float formatter."""try:if x ==int(x):returnf'{x:,d}'elifabs(x) <0.005:returnf'{x:.5g}'elifabs(x) <100:returnf'{x:.3f}'else:returnf'{x:,.0f}'except:returnstr(x)pd.options.display.float_format = my_fffrom IPython.display import HTML, displayfrom greater_tables import GT__gt_global = GT()def nothing(df):return dfsd = sdp = nothing#from greater_tables import qd# try:# from greater_tables import qd# except ModuleNotFoundError:# print('Greater tables not found...using IPython.display.')# qd = display#sd = qd#sdp = qd#def sd(df):# # return df# bit = df.style.format(formatter=lambda x: #f'{x:.4g}').set_properties(**{'text-align': 'right'})# print(bit.to_html())# return bit##def sdp(df):# # return df# bit = df.style.format(formatter=lambda x: #f'{x:.1%}').set_properties(**{'text-align': 'right'})# print(bit.to_html())# return bitgcn_namer = {'X2': 'X2 net', 'X3': 'X2 ceded', 'X': 'X2', 'X4': 'X2'}def gcn(df): bit = df.loc[['X2', 'X3']] df.loc['X', :] = bit.sum(0) df.loc['X', 'LR'] = df.loc['X', 'L'] / df.loc['X', 'P'] df.loc['X', 'PQ'] = df.loc['X', 'P'] / df.loc['X', 'Q'] df.loc['X', 'COC'] = df.loc['X', 'M'] / df.loc['X', 'Q'] df = df.rename(index=gcn_namer) df = df.sort_index()return dfwgs = pd.DataFrame( {'X1': [36, 40, 28, 22, 33, 32, 31, 45, 25, 25],'X2': [ 0, 0, 0, 0, 7, 8, 9, 10, 40, 40],'X3': [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 35],'p_total': 1/10 })wport = Portfolio.create_from_sample('ToyCo', wgs, bs=1, log2=8)wport.calibrate_distortions(Ps=[1], COCs=[.15])ans = wport.price(1, allocation='linear')port = wport# local codeimport tranching_problem_code as tpcPLOT_FACE_COLOR ='white'# '#e9e9f2' # 'lightsteelblue'FIGURE_BG_COLOR ='#e9e9f2'# '#262680' # 'aliceblue'plt.rcParams.update({"axes.edgecolor": "black","axes.facecolor": PLOT_FACE_COLOR,"axes.labelcolor": "black","figure.dpi": 150,"figure.facecolor": FIGURE_BG_COLOR,"font.family": "sans-serif","font.size": 10,"legend.edgecolor": "none","legend.facecolor": PLOT_FACE_COLOR,"legend.labelcolor": "black","text.color": 'black', # "white","xtick.color": 'black', #"white","ytick.color": 'black', #"white",})```# Listen to Management## Management's Complaint\LargeToo many actuarial pricing models* over-weight tail catastrophe risk, and* under-weight earnings-hit volatility risk.This behavior drives portfolio steering and reinsurance purchase decisions materially at odds with management's risk preferences.\normalsize## Diagnosis\LargeManagement's complaint is entirely explained by an assumption that the cost of capital is constant.The assumption is often implicit and hidden.\normalsize## Prescription\LargeStop assuming the cost of capital is constant!There are other good alternatives ... enter Spectral Risk Measures (SRMs).\normalsize# ToyCo Model## Example: Scenario Losses and Portfolio Statistics\scriptsize```{python}#| echo: false#| label: tbl-assumptions-0#| tbl-cap: "Assumptions for ToyCo two-unit portfolio across 10 equally likely scenarios."# X1 is a non-cat line and X2 is cat exposed, shown with a 35 xs 40 cession."wgs_ = wgs.copy().drop(columns='p_total')wgs_['X4'] = wgs_['X2'] + wgs_['X3']wgs_['total'] = wgs.drop(columns='p_total').sum(1)wgs2 = wgs_.copy()wgs2.loc['EX', :] = wgs_.mean(0)wgs2.loc['EX2', :] = (wgs_**2).mean(0)wgs2.loc['Var', :] = wgs2.loc['EX2', :] - wgs2.loc['EX', :]**2wgs2.loc['CV', :] = wgs2.loc['Var', :]**.5/ wgs2.loc['EX', :]wgs2 = wgs2.drop(index = ['EX2', 'Var']).rename(columns=gcn_namer)sd(wgs2)```\normalsize* Unit X1 is non-cat* Unit X2 is cat exposed, shown split into net and ceded to 35 xs 40 cover## Example: Pricing### Keep these numbers in mind!* Market pricing for the total portfolio earns a 15% return on a fully capitalized basis* Premium $P$, capital $Q$, total assets $a=P+Q=\max(L)=100$, and return $r=0.15$ are related by $$P = \mathsf E[L] + r (a - P) \implies P = v \mathsf E[L] + d\max(L)$$ where $v = 1/(1+r)$ and $d=r/(1+r)$ are the discount rate and factor* Facts imply $P=53.565$, loss ratio 87%, and premium to surplus ratio of 1.15:1# The "Industry Standard Approach"## Portfolio Pricing:::::: {.columns}::: {.column width="30%"}:::::: {.column width="70%"}\Large> In order to make insurance a trade at all, the common premium must be sufficient to compensate the common losses, to pay the expense of management, and to afford such a profit as might have been drawn from an equal capital employed in any common trade."\bigskip\scriptsize> \ Adam Smith, Book 1, Ch X, Part I, 5th Edition, 1789\normalsize:::::::::## Portfolio Pricing:::::: {.columns}::: {.column width="30%"}:::::: {.column width="70%"}### Adam Smith's pricing rule* Portfolio pricing rule \begin{center} {\bf Premium = common loss $+$ cost of capital } \end{center}* Common loss = expected loss* Dollar cost of capital (CoC), reflects * different forms of capital: equity, debt, reinsurance; * each with different cost rates.* Premium is a **technical price** and excludes expenses, investment income:::::::::## Determining the Cost of Capital::: {.columns}::: {.column width="60%"}### Constant CoC assumption* Constant cost of capital (CCoC) is a standard assumption, ignoring alternatives - Vary across lines of business (too hard) - Vary across layers of capital (debt, equity, reins.)* CCoC of capital $r$ is called target return on capital, WACC, opportunity cost of capital, average CoC* CCoC assumption \ **Dollar CoC = (average CoC) × (amount of capital)*** CCoC Premium = expected loss + (avg CoC) x (amount of capital):::::: {.column width="40%" }{width=85%}::::::<!--## CCoC Portfolio Pricing::: {.columns}::: {.column width="65%" .px-0 .py-3}* CCoC = constant cost of capital, a common but thoughtless and problematic default - Constant across layers of capital (debt, equity, etc.) - Know not to be true...when computing WACC!* Various names: target return on capital or WACC or cost of capital set equal to $r$* General portfolio pricing rule: **Premium = expected loss + cost of capital*** General portfolio pricing rule: \begin{center} {\bf Premium = expected loss + cost of capital} \end{center}* CCoC Portfolio pricing rule: \begin{center} {\bf Premium = expected loss + (return) $\times$ (amount of capital) } \end{center}:::::: {.column width="35%" .py-0 .px-0}::::::-->## CCoC Critique### Capital cost and capital use both vary by layer* Different costs manifest in WACC calculation!* Published daily in credit yield curves (Treasury $<$ AAA $< \cdots <$ Junk yields at fixed duration)* Capital allocation methods assume all capital has the same cost* Average CoC $\times$ amount of capital * $=$ (Avg cost of capital across layers) $\times$ (Avg use of capital across layers) * $\not=$ Average(cost of capital by layer $\times$ use of capital by layer)* Compare $\mathsf E[XY] \not=\mathsf E[X]\mathsf E[Y]$ unless $X$ and $Y$ are uncorrelated\pause* Cost and use are **correlated** because higher layers are **bigger** and **cheaper** (per unit of capital)* Cat exposed layers use a lot of cheap capital $\implies$ CCoC will **overstate** cost of cat risk and be **too tail centric**<!--## CoC Assumptions### We know that CoC is **not** constant* That's why we calculate WACC!\pause* Debt credit curve * Higher rated debt (lower probability of default) is cheaper (lower yield) * Lower risk *to the investor* usually corresponds to a *higher* risk outcome for insurer (top of capital tower)\pause* $r$ × (amount of capital) = (Avg cost) x (Avg amount)* Generally, (Avg cost) x (Avg amount) $\not=$ Avg(cost x amount)* Compare correlation: $\mathsf E[XY]\not=\mathsf E[X]\mathsf E[Y]$\pause* Cat risk uses a lot of cheap capital $\implies$ cost and amount negatively correlated* CCoC will **overstate** cost of cat risk: "too tail-centric"-->## CCoC Pricing Rule Formula:::::: {.columns}::: {.column width="30%" .px-3}![**"The [actuarial analyst] must understand symbols and speak in words."** *John Maynard Keynes*](img/Keynes.png):::::: {.column width=60%}\pauseFor premium $P$, expected loss $\mathrm{EL}$, capital $Q$, assets $a$, and cost of capital $r$* $P=\mathrm{EL} + r\,Q$\pause* $\phantom{P}= \mathrm{EL} + r\,(a-P)$\pause* $\phantom{P}= \displaystyle\frac{1}{1+r}\,\mathrm{EL} + \displaystyle\frac{r}{1+r}\,a$\pause* $\phantom{P}= v\,\mathrm{EL} + d\,\max(\mathrm{loss})$using $v$ and $d$ for risk discount factor and rate of discount, $v+d=1$, $d=rv$\bigskipPrice of binary loss of $1$ with probability $s$ is $g(s) = vs + d$:::::::::## CCoC Pricing Rule Formula### CCoC pricing rule has strange formulation\Large\begin{center}{\bf Premium = 0.87 x EL + 0.13 x max loss}\end{center}\normalsizefor a 15% target return, $v=1/1.15 = 0.87$ and $d=0.13$* Rule is **additive** for independent losses!* Rule does **not** "discount" all but max loss because coverage is for a given loss and larger losses* $g(s)=vs +d > s$ for all $s$ shows a positive margin\medskip* **Interpretation**: re-weighting of scenarios or probabilities? * **Outcome x (Adjustment x Probability)** not (Outcome x Adjustment) x Probability * 0.87 x EL: weight all scenario (probabilities) by factor of 0.87 * Increase worst possible outcome probability to 0.13## CCoC Pricing Rule Formula::: {.columns}::: {.column width=75%}```{python}#| echo: false#| fig-width: 6# fig-cap: "(left) Care/don't care risk adjusted probability weights for CCoC; (right) outcome distribution."fig, axs = plt.subplots(1, 2, figsize=(2*4, 3), constrained_layout=True)ax0, ax1 = axs.flatax0.plot([0,1], [1/1.15]*2)ax0.plot(0, 2, 'r*')ax0.axhline(1, lw=.5, c='k', ls=':')ax0.set(ylim=[-0.05, 2.5], xlabel='Exceedance', ylabel='Weight adjustment')# plot quantiles from Toy Examplebit = port.density_df.query('p_total > 0').Fbit.loc[0] =0bit = bit.sort_index()ax = bit.reset_index(drop=False).set_index('F').plot( drawstyle='steps-pre', ax=ax1)ax.set(xlim=[0, 1.05], ylim=[0, 105], xlabel='Percentile', ylabel='Loss outcome');```::::::\medskip\small::: {.columns}::: {.column width="50%"}* Left plot shows CCoC risk (probability) adjustment factor **distortion function** relative to base at 1 (dashed line), equals $g'(s)$* All outcome probabilities except the largest ("100%-percentile") discounted by 0.87* Largest outcome probability increased to 0.13 (red star):::::: {.column width="50%"}* Right plot shows ToyCo total loss outcome as a quantile plot* Low (good) loss outcomes shown on left* High (bad) loss outcomes shown on right* $s\leftrightarrow p=1-s$::::::\normalsize## Obvious Question### What about using other distortions?The all-or-nothing nature of CCoC seems unsatisfactory and is numerically unstable* What other options are available?* How are different choices interpreted?* Do business **decisions** vary **materially** by distortion?## Alternatives to CCoC Assumption### Re-weight using risk-adjusted probabilitiesImagine spreadsheet of equally likely scenarios. Want to re-weight with risk-adjusted probabilities. What properties must rational adjusted probabilities possess?\pause1. Non-negative2. Sum to 13. Weight should increase with increasing lossAll bad outcomes that occur at a lower losses also occur for any larger lossSpectral **distortion functions** are a systematic way to derive weights satisfying 1-3# The Spectral World: Why and How## Spectral Pricing* SRM pricing uses a **distortion function** to add a risk load* Distortion functions make **bad** outcomes **more** likely and good ones less, resulting in a positive loading* Distortions express a **risk appetite**, Mango called them a "care/don't care curve"* Many existing methods, including CCoC and CoXTVaR, are special cases of SRMs* Portfolio SRM premium has a natural allocation to individual units* Different distortions can produce same total portfolio pricing but have materially different natural allocations to units, reflecting distinct risk appetites* Different allocations, in turn, drive materially different business decisions## Spectral Pricing* A **distortion function** $g:[0,1]\to [0,1]$ maps a probability to a larger probability, used to **fatten the tail** - Increasing - Concave (decreasing derivative)* $g(s)$ can be interpreted as the (ask) price to write a binary risk paying 1 with probability $s$ and 0 otherwise; c.f. $g(s)=d + sv$ for CCoC* $S(x) = \Pr(X>x)$, the survival function of a random variable $X$ on sample space $\Omega$* Recall expected Loss cost $\mathsf E[X] =\displaystyle\int_0^\infty xf(x)\,dx = \displaystyle\int_0^\infty S(x)\,dx$## Spectral Pricing* $g(S(x)) > S(x)$ is the risk-adjusted survival function* **Spectral pricing rule** associated with a distortion $g$ is given by $$\rho(X) = \int_0^\infty g(S(x))\,dx$$ It is intrepreted as a price, technical premium, risk-adjusted loss cost, or risk measure* Integration by parts trick gives an alternative expression $$\rho(X) = \int_0^\infty x g'(S(x))f(x)\,dx = \mathsf E[Xg'(S(X))]$$ which makes the **spectral risk adjustment** $g'(S(X))$ explicit* $g'(s) \ge 0$ measures risk attitude to losses with an exceedance probability $s$ across the **spectrum** of losses as $s$ varies## Distortion Functions and Insurance Statistics::: {.columns}::: {.column width=66%}```{python}#| echo: false#| label: fig-dist-ins#| fig-cap: "A distortion in orange compared to expected loss in blue (left). Relation to meaningful insurance statistics for each layer of loss (right)."from aggregate.extensions.pir_figures import fig_10_3from aggregate import Distortiond = Distortion.ph(.6)d = port.dists['ph']fig_10_3(d)```::::::\begin{center}{\bf Steeper $g \leftrightarrow$ greater risk aversion }\end{center}## Spectral Pricing Rules Have Nice Properties### **All** risk measures with the following four properties are **SRM** rules1. **Monotone**: Uniformly higher risk implies higher price2. **Sub-additive**: diversification decreases price3. **Comonotonic additive**: no credit when no diversification; if out-comes imply same event order, then prices add4. **Law invariant**: Price depends only on the distributionSince layer losses are comonotonic (they are increasing functions of total loss), SRM pricing adds-up by layer## SRM Pricing Adds Up Pricing by Layer::: {.columns}::: {.column width=70%}```{python}#| echo: false#| xlabel: fig-dist-ins-2#| xfig-cap: "Figure caption follows."from aggregate.extensions.pir_figures import fig_10_5fig_10_5(dist=d)```::::::\medskip* Low layers, below horizontal line at $x$ (left) have high EL and premium but low capital, driving low margin to loss but high return and high leverage* High layers, above the line, have low EL and premium but high capital, driving high margin to loss but low return and low leverage## SRM Pricing Adds Up Pricing by Layer: ToyCo Example $x=60$::: {.columns}::: {.column width=70%}```{python}#| echo: falsefig_10_5(port=port, dist=d, x=60)```::::::\medskip* ToyCo losses (left and center)* Proportional hazard distortion calibrated to 15% overall return at $a=100$, $g(s)=s^{0.72}$## SRM Pricing has a Natural Allocation to Sub-units* If $X = \sum_i X_i$, define the **natural allocation** to unit $i$ as $$\mathsf{NA}(X_i) = \mathsf E[X_i\, g'(S(X))]$$\pause* Example: TVaR corresponds to $g(s)=\min(1, s / (1-p))$ - $\rho(X) =\mathsf{TVaR}_p(X)$ - $\mathsf{NA}(X_i) = \mathsf{CoTVaR}_p(X_i)$\pause* The natural allocation pricing has nice properties - It is **natural** because it involves **no additional assumptions** - It **adds-up** because the sum of natural allocations is the original SRM price - It equals **marginal** volume pricing when marginal pricing is well defined## Risk-Adjusted Probabilities Reflecting "Volatility Aversion"::: {.columns}::: {.column width="40%"}### Volatility aversion...worries about* Earnings miss* Plan miss* Bonus miss...and is concerned with **outcomes near the mean**\medskipA volatility averse SRM applies maximal weight, consistent with (1)-(3) to a scenario at exceedance probability around 50\%:::::: {.column width="60%"}### Corresponding risk-adjusted probabilities::: {.columns}::: {.column width=66%}```{python}#| echo: false#| label: fig-raps# fig-cap: "(left) Distortion function probability risk adjustment factors for CCoC; (right) outcome distribution."fig, ax0 = plt.subplots(1, 1, figsize=(5, 3.5))d = port.dists['tvar']xs = np.linspace(0, 1, 101)ax0.plot(xs, d.g(xs), drawstyle='steps-post')ax0.axhline(1, lw=.5, c='k', ls=':')ax0.set(ylim=[-0.05, 2.5], xlabel='Percentile', ylabel='Weight adjustment')```::::::\footnotesize* Result: Tail Value at Risk at $p$ around 0.27; graph is $g'$* TVaR pricing: ignore best $\approx 27\%$ of outcomes and average the rest* Comparison with usual XTVaR approach using $p\approx 0.99$ presented in [Appendix](#sec-xtvar)\normalsize::::::## SRMs to Reflect a Range of Risk Appetites### Five parametric families of distortion functions* **CCoC** $\to$ **PH** (Proportional hazard) $\to$ **Wang** $\to$ **dual** $\to$ **TVaR** * Express progressively less tail-centric appetite * Five different one-parameter families of risk-adjusted probabilities, see @sec-usual-suspects for formulas * Each easily parameterized to desired pricing* Graph shows weight adjustments $g'(s)$ for comparably calibrated distortions::: {.columns}::: {.column width=100%}```{python}#| echo: false#| xlabel: fig-distortions# xfig-cap: "Distortion probability adjustment functions."fig, axs = plt.subplots(1, 5, figsize=(5*2, 2), constrained_layout=True, sharey=True)xs = np.linspace(0, 1, 101)for (k, v), ax inzip(wport.dists.items(), axs.flat):if k =='ccoc': ax.plot([0,1], [1/1.15]*2) ax.plot(0, 2, 'r*')else: ax.plot(xs, v.g_prime(xs)) ax.plot([0, 1], [1,1], lw=.5, c='k') ax.set(title=k, ylim=[-0.05, 2.5], xlabel='Exceedance')if ax is axs[0]: ax.set(ylabel='Weight adjustment')```::::::* Dual distortion popular in applications: bounded, but weights all scenarios## CCoC Portfolio Pricing with XTVaR Capital Standard {#sec-xtvar}### XTVaR is a special case of SRM pricing* CCoC implementation with XTVaR capital: $$P(X) = \mathsf E[X] + r\, \mathsf{XTVaR}_p(X) = (1-r)\mathsf E[X] + r\, \mathsf{TVaR}_p(X)$$\pause* Corresponding distortion is $$g(s)=(1-r)s + r\min(1, s / (1-p))$$ - Weight $1-r$ applied to all events: risk neutral part - Weight $r$ applied to $p$-tail events: extremely risk averse - Example of a bi-TVaR, an average of two TVaRs, since $\mathsf E[X] = \mathsf{TVaR}_0(X)$\pause* Easy to check corresponding $\rho(X) = (1-r)\mathsf E[X] + r\mathsf{TVaR}_p(X)$## CCoC Portfolio Pricing with XTVaR Capital Standard### XTVaR natural allocation is CoXTVaR* Corresponding natural allocation is simply CoXTVaR pricing $$\mathsf{NA}(X_i) = (1-r)\mathsf E[X_i] + r\, \mathsf{CoTVaR}(X_i) = \mathsf E[X_i] + r \, \mathsf{CoXTVaR}(X_i)$$* Shows SRM approach generalizes existing methods# ToyCo Numerical Example## Example: Scenario Losses and Portfolio Statistics (recap)\scriptsize```{python}#| echo: false#| label: tbl-assumptions#| tbl-cap: "Assumptions for ToyCo two-unit portfolio across 10 equally likely scenarios."# X1 is a non-cat line and X2 is cat exposed, shown with a 35 xs 40 cession."wgs_ = wgs.copy().drop(columns='p_total')wgs_['X4'] = wgs_['X2'] + wgs_['X3']wgs_['total'] = wgs.drop(columns='p_total').sum(1)wgs2 = wgs_.copy()wgs2.loc['EX', :] = wgs_.mean(0)wgs2.loc['EX2', :] = (wgs_**2).mean(0)wgs2.loc['Var', :] = wgs2.loc['EX2', :] - wgs2.loc['EX', :]**2wgs2.loc['CV', :] = wgs2.loc['Var', :]**.5/ wgs2.loc['EX', :]wgs2 = wgs2.drop(index = ['EX2', 'Var']).rename(columns=gcn_namer)sd(wgs2)```\normalsize* Unit X1 is non-cat* Unit X2 is cat exposed, shown split into net and ceded to 35 xs 40 cover## Example: Cat Pricing Across a Range of Risk Appetites### Mechanics::: {.columns}::: {.column width=45%}\scriptsize```{python}#| echo: falseg = wport.dists['dual']bit = port.density_df.query('p_total > 0')[['p_total','S']]bit.index.name ='loss'bit = bit.rename(columns={'p_total': 'p'})bit['gS'] = g.g(bit.S)bit['q'] =-np.diff(bit.gS, prepend=1)bit['dx'] = np.diff(bit.index, prepend=0)bit0 = bit.copy()bit.loc['Total', :] = [(bit0.p * bit0.index).sum(), (bit0.S.shift(1, fill_value=1) * bit0.dx).sum(), (bit0.gS.shift(1, fill_value=1) * bit0.dx).sum(), (bit0.q * bit0.index).sum(), bit0.dx.sum()]bit```\normalsize:::::: {.column width=50%}\scriptsize**Columns*** `p` : probability of each total loss value* `S` : the survival function* `gS`: distortion applied to $S$ $g(s)=1-(1-s)^{1.59515}$* `q` : backward differences $dgS$ of `gS`, fill value 1 at the top* `dx`: backward differences of `loss` fill value 0**Total row calculation** with $x$ denoting loss value* `p` : $\sum_x x p_x$, expected loss* `S` : $\int_0^{100} S(x)\,dx$, expected loss* `gS`: $\int_0^{100} g(S(x))\,dx$, premium (risk adjusted expected loss)* `q` : $\sum_x x q_x$, premium* `dx`: $\sum_x dx = a$\normalsize::::::## Example: Cat Pricing Across a Range of Risk Appetites### Natural allocation pricing and loss ratios implied by dual distortion\scriptsize```{python}#| echo: false#| label: tbl-dual-1#| tbl-cap: Expected loss `L`, premium `P`, and loss ratio `LR` by unitsd(gcn(ans.df.loc['dual'])[['L', 'P', 'LR']])```\normalsize* Gross pricing at 87% loss ratio calibrated to 15% return with assets $a=100$ sufficient to pay all claims with no-default* Total $P = 53.565 = v EL + d \max(L) = 46.6 / 1.15 + (0.15 / 1.15) \times 100$* Loss ratio for X2 ceded loss represents model minimum acceptable ceded loss ratio## Example: Cat Pricing Across a Range of Risk Appetites### Pricing and loss ratios implied by dual distortion (details)\scriptsize```{python}#| echo: false#| label: tbl-dual-2#| tbl-cap: "Expected loss, premium, margin, capital, assets, loss ratio, leverage `PQ`, and cost of capital by unit."sd(gcn(ans.df.loc['dual']))```\normalsize* Displays **natural allocation** of capital and associated average cost by unit; reflects lower capital cost for tail cat risk (see PIR Ch. 14.3.8)* Very low cost of capital for X1 reflects its value as a hedge; negative tail correlation## Example: Cat Pricing Across a Range of Risk Appetites### Implied loss ratios by unit across distortion risk appetites\scriptsize```{python}#| echo: false#| label: tbl-ra-comp#| tbl-cap: Model loss ratios by distortionpd.options.display.float_format =lambda x: f'{x:.1%}'ans.df[['LR']].unstack(1).droplevel(0,1).rename(columns=gcn_namer)```\normalsize* All risk appetites calibrated to same total loss ratio* Distortions shown from tail-centric to volatility-centric* Ceded loss ratios show decreasing value of tail-reinsurance as risk appetite becomes more volatility driven* Conversely X1 loss ratio increases as tail-hedge becomes more valuable## Example: Cat Pricing Across a Range of Risk Appetites### CoC by capital tranche: equity vs. reinsurance\scriptsize```{python}#| echo: false#| label: tbl-cocs#| tbl-cap: "Model indicated CoC for equity and reinsurance capital."# Ceded capital benefit is 35 - cat bond collateral amounts# a = 35; ceded ROE from reinsurance:re_coc = ans.df[['M']].unstack(1).droplevel(0,1)[['X3']] / (35- ans.df[['P']].unstack(1).droplevel(0,1)[['X3']])eq_coc = (.15*46.434783- (35- ans.df[['P']].unstack(1).droplevel(0,1)[['X3']]) * re_coc.values) / (46.434783- (35- ans.df[['P']].unstack(1).droplevel(0,1)[['X3']]))c = re_coc.copy()c.X3 =.15sdp(pd.concat((re_coc, eq_coc, c), keys=['Reins', 'Equity', 'Capital'], axis=1).droplevel(1,1))```\normalsize* Gross calibrated to 15% average return, determined by market dynamics* Purchase reinsurance when implied CoC at or below indicated return* Reflects lower value ascribed to reinsurance by volatility-sensitive management## Example: Cat Pricing Across a Range of Risk Appetites### CoC can be computed by unit but hard to interpret and not useful\scriptsize```{python}#| echo: false#| label: tbl-ra-comp-2#| tbl-cap: Natural allocation CoC by distortionsdp(ans.df[['COC']].unstack(1).droplevel(0,1).rename(columns=gcn_namer))```\normalsize* CCoC distortion results in constant CoC but perverse negative allocation to X1* CoC hard to interpret without CCoC assumption; better to allocate total margin directly\pause* Interpret margin as the CFO's "cost to enter the theme park" and **expose all capital**# Determining the Distortion## What is the "Market $g$"?::: {.columns}::: {.column width=50%}### Thesis* Different investor market participants have different distortions* Insurer optimal capital structure uses the efficiently* Market $g$ emerges from participant's pricing rules:::::: {.column width=50%}### Supporting market observations* Equity investors: 15%+ target return, volatility averse concerned you "make earnings" \ $\leftrightarrow$ **CCoC** distortion* Alternative cat investors: accept mid-single digits for uncorrelated bond returns \ $\leftrightarrow$ **TVaR** distortion* **Active brokering** in market expends great effort to match risk with capital::::::## Calibrate a Set of Distortions to Market Pricing* Distortions calibrated to common market pricing benchmark* 15% return with full capitalization $a=100$* For PH lower parameter is more expensive; for others a higher parameter* These parameters are moderate, realistic dual parameter ranges $2.0-3.0$* TVaR $p=0.271$ means average worst $1-0.271 = 0.729$ proportion of outcomes* Distortions have one parameter and are easy to parameterize in Excel using Solver\scriptsize```{python}#| echo: false#| label: tbl-dist-df#| tbl-cap: "Distortion parameters at 15 percent target pricing."# put formatter backpd.options.display.float_format = my_ffport.distortion_df.droplevel([0,1], 0)[["P","COC","param","error"]]```\normalsize## What is the "Market $g$"?::: {.columns}::: {.column width=66%}```{python}#| echo: false#| label: fig-market#| fig-cap: "Five distortions calibrated to 15 percent return pricing (left). The minimum of CCoC and TVaR pricing (right)."# put formatter backpd.options.display.float_format = my_fffig, axs = plt.subplots(1, 2, figsize=(2*3, 3), constrained_layout=True, sharey=True)ax0, ax1 = axs.flatps = np.linspace(0, 1, 1001)colors = {k: f'C{i}'for i, k inenumerate(wport.dists.keys())}ax = ax0for (k, v) in wport.dists.items(): ax.plot(ps, v.g(ps), lw=1, label=k, c=colors[k])ax.set(aspect='equal')ax.legend(loc='upper left')ccoc = wport.dists['ccoc']tvar = wport.dists['tvar']min_g = Distortion.minimum([ccoc, tvar])colors[min_g.name] ='k'ax = ax1for g in [ccoc, tvar, min_g]: ax.plot(ps, g.g(ps), lw=2if g is min_g else1, ls='--'if g is min_g else'-', label=g.name, c=colors[g.name])ax.set(aspect='equal')ax.legend(loc='upper left')```::::::Distortions correspond with investor's risk tolerances. Figure is consistent with thesis that cat (TVaR) and equity (CCoC) are two most important source of capital.## ToyCo Tranching between CCoC Equity and TVaR Debt Investors::: {.columns}::: {.column width=30%}* Tranche with debt (or cat bond) attaching at $p=0.9$ quantile of loss* Turns out to be sub-optimal:::::: {.column width=70%}::: {.columns}::: {.column width=100%}```{python}#| echo: falsea =100layering = tpc.make_and_plot_layering_small(port, a, .9)```::::::::::::## Premium, Return and Loss Ratio by Tranche by Market Agent\scriptsize```{python}#| echo: falseans = tpc.ccoc_tvar_pricing(port, layering, a)tpc.roe_lr(ans)```\normalsize* Rows: pricing from each agent and minimum across agents (`min_g`)* Columns: equity and debt correspond to capital tranches* Key takeaway: `min_g` price for the equity layer is **not placeable*** `min_g` of **45.658** lower than equity agent's price **45.957** and debt's **48.762*** Neither equity nor debt agent's distortion is uniformly lower over full range of the equity tranche $\implies$ **sub-optimal** tranching## Optimal Capital Structure* Optimal spit occurs at $p=0.74$ because the CCoC and TVaR distortions cross at $1-p$, see @fig-market* Pricing by tranche by break point, with implied placeable premium and its split between tranches\scriptsize```{python}#| echo: falseequal_s = tpc.equal_s(port)layering_opt = tpc.make_and_plot_layering_small(port, a, 1- equal_s, plot=False)ans_opt = tpc.ccoc_tvar_pricing(port, layering_opt, a)tpc.roe_lr(ans_opt)```\normalsize* The table shows both layers are now placeable## Placeable Premium vs. Debt Attachment Point\scriptsize```{python}#| echo: falses_values = port.density_df.query('p_total > 0').F.valuesplaced = tpc.placement_analysis(port, a, s_values)placed.columns = ['p break', 'Equity', 'Eq Cost', 'Debt Cost', 'Placeable Prem', 'Min Prem']placed = placed.set_index('p break')```\normalsize* Pricing for equity and debt tranches, and implied total placeable premium, compare to premium using the minimum distortion by size of equity layer* See next slide for graphic## Placeable Premium vs. Debt Attachment Point::: {.columns}::: {.column width=50%}```{python}#| echo: falseax = placed['Min Prem'].plot(figsize=(5,3))placed['Placeable Prem'].plot(ax=ax)ax.legend(loc='lower left')ax.set(ylim= [45, 55], xlabel='p break', ylabel='Premium');```::::::* Orange line shows total cost of capital varying with different debt/equity splits* Material costs from sub-optimal tranching of capital* Potential cost savings explain active broker rôle in reinsurance markets# Appendix## Actuarial Chestnuts — 1 of 2### Margin or return?* Distinguish **capital** from **equity*** Insureds concerned with **margin** to premium* Investors concerned with **return** to capital* Cat risk has cheap capital but expensive premium* **Leverage** reconciles the two viewpoints\medskipaka premium is *expensive* for whom?## Actuarial Chestnuts — 2 of 2### Capital vs equity* Equity: book value of owner's residual interest* Capital: net assets subordinate to policyholder claims## Five Parametric Families of Distortion Functions {#sec-usual-suspects}### The "usual suspect" distortions* **CCoC**: $g(s)=d + vs$ for $s>0$ and $g(0)=0$ where \ $d=1/(1+r)$, $v=1-d$ are discount rates* **PH** proportional hazard: $g(s) = s^\alpha$, $0 \le \alpha \le 1$* **Wang**: $g(s) = \Phi(\Phi^{-1}(s) +\lambda)$* **Dual**: $g(s) = 1 - (1 -s)^\beta$, $\beta \ge 1$* **TVaR**: $g(s) = \min(1, s / (1-p))$* Higher $r$, $\lambda$, $\beta$ and $p$ and lower $\alpha$ correspond to higher prices## Algorithm for (Linear) Natural Allocation {#sec-nat-alloc}1. Compute unit average loss grouped by total loss & sum group probabilities1. Sort by ascending total loss (all values now distinct)1. Compute survival function S1. Apply distortion function g(S)1. Difference step 4 to compute risk adjusted probabilities Q1. Compute sum-products by unit and in total with respect to Q to obtain SRM pricing and natural allocation pricing by unitStep 1 replaces $X_i$ with the conditional expectation $\mathsf E[X_i \mid X]$, a random variable defined by $\mathsf E[X_i \mid X](\omega) = \mathsf E[X_i \mid X=X(ω)]$See PIR Algorithms 11.1.1 p.271 and 15.1.1, p.397 for more detailSee [Why SRMs presentation](https://www.convexrisk.com/static/talks/Mildenhall-Why-SRMs-2023.pdf) for calculation details::: {.content-visible when-format="html" unless-format="revealjs"}## Python Source Code for imported Python functions```{code}path: tranching_problem_code.pylang: python```:::## Further Reading[Python source](/posts/presentations/2025-02-23-Going-Spectral) for presentation (RMarkdown): use Code drop down at top of page@PIR for the theory of spectral risk measures, natural allocation, and implementation details@ASOP56 Modeling Standard of Practice for US Actuaries::: {.refs}:::