Source code for lossmodels.frequency.poisson
import numpy as np
from ..utils.random import RNGLike, resolve_rng
from scipy.stats import poisson
from .base import FrequencyModel
from ..utils.numeric import eval_dist
[docs]
class Poisson(FrequencyModel):
"""
Poisson frequency model.
Parameterization
----------------
N ~ Poisson(lam)
Support: {0, 1, 2, ...}
Parameters
----------
lam : float
Expected claim count, with lam >= 0.
"""
def __init__(self, lam: float):
if lam < 0:
raise ValueError("lam must be nonnegative.")
self.lam = lam
[docs]
def sample(self, size: int = 1, rng: RNGLike = None) -> np.ndarray:
"""Generate random samples of claim counts."""
if size <= 0:
raise ValueError("size must be positive.")
return resolve_rng(rng).poisson(self.lam, size=size)
[docs]
def mean(self) -> float:
"""E[N] = lam."""
return self.lam
[docs]
def variance(self) -> float:
"""Var(N) = lam."""
return self.lam
[docs]
def pmf(self, k):
"""Probability mass function P(N = k)."""
return eval_dist(lambda v: poisson.pmf(v, self.lam), k)
[docs]
def cdf(self, k):
"""Cumulative distribution function P(N <= k)."""
return eval_dist(lambda v: poisson.cdf(v, self.lam), k)
def __repr__(self) -> str:
return f"Poisson(lam={self.lam})"