quactuary.distributions package¶
Submodules¶
quactuary.distributions.frequency module¶
Frequency distributions for the number of claims per year.
This module provides frequency distribution models to represent the number of claims within a given period for property and casualty (P&C) insurance applications.
Notes
gemact provides support for (a,b,0) and (a,b,1) distributions not in SciPy.
Examples
>>> from quactuary.distributions.frequency import Poisson
>>> model = Poisson(mu=3.5)
>>> pmf_2 = model.pmf(2)
>>> samples = model.rvs(size=10)
- class quactuary.distributions.frequency.Binomial(n: int, p: float)¶
Bases:
FrequencyModel
Binomial distribution modeling count of claims in fixed trials.
- Parameters:
n (int) – Number of trials.
p (float) – Success probability per trial.
Examples
>>> model = Binomial(n=10, p=0.3) >>> model.pmf(4) 0.200
- __init__(n: int, p: float)¶
Initialize a Binomial distribution.
- Parameters:
n (int) – Number of independent Bernoulli trials.
p (float) – Probability of success on each trial.
- cdf(k: int) float ¶
Compute cumulative probability of up to k successes.
- Parameters:
k (int) – Number of successes.
- Returns:
CDF value.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass at k successes.
- Parameters:
k (int) – Number of observed successes.
- Returns:
PMF value.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of success counts.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.DeterministicFreq(value: int)¶
Bases:
FrequencyModel
Deterministic frequency distribution producing a fixed count.
- Parameters:
value (int) – Constant number of claims.
Examples
>>> DeterministicFreq(2).pmf(2) 1.0
- __init__(value: int)¶
Initialize a deterministic frequency model.
- Parameters:
value (int) – Fixed claim count to return.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.DiscreteUniformFreq(low: int = 0, high: int = 2)¶
Bases:
FrequencyModel
Discrete uniform distribution over integer counts.
- Parameters:
low (int, optional) – Lower bound (inclusive). Defaults to 0.
high (int, optional) – Upper bound (exclusive). Defaults to 2.
Examples
>>> model = DiscreteUniformFreq(1, 5) >>> model.pmf(3) 0.25
- __init__(low: int = 0, high: int = 2)¶
Discrete uniform distribution.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.EmpiricalFreq(pmf_values: dict[int, float])¶
Bases:
FrequencyModel
Empirical frequency distribution defined by discrete probabilities.
- Parameters:
pmf_values (dict[int, float]) – Mapping from integer count to probability.
- Raises:
ValueError – If probabilities do not sum to 1.
Examples
>>> EmpiricalFreq({0: 0.2, 1: 0.8}).rvs(size=5) array([0, 1, 1, 1, 0])
- __init__(pmf_values: dict[int, float])¶
Discrete distribution given by a dict of k -> probability.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.FrequencyModel(*args, **kwargs)¶
Bases:
Protocol
Protocol for frequency distributions representing number of claims per period.
This interface defines methods for probability mass function, cumulative distribution, and random variate sampling.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- abstractmethod pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- abstractmethod rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.Geometric(p: float)¶
Bases:
FrequencyModel
Geometric distribution for count of failures before first success.
- Parameters:
p (float) – Success probability on each trial.
Examples
>>> Geometric(p=0.3).pmf(1) 0.3
- __init__(p: float)¶
Geometric(p). pmf(k) = (1-p)^(k-1)*p for k=1,2,3,… in SciPy’s parameterization.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.Hypergeometric(M: int, n: int, N: int)¶
Bases:
FrequencyModel
Hypergeometric distribution modeling draws without replacement.
- Parameters:
M (int) – Total population size.
n (int) – Number of success states in population.
N (int) – Number of draws.
Examples
>>> Hypergeometric(M=50, n=5, N=10).pmf(1)
- __init__(M: int, n: int, N: int)¶
Hypergeometric(M, n, N).
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.MixFreq(components: list[FrequencyModel], weights: list[float])¶
Bases:
FrequencyModel
Mixture model combining multiple frequency distributions.
- Parameters:
components (list[FrequencyModel]) – List of component models.
weights (list[float]) – Mixing weights summing to 1.
Examples
>>> mix = MixFreq([Poisson(2), Poisson(5)], [0.4, 0.6]) >>> mix.pmf(3)
- __init__(components: list[FrequencyModel], weights: list[float])¶
Mixture of multiple frequency models, with ‘weights’ summing to 1.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.NegativeBinomial(r: float, p: float)¶
Bases:
FrequencyModel
Negative binomial distribution modeling number of failures until r successes.
- Parameters:
r (float) – Number of successes to achieve.
p (float) – Success probability on each trial.
Examples
>>> NegativeBinomial(r=3, p=0.5).pmf(4)
- __init__(r: float, p: float)¶
Negative binomial with ‘r’ failures and success probability ‘p’.
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.PanjerABk(a: float, b: float, k: int, tol=1e-12, max_iter=100000)¶
Bases:
FrequencyModel
Generalized Panjer (a, b, k) distribution class for actuarial applications.
The (a, b, k) family includes many common actuarial claim count distributions: - Poisson(λ): a = λ, b = 1, k = 0 - Binomial(n, p): a = -q(n+1), b = -q, k = 0 where q = 1-p - Negative Binomial(r, p): a = r, b = 0, k = 0
- Parameters:
a (float) – First parameter in the recursive formula.
b (float) – Second parameter in the recursive formula.
k (int) – Shift parameter indicating the starting support (typically 0 or 1).
tol (float, optional) – Tail probability tolerance for stopping recursion. Defaults to 1e-12.
max_iter (int, optional) – Maximum number of iterations for recursion. Defaults to 100000.
References
https://www.casact.org/sites/default/files/old/astin_vol32no2_283.pdf
Examples
>>> model = PanjerABk(a=2, b=1, k=0) >>> model.pmf(3)
- __init__(a: float, b: float, k: int, tol=1e-12, max_iter=100000)¶
Initialize a PanjerABk distribution.
- Parameters:
a (float) – First parameter in the recursive formula.
b (float) – Second parameter in the recursive formula.
k (int) – Shift parameter indicating the starting support (typically 0 or 1).
tol (float, optional) – Tail probability tolerance for stopping recursion. Defaults to 1e-12.
max_iter (int, optional) – Maximum number of iterations for recursion. Defaults to 100000.
- cdf(n: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
n (int) – Count at which to evaluate the CDF.
- Returns:
Cumulative probability P(N <= n).
- Return type:
float
- pmf(n: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
n (int) – Count at which to evaluate the PMF.
- Returns:
Probability P(N = n).
- Return type:
float
- rvs(size: int = 1)¶
Draw random samples from the distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
A single sample if size = 1, otherwise an array of sampled counts.
- Return type:
int or np.ndarray
- class quactuary.distributions.frequency.Poisson(mu: float)¶
Bases:
FrequencyModel
Poisson distribution for count of claims per period.
- Parameters:
mu (float) – Expected number of occurrences.
Examples
>>> Poisson(mu=3.5).rvs(size=5)
- __init__(mu: float)¶
Poisson(mu).
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.frequency.TriangularFreq(c: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
FrequencyModel
Triangular distribution for approximate discrete counts.
- Parameters:
c (float) – Mode parameter between 0 and 1.
loc (float, optional) – Lower limit. Defaults to 0.0.
scale (float, optional) – Width of distribution. Defaults to 1.0.
Notes
This continuous distribution is rounded to integers for PMF and sampling.
Examples
>>> TriangularFreq(c=0.5, loc=1, scale=4).rvs(size=3)
- __init__(c: float, loc: float = 0.0, scale: float = 1.0)¶
Triangular distribution, continuous in SciPy. We’ll return 0 for pmf (no true discrete pmf).
- cdf(k: int) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(k: int) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- quactuary.distributions.frequency.to_frequency_model(obj) FrequencyModel ¶
Normalize an input into a FrequencyModel.
- Parameters:
obj – Input object. Supported types: - int or np.integer: returns DeterministicFreq - list, np.ndarray, pd.Series of ints: returns EmpiricalFreq - scipy.stats.rv_frozen: returns _ScipyFreqAdapter - FrequencyModel: returned unchanged
- Returns:
Equivalent frequency model.
- Return type:
- Raises:
ValueError – If sequence input is empty.
TypeError – On unsupported input types.
Examples
>>> to_frequency_model(5) DeterministicFreq(5)
quactuary.distributions.severity module¶
Severity distributions for the amount of loss per claim.
This module provides severity distribution models to represent claim losses in property and casualty (P&C) insurance applications.
Examples
>>> from quactuary.distributions.severity import Exponential
>>> model = Exponential(scale=1000.0)
>>> pdf_500 = model.pdf(500.0)
>>> samples = model.rvs(size=5)
- class quactuary.distributions.severity.Beta(a: float, b: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Beta distribution modeling loss proportions.
- Parameters:
a (float) – Alpha (shape) parameter.
b (float) – Beta (shape) parameter.
loc (float, optional) – Location parameter. Defaults to 0.0.
scale (float, optional) – Scale parameter. Defaults to 1.0.
Examples
>>> Beta(a=2, b=5, scale=1000.0).pdf(250.0)
- __init__(a: float, b: float, loc: float = 0.0, scale: float = 1.0)¶
Initialize a Beta severity distribution.
- Parameters:
a (float) – Alpha shape parameter.
b (float) – Beta shape parameter.
loc (float) – Lower bound of distribution.
scale (float) – Scale of distribution.
- cdf(x: float) float ¶
Compute CDF at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute PDF at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Generate random loss samples.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.ChiSquared(df: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Chi-squared distribution for claim severity.
- Parameters:
df (float) – Degrees of freedom.
loc (float, optional) – Location parameter. Defaults to 0.0.
scale (float, optional) – Scale parameter. Defaults to 1.0.
Examples
>>> ChiSquared(df=4, scale=500.0).cdf(200.0)
- __init__(df: float, loc: float = 0.0, scale: float = 1.0)¶
Initialize a Chi-squared severity distribution.
- Parameters:
df (float) – Degrees of freedom.
loc (float) – Location parameter.
scale (float) – Scale parameter.
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.ConstantSev(value: float)¶
Bases:
SeverityModel
Constant severity distribution producing a fixed loss amount.
- Parameters:
value (float) – Fixed loss amount per claim.
Examples
>>> ConstantSev(100.0).pdf(100.0) 1.0
- __init__(value: float)¶
Initialize a constant severity model.
- Parameters:
value (float) – Fixed loss amount.
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.ContinuousUniformSev(loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Continuous uniform distribution for claim severity.
- Parameters:
loc (float, optional) – Lower bound of losses. Defaults to 0.0.
scale (float, optional) – Width of distribution. Defaults to 1.0.
Examples
>>> ContinuousUniformSev(loc=100.0, scale=900.0).rvs(size=3)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.DiscretizedSeverity(sev_dist, min_val: float, max_val: float, bins: int = 1000)¶
Bases:
object
Discretized severity distributions. Needed for Quantum Circuits.
Defines methods for probability mass, cumulative distribution, and sampling.
We compute the density in each bin directly via: ∫ x f(x) dx
Variables: sev_dist (SeverityModel): underlying severity distribution. step: (float): distance between bin midpoints. mid_x_vals: (np.ndarray): midpoint of each bin, serving as the key for _probs. bin_mean: (np.ndarray): mean value of each bin. _probs: (dict): dictionary of probabilities for each bin midpoint.
Examples
>>> Χ²_dist = ChiSquared(df=4, scale=500.0) >>> discretized_Χ² = DiscretizedSeverityModel(Χ²_dist, min_val=0, max_val=8000, bins=100) >>> cdf_values = discretized_Χ².cdf(2000.0) 0.5
- __init__(sev_dist, min_val: float, max_val: float, bins: int = 1000)¶
Initialize the discretized severity model, converting it into bins. This is required for quantum circuit modeling.
- Parameters:
sev_dist (object) – Underlying severity distribution.
min_val (float) – Minimum value for discretization.
max_val (float) – Maximum value for discretization.
bins (int) – Number of bins for discretization.
- cdf(x: float) float ¶
Compute the cumulative distribution function (CDF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of at most k claims.
- Return type:
float
- pmf(x: float) float ¶
Compute the probability mass function (PMF) at a given count.
- Parameters:
k (int) – Number of claims.
- Returns:
Probability of exactly k claims.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples from the frequency distribution.
- Parameters:
size (int, optional) – Number of samples to generate. Defaults to 1.
- Returns:
Array of sampled claim counts.
- Return type:
np.ndarray
- class quactuary.distributions.severity.EmpiricalSev(values: list[float], probs: list[float])¶
Bases:
SeverityModel
Empirical severity distribution defined by discrete support and probabilities.
- Parameters:
values (list[float]) – Observable loss amounts.
probs (list[float]) – Corresponding probabilities (must sum to 1).
- Raises:
ValueError – If sum(probs) is zero.
Examples
>>> EmpiricalSev([100, 500], [0.3, 0.7]).cdf(250)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.Exponential(scale: float = 1.0, loc: float = 0.0)¶
Bases:
SeverityModel
Exponential distribution modeling loss severities.
- Parameters:
scale (float, optional) – Scale (mean) of distribution. Defaults to 1.0.
loc (float, optional) – Location parameter. Defaults to 0.0.
Examples
>>> Exponential(scale=1000.0).pdf(200.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.Gamma(shape: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Gamma distribution modeling claim losses.
- Parameters:
shape (float) – Shape parameter (k).
loc (float, optional) – Location. Defaults to 0.0.
scale (float, optional) – Scale (θ). Defaults to 1.0.
Examples
>>> Gamma(shape=2.0, scale=500.0).rvs(size=4)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.InverseGamma(shape: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Inverse gamma distribution modeling claim losses.
- Parameters:
shape (float) – Shape parameter (α).
loc (float, optional) – Location. Defaults to 0.0.
scale (float, optional) – Scale (β). Defaults to 1.0.
Examples
>>> InverseGamma(a=2.0, scale=500.0).pdf(200.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.InverseGaussian(shape: float, loc: float, scale: float)¶
Bases:
SeverityModel
Inverse Gaussian distribution for modeling claim losses.
- Parameters:
mu (float) – Mean of the distribution.
lam (float) – Shape parameter.
Examples
>>> InverseGaussian(mu=500.0, lam=2).pmf(300.0)
- __init__(shape: float, loc: float, scale: float)¶
Inverse Gaussian(mu, lam).
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.InverseWeibull(shape: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Inverse Weibull distribution modeling claim losses.
- Parameters:
shape (float) – Shape parameter.
loc (float, optional) – Location. Defaults to 0.0.
scale (float, optional) – Scale. Defaults to 1.0.
Examples
>>> InverseWeibull(c=1.5, scale=200.0).pdf(150.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.Lognormal(s: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Lognormal distribution modeling multiplicative loss processes.
- Parameters:
s (float) – Shape parameter (sigma of underlying normal).
loc (float, optional) – Location (shift). Defaults to 0.0.
scale (float, optional) – Scale (exp(mu)). Defaults to 1.0.
Examples
>>> Lognormal(s=0.5, scale=200.0).cdf(150.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.MixSev(components: list[SeverityModel], weights: list[float])¶
Bases:
SeverityModel
Mixture model combining multiple severity distributions.
- Parameters:
components (list[SeverityModel]) – List of severity models.
weights (list[float]) – Mixing weights summing to 1.
Examples
>>> mix = MixSev([Exponential(1000), Gamma(2)], [0.6, 0.4]) >>> mix.pdf(500.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.Pareto(b: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Pareto distribution modeling heavy-tailed losses.
- Parameters:
b (float) – Shape parameter (tail index).
loc (float, optional) – Location. Defaults to 0.0.
scale (float, optional) – Scale (xmin). Defaults to 1.0.
Examples
>>> Pareto(b=3.0, scale=100.0).rvs(size=5)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.SeverityModel(*args, **kwargs)¶
Bases:
Protocol
Protocol for severity distributions representing loss amounts per claim.
Defines methods for probability density, cumulative distribution, and sampling.
- abstractmethod cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- abstractmethod pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- abstractmethod rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.StudentsT(df: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Student’s t-distribution for modeling heavy-tailed losses.
- Parameters:
df (float) – Degrees of freedom.
loc (float, optional) – Location. Defaults to 0.0.
scale (float, optional) – Scale. Defaults to 1.0.
Examples
>>> StudentsT(df=5, scale=1000.0).pdf(200.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.TriangularSev(c: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Triangular distribution for modeling bounded losses.
- Parameters:
c (float) – Mode parameter between 0 and 1.
loc (float, optional) – Lower limit. Defaults to 0.0.
scale (float, optional) – Width. Defaults to 1.0.
Examples
>>> TriangularSev(c=0.5, loc=100, scale=900).cdf(500)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- class quactuary.distributions.severity.Weibull(c: float, loc: float = 0.0, scale: float = 1.0)¶
Bases:
SeverityModel
Weibull distribution modeling failure-time-like loss processes.
- Parameters:
c (float) – Shape parameter.
loc (float, optional) – Location. Defaults to 0.0.
scale (float, optional) – Scale. Defaults to 1.0.
Examples
>>> Weibull(c=1.5, scale=200.0).pdf(150.0)
- cdf(x: float) float ¶
Compute cumulative probability up to a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Cumulative probability at x.
- Return type:
float
- pdf(x: float) float ¶
Compute probability density at a given loss amount.
- Parameters:
x (float) – Loss amount.
- Returns:
Probability density at x.
- Return type:
float
- rvs(size: int = 1) ndarray ¶
Draw random samples of claim losses.
- Parameters:
size (int, optional) – Number of samples. Defaults to 1.
- Returns:
Sampled loss values.
- Return type:
np.ndarray
- quactuary.distributions.severity.to_severity_model(obj) SeverityModel ¶
Normalize diverse inputs into a SeverityModel.
- Parameters:
obj – Input to convert. Supported types: - float or int: returns ConstantSev - list, np.ndarray, pd.Series of numeric: returns EmpiricalSev - scipy.stats.rv_frozen: returns _ScipySevAdapter - SeverityModel: returned unchanged
- Returns:
Corresponding severity model.
- Return type:
- Raises:
ValueError – If sequence input is empty.
TypeError – On unsupported input types.