Skip to main content

reservingmodels

Claims development and stochastic reserve estimation, from the triangle to the predictive distribution.

CI PyPI Python

Overview

reservingmodels is the single place to reach for claims-reserving work. The deterministic engine — chain-ladder development, completion factors, the Bornhuetter–Ferguson / Benktander / Cape Cod methods, and Mack's analytic standard errors — is re-exported from actuarialpy, where those triangle primitives already live because the projection and pricing packages build on them. On top of them this package adds the stochastic layer: the over-dispersed-Poisson bootstrap of England & Verrall, which produces the full predictive distribution of the unpaid claims, plus residual diagnostics for checking the model before you trust the numbers.

A fitted BootstrapODP exposes .sample(size, rng), so it plugs straight into risksim as a portfolio component — reserve risk aggregated with prospective underwriting risk, with no dependency between the two packages.

Installation

pip install reservingmodels

Requires Python 3.10 or newer. Pulls in actuarialpy for the shared triangle primitives.

Quick start

import reservingmodels as rv

triangle = rv.datasets.taylor_ashe()          # a cumulative K x K triangle

# --- deterministic: the point estimate (re-exported chain ladder) ---------- #
cl = rv.ChainLadder.fit(triangle)
print(cl.project(triangle))                   # per-origin ultimate and IBNR
print(cl.mack_standard_errors(triangle))      # Mack (1993) analytic SE

# --- stochastic: the predictive distribution ------------------------------- #
boot = rv.BootstrapODP.fit(triangle)
dist = boot.reserve_distribution(size=100_000, rng=42)

print(f"reserve (point)   : {dist.point_reserve:,.0f}")
print(f"prediction error  : {dist.prediction_error():,.0f}")
print(f"75th / 99th pct   : {dist.quantile(0.75):,.0f} / {dist.quantile(0.99):,.0f}")
print(f"TVaR(99%)         : {dist.tvar(0.99):,.0f}")
print(dist.to_frame().round(0))               # per-origin + total exhibit

# --- reserve risk as a capital component ----------------------------------- #
import risksim as rs
port = rs.Portfolio([rs.PortfolioItem("reserve_risk", boot)])  # .sample seam
sim = port.simulate(100_000, rng=7)
print(f"portfolio TVaR    : {rs.metrics.tvar(sim.gross_losses, 0.99):,.0f}")

What's inside

  • Triangles and deterministic methods — re-exported from actuarialpy: ChainLadder, completion_factors, apply_completion, develop_ultimate (chain-ladder, Bornhuetter–Ferguson, Benktander, Cape Cod), make_completion_triangle, and Mack's mack_standard_errors. These are aliases, not copies — rv.ChainLadder is actuarialpy.ChainLadder.
  • Stochastic reserving — BootstrapODP, the semiparametric ODP bootstrap (estimation error by residual resampling, process error by a gamma draw), and ReserveDistribution for percentiles, VaR, TVaR, and a per-origin exhibit.
  • Diagnostics — pearson_residuals, residual_summary, and calendar_year_effects for checking the ODP assumptions.
  • The risksim seam — BootstrapODP.sample(size, rng) makes the reserve a portfolio component; risksim aggregates it with other risks.
  • The Experience seam — reservingmodels.integrations.actuarialpy builds a triangle (and a fitted bootstrap) from a claims-listing actuarialpy.Experience.

The full API reference and worked examples live at openactuarial.org/reservingmodels.html.

The OpenActuarial ecosystem

reservingmodels shares the ecosystem conventions — tidy tables, explicit parameterizations, reproducible random-number handling — and composes across package seams:

Package Role
actuarialpy Calculation primitives the workflow packages build on (incl. triangle mechanics and Mack)
experiencestudies Experience reporting, actual-vs-expected, claimant and concentration analysis
projectionmodels Claim, premium, and expense projection over a renewal horizon
ratingmodels Manual and experience rating, credibility, indication, GLM relativities
reservingmodels Claims development and stochastic reserving: chain ladder, BF, Mack, ODP bootstrap
lossmodels Severity and frequency fitting, aggregate loss distributions
extremeloss Extreme-value tails: POT/GPD, GEV, return levels, splicing
risksim Portfolio Monte Carlo, dependence, reinsurance contracts, risk measures

Install everything at once with pip install openactuarial.

Development

git clone https://github.com/OpenActuarial/reservingmodels
cd reservingmodels
python -m pip install -e ".[dev]"
pytest
ruff check src tests

CI runs the same gate on Python 3.10–3.14 across Linux and Windows.

Versioning and stability

All ecosystem packages are pre-1.0: minor releases may change APIs, and every release is documented in CHANGELOG.md. Current per-package API stability is tracked at openactuarial.org/stability.html.

License

MIT — see LICENSE.

Release files for reservingmodels 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reservingmodels 0.1.0
File Size Uploaded
reservingmodels-0.1.0.tar.gz 22.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for reservingmodels 0.1.0
File Interpreter ABI Platform
reservingmodels-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 40.1 kB

Release files / reservingmodels-0.1.0.tar.gz

Download URL reservingmodels-0.1.0.tar.gz
Size 22.7 kB
Tags Source
SHA-256 checksum
How to use checksums
159082f21a0b7e962d877ae5293bb812babd3bf279039659db155c09a5e74147
BLAKE2b-256 checksum
How to use checksums
33cb1b947449d4ab853b0b7791121b28344c3c7aec292e8a5ba89aa3d6f4c0d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.

Transparency log

Release files / reservingmodels-0.1.0-py3-none-any.whl

Download URL reservingmodels-0.1.0-py3-none-any.whl
Size 17.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
63221b45bb7d961e207045ade48baa4335dfcf02078b40fdd61cd0786e18ea22
BLAKE2b-256 checksum
How to use checksums
f96e7375fcf9ccbc7d0d9d62bac5f1308fd24ddcd6eb2d201887d7b5ab4aa73e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page