Aller au contenu

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.

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,17,41,25,80,69,32,54,1

La somme vaut 34, donc xˉ8=4,25\bar x_8 = 4{,}25 minutes. Un modèle classique pour ce genre d’attente est la loi exponentielle de paramètre θ>0\theta > 0 (le taux de passage, en bus par minute), de densité

f(x;θ)=θ e−θxpour x≥0f(x; \theta) = \theta \, e^{-\theta x} \quad \text{pour } x \ge 0

avec E[X]=1/θE[X] = 1/\theta et V(X)=1/θ2V(X) = 1/\theta^2. Le paramètre θ\theta est inconnu : c’est lui qu’il faut estimer.

L’idée tient en trois temps :

  1. écrire les moments théoriques (E[X]E[X], E[X2]E[X^2], …) en fonction des paramètres ;
  2. inverser ce système pour exprimer les paramètres en fonction des moments ;
  3. remplacer chaque moment théorique par le moment empirique correspondant (1n∑Xi\frac{1}{n}\sum X_i, 1n∑Xi2\frac{1}{n}\sum X_i^2, …).

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 : 2Xˉn2\bar X_n 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 θ\theta et demandons-nous : pour quelle valeur de θ\theta ces données étaient-elles les plus probables ?

La vraisemblance d’une observation xx est la fonction de θ\theta :

  • L1(θ;x)=Pθ(X=x)L_1(\theta; x) = P_\theta(X = x) si la loi est discrète ;
  • L1(θ;x)=f(x;θ)L_1(\theta; x) = f(x; \theta) si la loi a une densité.

Pour un nn-échantillon i.i.d., l’indépendance transforme la probabilité jointe en produit :

Ln(θ;x1,…,xn)=∏i=1nL1(θ;xi)L_n(\theta; x_1, \dots, x_n) = \prod_{i=1}^{n} L_1(\theta; x_i)

L’estimateur du maximum de vraisemblance (EMV, en anglais maximum likelihood estimator) est la valeur qui rend LnL_n maximale :

θ^=arg⁡max⁡θLn(θ;X1,…,Xn)\hat\theta = \arg\max_{\theta} L_n(\theta; X_1, \dots, X_n)

En pratique, on maximise la log-vraisemblance ln⁡Ln\ln L_n, 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).

0246810attente (min)0,000,050,100,150,200,250,300,35densité f(x ; θ)θ = 0,35 : ln L₈ = −20,30θ̂ = 0,235 : ln L₈ = −19,58 (maximum)θ = 0,15 : ln L₈ = −20,28
Les données (points ambre) sont fixées, on fait varier θ. La vraisemblance multiplie les hauteurs de la densité aux points observés (traits verts) : θ = 0,235 donne le produit le plus grand.
0,100,150,200,250,300,350,400,450,50θ (bus par minute)−22,0−21,5−21,0−20,5−20,0−19,5log-vraisemblance−20,28−19,68−19,58−19,83−20,30θ̂ = 1/x̄ = 1/4,25 ≈ 0,235ln L₈(θ) = 8 ln θ − 34 θ
La log-vraisemblance est une fonction de θ : l'EMV est l'abscisse de son sommet, là où la dérivée s'annule.
  • Bernoulli. Sur 200 visiteurs d’une page, 37 cliquent sur un bouton. Ln(θ)=θ∑xi(1−θ)n−∑xiL_n(\theta) = \theta^{\sum x_i} (1 - \theta)^{n - \sum x_i}, dont la log-vraisemblance s’annule en θ^=xˉn=37/200=0,185\hat\theta = \bar x_n = 37/200 = 0{,}185.
  • Normale. ln⁡Ln(μ,σ2)=−n2ln⁡(2πσ2)−12σ2∑(xi−μ)2\ln L_n(\mu, \sigma^2) = -\frac{n}{2}\ln(2\pi\sigma^2) - \frac{1}{2\sigma^2}\sum (x_i - \mu)^2. En annulant les deux dérivées partielles, on obtient μ^=xˉn\hat\mu = \bar x_n et σ^2=1n∑(xi−xˉn)2=sn2\hat\sigma^2 = \frac{1}{n}\sum (x_i - \bar x_n)^2 = s_n^2. L’EMV de la variance est donc biaisé.
  • Uniforme sur [0,θ][0, \theta]. La densité vaut 1/θ1/\theta sur [0,θ][0, \theta] et 0 ailleurs, donc Ln(θ)=θ−nL_n(\theta) = \theta^{-n} si θ≥max⁡xi\theta \ge \max x_i, et 0 sinon. Cette fonction décroît sur [max⁡xi,+∞[[\max x_i, +\infty[ : le maximum est au bord, en θ^=X(n)\hat\theta = X_{(n)}. Pour les vélos, 305. Ici, on ne trouve pas l’EMV en annulant une dérivée.
0100200300400500600700θ (nombre de vélos)0,00,51,0vraisemblance (relative)numéros observésθ̂ = max xᵢ = 305L = 0 : θ < 305impossibleL(θ) = θ⁻⁵, décroissante
La vraisemblance saute de 0 à son maximum en θ = 305, puis décroît : le maximum est au bord, là où la dérivée ne s'annule pas.

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 np
from 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.235
attentes <- 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)$maximum

Si θ^\hat\theta est l’EMV de θ\theta, alors pour une bijection gg, l’EMV de g(θ)g(\theta) est g(θ^)g(\hat\theta). C’est très pratique.

Un EMV n’est pas forcément unique, ni sans biais, ni de variance minimale à nn fixé. Mais quand la loi est suffisamment régulière (en particulier, son support ne dépend pas de θ\theta), il a d’excellentes propriétés asymptotiques :

  • il est consistant ;
  • il est asymptotiquement sans biais et normal :
n (θ^n−θ)→LN(0, 1I1(θ))\sqrt{n}\,(\hat\theta_n - \theta) \xrightarrow{\mathcal{L}} \mathcal{N}\left(0,\ \frac{1}{I_1(\theta)}\right)

où I1(θ)I_1(\theta) est l’information de Fisher d’une observation :

I1(θ)=V(∂∂θln⁡L1(θ;X))=E[(∂∂θln⁡L1(θ;X))2]I_1(\theta) = V\left( \frac{\partial}{\partial\theta} \ln L_1(\theta; X) \right) = E\left[ \left( \frac{\partial}{\partial\theta} \ln L_1(\theta; X) \right)^2 \right]

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 θ\theta, et plus l’EMV est précis.

0,10,20,30,40,50,6θ−4−3−2−10ln L(θ) − ln L(θ̂)θ̂ ± 0,083(erreur-type, n = 8)n = 8 attentesn = 80 attentes (même moyenne)
Avec dix fois plus de données, la courbe est dix fois plus courbée au sommet : l'information totale n I₁(θ) augmente et l'intervalle des valeurs plausibles de θ se resserre.

Ce résultat classique, absent de nos supports de cours, éclaire la place de l’EMV. Pour tout estimateur sans biais TnT_n d’un modèle régulier,

V(Tn)≥1n I1(θ)V(T_n) \ge \frac{1}{n \, I_1(\theta)}

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, I1(θ)=1/θI_1(\theta) = 1/\theta et V(Xˉn)=θ/nV(\bar X_n) = \theta/n : la moyenne empirique est efficace.

Méthode des momentsMaximum de vraisemblance
Principeégaler moments théoriques et empiriquesmaximiser la probabilité des données
Calculsouvent explicite et simpleparfois explicite, souvent numérique
Précisionsouvent moindreasymptotiquement optimale (modèle régulier)
Usage typiquepoint de départ, modèles complexesméthode de référence, logiciels
  • La méthode des moments exprime les paramètres en fonction des moments, puis remplace ceux-ci par leurs versions empiriques.
  • La vraisemblance Ln(θ)=∏L1(θ;xi)L_n(\theta) = \prod L_1(\theta; x_i) mesure la plausibilité des données pour chaque valeur de θ\theta ; l’EMV la maximise, en général via la dérivée de ln⁡Ln\ln L_n.
  • Exemples à connaître : Bernoulli (xˉ\bar x), exponentielle (1/xˉ1/\bar x), normale (xˉ\bar x et sn2s_n^2, biaisée), uniforme (max⁡xi\max x_i, maximum au bord).
  • L’EMV est invariant : l’EMV de g(θ)g(\theta) est g(θ^)g(\hat\theta).
  • Pour un modèle régulier, l’EMV est consistant et asymptotiquement normal, de variance asymptotique 1/I1(θ)1/I_1(\theta) (information de Fisher) ; il atteint asymptotiquement la borne de Cramér-Rao.

Exercice · Méthode des moments pour une loi de Poisson

facile

Le nombre de tickets de support reçus par heure suit une loi de Poisson de paramètre θ\theta. Sur 10 heures, on compte 2, 0, 3, 1, 4, 2, 2, 1, 3, 2 tickets. Estimez θ\theta par la méthode des moments, puis la probabilité qu’une heure se passe sans ticket.

Voir la solution

Pour une loi de Poisson, E[X]=θE[X] = \theta, donc θ^=Xˉn\hat\theta = \bar X_n. La somme vaut 20, d’où θ^=2\hat\theta = 2 tickets par heure.

P(X=0)=e−θP(X = 0) = e^{-\theta}. En remplaçant θ\theta par son estimation (c’est aussi l’EMV par invariance, voir l’exercice suivant), on obtient e−2≈0,135e^{-2} \approx 0{,}135 : environ une heure sur sept sans ticket.

En code

import numpy as np
from scipy import stats
tickets = np.array([2, 0, 3, 1, 4, 2, 2, 1, 3, 2])
theta_hat = tickets.mean() # E[X] = theta
print(theta_hat) # 2.0
print(np.exp(-theta_hat), stats.poisson.pmf(0, theta_hat)) # 0.135 0.135

Exercice · Maximum de vraisemblance pour une loi de Poisson

moyen

Montrez que l’EMV du paramètre d’une loi de Poisson est Xˉn\bar X_n, puis calculez l’information de Fisher I1(θ)I_1(\theta).

Voir la solution

P(X=x)=e−θθx/x!P(X = x) = e^{-\theta}\theta^x / x!, donc

ln⁡Ln(θ)=−nθ+(∑xi)ln⁡θ−∑ln⁡(xi!)\ln L_n(\theta) = -n\theta + \left(\sum x_i\right)\ln\theta - \sum \ln(x_i!)

La dérivée −n+∑xiθ-n + \frac{\sum x_i}{\theta} s’annule en θ^=xˉn\hat\theta = \bar x_n ; la dérivée seconde −∑xi/θ2-\sum x_i/\theta^2 est négative (dès qu’une observation est non nulle), c’est donc un maximum.

Pour une observation, le score vaut −1+X/θ-1 + X/\theta, de variance V(X)/θ2=θ/θ2=1/θV(X)/\theta^2 = \theta/\theta^2 = 1/\theta. Donc I1(θ)=1/θI_1(\theta) = 1/\theta : la variance asymptotique de l’EMV est θ\theta, et V(Xˉn)=θ/nV(\bar X_n) = \theta/n atteint exactement la borne de Cramér-Rao.

En code

import numpy as np
from scipy import optimize, stats
tickets = np.array([2, 0, 3, 1, 4, 2, 2, 1, 3, 2])
# L'EMV numérique retombe sur la moyenne
nll = 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 / theta
rng = np.random.default_rng(0)
theta = 2.0
X = rng.poisson(theta, size=200_000)
score = -1 + X / theta
print(score.var(), 1 / theta) # 0.500 0.5

Exercice · Une loi à densité puissance

difficile

Une proportion X∈[0,1]X \in [0, 1] (le taux de remplissage d’un entrepôt) a pour densité f(x;θ)=θxθ−1f(x; \theta) = \theta x^{\theta - 1} sur [0,1][0, 1], avec θ>0\theta > 0. Déterminez l’estimateur des moments et l’EMV de θ\theta. Sont-ils égaux ?

Voir la solution

Moments. E[X]=∫01θxθ dx=θθ+1E[X] = \int_0^1 \theta x^\theta \, dx = \frac{\theta}{\theta + 1}. En posant m=E[X]m = E[X], on inverse : θ=m1−m\theta = \frac{m}{1 - m}. D’où θ^mom=Xˉn1−Xˉn\hat\theta_{mom} = \frac{\bar X_n}{1 - \bar X_n}.

Vraisemblance. ln⁡Ln(θ)=nln⁡θ+(θ−1)∑ln⁡xi\ln L_n(\theta) = n\ln\theta + (\theta - 1)\sum \ln x_i. La dérivée nθ+∑ln⁡xi\frac{n}{\theta} + \sum \ln x_i s’annule en

θ^MV=−n∑i=1nln⁡Xi\hat\theta_{MV} = -\frac{n}{\sum_{i=1}^{n} \ln X_i}

(positif, car les ln⁡Xi\ln X_i sont négatifs). La dérivée seconde −n/θ2-n/\theta^2 est négative : c’est un maximum.

Les deux estimateurs sont différents : l’un utilise la moyenne des XiX_i, l’autre la moyenne des ln⁡Xi\ln X_i. 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, 50
X = 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)