Les lois usuelles en NumPy
scipy.stats expose chaque loi à travers une interface unique : pmf, cdf, rvs, mean, var. Ce projet consiste à recoder cette interface en NumPy pur, pour les lois du catalogue du chapitre 1, y compris la simulation rvs, qui ne devra utiliser que des tirages uniformes rng.random(). C'est la démarche de tout le cours : faire l'outil à la main une fois, pour comprendre exactement ce que fait la bibliothèque, puis ne plus utiliser que la bibliothèque.
1. Lien avec le cours
Le projet met en œuvre l'intégralité du chapitre 1 : les fiches des lois discrètes et continues fournissent chaque PMF, PDF, CDF et les moments ; la simulation de Monte-Carlo sert de banc de validation.
2. Structure du code
Chaque loi est une classe au gabarit imposé, celui de scipy.stats : les paramètres
class Bernoulli:
"""Bernoulli law, scipy.stats-like API, pure NumPy."""
def __init__(self, p):
self.p = p
def pmf(self, k):
"""P(X = k)."""
...
def cdf(self, k):
"""P(X <= k)."""
...
def rvs(self, size, rng):
"""size draws, using rng.random() only."""
...
def mean(self):
...
def var(self):
...Tests imposés. Pour chacune des sept lois : test_mean (gabarit des modalités communes), et un test structurel, la PMF somme à
3. Travail demandé
- Les lois discrètes. Implémenter
Bernoulli(p),Binomiale(n, p),Geometrique(p)etPoisson(lam):pmfpar la formule de la fiche,cdfpar sommation, moments par les formules du cours. Pourrvs, utiliser la transformation inverse : tireret retenir la première valeur telle que . Vérifier sur la Bernoulli que cette méthode se réduit à u < p. - Les lois continues. Implémenter
Uniforme(a, b)etExponentielle(lam): pourrvs, inverser la CDF analytiquement (, à démontrer pour l'exponentielle). Implémenter Normale(mu, sigma2): la CDF n'ayant pas de forme fermée, codercdfpar intégration numérique de la densité, etrvspar la transformation de Box-Muller, donnée :produit une à partir de deux uniformes. - Validation contre scipy. Pour chaque loi, confronter
pmf/pdf,cdf,meanetvaràscipy.statssur une grille de valeurs : les écarts doivent être numériquement négligeables. Présenter la comparaison dans un tableau. - Validation Monte-Carlo. Pour chaque loi, tirer
réalisations avec votre rvs, superposer l'histogramme à la PMF ou densité théorique, et confronter moyenne et variance empiriques aux moments. C'est le protocole des fiches du cours, appliqué à votre propre code. - Le bon outil. Refaire le tableau de l'étape 3 en une cellule avec
scipy.statsseul. Conclure en deux phrases : qu'avez-vous appris en le codant à la main, et pourquoi ne plus jamais le refaire ?
4. Livrables
Le notebook reproductible des modalités communes, avec le module de classes, les figures histogramme/théorie des sept lois, et les deux tableaux de validation. Ces classes resserviront dans les autres projets du chapitre.
