ChainLadder is a package for the R statistical environment that contains various functions for performing loss reserving for Property/Casualty/General Insurance. Mostly, the package's functions are intended to implement sophisticated stochastic models, but many simpler, deterministic methods are relatively easy to perform using helper functions in the package. This post will demonstrate how to calculate IBNR with the Loss Ratio Method.
In simplest terms, the Loss Ratio Method estimates ultimate loss as the product of premium and an expected loss ratio (ELR):
Then, IBNR is the difference between estimated ultimate loss and loss known to date (referred to here as "reported loss"):
For an example we will look at the data in the Institute and Faculty of Actuaries Claims Reserving Manual, Section G, "Methods Using Loss Ratio & Loss Ratio Projections", p. 4.
In simplest terms, the Loss Ratio Method estimates ultimate loss as the product of premium and an expected loss ratio (ELR):
EstimatedUltimateLoss = Premium * ELR
Then, IBNR is the difference between estimated ultimate loss and loss known to date (referred to here as "reported loss"):
IBNR = EstimatedUltimateLoss - ReportedLoss
For an example we will look at the data in the Institute and Faculty of Actuaries Claims Reserving Manual, Section G, "Methods Using Loss Ratio & Loss Ratio Projections", p. 4.
> ReportedLoss <- c(3483, 3844, 3977, 3880, 3261, 1889) # the "current diagonal"
> Premium <- c(4486, 5024, 5680, 6590, 7482, 8502)
> ELR <- .83
> EstimatedUltimateLoss <- Premium * ELR
> IBNR <- EstimatedUltimateLoss - ReportedLoss
> Premium <- c(4486, 5024, 5680, 6590, 7482, 8502)
> ELR <- .83
> EstimatedUltimateLoss <- Premium * ELR
> IBNR <- EstimatedUltimateLoss - ReportedLoss
Voila. Simple and succinct in R.
Note: the Claims Reserving Manual gives premium ("aP" in the manual) in reverse accident year order (most recent year first, oldest accident year last), but we enter the accident year premium and loss data in chronological order (oldest accident year first).
In the example above we expect the same loss ratio for every year, so ELR is a scalar and R knows to replicate that value for every element in the Premium vector before performing the multiplication. If we think 83% is expected for the most recent accident year but is expected to be 2 points less per year before that, we could store that pattern in an ELR vector:
> ELR <- .83 + (-5:0) * .02
and the remaining two calculations still hold.
For a final complication, if we were provided a triangle of reported losses, ChainLadder has a helper function to pull off the most recent diagonal automatically. Again, from the Claims Reserving Manual
> ReportedLossTriangle <- matrix(c(
1001, 1855, 2423, 2988, 3335, 3483,
1113, 2103, 2774, 3422, 3844, NA,
1265, 2433, 3233, 3977, NA, NA,
1490, 2873, 3880, NA, NA, NA,
1725, 3261, NA, NA, NA, NA,
1889, NA, NA, NA, NA, NA), nrow = 6, byrow = TRUE)
Note: Use NA's for future values that truly are "not available" yet. The shape of the matrix (6x6) is completely specified by "nrow=6" because 36 values are given. Finally, R stores data in column format and expects data to be entered accordingly, so byrow=TRUE is required here because the data is entered in more readable, row-wise order.
Then
> library(ChainLadder) # nothing above required the package
> ReportedLoss <- getLatestCumulative(ReportedLossTriangle)
yields the original values above and the remaining calculations work without change.
This is the first post demonstrating how to carry out deterministic reserving methods with the ChainLadder package in R.
-dmm
Note: the Claims Reserving Manual gives premium ("aP" in the manual) in reverse accident year order (most recent year first, oldest accident year last), but we enter the accident year premium and loss data in chronological order (oldest accident year first).
In the example above we expect the same loss ratio for every year, so ELR is a scalar and R knows to replicate that value for every element in the Premium vector before performing the multiplication. If we think 83% is expected for the most recent accident year but is expected to be 2 points less per year before that, we could store that pattern in an ELR vector:
> ELR <- .83 + (-5:0) * .02
and the remaining two calculations still hold.
For a final complication, if we were provided a triangle of reported losses, ChainLadder has a helper function to pull off the most recent diagonal automatically. Again, from the Claims Reserving Manual
> ReportedLossTriangle <- matrix(c(
1001, 1855, 2423, 2988, 3335, 3483,
1113, 2103, 2774, 3422, 3844, NA,
1265, 2433, 3233, 3977, NA, NA,
1490, 2873, 3880, NA, NA, NA,
1725, 3261, NA, NA, NA, NA,
1889, NA, NA, NA, NA, NA), nrow = 6, byrow = TRUE)
Note: Use NA's for future values that truly are "not available" yet. The shape of the matrix (6x6) is completely specified by "nrow=6" because 36 values are given. Finally, R stores data in column format and expects data to be entered accordingly, so byrow=TRUE is required here because the data is entered in more readable, row-wise order.
Then
> library(ChainLadder) # nothing above required the package
> ReportedLoss <- getLatestCumulative(ReportedLossTriangle)
yields the original values above and the remaining calculations work without change.
This is the first post demonstrating how to carry out deterministic reserving methods with the ChainLadder package in R.
-dmm
No comments:
Post a Comment