CCDM Procedure
Example 7.4 Illustrating Pure Premium and Custom Simulation Modes
The CCDM procedure supports simulation modes other than the default collective risk simulation mode. This example illustrates how you can use those modes to simulate samples for different types of aggregate losses. Suppose you are an actuary at an insurance company and you want to estimate the distribution of the pure premium for the claims that you expect to be filed by the policyholders in a particular time period. The pure premium method of estimating claims cost is useful for certain types of peril. Assume that you have estimated a simple severity distribution model for the average severity of each claim by submitting the following statements, where the data table mylib.ClaimSev contains a simulation of historic average severity data:
/* Simulate average severity data and load them */
data claimsev(keep=averagesev);
call streaminit(789);
label averagesev='Average severity per claim';
do n = 1 to 10000;
averagesev = rand('Weibull', 3, 500);
output;
end;
run;
data mylib.claimsev;
set claimsev;
run;
/* Fit severity models and write estimates to an item store */
proc sevselect data=mylib.claimsev crit=sbc covout outstore=mylib.sevstore;
loss averagesev;
dist gamma igauss logn weibull;
run;
Output 7.4.1: Comparison of Severity Distributions for Average Severity
| Model Selection | |||
|---|---|---|---|
| Distribution | Converged | SBC | Selected |
| Gamma | Yes | 130839 | No |
| Igauss | Yes | 132718 | No |
| Logn | Yes | 132081 | No |
| Weibull | Yes | 130163 | Yes |
The "Model Selection" table in Output 7.4.1 shows that the Weibull distribution is the best-fitting distribution for the average severity. Next, assume that you have used a time-series analysis method to create a model for average number of claims that you expect to process in a particular time period. Let the average frequency follow a normal distribution , which implies that the point forecast of the average frequency for the time period of interest is 5,000 with an associated standard error of 100. To analyze the distribution of the pure premium, which is the product of average severity and average frequency, you can use the SIMULATIONMODE=PUREPREMIUM option in PROC CCDM as shown in the following statements:
proc ccdm severitystore=mylib.sevstore simulationmode=purepremium
seed=135 nreplicates=500000 print=all plots=density;
severitymodel weibull;
countmodel normal(5000, 100);
run;
The COUNTMODEL statement specifies the distribution of the average frequency. The SEVERITYMODEL statement requests that only the Weibull distribution be read from the SEVERITYSTORE= item store. The PRINT=ALL option displays the quantitative summary of the pure premium distribution, which is shown in the "Sample Summary Statistics" and "Sample Percentiles" tables in Output 7.4.2. The PLOTS= option creates a plot of the nonparametric estimate of the probability density function (PDF) of the pure premium distribution, which is shown in Output 7.4.3.
Output 7.4.2: Summary Statistics and Percentiles of the Pure Premium Distribution
| Sample Summary Statistics | |||
|---|---|---|---|
| Mean | 2225717.6 | Median | 2204042.8 |
| Standard Deviation | 817761.9 | Interquartile Range | 1143309.1 |
| Variance | 6.687345E11 | Minimum | 32858.0 |
| Skewness | 0.18463 | Maximum | 5889889.8 |
| Kurtosis | -0.26164 | Sample Size | 500000 |
| Sample Percentiles | |
|---|---|
| Percentile | Value |
| 1 | 527953.7 |
| 5 | 915327.3 |
| 25 | 1638602.1 |
| 50 | 2204042.8 |
| 75 | 2781911.1 |
| 95 | 3613171.7 |
| 99 | 4180009.8 |
| 99.5 | 4381630.4 |
| Percentile Method = 5 | |
Output 7.4.3: Nonparametric PDF Plot of the Pure Premium Distribution

Now consider a situation where the average frequency is defined as the average number of claims per policy and you have estimated a separate distribution model for the number of policies, denoted by nPolicy, that you expect to be in force for the particular time period. If you want to estimate a distribution of the total expected loss across all policies according to the pure premium method, then you need to multiply the pure premium by an estimate of nPolicy. Because nPolicy is stochastic, the simulation process needs to make a random draw from its distribution. Assuming that the average number of claims per policy follows a standard negative binomial distribution with parameters and
and that
nPolicy follows a lognormal distribution with parameters and
, the following PROC CCDM step simulates a sample of the total expected loss,
tLoss, across all policies:
proc ccdm severitystore=mylib.sevstore simulationmode=purepremium
seed=135 nreplicates=500000 print=all adjustedseverity=tloss;
severitymodel weibull;
countmodel negbin(0.75, 5);
simulatedsymbol npolicy ~ lognormal(10,0.35);
tloss = _sev_ * npolicy;
run;
The COUNTMODEL statement specifies that the frequency follows the Negbin(0.75, 5) distribution. The SIMULATEDSYMBOL statement specifies the stochastic variable nPolicy. The severity adjustment program contains just one statement in this example, and it computes tLoss by multiplying the average severity value in the _SEV_ placeholder symbol by the simulated value of nPolicy. PROC CCDM supplies the simulated values of both the _SEV_ and nPolicy symbols to your adjustment program. In the pure premium simulation mode, for each replication, PROC CCDM multiplies the tLoss value that your adjustment program returns by the frequency value that it draws from the Negbin(0.75, 5) distribution to compute the final value of tLoss for that replication. The distribution of tLoss is summarized in the tables shown in Output 7.4.4.
Output 7.4.4: Summary Statistics and Percentiles of the Total Loss Distribution
| Summary Statistics for tloss | |||
|---|---|---|---|
| Mean | 17380429 | Median | 12051182 |
| Standard Deviation | 19869773 | Interquartile Range | 21118588 |
| Variance | 3.948079E14 | Minimum | 0 |
| Skewness | 2.42533 | Maximum | 422595056 |
| Kurtosis | 10.71788 | Sample Size | 500000 |
| Percentiles for tloss | |
|---|---|
| Percentile | Value |
| 1 | 0 |
| 5 | 0 |
| 25 | 3132245.7 |
| 50 | 12051182 |
| 75 | 24250834 |
| 95 | 55453569 |
| 99 | 91066951 |
| 99.5 | 108199963 |
| Percentile Method = 5 | |
If you want to further account for the loss adjustment expenses (LAE) in your simulations and if you have estimated that the average LAE per policy follows a normal distribution , then the total loss and expense, denoted by
tLossExp, is computed as tLossExp = ((severity/claim) * (claims/policy) + LAE)*nPolicy. Because this does not fit the standard pure premium formula, you need to use the custom simulation mode by specifying the SIMULATIONMODE=CUSTOM option in the PROC CCDM statement as illustrated by the following statements:
proc ccdm severitystore=mylib.sevstore simulationmode=custom nperturb=50
seed=135 nreplicates=500000 print=all adjustedseverity=(tloss tlossexp)
plot(nadjsev=2)=(conditionaldensity(leftq=0.2 rightq=0.9));
severitymodel weibull;
countmodel negbin(0.75(se=0.05), 5(se=0.5));
simulatedsymbol npolicy ~ lognormal(10,0.35) lae ~ normal(100,10);
tloss = _sev_ * _freq_ * npolicy;
tlossexp = (_sev_ * _freq_ + lae) * npolicy;
run;
The SIMULATEDSYMBOL statement now contains the specification for the stochastic variable LAE. For the custom simulation mode, PROC CCDM analyzes only the symbols that you specify in the ADJUSTEDSEVERITY= option; unlike collective risk or pure premium simulation modes, it does not create a sample for the unadjusted aggregate loss. However, you can compute the pure premium loss in the custom mode yourself as illustrated by the programming statement that computes tLoss in the preceding PROC CCDM step.
For each replication, PROC CCDM draws one random value each from the probability distributions of severity, frequency, LAE, and nPolicy, and it supplies those values to your severity adjustment program in appropriate symbols (the _FREQ_ and _SEV_ symbols contain frequency and severity values, respectively). The values of tLoss and tLossExp symbols that your severity adjustment program returns are added to the tLoss and tLossExp samples, respectively. The summary of the tLossExp sample thus generated is shown in Output 7.4.5. As expected, the mean, median, and percentile estimates of total loss and expenses are higher than the corresponding estimates for the total loss distribution in Output 7.4.4. The conditional PDF plot in Output 7.4.6 shows the nonparametric estimate of the density function in different ranges of values of tLossExp. The left-tail plot indicates that there are at least 20% zero-valued observations in the sample of tLossExp, which implies that many policies do not result in a loss event. The right-tail plot starts at the 90th percentile and the density is nonzero for large losses, which implies that the distribution of tLossExp has a heavy tail.
Output 7.4.5: Summary Statistics and Percentiles of the Total Loss and Expenses Distribution
| Summary Statistics for tlossexp | |||
|---|---|---|---|
| Mean | 19176593 | Median | 14247865 |
| Standard Deviation | 20638306 | Interquartile Range | 22132642 |
| Variance | 4.259397E14 | Minimum | 0 |
| Skewness | 2.24320 | Maximum | 421986852 |
| Kurtosis | 9.39176 | Sample Size | 500000 |
| Percentiles for tlossexp | |
|---|---|
| Percentile | Value |
| 1 | 0 |
| 5 | 0 |
| 20 | 0 |
| 25 | 4681927.7 |
| 50 | 14247865 |
| 75 | 26814570 |
| 90 | 44373548 |
| 95 | 58477496 |
| 99 | 94131961 |
| 99.5 | 111374899 |
| Percentile Method = 5 | |
Output 7.4.6: Nonparametric Density Estimate of the Total Loss and Expenses Distribution

The NPERTURB= option in the preceding PROC CCDM step requests perturbation analysis, which requires the variability estimates of distribution parameters. For the severity distribution, PROC CCDM reads the variability estimates from the SEVERITYSTORE= item store. For the externally estimated count distribution, you need to specify the standard errors of its parameters by using the SE= option after each parameter value in the COUNTMODEL statement, as shown in the preceding PROC CCDM step. For each perturbed sample, PROC CCDM uses perturbed values of the severity and frequency distribution parameters, but it does not perturb the parameters of the simulated symbols. The perturbation summary for the total loss and expense distribution is shown in Output 7.4.7.
Output 7.4.7: Perturbation Analysis of the Total Loss and Expenses Distribution
| Sample Perturbation Analysis for tlossexp | ||
|---|---|---|
| Statistic | Estimate | Standard Error |
| Mean | 18835327 | 4227131.4 |
| Standard Deviation | 20397977 | 3168516.2 |
| Variance | 4.26117E14 | 1.29497E14 |
| Skewness | 2.29054 | 0.03592 |
| Kurtosis | 10.01735 | 0.53879 |
| Number of Perturbed Samples = 50 | ||
| Size of Each Sample = 500000 | ||
| Percentile Perturbation Analysis for tlossexp | ||
|---|---|---|
| Percentile | Estimate | Standard Error |
| 1 | 0 | 0 |
| 5 | 0 | 0 |
| 20 | 1753376.5 | 2847569.7 |
| 25 | 3549576.1 | 3834518.9 |
| 50 | 13963172 | 3189204.1 |
| 75 | 26367356 | 5316166.3 |
| 90 | 43627022 | 8129759.3 |
| 95 | 57577445 | 10306651 |
| 99 | 93220090 | 15798459 |
| 99.5 | 110085244 | 18265290 |
| Number of Perturbed Samples = 50 | ||
| Size of Each Sample = 500000 | ||