## reserving.ClarkLdf


Clark's LDF method (Clark 2003), as R ChainLadder's `ClarkLDF`: each


Usage


``` python
reserving.ClarkLdf()
```


origin's expected ultimate and a growth curve are fitted to the incremental losses by over-dispersed Poisson maximum likelihood, with ages measured from the average date of loss (the middle of the origin period, R's `adol = TRUE`).

The ultimate is the latest value developed by the fitted curve to [max_age](reserving.ClarkLdf.md#prospicio.reserving.ClarkLdf.max_age). Process risk is the scale times the fitted reserve, and parameter risk the delta method on the parameters' covariance, the scale times the inverse Fisher information.


## Parameters


`curve: (loglogistic, weibull) = ``"loglogistic"`  
The growth curve `G`: `x**omega / (x**omega + theta**omega)` or `1 - exp(-(x / theta)**omega)`.

`max_age: float`  
Age in months at which development stops; at least the triangle's last age. `None` develops to infinity.


## Raises


`ValueError`  
If [curve](pricing.Mbbefd.md#prospicio.pricing.Mbbefd.curve) is unknown.


## Examples

``` python
>>> from prospicio.reserving import ClarkLdf, Triangle
>>> rows = [[110.0, 290.0, 370.0, 420.0, 440.0], [95.0, 300.0, 390.0, 425.0],
...         [130.0, 320.0, 410.0], [105.0, 305.0], [120.0]]
>>> tri = Triangle.from_long(
...     [2020 + i for i, row in enumerate(rows) for _ in row],
...     [12 * (d + 1) for row in rows for d in range(len(row))],
...     [v for row in rows for v in row],
... )
>>> fit = ClarkLdf(curve="weibull", max_age=120).fit(tri, "values")
>>> fit.omega > 0 and fit.total_standard_error > fit.total_process_risk
```

True

``` python
>>> round(fit.ultimate[2] * fit.growth(36) / fit.growth(120), 6)
```

410.0


## Attributes

| Name | Description |
|----|----|
| [curve](#curve) | The growth curve. |
| [max_age](#max_age) | Age in months at which development stops; `None` for infinity. |

------------------------------------------------------------------------


#### curve


The growth curve.


`curve: str`


------------------------------------------------------------------------


#### max_age


Age in months at which development stops; `None` for infinity.


`max_age: float | None`


## Methods

| Name | Description |
|----|----|
| [fit()](#fit) | Fits one loss column in every segment of a triangle, each on its |

------------------------------------------------------------------------


#### fit()


Fits one loss column in every segment of a triangle, each on its


Usage


``` python
fit(triangle, column)
```


own.


##### Parameters


`triangle: Triangle`  

`column: str`  


##### Returns


`ClarkFit`  


##### Raises


`ValueError`  
As [ChainLadder.fit](reserving.ChainLadder.md#prospicio.reserving.ChainLadder.fit), if the triangle has fewer than four ages, [max_age](reserving.ClarkLdf.md#prospicio.reserving.ClarkLdf.max_age) is before its last age, an origin's latest value is not positive, or the likelihood search does not converge.
