Credibility models for actuarial pricing: Bühlmann, Bühlmann-Straub, Jewell, Hachemeister, and Bayesian extensions.
Project description
actuarcredibility
Python library for actuarial credibility models. Covers Bühlmann, Bühlmann-Straub, Jewell hierarchical, Hachemeister regression, classical limited-fluctuation, and an optional Bayesian model via PyMC. Outputs integrate with pandas DataFrames. References Bühlmann & Gisler (2005) and Klugman ch. 20.
Installation
From PyPI:
pip install actuarcredibility
From source:
git clone https://github.com/CosmikArt/actuarcredibility.git
cd actuarcredibility
pip install -e .
With Bayesian extensions:
pip install actuarcredibility[bayesian]
Quickstart
Buhlmann-Straub on multi-year loss data:
import pandas as pd
from actuarcredibility import BuhlmannStraubModel
# Multi-year loss experience by risk class
data = pd.DataFrame({
"risk_class": ["A", "A", "A", "B", "B", "B", "C", "C", "C"],
"year": [2021, 2022, 2023, 2021, 2022, 2023, 2021, 2022, 2023],
"loss_ratio": [0.62, 0.58, 0.65, 0.81, 0.77, 0.84, 0.45, 0.52, 0.48],
"earned_premium": [5_000_000, 5_200_000, 5_500_000,
2_000_000, 2_100_000, 2_300_000,
8_000_000, 8_500_000, 9_000_000],
})
model = BuhlmannStraubModel()
model.fit(
data,
group_col="risk_class",
observation_col="loss_ratio",
weight_col="earned_premium",
)
# Credibility factor per risk class
print(model.credibility_factor())
# Credibility-weighted premium estimate
print(model.credibility_premium())
Features
| Module | Description |
|---|---|
buhlmann |
BuhlmannModel, BuhlmannStraubModel. Non-parametric credibility with Bühlmann-Gisler unbiased structural estimators. |
hierarchical |
JewellHierarchical: multi-level hierarchical credibility for nested portfolios (region → territory → risk_class, etc.). |
regression |
HachemeisterRegression (regression credibility with covariates or a time trend; weighted least squares per group). |
classical |
LimitedFluctuationCredibility. Square-root rule for partial credibility, configurable tolerance and probability. |
bayesian |
BayesianCredibility is a PyMC hierarchical normal model with posterior credibility factors. Optional dependency. |
diagnostics |
variance_decomposition, credibility_curve, shrinkage_summary, compare_models |
More examples
Classical limited fluctuation
from actuarcredibility import LimitedFluctuationCredibility
cred = LimitedFluctuationCredibility(k=0.05, p=0.90)
cred.full_credibility_standard() # 1082 claims
cred.credibility_factor(n_claims=500) # ~0.6797
cred.credibility_premium(observed=0.72, prior=0.65, n_claims=500)
Hachemeister trend credibility
import pandas as pd
from actuarcredibility import HachemeisterRegression
data = pd.DataFrame({
"state": ["CA", "CA", "CA", "TX", "TX", "TX"],
"year": [2021, 2022, 2023, 2021, 2022, 2023],
"avg_claim_cost": [4500, 4700, 4900, 5200, 5400, 5600],
"claim_count": [120, 130, 140, 80, 85, 95],
})
model = HachemeisterRegression().fit(
data,
group_col="state",
observation_col="avg_claim_cost",
time_col="year",
weight_col="claim_count",
)
model.coefficients() # credibility-weighted (intercept, slope) per state
model.predict("CA", year=2026) # forecast next-year average cost
Hierarchical (Jewell)
import pandas as pd
from actuarcredibility import JewellHierarchical
data = pd.DataFrame({
"region": (["W"]*8 + ["E"]*8),
"territory": (["W1","W1","W2","W2"]*2 + ["E1","E1","E2","E2"]*2),
"risk_class": (["A","B"]*8),
"year": [2022, 2022, 2022, 2022, 2023, 2023, 2023, 2023] * 2,
"loss_ratio": [0.62, 0.71, 0.58, 0.69, 0.65, 0.74, 0.60, 0.71,
0.81, 0.75, 0.66, 0.72, 0.83, 0.77, 0.68, 0.74],
"earned_premium": [2_000_000]*16,
})
model = JewellHierarchical().fit(
data,
hierarchy_cols=["region", "territory", "risk_class"],
observation_col="loss_ratio",
weight_col="earned_premium",
)
model.credibility_factor(level="territory")
model.credibility_premium() # finest-level credibility premium
Diagnostics
import pandas as pd
from actuarcredibility import BuhlmannStraubModel
from actuarcredibility.diagnostics import (
variance_decomposition, credibility_curve, shrinkage_summary,
)
data = pd.DataFrame({
"risk": ["A","A","A","B","B","B","C","C","C"],
"year": [2021,2022,2023]*3,
"loss_ratio": [0.62,0.58,0.65,0.81,0.77,0.84,0.45,0.52,0.48],
"earned_premium": [5_000_000,5_200_000,5_500_000,
2_000_000,2_100_000,2_300_000,
8_000_000,8_500_000,9_000_000],
})
model = BuhlmannStraubModel().fit(data, "risk", "loss_ratio", "earned_premium")
variance_decomposition(model) # v, a, between-share, k = v/a
credibility_curve(model) # Z(w) tabulated for plotting
shrinkage_summary(model) # raw vs. credibility distance to grand mean
References
- Buhlmann, H. (1967). "Experience Rating and Credibility." ASTIN Bulletin, 4(3), 199-207.
- Buhlmann, H. & Gisler, A. (2005). A Course in Credibility Theory and its Applications. Springer.
- Klugman, S.A., Panjer, H.H. & Willmot, G.E. Loss Models: From Data to Decisions. Wiley.
- Jewell, W.S. (1975). "The Use of Collateral Data in Credibility Theory: A Hierarchical Model." Giornale dell'Istituto Italiano degli Attuari, 38, 1-16.
- Hachemeister, C.A. (1975). "Credibility for Regression Models with Application to Trend." In Credibility: Theory and Applications, P.M. Kahn (ed.), Academic Press.
- Casualty Actuarial Society. Exam 5 Study Notes: Credibility.
Contributing
Run pytest before sending a PR.
Author
Isaac López
MIT License. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file actuarcredibility-0.1.0.tar.gz.
File metadata
- Download URL: actuarcredibility-0.1.0.tar.gz
- Upload date:
- Size: 28.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2e3047cbee2caa05008b75b4dda5eb5c1bfeee88eeeed7419bca497e3258181
|
|
| MD5 |
52b675c7682b3e731e2df59ab073125f
|
|
| BLAKE2b-256 |
e0f2c30ed49b21fbcbad2874869dabd4b792ed9b8996e4bd06e33445e34ecb14
|
File details
Details for the file actuarcredibility-0.1.0-py3-none-any.whl.
File metadata
- Download URL: actuarcredibility-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a8db8d0cbf2fc27f52e55ed669a8ed350d5cc60703c8797c111bf50a9fcadb1
|
|
| MD5 |
8b6d4bf141cdafc5e1ae1d05a8cf7ab8
|
|
| BLAKE2b-256 |
43d5360dbb71c5fbbff0f8a4ed4dfd6c78fa3f871ee1a6ed9447e769aafcb0bc
|