Introduction

These study notes are based on the Exam 9 syllabus readings The Underwriting Profit Provision and IRR, ROE, and PVI/PVE by Dr. Ira Robbin. The papers describe various notions of “underwriting profit” and present seven methods for determining an underwriting profit provision to be used in calculating rates. This paper corresponds to learning objectives D4 and D5 on the syllabus.

easypackages::packages("dplyr", "ggplot2")
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 3.4.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Loading required package: ggplot2
## All packages loaded successfully

General Background

The underwriting profit provision is a prospective component of the actuarial rate. It is distinct from actual underwriting profit, which is the after-the-fact difference between the premium and losses and expenses, and generally differs from the UW profit provision.

The UW profit provision has evolved over time:

Broadly speaking, the problem of setting a UW profit provision could be accomplished by setting it such that the total profit (UW profit plus investment income less taxes) is adequate. However, there are several challenges with this approach:

The readings make a distinction between five types of underwriting profit:

  1. Underwriting profit rates are included in the manual rates.

  2. Corporate target UW profit provisions which, for a stock company, are sufficient to yield an expected return comparable to similar risks.

  3. Breakeven UW profit provisions generate an expeted return to stockholders equal to the risk-free rate. In this case, the stockholder receives no compensation for taking on risk.

  4. Charged UW profit provisions may differ from the manual rates, because they are obtained following experience rating and schedule rating.

  5. Actual UW profits generally differ from the provisions charged because estimates of prospective losses seldom match actual losses. If the actual UW profits are consistently below the charged provisions, then the methods used to estimate losses and expenses should be examined.

The following notation is used:

The fundamental relationship between these quantities is \[ P = (1 + c)L + F + VP + UP \] which is equivalent to \[ P = \frac{(1+c)L + F}{1 - V - U} \] Solving for \(U\) instead, we obtain \[ U = 1 - \left(V + \frac{(1+c)L + F}{P}\right) = 1 - C \] In the reading, the factor \((1+c)\) applied to losses is generally ignored for simplicity.

The model used is called a single policy company model, which assesses profitability based on the underwriting and equity cash flows of a single policy. The company is assumed to be liquidated after the last claim payment is made.

The underwriting cash flow at the end of the \(j\)th time period is: \[ U_i = P_i - L_i - X_i \] and the pre-tax income is \[ U_i + I_i \]

Methods for Calculating a Profit Provision

The following parameters are used in the examples in the reading:

loss = 65
fixed.expense = 15
variable.expense.ratio = 0.25
premium.payment.pattern.pct = c(0.4, 0.15, 0.15, 0.15, 0.15, rep(0, 16))
loss.payment.pattern.dollars = c(0, 2, 4, 7, 8, 8.5, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0)
loss.payment.pattern.pct = loss.payment.pattern.dollars / loss
expense.payment.pattern.pct = c(0.3, 0.175, 0.175, 0.175, 0.175, rep(0, 16))
after.tax.portfolio.yield = 0.0668

Calendar Year Investment Offset

This involves adjusting a “traditional” underwriting profit provision downward based on interest on policy-holder supplied funds. The method relies on calendar year information, and generally works well when growth and reserving patterns have been stable over time. Define the following notation:

  • \(U_0\) is the traditional underwriting profit provision

  • \(i\) is the after-tax calendar year investment yield

  • \(A_p\) is the ratio of funds supplied by policy holders to premium

Then the UW profit provision calculated by this method is \[ U = U_0 - iA_p \]

The key part of the method is determining what exactly constitutes “policy-holder supplied funds”. This can be calculated as follows based on information available in the annual statement:

  1. Begin with the unearned premium reserve

  2. Deduct pre-paid acquisition expenses (commissions, premium taxes, other acquisition expenses, company overhead) on the unearned premium since these expenses have already been paid, and are not available for investment

  3. Deduct premium receivables since this cash has not yet been received, so it is not available for investment

  4. Add the product of permissible losses (from the prospective rate) and the ratio of calendar year loss reserves to calendar year incurred losses

  5. Divide by premium

Alternately, the above calculations may be performed using ratios to premium (and then step 5 is not needed). Multi-year averages may also be used for greater stability, especially for the ratio of loss reserves to incurred losses.

The example in the reading uses the following assumptions:

unearned.premium = 50000
pre.paid.expense.ratio = 0.18
premiums.receivable = 28000
earned.premium = 160000
loss.res.to.loss.incurred = 1.20
permissible.loss.ratio = 0.60
after.tax.portfolio.yield = 0.0668
traditional.UW.profit = 0.05

The policyholder-supplied funds, as a ratio to premium, are:

ph.supplied.funds = (unearned.premium * (1 - pre.paid.expense.ratio) - premiums.receivable + permissible.loss.ratio * earned.premium * loss.res.to.loss.incurred) / earned.premium
ph.supplied.funds
## [1] 0.80125

The offset is:

profit.offset = after.tax.portfolio.yield * ph.supplied.funds
profit.offset
## [1] 0.0535235

The resulting UW profit provision is:

CY.offset.provision = traditional.UW.profit - profit.offset
CY.offset.provision
## [1] -0.0035235

Because the method relies on the selection of a permissible loss ratio, and the profit provision is used to select the loss ratio, this method should be iterated until there is convergence. The new permissible loss ratio \(L_1\) can be quickly calculated as \[ L_1 = L_0 + U_0 - U \] In this example, the new permissible loss ratio is

plr.2 = permissible.loss.ratio + traditional.UW.profit - CY.offset.provision
plr.2
## [1] 0.6535235

This changes the policyholder-supplied funds to

phsf.2 = (unearned.premium * (1 - pre.paid.expense.ratio) - premiums.receivable + plr.2 * earned.premium * loss.res.to.loss.incurred) / earned.premium
phsf.2
## [1] 0.8654782

The new UW profit provision is

CY.offset.provision.2 = traditional.UW.profit - after.tax.portfolio.yield * phsf.2
CY.offset.provision.2
## [1] -0.007813944

Note that this is still offset from the original UW profit margin, not the revised one calculated in the first iteration.

Advantages of this method include:

  • Calendar year investment information is readily available, and transparent.

  • Calendar year investment yields tend to be relatively stable.

  • The method is very practical: inputs are readily available and calculations are easy.

Disadvantages of this method include:

  • Calendar year results are retrospective, and may not be appropriate for a prospective ratemaking task. This is particularly problematic if the line has experinced rapid growth or decline, or there have been significant changes in loss reserve adequacy.

  • A challenge is that the permissible loss ratio depends on the UW profit provision, which in turn depends on the permissible loss ratio. There may be a need to iterate the method until the UW profit provision converges.

  • There is a lack of a general economic theory to support the calculation.

Present Value Offset

In this approach, an offset \(D\) is calculated by comparing the cash flows of the line being analyzed to a reference line, for which the traditional profit provision is assumed to be correct. The adjusted UW profit provision is then \[ U = U_0 - D \] The approach for calculating \(D\) is:

  1. Calculate the present value of the loss payout pattern for the reference line

  2. Calculate the present value of the loss payout pattern for the line being analyzed, then subtract from the present value of losses for the reference line

  3. Multiply the above by the permissible loss ratio.

The method can be illustrated using the following reference line payment pattern and discount rate:

reference.line.payout.pct = c(0, 0.1, 0.15, 0.2, 0.25, 0.15, 0.10, 0.05, rep(0, 13))
discount.rate = 0.0528
permissible.loss.ratio = 0.65
pvo.data = data.frame(quarter = 0:20, reference_pattern = reference.line.payout.pct, subject_pattern = loss.payment.pattern.pct)
pvo.data
##    quarter reference_pattern subject_pattern
## 1        0              0.00     0.000000000
## 2        1              0.10     0.030769231
## 3        2              0.15     0.061538462
## 4        3              0.20     0.107692308
## 5        4              0.25     0.123076923
## 6        5              0.15     0.130769231
## 7        6              0.10     0.123076923
## 8        7              0.05     0.092307692
## 9        8              0.00     0.076923077
## 10       9              0.00     0.061538462
## 11      10              0.00     0.046153846
## 12      11              0.00     0.030769231
## 13      12              0.00     0.030769231
## 14      13              0.00     0.015384615
## 15      14              0.00     0.015384615
## 16      15              0.00     0.015384615
## 17      16              0.00     0.015384615
## 18      17              0.00     0.007692308
## 19      18              0.00     0.007692308
## 20      19              0.00     0.007692308
## 21      20              0.00     0.000000000

Discount all percentages to time 0:

pvo.data = pvo.data %>% mutate(discount_factor = 1 / (1 + discount.rate)^(quarter / 4), pv_reference_pottern = discount_factor * reference_pattern, pv_subject_pattern = discount_factor * subject_pattern)
pvo.data
##    quarter reference_pattern subject_pattern discount_factor
## 1        0              0.00     0.000000000       1.0000000
## 2        1              0.10     0.030769231       0.9872191
## 3        2              0.15     0.061538462       0.9746015
## 4        3              0.20     0.107692308       0.9621451
## 5        4              0.25     0.123076923       0.9498480
## 6        5              0.15     0.130769231       0.9377081
## 7        6              0.10     0.123076923       0.9257233
## 8        7              0.05     0.092307692       0.9138917
## 9        8              0.00     0.076923077       0.9022113
## 10       9              0.00     0.061538462       0.8906802
## 11      10              0.00     0.046153846       0.8792964
## 12      11              0.00     0.030769231       0.8680582
## 13      12              0.00     0.030769231       0.8569636
## 14      13              0.00     0.015384615       0.8460108
## 15      14              0.00     0.015384615       0.8351980
## 16      15              0.00     0.015384615       0.8245234
## 17      16              0.00     0.015384615       0.8139852
## 18      17              0.00     0.007692308       0.8035817
## 19      18              0.00     0.007692308       0.7933111
## 20      19              0.00     0.007692308       0.7831719
## 21      20              0.00     0.000000000       0.7731622
##    pv_reference_pottern pv_subject_pattern
## 1            0.00000000        0.000000000
## 2            0.09872191        0.030375971
## 3            0.14619022        0.059975475
## 4            0.19242903        0.103615631
## 5            0.23746201        0.116904372
## 6            0.14065621        0.122623363
## 7            0.09257233        0.113935173
## 8            0.04569458        0.084359231
## 9            0.00000000        0.069400867
## 10           0.00000000        0.054811087
## 11           0.00000000        0.040582912
## 12           0.00000000        0.026709483
## 13           0.00000000        0.026368111
## 14           0.00000000        0.013015551
## 15           0.00000000        0.012849200
## 16           0.00000000        0.012684975
## 17           0.00000000        0.012522849
## 18           0.00000000        0.006181398
## 19           0.00000000        0.006102393
## 20           0.00000000        0.006024399
## 21           0.00000000        0.000000000

Calculate \(D\) by summing the present values, taking their difference, and multiplying by the permissible loss ratio:

D = permissible.loss.ratio * (sum(pvo.data$pv_reference_pottern) - sum(pvo.data$pv_subject_pattern))
D
## [1] 0.0225445

The UW profit provision is:

pvo.profit.provision = traditional.UW.profit - D
pvo.profit.provision
## [1] 0.0274555

The justification for the method is that, for the reference line, if \(V_0\) is the present value of losses for that line, then the premium equation can be re-written as \[ P = V_0 + F + PV + PU_0 + (L - V_0) \] Due to the investment income on the loss reserves, we only need to collect \(V_0\) at policy inception to cover the losses, rather than \(L\). Therefore, \(L - V_0\) can be viewed as part of the underwriting profit. The Present Value Offset method essetially replaces \(L - V_0\) for the reference line with the corresponding value for the line being analyzed.

Advantages of this approach include:

  • It is not distorted by rapid growth or decline, as the calendar year offset method is.

  • There is no need to select a target return or to set a surplus requirement.

Disadvantages of this approach include:

  • Does not account for investment income in a direct and simple fashion.

A key assumption in this method is the selection of a discount rate. Some considerations in making this selection:

  • New money rates are more consistent with the prospective nature of ratemaking

  • Portfolio yields are more easily verifiable

  • Using an after-tax rate for discounting accounts for the effect of income taxes; however, this would only account for income tax associated with the present value of loss provision.

  • A key consideration in determining after-tax rates retrospectively vs. prospectively is whether past underwriting losses have impacted the income tax rate.

Present Value Return on Cash Flow

This method is based setting the profit provision such that the present value of equity flows, discounted at the target rate of return, should equal the present value of total cash flows, discounted at the investment rate. The steps in this approach are:

  1. Calculate the pre-tax total cash flow in each time period, which is equal to the underwriting cash flow plus investment income on investible equity (typically this is the statutory surplus).

  2. Discount the total cash flows at the pre-tax investment rate. (Note that this implicitly incorporates investment income on policyholder-supplied funds.)

  3. Reduce the present value of cash flows based on the tax rate.

  4. Calculate the equity flow, from the perspective of the insurer, in each time period, without consideration of changes in equity due to underwriting activity. Note that a key distinction between this method and others is that the equity flow does not include underwriting cash flows – these are accounted for on the other side of the equation.

  5. Discount the equity flow using the target rate of return.

  6. Adjust premium so that the two present values are equal. The UW profit provision can then be determined by subtracting losses and expenses as a percentage of premium.

The example in the reading starts with a given premium and validates that it produces an underwriting cash flow whose present value equals that of equity. Here are the assumptions used in the example:

initial.premium = 106.20
premium.to.surplus = 3
equity.to.surplus = 1.2
investment.rate = 0.08
discount.rate = 0.08
tax.rate = 0.34
target.return = 0.15

Set up a data frame with the UW cash flows:

UW.cash.flows = data.frame(quarter = 0:20, premium = initial.premium * premium.payment.pattern.pct, loss = loss.payment.pattern.dollars, expense = (initial.premium * variable.expense.ratio + fixed.expense) * expense.payment.pattern.pct)
UW.cash.flows
##    quarter premium loss  expense
## 1        0   42.48  0.0 12.46500
## 2        1   15.93  2.0  7.27125
## 3        2   15.93  4.0  7.27125
## 4        3   15.93  7.0  7.27125
## 5        4   15.93  8.0  7.27125
## 6        5    0.00  8.5  0.00000
## 7        6    0.00  8.0  0.00000
## 8        7    0.00  6.0  0.00000
## 9        8    0.00  5.0  0.00000
## 10       9    0.00  4.0  0.00000
## 11      10    0.00  3.0  0.00000
## 12      11    0.00  2.0  0.00000
## 13      12    0.00  2.0  0.00000
## 14      13    0.00  1.0  0.00000
## 15      14    0.00  1.0  0.00000
## 16      15    0.00  1.0  0.00000
## 17      16    0.00  1.0  0.00000
## 18      17    0.00  0.5  0.00000
## 19      18    0.00  0.5  0.00000
## 20      19    0.00  0.5  0.00000
## 21      20    0.00  0.0  0.00000

Assuming the above values are paid at the end of each quarter, calculate the net UW cash flow and discount it to the beginning of the first quarter.

UW.cash.flows = UW.cash.flows %>% mutate(net_UW_cash_flow = premium - loss - expense, discount_factor = 1 / (1 + discount.rate) ^(quarter / 4), PV_UW_cash_flow = net_UW_cash_flow * discount_factor)
UW.cash.flows
##    quarter premium loss  expense net_UW_cash_flow discount_factor
## 1        0   42.48  0.0 12.46500         30.01500       1.0000000
## 2        1   15.93  2.0  7.27125          6.65875       0.9809437
## 3        2   15.93  4.0  7.27125          4.65875       0.9622504
## 4        3   15.93  7.0  7.27125          1.65875       0.9439135
## 5        4   15.93  8.0  7.27125          0.65875       0.9259259
## 6        5    0.00  8.5  0.00000         -8.50000       0.9082812
## 7        6    0.00  8.0  0.00000         -8.00000       0.8909726
## 8        7    0.00  6.0  0.00000         -6.00000       0.8739940
## 9        8    0.00  5.0  0.00000         -5.00000       0.8573388
## 10       9    0.00  4.0  0.00000         -4.00000       0.8410011
## 11      10    0.00  3.0  0.00000         -3.00000       0.8249747
## 12      11    0.00  2.0  0.00000         -2.00000       0.8092537
## 13      12    0.00  2.0  0.00000         -2.00000       0.7938322
## 14      13    0.00  1.0  0.00000         -1.00000       0.7787047
## 15      14    0.00  1.0  0.00000         -1.00000       0.7638654
## 16      15    0.00  1.0  0.00000         -1.00000       0.7493089
## 17      16    0.00  1.0  0.00000         -1.00000       0.7350299
## 18      17    0.00  0.5  0.00000         -0.50000       0.7210229
## 19      18    0.00  0.5  0.00000         -0.50000       0.7072828
## 20      19    0.00  0.5  0.00000         -0.50000       0.6938046
## 21      20    0.00  0.0  0.00000          0.00000       0.6805832
##    PV_UW_cash_flow
## 1       30.0150000
## 2        6.5318585
## 3        4.4828843
## 4        1.5657165
## 5        0.6099537
## 6       -7.7203899
## 7       -7.1277811
## 8       -5.2439637
## 9       -4.2866941
## 10      -3.3640043
## 11      -2.4749240
## 12      -1.6185073
## 13      -1.5876645
## 14      -0.7787047
## 15      -0.7638654
## 16      -0.7493089
## 17      -0.7350299
## 18      -0.3605114
## 19      -0.3536414
## 20      -0.3469023
## 21       0.0000000

The present value of UW cash flows is:

PV.UW.cash.flow.total = sum(UW.cash.flows$PV_UW_cash_flow)
PV.UW.cash.flow.total
## [1] 5.69352

Investment income is calculated based on the surplus. Assume that the surplus is committed when the policy is written and released when it exprires — therefore, the surplus generates investment income at the ends of quarters 1 through 4.

UW.cash.flows = UW.cash.flows %>% mutate(investment_income = ifelse(quarter %in% c(1, 2, 3, 4), initial.premium / premium.to.surplus * investment.rate / 4, 0), PV_investment_income = investment_income * discount_factor)
UW.cash.flows
##    quarter premium loss  expense net_UW_cash_flow discount_factor
## 1        0   42.48  0.0 12.46500         30.01500       1.0000000
## 2        1   15.93  2.0  7.27125          6.65875       0.9809437
## 3        2   15.93  4.0  7.27125          4.65875       0.9622504
## 4        3   15.93  7.0  7.27125          1.65875       0.9439135
## 5        4   15.93  8.0  7.27125          0.65875       0.9259259
## 6        5    0.00  8.5  0.00000         -8.50000       0.9082812
## 7        6    0.00  8.0  0.00000         -8.00000       0.8909726
## 8        7    0.00  6.0  0.00000         -6.00000       0.8739940
## 9        8    0.00  5.0  0.00000         -5.00000       0.8573388
## 10       9    0.00  4.0  0.00000         -4.00000       0.8410011
## 11      10    0.00  3.0  0.00000         -3.00000       0.8249747
## 12      11    0.00  2.0  0.00000         -2.00000       0.8092537
## 13      12    0.00  2.0  0.00000         -2.00000       0.7938322
## 14      13    0.00  1.0  0.00000         -1.00000       0.7787047
## 15      14    0.00  1.0  0.00000         -1.00000       0.7638654
## 16      15    0.00  1.0  0.00000         -1.00000       0.7493089
## 17      16    0.00  1.0  0.00000         -1.00000       0.7350299
## 18      17    0.00  0.5  0.00000         -0.50000       0.7210229
## 19      18    0.00  0.5  0.00000         -0.50000       0.7072828
## 20      19    0.00  0.5  0.00000         -0.50000       0.6938046
## 21      20    0.00  0.0  0.00000          0.00000       0.6805832
##    PV_UW_cash_flow investment_income PV_investment_income
## 1       30.0150000             0.000            0.0000000
## 2        6.5318585             0.708            0.6945081
## 3        4.4828843             0.708            0.6812733
## 4        1.5657165             0.708            0.6682907
## 5        0.6099537             0.708            0.6555556
## 6       -7.7203899             0.000            0.0000000
## 7       -7.1277811             0.000            0.0000000
## 8       -5.2439637             0.000            0.0000000
## 9       -4.2866941             0.000            0.0000000
## 10      -3.3640043             0.000            0.0000000
## 11      -2.4749240             0.000            0.0000000
## 12      -1.6185073             0.000            0.0000000
## 13      -1.5876645             0.000            0.0000000
## 14      -0.7787047             0.000            0.0000000
## 15      -0.7638654             0.000            0.0000000
## 16      -0.7493089             0.000            0.0000000
## 17      -0.7350299             0.000            0.0000000
## 18      -0.3605114             0.000            0.0000000
## 19      -0.3536414             0.000            0.0000000
## 20      -0.3469023             0.000            0.0000000
## 21       0.0000000             0.000            0.0000000

The present value of investment income is:

PV.investment.total = sum(UW.cash.flows$PV_investment_income)
PV.investment.total
## [1] 2.699628

Accounting for taxes, the present value of total cash flow is:

PV.total.cash.flow = (PV.UW.cash.flow.total + PV.investment.total) * (1 - tax.rate)
PV.total.cash.flow
## [1] 5.539478

Assume that equity is committed at the beginning of the policy and released at the end of it. Note that I am using a different notational convention than in the reading; I am interpreting the values as of the end of the quarter, so surplus and equity should be 0 for quarter 4. Discount the equity flows at the target rate of return:

equity.flows = data.frame(quarter = 0:20, surplus = initial.premium / premium.to.surplus * c(rep(1, 4), rep(0, 17)))
equity.flows = equity.flows %>% mutate(equity = surplus * equity.to.surplus, equity_flow = equity - lag(equity, default = 0), equity_discount_factor = 1 / (1 + target.return) ^(quarter / 4), PV_equity_flow = equity_flow * equity_discount_factor)
equity.flows
##    quarter surplus equity equity_flow equity_discount_factor
## 1        0    35.4  42.48       42.48              1.0000000
## 2        1    35.4  42.48        0.00              0.9656629
## 3        2    35.4  42.48        0.00              0.9325048
## 4        3    35.4  42.48        0.00              0.9004853
## 5        4     0.0   0.00      -42.48              0.8695652
## 6        5     0.0   0.00        0.00              0.8397069
## 7        6     0.0   0.00        0.00              0.8108737
## 8        7     0.0   0.00        0.00              0.7830307
## 9        8     0.0   0.00        0.00              0.7561437
## 10       9     0.0   0.00        0.00              0.7301799
## 11      10     0.0   0.00        0.00              0.7051076
## 12      11     0.0   0.00        0.00              0.6808962
## 13      12     0.0   0.00        0.00              0.6575162
## 14      13     0.0   0.00        0.00              0.6349390
## 15      14     0.0   0.00        0.00              0.6131370
## 16      15     0.0   0.00        0.00              0.5920837
## 17      16     0.0   0.00        0.00              0.5717532
## 18      17     0.0   0.00        0.00              0.5521209
## 19      18     0.0   0.00        0.00              0.5331627
## 20      19     0.0   0.00        0.00              0.5148554
## 21      20     0.0   0.00        0.00              0.4971767
##    PV_equity_flow
## 1        42.48000
## 2         0.00000
## 3         0.00000
## 4         0.00000
## 5       -36.93913
## 6         0.00000
## 7         0.00000
## 8         0.00000
## 9         0.00000
## 10        0.00000
## 11        0.00000
## 12        0.00000
## 13        0.00000
## 14        0.00000
## 15        0.00000
## 16        0.00000
## 17        0.00000
## 18        0.00000
## 19        0.00000
## 20        0.00000
## 21        0.00000

The total present value of the equity flows is:

PV.equity.flow = sum(equity.flows$PV_equity_flow)
PV.equity.flow
## [1] 5.54087

The difference between the two, as a percentage of premium, is:

(PV.equity.flow - PV.total.cash.flow) / initial.premium
## [1] 1.310757e-05

The two values do not differ materially, so this premium achieves the target profit provision. This provision is:

1 - loss / initial.premium - fixed.expense / initial.premium - variable.expense.ratio
## [1] -0.003295669

Advantages of the method include:

  • Has intuitive appeal, since present value of UW cash flows is a natural way of measuring UW income net of investment.

Disadvantages of the method include:

  • Can’t be easily reconciled to GAAP ROE since the timing of UW cash flows is generally not the same as underwriting income under GAAP.

Risk-Adjusted Discounted Cash Flow

This approach involves calculating a fair premium directly by discounting all cash flows to the end of the first year, with losses discounted at a rate that reflects the risk associated with them. The steps in this approach are:

  1. Calculate the value of expenses and income taxes on investment income at the risk-free rate, discounted to the end of the first year.

  2. Calculate the risk-adjusted rate using the CAPM formula, \(i_r = i_f + \beta(i_m - i_f)\). Note that for liabilities, \(\beta\) values are generally negative – this results in present values that are higher than the risk-free present value, representing the risk associated with them.

  3. Calculate the discounted value of losses using \(i_r\) as of the end of the first year.

  4. Discount the premium payment pattern to the end of year one using the risk-free rate.

  5. Calculate the tax on underwriting income, as of the end of year one, by multiplying the tax rate by the discounted UW income calculated above.

  6. The fair premium is the sum of the results of steps 1, 3, and 5, divided by the present value of premium factor calculated in step 4.

  7. Determine the UW profit provision by subtracting losses and expenses from the premium.

It is challenging to estimate \(\beta\) since there is no open market for liabilites that could be used as a basis for estimating it. An indirect way would be to subtract the \(\beta\) for the insurer’s investment portfolio from the \(\beta\) for the insurer’s stock, giving an implicit market valuation of the insurer’s liabilities.

The following assumptions are used in the example in the reading:

risk.free.rate = 0.08
market.return = 0.105
beta = -0.75

The rate used to discount losses is:

risk.adjusted.rate = risk.free.rate + beta * (market.return - risk.free.rate)
risk.adjusted.rate
## [1] 0.06125

Based on the cash flow patterns for premium, losses, expenses, and income tax, calculate the discount factor associated with each.

risk.adjustment.data = data.frame(quarter = 0:20, premium_payment = premium.payment.pattern.pct, loss_payment = loss.payment.pattern.pct, expense_payment = expense.payment.pattern.pct, inv_tax_payment = 0.25 * c(0, rep(1, 4), rep(0, 16)))
risk.adjustment.data
##    quarter premium_payment loss_payment expense_payment inv_tax_payment
## 1        0            0.40  0.000000000           0.300            0.00
## 2        1            0.15  0.030769231           0.175            0.25
## 3        2            0.15  0.061538462           0.175            0.25
## 4        3            0.15  0.107692308           0.175            0.25
## 5        4            0.15  0.123076923           0.175            0.25
## 6        5            0.00  0.130769231           0.000            0.00
## 7        6            0.00  0.123076923           0.000            0.00
## 8        7            0.00  0.092307692           0.000            0.00
## 9        8            0.00  0.076923077           0.000            0.00
## 10       9            0.00  0.061538462           0.000            0.00
## 11      10            0.00  0.046153846           0.000            0.00
## 12      11            0.00  0.030769231           0.000            0.00
## 13      12            0.00  0.030769231           0.000            0.00
## 14      13            0.00  0.015384615           0.000            0.00
## 15      14            0.00  0.015384615           0.000            0.00
## 16      15            0.00  0.015384615           0.000            0.00
## 17      16            0.00  0.015384615           0.000            0.00
## 18      17            0.00  0.007692308           0.000            0.00
## 19      18            0.00  0.007692308           0.000            0.00
## 20      19            0.00  0.007692308           0.000            0.00
## 21      20            0.00  0.000000000           0.000            0.00

Calculate discount factors at both the risk-free rate and the risk-adjusted rate:

risk.adjustment.data = risk.adjustment.data %>% mutate(risk_free_discount = 1 / (1 + risk.free.rate)^((quarter - 4) / 4), risk_adjusted_discount = 1 / (1 + risk.adjusted.rate)^((quarter - 4) / 4), premium_discount = premium_payment * risk_free_discount, loss_discount = loss_payment * risk_adjusted_discount, expense_discount = expense_payment * risk_free_discount, inv_tax_discount = inv_tax_payment * risk_free_discount )
risk.adjustment.data
##    quarter premium_payment loss_payment expense_payment inv_tax_payment
## 1        0            0.40  0.000000000           0.300            0.00
## 2        1            0.15  0.030769231           0.175            0.25
## 3        2            0.15  0.061538462           0.175            0.25
## 4        3            0.15  0.107692308           0.175            0.25
## 5        4            0.15  0.123076923           0.175            0.25
## 6        5            0.00  0.130769231           0.000            0.00
## 7        6            0.00  0.123076923           0.000            0.00
## 8        7            0.00  0.092307692           0.000            0.00
## 9        8            0.00  0.076923077           0.000            0.00
## 10       9            0.00  0.061538462           0.000            0.00
## 11      10            0.00  0.046153846           0.000            0.00
## 12      11            0.00  0.030769231           0.000            0.00
## 13      12            0.00  0.030769231           0.000            0.00
## 14      13            0.00  0.015384615           0.000            0.00
## 15      14            0.00  0.015384615           0.000            0.00
## 16      15            0.00  0.015384615           0.000            0.00
## 17      16            0.00  0.015384615           0.000            0.00
## 18      17            0.00  0.007692308           0.000            0.00
## 19      18            0.00  0.007692308           0.000            0.00
## 20      19            0.00  0.007692308           0.000            0.00
## 21      20            0.00  0.000000000           0.000            0.00
##    risk_free_discount risk_adjusted_discount premium_discount
## 1           1.0800000              1.0612500        0.4320000
## 2           1.0594191              1.0455945        0.1589129
## 3           1.0392305              1.0301699        0.1558846
## 4           1.0194265              1.0149729        0.1529140
## 5           1.0000000              1.0000000        0.1500000
## 6           0.9809437              0.9852480        0.0000000
## 7           0.9622504              0.9707137        0.0000000
## 8           0.9439135              0.9563937        0.0000000
## 9           0.9259259              0.9422850        0.0000000
## 10          0.9082812              0.9283845        0.0000000
## 11          0.8909726              0.9146890        0.0000000
## 12          0.8739940              0.9011955        0.0000000
## 13          0.8573388              0.8879011        0.0000000
## 14          0.8410011              0.8748028        0.0000000
## 15          0.8249747              0.8618977        0.0000000
## 16          0.8092537              0.8491830        0.0000000
## 17          0.7938322              0.8366559        0.0000000
## 18          0.7787047              0.8243136        0.0000000
## 19          0.7638654              0.8121533        0.0000000
## 20          0.7493089              0.8001725        0.0000000
## 21          0.7350299              0.7883684        0.0000000
##    loss_discount expense_discount inv_tax_discount
## 1    0.000000000        0.3240000        0.0000000
## 2    0.032172138        0.1853984        0.2648548
## 3    0.063395070        0.1818653        0.2598076
## 4    0.109304769        0.1783996        0.2548566
## 5    0.123076923        0.1750000        0.2500000
## 6    0.128840127        0.0000000        0.0000000
## 7    0.119472452        0.0000000        0.0000000
## 8    0.088282499        0.0000000        0.0000000
## 9    0.072483465        0.0000000        0.0000000
## 10   0.057131353        0.0000000        0.0000000
## 11   0.042216414        0.0000000        0.0000000
## 12   0.027729093        0.0000000        0.0000000
## 13   0.027320034        0.0000000        0.0000000
## 14   0.013458505        0.0000000        0.0000000
## 15   0.013259965        0.0000000        0.0000000
## 16   0.013064355        0.0000000        0.0000000
## 17   0.012871630        0.0000000        0.0000000
## 18   0.006340874        0.0000000        0.0000000
## 19   0.006247333        0.0000000        0.0000000
## 20   0.006155173        0.0000000        0.0000000
## 21   0.000000000        0.0000000        0.0000000

The discounted value of each quantity is as follows:

premium.discount = sum(risk.adjustment.data$premium_discount)
premium.discount
## [1] 1.049711
loss.discount = sum(risk.adjustment.data$loss_discount)
loss.discount
## [1] 0.9628222
expense.discount = sum(risk.adjustment.data$expense_discount)
expense.discount
## [1] 1.044663
inv.tax.discount = sum(risk.adjustment.data$inv_tax_discount)
inv.tax.discount
## [1] 1.029519

A key challenge is that we are attempting to determine the premium, but some costs such as variable expenses and tax on investment income depend on the premium. The equation for premium becomes: \[ d_PP = d_L L + d_EF + d_EPV + d_TTiP/x + T(d_P P - d_L L - d_EF - d_EPV) \] where \(d_X\) is the discount factor applied to cost \(X\), and \(x\) is the premium-to-surplus ratio. Solving for \(P\), we obtain \[ P = \frac{(1 - T) (d_LL + d_EF)}{(1-T)(d_P- d_EV) - d_TTi/x} \]

The premium premium can be calculated as follows:

full.premium = ((1 - tax.rate) * (loss.discount * loss + expense.discount * fixed.expense)) / ((1 - tax.rate) * (premium.discount - expense.discount * variable.expense.ratio) - inv.tax.discount * tax.rate * investment.rate / premium.to.surplus)
full.premium 
## [1] 101.05

The corresponding UW profit loading, as a percentage of premium, is:

1 - loss / full.premium - fixed.expense / full.premium - variable.expense.ratio
## [1] -0.04168731
premium.discount * full.premium - loss.discount * loss - expense.discount * (fixed.expense + variable.expense.ratio * full.premium) - inv.tax.discount * tax.rate * full.premium * investment.rate / premium.to.surplus - tax.rate * (premium.discount * full.premium - loss.discount * loss - expense.discount * (fixed.expense + variable.expense.ratio * full.premium))
## [1] -6.661338e-16

Advantages of this approach include:

  • It is grounded in modern financial theory

  • There is no need to determine a target rate of return, or an equity / surplus requirement

Disadvantages of this approach include:

  • Since many companies are multi-line, there isn’t a clear way to estimate \(\beta\) separately for each line of business.

  • The need to select a risk-adjusted discount rate introduces challenges. Under CAPM, it should be based on correlation with the market; however, insurance loss reserves are unlikely to be correlated with the market and likely have a \(\beta\) near zero. Absent a risk adjusted rate, this is not a risk-sensitive premium calculation.

  • It does not consider the impact of accounting structures on expenses, or the effect that reserve discounting has on equity.

  • It does not account for the cost of holding surplus.

Internal Rate of Return (IRR) on Equity Flows

The equity flow at time \(j\) is equal to the sum of after-tax net income and the equity released during the period. Initially, there is a negative equity from (i.e. from investors to the company) \[ F_0 = -Q_0 \] and \[ F_j = I_j + (Q_{j-1} - Q_{j}) \]

The IRR on Equity Flows method involves determining a discount factor \(w\) such that \[ \sum_j F_j w^j = 0 \] The discount factor is related to the rate of return \(y\) by \[ w = \frac{1}{1+y} \] In other words, \(y = 1/w - 1\).

A key consideration in this algorithm is the difference between statutory and GAAP accounting. Generally, statutory reserves are used for the purpose of calculating investment income, while GAAP measures are used to calculate the net income and equity. The method can be applied as follows:

  1. Calculate incurred and paid losses and expenses in each period, along with earned and paid premium.

  2. Calculate the unearned premium reserve, the loss reserve (cumulative incurred minus cumulative paid), and expense reserve (cumulative incurred minus cumulative paid) in each period, based on statutory incurred amounts.

  3. Calculate the surplus based on the rule provided. A typical rule is that in a given year, the surplus is equal to the present value (as of that year) of unpaid losses, including unpaid losses that have not yet been incurred.

  4. Determine assets as the sum of all statutory reserves and surplus.

  5. Calculate invested assets by deducting any receivables, e.g. unpaid premium.

  6. Calculate investment income based on the amount of invested assets at the end of the previous period.

  7. Determine GAAP net income after taxes in each period by summing earned premium and investment income, subtracting GAAP incurred losses and expenses, and multiplying by 1 minus the tax rate.

  8. Determine GAAP equity by adding DAC to the statutory surplus. DAC can be calculated as cumulative statutory incurred expenses minus cumulative GAAP incurred expenses. Determine the equity flow in each period as the sum of net income after tax and any equity released.

Exhibit 2 in the IRR reading illustrates the method with the following parameters:

ep.pattern = c(0, 1, 0, 0, 0)
incurred.loss.pattern = c(0, 1, 0, 0, 0)
stat.incurred.expense.pattern = c(0.6, 0.4, 0, 0, 0)
GAAP.incurred.expense.pattern = c(0, 1, 0, 0, 0)
paid.premium.pattern = c(0.75, 0.20, 0.05, 0, 0)
paid.loss.pattern = c(0, 0.25, 0.50, 0.25, 0)
paid.expense.pattern = c(0.3, 0.45, 0.2, 0.05, 0)
receivables = c(25, 5, 0, 0, 0)
DAC = c(18, 0, 0, 0, 0)
premium = 100
loss.amt = 72
expense.amt = 30
interest.rate = 0.06
tax.rate = 0.35
surplus.to.pv.unpaid.loss = 0.315
loss.discount.rate = 0.06

Determine the cash and equity flows in each period as follows:

IRR.example = data.frame(time = 0:4, earned_premium = ep.pattern * premium, incurred_loss = incurred.loss.pattern * loss.amt, paid_loss = paid.loss.pattern * loss.amt, stat_incurred_expense = expense.amt * stat.incurred.expense.pattern, GAAP_incurred_expense = expense.amt * GAAP.incurred.expense.pattern, paid_expense = expense.amt * paid.expense.pattern, paid_premium = paid.premium.pattern * premium, receivables = receivables, DAC = DAC)
paid.loss.PV = sum(IRR.example$paid_loss / (1 + loss.discount.rate)^IRR.example$time)
IRR.example = IRR.example %>% mutate(unearned_premium = premium - cumsum(earned_premium), expense_reserve = cumsum(stat_incurred_expense) - cumsum(paid_expense), unpaid_loss = cumsum(incurred_loss) - cumsum(paid_loss), pv_unpaid_loss = (paid.loss.PV - cumsum(paid_loss / (1 + loss.discount.rate)^time)) * (1 + loss.discount.rate)^time, surplus = pv_unpaid_loss * surplus.to.pv.unpaid.loss, assets = surplus + unearned_premium + unpaid_loss + expense_reserve, investment_income = interest.rate * lag(assets - receivables, default = 0), GAAP_equity = surplus + DAC, net_income = (earned_premium - incurred_loss - GAAP_incurred_expense + investment_income) * (1 - tax.rate), equity_flow = ifelse(time == 0, -GAAP_equity, net_income + lag(GAAP_equity) - GAAP_equity))
IRR.example
##   time earned_premium incurred_loss paid_loss stat_incurred_expense
## 1    0              0             0         0                    18
## 2    1            100            72        18                    12
## 3    2              0             0        36                     0
## 4    3              0             0        18                     0
## 5    4              0             0         0                     0
##   GAAP_incurred_expense paid_expense paid_premium receivables DAC
## 1                     0          9.0           75          25  18
## 2                    30         13.5           20           5   0
## 3                     0          6.0            5           0   0
## 4                     0          1.5            0           0   0
## 5                     0          0.0            0           0   0
##   unearned_premium expense_reserve unpaid_loss pv_unpaid_loss   surplus
## 1              100             9.0           0       64.13415 20.202258
## 2                0             7.5          54       49.98220 15.744393
## 3                0             1.5          18       16.98113  5.349057
## 4                0             0.0           0        0.00000  0.000000
## 5                0             0.0           0        0.00000  0.000000
##      assets investment_income GAAP_equity net_income equity_flow
## 1 129.20226          0.000000   38.202258  0.0000000   -38.20226
## 2  77.24439          6.252135   15.744393  2.7638880    25.22175
## 3  24.84906          4.334664    5.349057  2.8175313    13.21287
## 4   0.00000          1.490943    0.000000  0.9691132     6.31817
## 5   0.00000          0.000000    0.000000  0.0000000     0.00000

Now, find the discount factor:

roots = polyroot(IRR.example$equity_flow)
roots
## [1]  0.9030149+0.000000i -1.4971321+2.110545i -1.4971321-2.110545i

The first root is the real root:

discount.factor = Re(roots[1])
IRR = 1 / discount.factor - 1
print(paste0("The internal rate of return on equity flows is ", IRR))
## [1] "The internal rate of return on equity flows is 0.107401380450173"

Suppose we wanted to derive a profit provision instead. Discount the equity flows using a target rate of return;

target.return = 0.12
PV.equity.at.target = sum(IRR.example$equity_flow / (1 + target.return)^IRR.example$time)
print(paste0("The present value of equity at the target rate is ", PV.equity.at.target))
## [1] "The present value of equity at the target rate is -0.652469865566715"

Since this is negative, additional premium is required. Calculate the profit margin after increasing the premium.

new.premium = premium - PV.equity.at.target
profit.margin = (new.premium - loss.amt - expense.amt) / new.premium
print(paste0("The indicated profit margin is ", profit.margin))
## [1] "The indicated profit margin is -0.0133879490114159"

Note that the above approach isn’t exact because it doesn’t account for investment income on the additional premium, but given the size of the premium change the difference is unlikely to be material.

The method is affected by changes to the surplus rule and interest rates in the following ways:

  • Higher surplus requirements lead to higher equity requirements, and therefore higher premium.

  • Higher interest rates lead to greater investment income, and therefore lower premium.

  • If the surplus rule is based on the present value of unpaid loss, then higher interest rates will lower both the surplus and the premium; as a result, the premium-to-surplus ratio is not highly sensitive to changes in interest rate.

Present Value of Income over Present Value of Equity

The PVI / PVE method is as follows:

  1. Discount net income after tax to the end of year 1 using specified rate.

  2. Discount equity to the beginning of year 1 using the specified rate. (This is the total equity in each year, not the equity flow.)

  3. Calculate the ratio of Step 1 to Step 2

The same rate is often used in both Steps 1 and 2, and is equal to the company’s cost of capital.

Applying the method to the same data used in the IRR example, we obtain the following:

pvi.pve.discount.rate = 0.12
pvi = (1 + pvi.pve.discount.rate) * sum(IRR.example$net_income / (1 + pvi.pve.discount.rate)^IRR.example$time)
pve = sum(IRR.example$GAAP_equity / (1 + pvi.pve.discount.rate)^IRR.example$time)
pvi.pve = pvi / pve
print(paste0("The PVI-to-PVE ratio is ", pvi.pve))
## [1] "The PVI-to-PVE ratio is 0.107071572716134"

To convert this to a premium loading, determine the additional amount of premium needed to achieve the target rate:

additional.premium = pve * (pvi.pve.discount.rate - pvi.pve)
new.premium = premium + additional.premium
profit.margin = (new.premium - loss.amt - expense.amt) / new.premium
print(paste0("The indicated profit provision is ", profit.margin))
## [1] "The indicated profit provision is -0.0126002590650641"

Suppose instead that we discount at the IRR rate derived above:

pvi.pve.discount.rate = IRR
pvi = (1 + pvi.pve.discount.rate) * sum(IRR.example$net_income / (1 + pvi.pve.discount.rate)^IRR.example$time)
pve = sum(IRR.example$GAAP_equity / (1 + pvi.pve.discount.rate)^IRR.example$time)
pvi.pve = pvi / pve
print(paste0("The PVI-to-PVE ratio is ", pvi.pve))
## [1] "The PVI-to-PVE ratio is 0.107401380450173"

Note that this matches the IRR. This is a general result: assuming that both PVI and PVE are discounted at the internal rate of return \(y\), then the PVI-to-PVE ratio will also equal \(y\). This is because the equity flows in the IRR calculation form a telescoping sum: \[ \sum_{1 \leq j \leq n} I_j w^j= Q_0 + (Q_1 - Q_0)w + (Q_2 - Q_1)w^2 + \cdots + (Q_{n-1} - Q_{n-2})w^{n-1} - Q_{n-1}w^n = (1-w) \sum_{0\leq j \leq n-1} Q_j w^{j} \] Therefore, the PVI-to-PVE ratio is \[ \frac{(1+y)\sum_{1 \leq j \leq n} I_j w^j}{\sum_{0\leq j \leq n-1} Q_j w^{j}} = (1-w)(1+y) = y \]

Calendar Year Return on Equity and Growth Model

This approach assumes that the company writes a new policy at the start of the year, that is a scaled version of the “single policy” according to a uniform growth rate \(g\). If the policy involves \(n\) time periods, then after this amount of time the company will be in a steady state referred to as the equilibrium growth phase. In the \(k\)th year of equilibrium, the income from all outstanding policies at the end of the year will be \[ \sum_{1 \leq j \ leq n} N_j (1 + g)^{n + k - j} = (1 + g)^{k+n-1}(1+g) \sum_{j\leq i \leq n} N_j (1+g)^{-j} \] The equity at the beginning of the year will be \[ \sum_{1 \leq j \leq n} Q_j(1+g)^{n+k-j-1} = (1+g)^{n+k-1} \sum_{0 \leq j \leq n-1}Q_j (1+g)^{-j} \] The ratio of the two is \[ \frac{(1+g) \sum_{1\leq j \leq n} N_j (1+g)^{-j}}{ \sum_{0 \leq j \leq n-1}Q_j (1+g)^{-j}} \] This is essentially the same formula as the PVI / PVE method, except that the growth rate is used as the discount rate. Therefore, when the growth rate equals the IRR, this gives the same result as the IRR method. The interpretation of this is that when the growth rate equals IRR, all income is being used to support the growth – so the IRR is the maximum self-sustainable growth rate.

Using the same data as the IRR method, we can apply the growth model as follows:

growth.rate = 0.05
growth.income = (1 + growth.rate) * sum(IRR.example$net_income / (1 + growth.rate)^IRR.example$time)
growth.equity = sum(IRR.example$GAAP_equity / (1 + growth.rate)^IRR.example$time)
growth.roe = growth.income / growth.equity
print(paste0("The ROE based on the growth model is ", growth.roe))
## [1] "The ROE based on the growth model is 0.108982092167559"

Changing the growth rate to the IRR validates that this gives the same result:

growth.rate = IRR
growth.income = (1 + growth.rate) * sum(IRR.example$net_income / (1 + growth.rate)^IRR.example$time)
growth.equity = sum(IRR.example$GAAP_equity / (1 + growth.rate)^IRR.example$time)
growth.roe = growth.income / growth.equity
print(paste0("The ROE based on the growth model is ", growth.roe))
## [1] "The ROE based on the growth model is 0.107401380450173"

The approach can also be used to determine the calendar year ROE during the build-up phase:

  1. First, calculate the net after-tax income and equity in each calendar year for a single policy.

  2. For each subsequent year, multiply the single policy equity and net income pattern by the growth factor, and shift it up one calendar year.

  3. In each calendar year, sum up the total equity and net income. Calculate the calendar year ROE by dividing net income by equity.

Summary: Comparison of Discount Rates used

Method Quantity Discount rate
Present Value Offset Future Losses (both lines) Interest rate
Present Value Return on Cash Flow Equity flows Target rate of return
Present Value Return on Cash Flow Cash flows Pre-tax investment rate
Risk-adjusted Discounted Cash Flow Premium Risk-free rate
Risk-adjusted Discounted Cash Flow Losses Risk-adjusted rate
Risk-adjusted Discounted Cash Flow Expenses Risk-free rate
Risk-adjusted Discounted Cash Flow Taxes on Investment Income Risk-free rate