HPCDM Procedure

Example 16.1 Estimating the Probability Distribution of Insurance Payments

(View the complete code for this example.)

The primary outcome of running PROC HPCDM is the estimate of the compound distribution of aggregate loss, given the distributions of frequency and severity of the individual losses. This aggregate loss is often referred to as the ground-up loss. If you are an insurance company or a bank, you are also interested in acting on the ground-up loss by computing an entity that is derived from the ground-up loss. For example, you might want to estimate the distribution of the amount that you are expected to pay for the losses or the distribution of the amount that you can offload onto another organization, such as a reinsurance company. PROC HPCDM enables you to specify a severity adjustment program, which is a sequence of SAS programming statements that adjust the severity of the individual loss event to compute the entity of interest. Your severity adjustment program can use external information that is recorded as variables in the observations of the DATA= data set in addition to placeholder symbols for information that PROC HPCDM generates internally, such as the severity of the current loss event (_SEV_) and the sum of the adjusted severity values of the events that have been simulated thus far for the current sample point (_CUMADJSEV_). If you are doing a scenario analysis such that a scenario contains more than one observation, then you can also access the cumulative severity and cumulative adjusted severity for the current observation by using the _CUMSEVFOROBS_ and _CUMADJSEVFOROBS_ symbols.

This example continues the example of the section Scenario Analysis to illustrate how you can estimate the distribution of the aggregate amount that is paid to a group of policyholders. Let the amount that is paid to an individual policyholder be computed by using what is usually referred to as a disappearing deductible (Klugman, Panjer, and Willmot 1998, Ch. 2). If X denotes the ground-up loss that a policyholder incurs, d denotes the lower limit on the deductible, d prime denotes the upper limit on the deductible, and u denotes the limit on the total payments that are made to a policyholder in a year, then Y, the amount that is paid to the policyholder for each loss event, is defined as follows:

upper Y equals StartLayout Enlarged left-brace 1st Row 1st Column 0 2nd Column upper X less-than-or-equal-to d 2nd Row 1st Column d prime StartFraction upper X minus d Over d prime minus d EndFraction 2nd Column d less-than upper X less-than-or-equal-to d Superscript prime Baseline 3rd Row 1st Column upper X 2nd Column d prime less-than upper X less-than-or-equal-to u 4th Row 1st Column u 2nd Column upper X greater-than u EndLayout

You can encode this logic by using a set of SAS programming statements.

Extend the Work.GroupOfPolicies data set in the example in the section Scenario Analysis to include the following three additional variables for each policyholder: LowDeductible to record d, HighDeductible to record d prime, and Limit to record u. The data set contains the observations as shown in Output 16.1.1.

Output 16.1.1: Scenario Analysis Data for Multiple Policyholders with Policy Provisions

policyholderIdagegendercarTypeannualMileseducationcarSafetyincomelowDeductiblehighDeductiblelimitannualLimit
11.18212.294830.995321.598704001400750010000
20.66222.814810.056250.675393001300250020000
30.82121.613020.841461.059401001100500010000
40.44111.228030.143240.24110300800500020000
50.44110.967020.086560.659791001100500020000


The following PROC HPCDM step estimates the compound distributions of the aggregate loss and the aggregate amount that is paid to the group of policyholders in the Work.GroupOfPolicies data set by using the count model that is stored in the Work.CountregModel item store and the lognormal severity model that is stored in the Work.SevRegEst data set:

/* Simulate the aggregate loss distribution and aggregate adjusted
   loss distribution for the scenario with multiple policyholders */
proc hpcdm data=groupOfPolicies nreplicates=10000 seed=13579 print=all
           countstore=work.countregmodel severityest=work.sevregest
           plots=(edf pdf) nperturbedSamples=50
           adjustedseverity=amountPaid;
   severitymodel logn;

   if (_sev_ <= lowDeductible) then
      amountPaid = 0;
   else do;
      if (_sev_ <= highDeductible) then
         amountPaid = highDeductible *
            (_sev_-lowDeductible)/(highDeductible-lowDeductible);
      else
         amountPaid = MIN(_sev_, limit); /* imposes per-loss payment limit */
   end;
run;

The preceding step uses a severity adjustment program to compute the value of the symbol AmountPaid and specifies that symbol in the ADJUSTEDSEVERITY= option in the PROC HPCDM step. The program is executed for each simulated loss event. The PROC HPCDM supplies your program with the value of the severity in the _SEV_ placeholder symbol.

The "Sample Summary Statistics" table in Output 16.1.2 shows the summary statistics of the compound distribution of the aggregate ground-up loss. The "Adjusted Sample Summary Statistics" table shows the summary statistics of the compound distribution of the aggregate AmountPaid. The average aggregate payment is about 4,361, as compared to the average aggregate ground-up loss of 5,906.

Output 16.1.2: Summary Statistics of Compound Distributions of the Total Loss and Total Amount Paid

The HPCDM Procedure
Severity Model: Logn
Count Model: NegBin(p=2)

Compound Distribution Information
Severity ModelLognormal Distribution
Scale Model RegressorscarType carSafety income
Count ModelNegBin(p=2) Model in Item Store WORK.COUNTREGMODEL

Sample Summary Statistics
Mean5906.2Median4727.7
Standard Deviation4801.7Interquartile Range5227.0
Variance23056465.3Minimum0
Skewness2.25016Maximum64811.8
Kurtosis10.01578Sample Size10000

Adjusted Sample Summary Statistics
Mean4361.0Median3762.9
Standard Deviation3181.7Interquartile Range4133.6
Variance10123000.5Minimum0
Skewness1.11692Maximum23657.4
Kurtosis1.64518Sample Size10000


The perturbation summary of the distribution of AmountPaid is shown in Output 16.1.3. It shows that you can expect to pay a median of 3,796 plus-or-minus 271 to this group of five policyholders in a year. Also, if the 99.5th percentile defines the worst case, then you can expect to pay 15,573 plus-or-minus 859 in the worst-case.

Output 16.1.3: Perturbation Summary of the Total Amount Paid

Adjusted Sample Percentile Perturbation
Analysis
PercentileEstimateStandard
Error
10.940366.15322
5386.1749465.79399
251988.9188.59978
503796.0271.27093
756153.8393.13966
9510435.2621.20756
9914108.5827.74239
99.515573.1858.66726
Number of Perturbed Samples = 50
Size of Each Sample = 10000


The empirical distribution function (EDF) and probability density function plots of the aggregate adjusted loss are shown in Figure 14. Both plots indicate a heavy-tailed distribution of the total amount paid.

Figure 14: PDF and EDF Plots of the Compound Distribution of the Total Amount Paid

cdmex1o1g cdmex1o1g1


Now consider that, in the future, you want to modify the policy provisions to add a limit on the total amount of payment that is made to an individual policyholder in one year and to impose a group limit of 15,000 on the total amount of payments that are made to the group as a whole in one year. You can analyze the effects of these modified policy provisions on the distribution of the aggregate paid amount by recording the individual policyholder’s annual limit in the AnnualLimit variable of the input data set and then modifying your severity adjustment program by using the placeholder symbols _CUMADJSEVFOROBS_ and _CUMADJSEV_ as shown in the following PROC HPCDM step:

/* Simulate the aggregate loss distribution and aggregate adjusted
   loss distribution for the modified set of policy provisions */
proc hpcdm data=groupOfPolicies nreplicates=10000 seed=13579 print=all
           countstore=work.countregmodel severityest=work.sevregest
           plots=none nperturbedSamples=50
           adjustedseverity=amountPaid;
   severitymodel logn;

   if (_sev_ <= lowDeductible) then
      amountPaid = 0;
   else do;
      if (_sev_ <= highDeductible) then
         amountPaid = highDeductible *
            (_sev_-lowDeductible)/(highDeductible-lowDeductible);
      else
         amountPaid = MIN(_sev_, limit); /* imposes per-loss payment limit */

      /* impose policyholder's annual limit */
      amountPaid = MIN(amountPaid, MAX(0,annualLimit - _cumadjsevforobs_));

      /* impose group's annual limit */
      amountPaid = MIN(amountPaid, MAX(0,15000 - _cumadjsev_));
   end;
run;

The results of the perturbation analysis for these modified policy provisions are shown in Output 16.1.4. When compared to the results of Output 16.1.3, the additional policy provisions of restricting the total payment to the policyholder and the group have reduced the median payment slightly, but the provisions have reduced the worst-case payment (99.5th percentile) to 14,755 plus-or-minus 392 from 15,573 plus-or-minus 859.

Output 16.1.4: Perturbation Summary of the Total Amount Paid for Modified Policy Provisions

The HPCDM Procedure
Severity Model: Logn
Count Model: NegBin(p=2)

Adjusted Sample Percentile Perturbation
Analysis
PercentileEstimateStandard
Error
10.469492.23897
5382.0493156.96535
251953.8167.85926
503733.5250.62840
756054.8348.38707
9510272.4520.34620
9913728.9631.17302
99.514754.8392.25491
Number of Perturbed Samples = 50
Size of Each Sample = 10000


Last updated: June 19, 2025