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})"