Construisez un estimateur par les moments ou le maximum de vraisemblance
Au chapitre précédent, les estimateurs tombaient un peu du ciel : « prenons deux fois la moyenne », « prenons le maximum ». Pour un modèle plus riche, avec plusieurs paramètres ou une loi peu familière, il faut une méthode qui fabrique l’estimateur à coup sûr.
Ce chapitre en présente deux : la méthode des moments, simple et intuitive, et le maximum de vraisemblance, qui est la méthode de référence et le moteur caché de très nombreux modèles de machine learning. Notre fil rouge : des temps d’attente à un arrêt de bus.
Le fil rouge : attendre le bus
Section intitulée « Le fil rouge : attendre le bus »Sur une ligne sans horaires fixes (un bus toutes les quelques minutes), vous arrivez à l’arrêt à des instants quelconques et notez votre temps d’attente, en minutes, sur 8 jours :
| 3,1 | 7,4 | 1,2 | 5,8 | 0,6 | 9,3 | 2,5 | 4,1 |
|---|
La somme vaut 34, donc minutes. Un modèle classique pour ce genre d’attente est la loi exponentielle de paramètre (le taux de passage, en bus par minute), de densité
avec et . Le paramètre est inconnu : c’est lui qu’il faut estimer.
La méthode des moments
Section intitulée « La méthode des moments »L’idée tient en trois temps :
- écrire les moments théoriques (, , …) en fonction des paramètres ;
- inverser ce système pour exprimer les paramètres en fonction des moments ;
- remplacer chaque moment théorique par le moment empirique correspondant (, , …).
On utilise autant de moments qu’il y a de paramètres. Pourquoi ça marche ? Parce que les moments empiriques sont des estimateurs consistants des moments théoriques (loi des grands nombres), et qu’une fonction continue d’estimateurs consistants reste consistante.
La méthode est simple et fonctionne même quand la vraisemblance est difficile à écrire. Mais elle a deux défauts : le choix des moments n’est pas unique, et les estimateurs obtenus sont souvent moins précis que ceux du maximum de vraisemblance. L’exemple uniforme le montre bien : a une EQM plus de deux fois supérieure à celle du maximum corrigé.
La vraisemblance : quelle valeur rend les données les plus plausibles ?
Section intitulée « La vraisemblance : quelle valeur rend les données les plus plausibles ? »Changeons de point de vue. Les données sont fixées ; faisons varier et demandons-nous : pour quelle valeur de ces données étaient-elles les plus probables ?
La vraisemblance d’une observation est la fonction de :
- si la loi est discrète ;
- si la loi a une densité.
Pour un -échantillon i.i.d., l’indépendance transforme la probabilité jointe en produit :
L’estimateur du maximum de vraisemblance (EMV, en anglais maximum likelihood estimator) est la valeur qui rend maximale :
En pratique, on maximise la log-vraisemblance , qui transforme le produit en somme sans changer la position du maximum (le logarithme est croissant). On annule sa dérivée, puis on vérifie qu’il s’agit bien d’un maximum (dérivée seconde négative, ou étude des variations).
D’autres exemples classiques
Section intitulée « D’autres exemples classiques »- Bernoulli. Sur 200 visiteurs d’une page, 37 cliquent sur un bouton. , dont la log-vraisemblance s’annule en .
- Normale. . En annulant les deux dérivées partielles, on obtient et . L’EMV de la variance est donc biaisé.
- Uniforme sur . La densité vaut sur et 0 ailleurs, donc si , et 0 sinon. Cette fonction décroît sur : le maximum est au bord, en . Pour les vélos, 305. Ici, on ne trouve pas l’EMV en annulant une dérivée.
Quand il n’y a pas de formule : maximiser numériquement
Section intitulée « Quand il n’y a pas de formule : maximiser numériquement »Pour beaucoup de lois (loi gamma, mélanges, régression logistique), l’équation « dérivée nulle » n’a pas de solution explicite. On maximise alors la log-vraisemblance numériquement.
import numpy as npfrom scipy import optimize, stats
attentes = np.array([3.1, 7.4, 1.2, 5.8, 0.6, 9.3, 2.5, 4.1])
# Opposé de la log-vraisemblance exponentielle (on minimise)def nll(theta): return -np.sum(stats.expon.logpdf(attentes, scale=1 / theta))
res = optimize.minimize_scalar(nll, bounds=(1e-6, 5), method="bounded")print(res.x, 1 / attentes.mean()) # les deux valent environ 0.235attentes <- c(3.1, 7.4, 1.2, 5.8, 0.6, 9.3, 2.5, 4.1)loglik <- function(theta) sum(dexp(attentes, rate = theta, log = TRUE))optimize(loglik, interval = c(0.001, 5), maximum = TRUE)$maximumLes propriétés de l’EMV
Section intitulée « Les propriétés de l’EMV »L’invariance
Section intitulée « L’invariance »Si est l’EMV de , alors pour une bijection , l’EMV de est . C’est très pratique.
Le comportement pour de grands échantillons
Section intitulée « Le comportement pour de grands échantillons »Un EMV n’est pas forcément unique, ni sans biais, ni de variance minimale à fixé. Mais quand la loi est suffisamment régulière (en particulier, son support ne dépend pas de ), il a d’excellentes propriétés asymptotiques :
- il est consistant ;
- il est asymptotiquement sans biais et normal :
où est l’information de Fisher d’une observation :
La dérivée de la log-vraisemblance s’appelle le score. L’information de Fisher mesure à quel point la vraisemblance est « pointue » autour du vrai paramètre : plus elle est grande, plus une observation renseigne sur , et plus l’EMV est précis.
Un complément : la borne de Cramér-Rao
Section intitulée « Un complément : la borne de Cramér-Rao »Ce résultat classique, absent de nos supports de cours, éclaire la place de l’EMV. Pour tout estimateur sans biais d’un modèle régulier,
Aucun estimateur sans biais ne peut descendre sous cette variance. Un estimateur qui l’atteint est dit efficace. L’EMV l’atteint asymptotiquement : pour de grands échantillons, on ne peut pas faire mieux. Par exemple, pour la loi de Poisson, et : la moyenne empirique est efficace.
| Méthode des moments | Maximum de vraisemblance | |
|---|---|---|
| Principe | égaler moments théoriques et empiriques | maximiser la probabilité des données |
| Calcul | souvent explicite et simple | parfois explicite, souvent numérique |
| Précision | souvent moindre | asymptotiquement optimale (modèle régulier) |
| Usage typique | point de départ, modèles complexes | méthode de référence, logiciels |
En résumé
Section intitulée « En résumé »- La méthode des moments exprime les paramètres en fonction des moments, puis remplace ceux-ci par leurs versions empiriques.
- La vraisemblance mesure la plausibilité des données pour chaque valeur de ; l’EMV la maximise, en général via la dérivée de .
- Exemples à connaître : Bernoulli (), exponentielle (), normale ( et , biaisée), uniforme (, maximum au bord).
- L’EMV est invariant : l’EMV de est .
- Pour un modèle régulier, l’EMV est consistant et asymptotiquement normal, de variance asymptotique (information de Fisher) ; il atteint asymptotiquement la borne de Cramér-Rao.
Exercices
Section intitulée « Exercices »Exercice · Méthode des moments pour une loi de Poisson
facileLe nombre de tickets de support reçus par heure suit une loi de Poisson de paramètre . Sur 10 heures, on compte 2, 0, 3, 1, 4, 2, 2, 1, 3, 2 tickets. Estimez par la méthode des moments, puis la probabilité qu’une heure se passe sans ticket.
Voir la solution
Pour une loi de Poisson, , donc . La somme vaut 20, d’où tickets par heure.
. En remplaçant par son estimation (c’est aussi l’EMV par invariance, voir l’exercice suivant), on obtient : environ une heure sur sept sans ticket.
En code
import numpy as npfrom scipy import stats
tickets = np.array([2, 0, 3, 1, 4, 2, 2, 1, 3, 2])theta_hat = tickets.mean() # E[X] = thetaprint(theta_hat) # 2.0print(np.exp(-theta_hat), stats.poisson.pmf(0, theta_hat)) # 0.135 0.135tickets <- c(2, 0, 3, 1, 4, 2, 2, 1, 3, 2)theta_hat <- mean(tickets) # E[X] = thetatheta_hat # 2exp(-theta_hat); dpois(0, theta_hat) # 0.135 0.135Exercice · Maximum de vraisemblance pour une loi de Poisson
moyenMontrez que l’EMV du paramètre d’une loi de Poisson est , puis calculez l’information de Fisher .
Voir la solution
, donc
La dérivée s’annule en ; la dérivée seconde est négative (dès qu’une observation est non nulle), c’est donc un maximum.
Pour une observation, le score vaut , de variance . Donc : la variance asymptotique de l’EMV est , et atteint exactement la borne de Cramér-Rao.
En code
import numpy as npfrom scipy import optimize, stats
tickets = np.array([2, 0, 3, 1, 4, 2, 2, 1, 3, 2])
# L'EMV numérique retombe sur la moyennenll = lambda theta: -np.sum(stats.poisson.logpmf(tickets, theta))res = optimize.minimize_scalar(nll, bounds=(0.01, 10), method="bounded")print(res.x, tickets.mean()) # 2.000 2.0
# Information de Fisher : variance du score -1 + X / thetarng = np.random.default_rng(0)theta = 2.0X = rng.poisson(theta, size=200_000)score = -1 + X / thetaprint(score.var(), 1 / theta) # 0.500 0.5tickets <- c(2, 0, 3, 1, 4, 2, 2, 1, 3, 2)
# L'EMV numérique retombe sur la moyenneloglik <- function(theta) sum(dpois(tickets, theta, log = TRUE))optimize(loglik, interval = c(0.01, 10), maximum = TRUE)$maximum # 2.000
# Information de Fisher : variance du score -1 + X / thetaset.seed(0)theta <- 2X <- rpois(200000, theta)score <- -1 + X / thetavar(score); 1 / theta # 0.500 0.5Exercice · Une loi à densité puissance
difficileUne proportion (le taux de remplissage d’un entrepôt) a pour densité sur , avec . Déterminez l’estimateur des moments et l’EMV de . Sont-ils égaux ?
Voir la solution
Moments. . En posant , on inverse : . D’où .
Vraisemblance. . La dérivée s’annule en
(positif, car les sont négatifs). La dérivée seconde est négative : c’est un maximum.
Les deux estimateurs sont différents : l’un utilise la moyenne des , l’autre la moyenne des . Ils sont tous deux consistants, mais l’EMV est asymptotiquement le plus précis.
En code
import numpy as np
def theta_mom(x): # moyenne / (1 - moyenne) return x.mean(axis=-1) / (1 - x.mean(axis=-1))
def theta_mv(x): # -n / somme des log return -x.shape[-1] / np.log(x).sum(axis=-1)
# Simulation par inversion : F(x) = x^theta, donc X = U^(1 / theta)rng = np.random.default_rng(0)theta, n = 0.5, 50X = rng.uniform(size=(20_000, n)) ** (1 / theta)for nom, f in [("moments", theta_mom), ("vraisemblance", theta_mv)]: T = f(X) print(nom, round(T.mean(), 3), round(np.mean((T - theta)**2), 4))# moments 0.507 0.0094# vraisemblance 0.510 0.0055 (estimateurs différents, EMV plus précis)theta_mom <- function(x) mean(x) / (1 - mean(x)) # moyenne / (1 - moyenne)theta_mv <- function(x) -length(x) / sum(log(x)) # -n / somme des log
# Simulation par inversion : F(x) = x^theta, donc X = U^(1 / theta)set.seed(0)theta <- 0.5; n <- 50echantillons <- replicate(20000, runif(n)^(1 / theta)) # une colonne par échantillonT_mom <- apply(echantillons, 2, theta_mom)T_mv <- apply(echantillons, 2, theta_mv)c(mean(T_mom), mean((T_mom - theta)^2)) # moyenne et EQMc(mean(T_mv), mean((T_mv - theta)^2))## moments 0.506 0.0093## vraisemblance 0.510 0.0056 (estimateurs différents, EMV plus précis)