distributions.Custom
A loss severity defined by your own distribution function: the slow
Usage
distributions.Custom()path for a distribution the library does not have.
Give the cdf, and the quantile function if you have one (sampling inverts the cdf by bisection otherwise, about a hundred cdf calls per draw). The mean, variance, limited expected values and layer moments are computed by Gauss–Legendre quadrature of the survival function between the distribution’s own quantiles, ignoring the probability above the 1 - 1e-12 quantile. A Custom goes anywhere a severity does (layers, compound distributions, simulated events, copula marginals, mixtures); calculations that meet one run single-threaded, since every value calls back into Python.
Parameters
cdf: callable-
cdf(x) -> float:P(X <= x)forx >= 0, in[0, 1]and non-decreasing. Losses are non-negative. quantile: callable-
quantile(p) -> float: the smallest x withcdf(x) >= p. name: str = "custom"-
Shown in errors and
repr.
Raises
ValueError-
If a callable raises or returns a value out of range, or the cdf never reaches
1 - 1e-12at a finite loss. An error in a later call makes that valuenan; last_error says why.
Examples
>>> import math
>>> from prospicio.distributions import Custom
>>> d = Custom(lambda x: 1 - math.exp(-x / 100), name="exponential")
>>> round(d.mean(), 6)100.0
>>> round(d.lev(50), 6) == round(100 * (1 - math.exp(-0.5)), 6)True
Attributes
| Name | Description |
|---|---|
| has_quantile | Whether a quantile function was given. |
| last_error |
The first error raised by a callable since construction, or None.
|
| name | The name given at construction. |
| upper |
The 1 - 1e-12 quantile, where the moment integrals stop.
|
has_quantile
Whether a quantile function was given.
has_quantile: bool
last_error
The first error raised by a callable since construction, or None.
last_error: str | None
name
The name given at construction.
name: str
upper
The 1 - 1e-12 quantile, where the moment integrals stop.
upper: float
Methods
| Name | Description |
|---|---|
| cdf() |
Distribution function P(X <= x).
|
| layer() | Expected loss to the layer limit xs attachment. |
| layer_second_moment() | Second moment of the loss to the layer limit xs |
| layer_variance() | Variance of the loss to the layer limit xs attachment. |
| lev() |
Limited expected value E[min(X, limit)].
|
| mean() |
Mean of the distribution (inf if it does not exist).
|
| quantile() |
Quantile: the smallest x with P(X <= x) >= p.
|
| sample() |
n draws from stream stream of the generator keyed by
|
| std() | Standard deviation of the distribution. |
| stop_loss() |
Expected excess over a retention, E[max(X - retention, 0)].
|
| survival() |
Survival function P(X > x), accurate far into the tail.
|
| variance() |
Variance of the distribution (inf if it does not exist).
|
cdf()
Distribution function P(X <= x).
Usage
cdf(x)Parameters
x: float
Returns
float
layer()
Expected loss to the layer limit xs attachment.
Usage
layer(limit, attachment)Parameters
limit: float-
inffor an unlimited layer. attachment: float
Returns
float
layer_second_moment()
Second moment of the loss to the layer limit xs
Usage
layer_second_moment(limit, attachment)Parameters
limit: floatattachment: float
Returns
float
layer_variance()
Variance of the loss to the layer limit xs attachment.
Usage
layer_variance(limit, attachment)Parameters
limit: floatattachment: float
Returns
float
lev()
Limited expected value E[min(X, limit)].
Usage
lev(limit)Parameters
limit: float
Returns
float
mean()
Mean of the distribution (inf if it does not exist).
Usage
mean()Returns
float
quantile()
Quantile: the smallest x with P(X <= x) >= p.
Usage
quantile(p)Parameters
p: float-
Probability in
[0, 1].
Returns
float
Raises
ValueError-
If p is outside
[0, 1].
sample()
n draws from stream stream of the generator keyed by
Usage
sample(n, seed, stream=0)seed.
Parameters
n: intseed: intstream: int = 0
Returns
list of float
std()
Standard deviation of the distribution.
Usage
std()Returns
float
stop_loss()
Expected excess over a retention, E[max(X - retention, 0)].
Usage
stop_loss(retention)Parameters
retention: float
Returns
float
survival()
Survival function P(X > x), accurate far into the tail.
Usage
survival(x)Parameters
x: float
Returns
float
variance()
Variance of the distribution (inf if it does not exist).
Usage
variance()Returns
float