Skip to main content

actuarialpy

Purpose-neutral actuarial calculation primitives, plus the shared actuarial data contract — the foundation of the OpenActuarial ecosystem.

actuarialpy.Experience is the ecosystem's canonical semantic wrapper for historical actuarial data: it binds column roles, grain metadata, and snapshot context. Its domain operations are immutable transformations; calculations and workflow outputs belong to consuming packages.

CI PyPI Python

Overview

actuarialpy provides the atomic building blocks the rest of the ecosystem is written against: ratios and per-exposure metrics, claim development and completion, trend fitting and projection, credibility, large-claim pooling, and financial mathematics. Everything operates on plain floats, NumPy arrays, and pandas objects, with a consistent type-mirroring convention (scalar in, float out; Series in, Series out with the index preserved).

The package deliberately contains no workflow orchestration and no domain-specific vocabulary — those belong to the workflow packages built on top of it. If a function here needs to know why you are calling it, it does not belong here.

Installation

pip install actuarialpy

Requires Python 3.10 or newer.

Quick start

import pandas as pd
import actuarialpy as ap

# ratios and per-exposure rates on any aggregate
print(ap.loss_ratio(1_240_000, 1_500_000))       # 0.8267
print(ap.per_exposure(1_240_000, 12_000))        # 103.33 per exposure unit

# fit a trend to a monthly series and project it forward
monthly = pd.DataFrame({
    "month": pd.date_range("2024-01-01", periods=24, freq="MS"),
    "loss_ratio": [0.80 * 1.004 ** i for i in range(24)],
})
fit = ap.fit_trend(monthly, date_col="month", value_col="loss_ratio")
print(f"annual trend: {fit.annual_trend:+.2%}")
print(round(ap.project_forward(monthly["loss_ratio"].iloc[-1],
                               fit.annual_trend, months=6), 4))

# cap large claims at a pooling point; the excess moves to its own column
claims = pd.DataFrame({"member": ["a", "b", "c"],
                       "paid": [612_000.0, 340_000.0, 96_500.0]})
pooled = ap.pool_losses(claims, loss_col="paid", pooling_point=250_000)
print(pooled)

What's inside

  • Metrics — loss/expense ratios, per-exposure rates, weighted statistics, contribution and comparison helpers.
  • Reserving — completion triangles, chain-ladder development factors, Mack standard errors, completion applied back to tidy data.
  • Trend and seasonality — trend fitting, forward projection, seasonal adjustment.
  • Credibility — Bühlmann, Bühlmann–Straub, and limited-fluctuation credibility.
  • Pooling — large-claim capping and excess extraction.
  • Financial — time-value-of-money primitives (present/future value, annuities, rate conversions).
  • Data utilities — exposure handling, banding, period alignment, member lifecycle status, margins and adjustments.

The full API reference and end-to-end worked examples live at openactuarial.org/actuarialpy.html.

The OpenActuarial ecosystem

actuarialpy is one of seven packages that share conventions — tidy tables, explicit distribution parameterizations, reproducible random-number handling — and compose across package seams:

Package Role
actuarialpy Calculation primitives the workflow packages build on
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
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/actuarialpy
cd actuarialpy
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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

actuarialpy-0.46.0.tar.gz (123.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

actuarialpy-0.46.0-py3-none-any.whl (70.9 kB view details)

Uploaded Python 3

File details

Details for the file actuarialpy-0.46.0.tar.gz.

File metadata

  • Download URL: actuarialpy-0.46.0.tar.gz
  • Upload date:
  • Size: 123.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for actuarialpy-0.46.0.tar.gz
Algorithm Hash digest
SHA256 7c65c6f90e8c75a1c5eef8fab131a604c7e0b09000f7538bd9052e43ea7f02dd
MD5 1eb94bb201902d0c98a57427b7c5b517
BLAKE2b-256 2d035a90ed1542dff1d77b632c0ac8a92cc1a0e25951f7196bebbfd9f997c9b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for actuarialpy-0.46.0.tar.gz:

Publisher: release.yml on OpenActuarial/actuarialpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file actuarialpy-0.46.0-py3-none-any.whl.

File metadata

  • Download URL: actuarialpy-0.46.0-py3-none-any.whl
  • Upload date:
  • Size: 70.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for actuarialpy-0.46.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e89f468f89b8c972ce29929fb2b7e3c030841f85c1289dccd7884b8e9a3d382d
MD5 2ed6da47180bc9dd4b2c7182dd7f8e97
BLAKE2b-256 c5087c3a5326f94c99aef7a5f6ce5202ad4fa945a18d8dbe81b41a9bbaac4fc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for actuarialpy-0.46.0-py3-none-any.whl:

Publisher: release.yml on OpenActuarial/actuarialpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page