TailBondy#

class chainladder.TailBondy(earliest_age=None, attachment_age=None, projection_period=12)[source]#

Estimator for the Generalized Bondy tail factor.

Added in version 0.6.0.

Parameters:
earliest_age: int

The earliest age from which the Bondy exponent is to be calculated. Defaults to latest age in the Triangle. Any available development age can be used.

attachment_age: int (default=None)

The age at which to attach the fitted curve. If None, then the latest age is used. Measures of variability from original ldf_ are retained when being used in conjunction with the MackChainladder method.

Attributes:
ldf_: Triangle

ldf with tail applied.

cdf_: Triangle

cdf with tail applied.

tail_: DataFrame

Point estimate of tail at latest maturity available in the Triangle.

b_: DataFrame

The Bondy exponent

earliest_ldf_: DataFrame

The LDF associated with the earliest_age pick.

projection_period: int

The number of months beyond the latest available development age the ldf_ and cdf_ vectors should extend.

See also

TailCurve

Examples

Suppose an actuary needs a tail provision for a reinsurance triangle that stops at age 120. Without any hyperparameters, TailBondy reproduces the classic Bondy method: the exponent b_ keeps its starting value of 0.5, which makes the tail a simple repeat of the last observed development factor. Comparing the original pattern with the extended one shows this directly: the appended factors compound to the last observed factor of 1.0092.

dev = cl.Development().fit_transform(cl.load_sample("raa"))
bondy = cl.TailBondy().fit(dev)
print(dev.ldf_.values[0, 0, 0, :].round(4))
print(bondy.ldf_.values[0, 0, 0, :].round(4))
[2.9994 1.6235 1.2709 1.1717 1.1134 1.0419 1.0333 1.0169 1.0092]
[2.9994 1.6235 1.2709 1.1717 1.1134 1.0419 1.0333 1.0169 1.0092 1.0046
 1.0046]

Setting earliest_age turns this into the Generalized Bondy method: every development factor from that age forward enters the regression and the Bondy exponent is estimated from the data. The exponent measures how quickly development decays. Each log development factor is assumed to be b_ times the prior one, so an estimate below 0.5 means the pattern decays faster than the classic Bondy assumption implies (a lighter tail), while an estimate above 0.5 signals more persistent development (a heavier tail). The full ldf_ shows the fitted pattern only diverges from the classic Bondy fit beyond the edge of the triangle:

gen = cl.TailBondy(earliest_age=12).fit(dev)
print(round(float(gen.b_.iloc[0, 0]), 4))
print(gen.ldf_.values[0, 0, 0, :].round(4))
0.4845
[2.9994 1.6235 1.2709 1.1717 1.1134 1.0419 1.0333 1.0169 1.0092 1.0016
 1.0015]

Although 0.4845 looks close to 0.5, the exponent compounds through the tail formula (the tail is the last fitted factor raised to b_ / (1 - b_)), so the tail provision falls from 0.92% to 0.31% of losses, roughly a threefold difference in the booked tail:

print(round(float(bondy.tail_.iloc[0, 0]), 4))
print(round(float(gen.tail_.iloc[0, 0]), 4))
1.0092
1.0031

The choice of earliest_age is a judgment call: include enough ages for a stable estimate of b_, but exclude immature ages whose volatile link ratios would distort the decay rate the exponent is meant to capture.

fit(X, y=None, sample_weight=None)[source]#

Fit the model with X.

Parameters:
XTriangle-like

Set of LDFs to which the tail will be applied.

yIgnored
sample_weightIgnored
Returns:
selfobject

Returns the instance itself.

transform(X)[source]#

Transform X.

Parameters:
XTriangle

Triangle must contain the ldf_ development attribute.

Returns:
X_newTriangle

New Triangle with tail factor applied to its development attributes.

Inherited Methods

TailBondy.fit_transform

Fit to data, then transform it.

TailBondy.get_metadata_routing

Get metadata routing of this object.

TailBondy.get_params

Get parameters for this estimator.

TailBondy.pipe

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

TailBondy.set_backend

Converts triangle array_backend.

TailBondy.set_output

Set output container.

TailBondy.set_params

Set the parameters of this estimator.

TailBondy.to_json

Serializes triangle object to json format

TailBondy.to_pickle

Serializes triangle object to pickle.