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:

FrequencyModel

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:

SeverityModel

Raises:
  • ValueError – If sequence input is empty.

  • TypeError – On unsupported input types.

Module contents