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_agepick.- projection_period: int
The number of months beyond the latest available development age the ldf_ and cdf_ vectors should extend.
See also
Examples
Suppose an actuary needs a tail provision for a reinsurance triangle that stops at age 120. Without any hyperparameters,
TailBondyreproduces the classic Bondy method: the exponentb_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_ageturns 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 beb_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 fullldf_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_ageis a judgment call: include enough ages for a stable estimate ofb_, but exclude immature ages whose volatile link ratios would distort the decay rate the exponent is meant to capture.
Inherited Methods
|
Fit to data, then transform it. |
|
Get metadata routing of this object. |
|
Get parameters for this estimator. |
|
Apply |
|
Converts triangle array_backend. |
|
Set output container. |
|
Set the parameters of this estimator. |
|
Serializes triangle object to json format |
|
Serializes triangle object to pickle. |