Skip to contents

Future and historic payments are binded per claim to calculate the reinsurer's payments.
The marketwide very common indexation clause makes this slightly complicated, so read the details section for further information.

Usage

xl_cashflow(
  future_payments,
  claims_list,
  history,
  reinsurance,
  indices = NULL,
  xl_indices_per_claim = NULL,
  output = "future"
)

Arguments

future_payments

numeric matrix with one row per claim and 250 columns for future payments.

claims_list

dataframe of claims generated with generate_claims_list().

history

numeric matrix with one row per claim with historic payments, generated by generate_history_per_claim().
If generated in other ways, note that colnames must be the origin years.

reinsurance

dataframe of reinsurance structures, see details.

indices

dataframe for indexation, default NULL. See details of prepare_data(). Only one of indices and xl_indices_per_claim may be NULL.

xl_indices_per_claim

numeric indexation matrix, default NULL. See details of generate_xl_indices_per_claim(). Only one of indices and xl_indices_per_claim may be NULL.

output

desired output as character, one of history, future and total.

Value

numeric matrix with one row per claim containing reinsurer's payments. The number of columns depends on the output parameter.

Details

This function uses historic and future payments per claim to derive the reinsurer's payments for the xl-treaty.
The calculation becomes rather complicated as there are several common indexation clauses (also referred to as Stability Clause or Inflation Clause), all of them with the idea of sharing the increase of claims payments due to inflation during the long settlement of the claims between cedent and reinsurer.
The basic types of clauses can be divided into European Index Clauses (EIC) and London Market Indexation Clause (LMIC). This package does not support LMIC, but the most important EIC clauses!

For a layer C xs D and a large claim with payments \(p_{i}\) for development year i = 1,..., T and reserves \(r_{i}\) at the end of development year i we define \(a_{i} = z_{1} + … + z_{i} + r_{i}\) as the claims incurred at the end of development year i. For a given index series we call \(I_{B}\) the index for base year B and \(I_{i}\) the index for development year i. The indexation clauses that are supported by this package define the correction factors as follows:

  1. APK (for german Anpassungsklausel) with margin \(\alpha\) (with \(\alpha = 10\%\) in many cases): $$ f_{i} := \left\{ \begin{array}{r} 1 \qquad if \quad \frac{I_{i}}{I_{B}} < 1 + \alpha \\ \frac{I_{B}}{I_{i}} \qquad if \quad \frac{I_{i}}{I_{B}} \ge 1 + \alpha \end{array} \right. $$

  2. SIC (for Severe Inflation Clause) with margin \(\alpha\) (with \(\alpha = 30\%\) in many cases): $$ f_{i} := \left\{ \begin{array}{r} 1 \qquad if \quad \frac{I_{i}}{I_{B}} < 1 + \alpha \\ \frac{I_{B} \cdot (1+\alpha)}{I_{i}} \qquad if \quad \frac{I_{i}}{I_{B}} \ge 1 + \alpha \end{array} \right. $$

  3. FIC (for Full or Franchise Inflation Clause): $$f_{i} := \frac{I_{B}}{I_{i}}$$ In some cases FIC is also defined with a margin. But unlike in APK and SIC as soon as the cumulated index exceeds the margin the index is applied to the former payments as well. As this happens in most claims in longtail lines of business, only FIC without margin is implemented in this package which should be a reasonable simplification.

With the payments and the latest reserve a stabilization factor per claim and per development year can be calculated by: $$F_{i} = \frac{z_{1} + \cdots + z_{i} + r_{i}}{f_{1}z_{1} + \cdots + f_{i}z_{i} + f_{i}r_{i}}$$ and this leads to a stabilized prioririty and limit per claim and development year: $$C_{i}^{stab} \ xs \ D_{i}^{stab} \quad with \quad C_{i}^{stab} = F_{i} \cdot C \ and \ D_{i}^{stab} = F_{i} \cdot D.$$ Note that this package does not forecast reserves (only reserve classes) and therefore reserves are not considered in the application of the indexation clause. This leads to slight deviations from the real reinsurance cashflow during the claim development but the effect should be not be significant.

Considering these information the structure of the parameter dataframe reinsurance should be as follows:
reinsurance must contain one row for each origin year that shall be considered even though no reinsurance may have existed in some years and must consist of the following columns:

  • Origin_year
    type: integer or numeric. Origin year of the reinsurance structure.

  • Priority
    type: numeric. Unindexed priority (or retention) of the xl treaty.

  • Limit
    type: numeric. Unindexed limit of the xl treaty.

  • Base_year
    type: integer or numeric. Base_year for the application of the indexation margin. Set this column to 0 if no indexation shall be considered or set Margin_type to "none".

  • Margin_type
    type: character. Either "FIC", "SIC", "APK" or "none" for no indexation.

  • Margin
    type: numeric. Margin \(\alpha\), e.g. 0.1 for a margin of 10%. If Margin_type equals FIC, this column will be set to 0. If Margin_type equals none, this column will be ignored.

  • Quota_share
    type: numeric. If a quota share reinsurance is to be considered, this must be the reinsurance share, e.g. 0.2 if the reinsurance pays 20% of each claim.

Examples

# this example uses data provided with this package
# Create large claims list
extended_claims_data <- prepare_data(claims_data = minimal_claims_data_xmpl,
                                     indices = indices_xmpl,
                                     threshold = 400000,
                                     first_orig_year = 1989,
                                     last_orig_year = 2023,
                                     expected_year_of_growing_large = 3,
                                     reserve_classes = c(1, 200001, 400001, 700001, 1400001),
                                     pool_of_annuities = minimal_pool_of_annuities_xmpl)

large_claims_list <- generate_claims_list(extended_claims_data = extended_claims_data,
                                          first_orig_year = 1989,
                                          last_orig_year = 2023)
# generate history
history <- generate_history_per_claim(extended_claims_data, "Cl_payment_cal", 1989, 2023)

# generate future payments with fictive constant payments
# of 1.000.000 for 10 years for claim in row 10
future_payments <- matrix(0, nrow = NROW(history), ncol = 250)
future_payments[10, 1:10] <- 1e6

# output "history"
xl_cashflow(future_payments = future_payments,
            claims_list = large_claims_list,
            history = history,
            reinsurance = reinsurance_xmpl,
            indices = indices_xmpl,
            output = "history")[10,]
#> 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 
#>    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0 
#> 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 
#>    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0 
#> 2021 2022 2023 
#>    0    0    0 

# output "future"
xl_cashflow(future_payments = future_payments,
            claims_list = large_claims_list,
            history = history,
            reinsurance = reinsurance_xmpl,
            indices = indices_xmpl,
            output = "future")[10,]
#>                                                                         
#>      0.0  25643.4 666514.8 674417.0 677839.5 679599.1 680599.5 681203.7 
#>                                                                         
#> 681581.2 461035.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                                                                         
#>      0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0 
#>                   
#>      0.0      0.0 

# simple example, only one claim from origin year 2020
future_payments <- rbind(c(rep(5e5, 5), rep(0, 245)))
history <- rbind(rep(1e6, 4))
colnames(history) <- 2020:2023
claims_list <- data.frame(Claim_id = "Test1",
                          Origin_year = 2020,
                          Exit_reserve_class = 1,
                          Dev_year_since_large = 4,
                          Dev_year_of_growing_large = 1,
                          Large_since = 2020,
                          Cl_reserve = 5000000)
reinsurance <- reinsurance_xmpl[reinsurance_xmpl$Origin_year > 2019,]
reinsurance$Margin_type[1] <- "none"
reinsurance$Quota_share[1] <- 0

xl_cashflow(future_payments = future_payments,
            claims_list = claims_list,
            history = history,
            reinsurance = reinsurance,
            indices = indices_xmpl,
            output = "total")[1,1:10]
#>  2020  2021  2022  2023                                     
#> 0e+00 5e+05 1e+06 1e+06 5e+05 5e+05 0e+00 0e+00 0e+00 0e+00