ImpliedCaseDevelopment#

class chainladder.ImpliedCaseDevelopment(reported_pattern: Any = None, paid_pattern: Any = None, style: Literal['cdf', 'ldf'] = 'cdf')[source]#

Implied Case Development Estimator (Friedland Approach 2).

An Estimator that derives implied case development factors (LDFs/CDFs) from benchmark reported and paid development patterns (Friedland 2010, Chapter 12, Exhibit III).

This method is commonly used by self-insurers or for excess/reinsurance layers where credible historical triangles are unavailable, but carried case reserves and industry/benchmark development patterns are known.

Parameters:
reported_patterndict, Series, DataFrame, Triangle, or Development

Benchmark reported loss development pattern. Can be cumulative (CDF) or incremental (LDF), as specified by style.

paid_patterndict, Series, DataFrame, Triangle, or Development

Benchmark paid loss development pattern. Can be cumulative (CDF) or incremental (LDF), as specified by style.

styleLiteral[‘cdf’, ‘ldf’], optional (default=’cdf’)

Whether reported_pattern and paid_pattern are cumulative development factors (‘cdf’) or incremental link ratios (‘ldf’).

Attributes:
case_cdf_Triangle

Implied cumulative case development factors to ultimate.

case_ldf_Triangle

Incremental link ratios implied by case_cdf_.

ldf_Triangle

Estimated loss development patterns for case outstanding (alias for case_ldf_ for downstream compatibility with estimators like Chainladder).

case_Triangle

The case triangle used during fitting.

Examples

import pandas as pd
import numpy as np
import chainladder as cl

case_data = pd.DataFrame({
    "origin": [1998, 1999, 2000, 2001, 2002, 2003],
    "valuation": 2008,
    "case": [500000, 650000, 800000, 850000, 975000, 1000000],
})
case_tri = cl.Triangle(
    case_data, origin="origin", valuation="valuation", columns="case", cumulative=True
).val_to_dev()

rep_cdfs = {132: 1.015, 120: 1.020, 108: 1.030, 96: 1.051, 84: 1.077, 72: 1.131}
paid_cdfs = {132: 1.046, 120: 1.067, 108: 1.109, 96: 1.187, 84: 1.306, 72: 1.489}

model = cl.ImpliedCaseDevelopment(
    reported_pattern=rep_cdfs,
    paid_pattern=paid_cdfs,
    style="cdf",
).fit(case_tri)

print(np.round(model.case_cdf_["case"].values[0, 0, 0, 5:], 3))
[1.545 1.439 1.445 1.421 1.454 1.506]
fit(X: Triangle, y: Any = None, sample_weight: Any = None)[source]#

Fit the model with X.

Parameters:
XTriangle

Triangle of case reserves to fit.

yIgnored
sample_weightIgnored
Returns:
selfobject

Returns the instance itself.

transform(X: Triangle) → Triangle[source]#

Transform the triangle by attaching implied case development factors.

Parameters:
XTriangle

The case triangle to be transformed.

Returns:
X_newTriangle

Transformed case triangle with ldf_, case_ldf_, and case_cdf_ attached.

Inherited Methods

ImpliedCaseDevelopment.fit_transform

Fit to data, then transform it.

ImpliedCaseDevelopment.get_metadata_routing

Get metadata routing of this object.

ImpliedCaseDevelopment.get_params

Get parameters for this estimator.

ImpliedCaseDevelopment.pipe

Apply func(self, *args, **kwargs).

ImpliedCaseDevelopment.set_backend

Converts triangle array_backend.

ImpliedCaseDevelopment.set_output

Set output container.

ImpliedCaseDevelopment.set_params

Set the parameters of this estimator.

ImpliedCaseDevelopment.to_json

Serializes triangle object to json format

ImpliedCaseDevelopment.to_pickle

Serializes triangle object to pickle.