Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Échantillonnage et intervalle de confiance

Après cette leçon: Je peux estimer une moyenne avec un échantillon et donner un intervalle de confiance.

Leçon de 60 min3 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Estimer une moyenne avec quelques valeurs

Un échantillon est une petite partie d’une population que l’on mesure pour estimer ce que l’on ne peut pas mesurer en entier. Vous saurez estimer une moyenne à partir d’un échantillon et dire de combien l’estimation peut se tromper.

Dans le labo, les 365 jours de l’année sont connus. On peut donc vérifier chaque estimation contre la vraie moyenne.

À la fin de cette leçon

Remarque

Je peux estimer une moyenne avec un échantillon et donner un intervalle de confiance.

Mots clés

MotCe que ça veut dire
Populationl’ensemble de tous les cas étudiés
Échantillonune partie de la population qu’on mesure vraiment
Biaisune erreur qui tire toujours l’estimation du même côté
Erreur standardla précision d’une moyenne d’échantillon
Intervalle de confiancedes bornes qui encadrent la vraie valeur, avec une méthode fiable

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un échantillon estime la population

La population est tout ce qu’on veut connaître : tous les jours, tous les clients. On n’en mesure qu’une partie, l’échantillon.

La moyenne de l’échantillon est une estimation de la moyenne de la population. Elle ne tombe presque jamais pile. Tout dépend de la façon dont l’échantillon est choisi.

Comparer la vraie moyenne et deux estimations

Commande
docker exec jupyter python3 -c "import csv, statistics; v = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; print(round(statistics.mean(v), 1), round(statistics.mean(v[:30]), 1), round(statistics.mean(v[::12]), 1))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un échantillon mal choisi donne un biais

La commande précédente affiche trois moyennes. Elle donne 270,3 pour les 365 jours, 190,7 pour les 30 premiers jours et 266,9 pour un jour sur douze.

Les 30 premiers jours sont ceux de janvier : il fait froid, on loue moins. Cette estimation est biaisée. Un jour sur douze couvre toute l’année, et l’estimation tombe tout près.

L’erreur standard dit la précision de la moyenne

Une moyenne d’échantillon change d’un échantillon à l’autre. L’erreur standard mesure de combien. On la calcule ainsi : l’écart type de l’échantillon divisé par la racine du nombre de valeurs.

Pour cet écart type, on divise par n − 1 au lieu de n. Les écarts mesurés autour de la moyenne de l’échantillon sont un peu trop petits, et ce n − 1 les corrige.

Exemple travaillé : dix jours de locations

JourLocationsÉcart à 270Écart au carré
1250-20400
2310401600
328010100
4190-806400
5330603600
627000
730030900
8240-30900
9260-10100
1027000
Total2700014000

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un intervalle à 95 % encadre la moyenne

La moyenne vaut 2700 divisé par 10, soit 270. La variance de l’échantillon vaut 14000 divisé par 9, soit 1555,6, et l’écart type 39,4.

L’erreur standard est 39,4 divisé par √10, soit 12,5. L’intervalle de confiance à 95 % est la moyenne plus ou moins deux erreurs standard : 270 ± 25, soit 245 à 295.

Le même calcul en Python

Code: python
# Dix jours de locations, notés dans une autre ville.
locations = [250, 310, 280, 190, 330, 270, 300, 240, 260, 270]
n = len(locations)
moyenne = sum(locations) / n
total = 0
for valeur in locations:
    total = total + (valeur - moyenne) ** 2
ecart_type = (total / (n - 1)) ** 0.5
erreur = ecart_type / n ** 0.5
print("moyenne :", moyenne)
print("erreur standard :", round(erreur, 1))
print("intervalle :", round(moyenne - 2 * erreur, 1), "à", round(moyenne + 2 * erreur, 1))
# Doublez la liste : locations = locations + locations
# L’intervalle devient-il plus étroit ?

Un bon échantillon encadre la vraie moyenne

La commande suivante calcule l’intervalle avec les 31 jours pris un jour sur douze. Elle affiche une moyenne de 266,9, un écart type de 69,4 et une erreur standard de 12,5.

L’intervalle va de 242,0 à 291,8, et la vraie moyenne, 270,3, y est. La méthode a bien fonctionné.

L’intervalle d’un jour sur douze

Commande
docker exec jupyter python3 -c "import csv, math, statistics; v = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; e = v[::12]; m = statistics.mean(e); se = statistics.stdev(e) / math.sqrt(len(e)); print(len(e), round(m, 1), round(statistics.stdev(e), 1), round(se, 1), round(m - 2 * se, 1), round(m + 2 * se, 1))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un échantillon biaisé donne un intervalle faux

Refaisons le calcul avec les 30 premiers jours. La commande suivante affiche une moyenne de 190,7 et une erreur standard de 11,3.

L’intervalle va de 168,0 à 213,4 : il est étroit et il ne contient pas 270,3. Le calcul ne peut pas corriger un biais de choix.

L’intervalle des 30 premiers jours

Commande
docker exec jupyter python3 -c "import csv, math, statistics; v = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; e = v[:30]; m = statistics.mean(e); se = statistics.stdev(e) / math.sqrt(len(e)); print(len(e), round(m, 1), round(statistics.stdev(e), 1), round(se, 1), round(m - 2 * se, 1), round(m + 2 * se, 1))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent que 95 % des jours se trouvent dans l’intervalle de confiance. C’est faux : il encadre la moyenne, pas les jours. Dire que la méthode capture la vraie moyenne dans 95 % des cas est correct.

Plus l’échantillon est grand, plus l’erreur est petite

Taille nÉcart type supposéErreur standardIntervalle : moyenne ±
108025,350,6
408012,625,3
160806,312,6

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Pour aller plus loin

Dans un carnet du labo, prenez un jour sur sept avec hires["hires"][::7], puis un jour sur trente avec [::30]. Calculez l’intervalle de chacun.

Le pas de sept tombe toujours sur le même jour de la semaine. Que se passe-t-il pour l’estimation ? Dites pourquoi.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.