Aller au contenu principal
sfiStatistiques descriptives

Statistiques descriptives

Ce que ce chapitre apporte

  • Distinguer population, individu, caractère, modalité, et types de caractères.
  • Construire un tableau d'effectifs et de fréquences, simples et cumulés.
  • Calculer moyenne, médiane, mode et quantiles, et choisir l'indicateur adapté.
  • Calculer étendue, écart interquartile, variance et écart-type, et interpréter la dispersion.
  • Construire et lire une boîte à moustaches, repérer les valeurs aberrantes.
  • Charger et résumer un jeu de données tabulaire en Python.
Où on va
Les probabilités partent d'un modèle et en déduisent ce qui devrait arriver. Les statistiques font le trajet inverse : elles partent d'un fichier de mesures et remontent à ce qui s'est passé. C'est le sens dans lequel on travaille réellement en ingénierie, parce qu'on n'a jamais le modèle, on n'a que les données. Ce chapitre installe les indicateurs qui résument une colonne de chiffres, et le réflexe qui compte : regarder la forme avant de calculer une moyenne.

Le vocabulaire

Définitions

La population est l'ensemble étudié ; un individu en est un élément ; le caractère est ce qu'on observe sur chaque individu ; les valeurs que peut prendre un caractère sont ses modalités.

Un caractère est quantitatif si ses modalités sont des nombres qu'on peut mesurer et sur lesquels calculer (une température, une durée), qualitatif sinon (une saison, une marque, un avis).

Un caractère quantitatif est discret s'il prend des valeurs isolées (le nombre de vélos loués), continu s'il peut prendre n'importe quelle valeur d'un intervalle (une température) : on le regroupe alors en classes.

Un nombre n'est pas forcément quantitatif
Dans le jeu de données de vélos en libre-service, la saison est codée 1, 2, 3, 4 et la météo 1, 2, 3. Ce sont des étiquettes, pas des mesures : « saison moyenne = 2,4 » n'a aucun sens. Avant tout calcul, demande-toi si la différence entre deux valeurs veut dire quelque chose. Entre l'hiver et l'été, non.

Effectifs et fréquences

L'effectif nin_i est le nombre d'individus présentant la modalité xix_i, et ni=N\sum n_i = N. La fréquence fi=ni/Nf_i = n_i/N en est la proportion, et fi=1\sum f_i = 1, c'est le premier contrôle d'un tableau.

L'effectif cumulé croissant NiN_i compte les individus dont la modalité est inférieure ou égale à xix_i ; la fréquence cumulée Fi=Ni/NF_i = N_i/N en est la proportion. C'est sur ces cumuls que se lisent directement médiane et quantiles.

Indicateurs de position

Ils répondent à « où se situe le centre des données ? ».

Moyenne

xˉ=(nixi)/N\bar{x} = (\sum n_ix_i) / N

C'est le centre de gravité de la série : elle utilise toutes les valeurs, ce qui est sa force et sa faiblesse.

La moyenne est sensible aux valeurs extrêmes
Une seule valeur aberrante la déplace fortement. Sur des temps de réponse en millisecondes 40, 45, 47, 50, 4000, la moyenne vaut 836 ms : un temps que personne n'a jamais observé, et qui ne décrit rien. Ce n'est pas un cas d'école, c'est le quotidien d'une métrique de supervision où une seule requête a expiré.

Médiane

Définition

La médiane MeMe partage la série ordonnée en deux moitiés de même effectif : au moins 50 % des valeurs lui sont inférieures ou égales, au moins 50 % lui sont supérieures ou égales.

La méthode, en deux temps qu'on n'inverse jamais :

  1. Ordonner la série dans l'ordre croissant.
  2. Si NN est impair, prendre la valeur de rang (N+1)/2(N+1)/2. Si NN est pair, prendre la moyenne des valeurs de rang N/2N/2 et N/2+1N/2 + 1.

Mode

Le mode est la modalité de plus grand effectif. C'est le seul indicateur de position disponible pour un caractère qualitatif : la saison la plus fréquente a un sens, la saison moyenne non.

Quantiles

Définition

Le quantile d'ordre qq est la valeur du caractère correspondant à la fréquence cumulée qq. Q1Q_1 est le quantile d'ordre 0,25, Q3Q_3 celui d'ordre 0,75, et la médiane celui d'ordre 0,5.

En pratique sur une série ordonnée de NN valeurs : on calcule N/4N/4 et 3N/43N/4 ; si le résultat est entier, on prend la moyenne de cette valeur et de la suivante ; sinon, on arrondit à l'entier supérieur.

Les conventions varient, et c'est normal
Il existe plusieurs définitions des quartiles, qui donnent des résultats légèrement différents sur les petits échantillons : numpy en propose neuf. Applique celle de ton cours et écris-la : c'est la méthode qui est notée, pas la troisième décimale.

Indicateurs de dispersion

Ils répondent à « les données sont-elles serrées ou étalées ? ». Deux séries de même moyenne peuvent être radicalement différentes.

Étendue et écart interquartile

L'étendue est maxmin\max - \min. Simple, et entièrement déterminée par les deux valeurs les plus douteuses de la série.

L'écart interquartile IQR = Q₃ − Q₁ mesure l'étalement des 50 % centraux. Il ignore les extrêmes par construction : c'est un indicateur robuste, et c'est celui qui servira à détecter les anomalies au chapitre 5.

Variance et écart-type

Définitions

La variance est la moyenne des carrés des écarts à la moyenne :

V(X)=(ni(xixˉ)2)/N=(nixi2)/Nxˉ2V(X) = (\sum n_i(x_i - \bar{x})^2) / N = (\sum n_ix_i^2)/N - \bar{x}^2

L'écart-type σ(X)=V(X)\sigma (X) = \sqrt{V}(X) la ramène dans l'unité des données.

La seconde forme (« moyenne des carrés moins carré de la moyenne ») est celle qu'on utilise pour calculer : un seul passage sur les données suffit.

Diviser par N ou par N − 1 ?
Par N quand on décrit la série qu'on a sous les yeux (variance de population). Par N − 1 quand on estime la variance d'une population plus large à partir d'un échantillon.
En Python, numpy.std() divise par N et pandas.Series.std() par N − 1 : les deux bibliothèques ne donnent pas le même nombre sur la même colonne. Sur 12 valeurs l'écart est de 4 % ; sur 10 000, il est invisible. Sache lequel tu utilises et pourquoi.

Le coefficient de variation CV=σ/xˉCV = \sigma /\bar{x} est sans unité : il permet de comparer la dispersion de deux séries d'échelles différentes, par exemple une charge CPU en pourcentage et un trafic réseau en Mo/s.

Un calcul complet, à la main

Les locations quotidiennes d'un service de vélos sur 12 jours, en centaines :

12, 15, 15, 18, 21, 22, 24, 27, 31, 33, 40, 62

La série est déjà ordonnée, N=12N = 12.

IndicateurCalculRésultat
Moyenne320/12320 / 1226,67
Médiane(22+24)/2(22 + 24)/223
Q1Q_112/4=312/4 = 3 entier → (15+18)/2(15 + 18)/216,5
Q3Q_336/4=936/4 = 9 entier → (31+33)/2(31 + 33)/232
Étendue621262 - 1250
IQR3216,532 - 16{,}515,5
Variance10642/1226,67210642/12 - 26{,}67^2175,7
Écart-type175,7\sqrt{175{,}7}13,26

Trois lectures immédiates, et elles valent plus que les nombres :

  1. Moyenne (26,7) nettement supérieure à la médiane (23) : la série est étirée vers le haut. Une journée exceptionnelle tire la moyenne.
  2. CV=13,26/26,670,50CV = 13{,}26/26{,}67 \approx 0{,}50 : l'écart typique vaut la moitié de la moyenne. C'est une série très dispersée, prévoir « 2 670 locations demain » serait absurde.
  3. La valeur 62 dépasse Q₃ + 1,5 × IQR = 55,25 : c'est une valeur aberrante au sens de la boîte à moustaches. À enquêter, pas à supprimer.
main.py
Sortie
>_ Prêt à exécuter…
Vérification rapidesans note, on peut se reprendre

1.Une série contient une valeur extrême. Quel indicateur bouge le plus ?

2.L'écart-type se lit dans la même unité que…

3.Deux séries ont la même moyenne. Que peut-on en conclure ?

La boîte à moustaches

Définition

La boîte à moustaches (diagramme de Tukey) résume une série par cinq nombres : le bord inférieur de la boîte est Q1Q_1, la barre intérieure la médiane, le bord supérieur Q3Q_3. Les moustaches s'étendent jusqu'à la dernière valeur située à moins de 1,5 × IQR de la boîte ; au-delà, les points sont tracés individuellement comme valeurs aberrantes.

Son intérêt n'est pas de résumer une série (un tableau le fait mieux) mais d'en comparer plusieurs d'un seul coup d'œil : quatre saisons, sept jours de la semaine, trois serveurs.

Une valeur aberrante ne se supprime pas
Un point hors des moustaches signale une chose à comprendre : une erreur de mesure, un événement exceptionnel, ou le comportement réel du système dans un régime rare. Les trois se traitent différemment, et aucun ne se traite en effaçant la ligne. Écris ce que tu en fais, et pourquoi.

Travailler sur des données tabulaires

En pratique, les données arrivent en table : une ligne par observation, une colonne par caractère. pandas est l'outil standard, et trois méthodes couvrent l'essentiel du travail : describe() pour le résumé, groupby() pour comparer des sous-populations, et le filtrage booléen pour isoler des lignes.

Le jeu ci-dessous imite un relevé de locations de vélos, fabriqué de façon reproductible puisque le navigateur ne lit pas de fichier.

main.py
Sortie
>_ Prêt à exécuter…

describe() donne d'un coup l'effectif, la moyenne, l'écart-type, le minimum, les trois quartiles et le maximum. C'est toujours la première commande à taper sur un jeu inconnu.

Puis on compare des sous-populations. Une question du type quels jours ouvrir le service ? est exactement une question de groupby :

main.py
Sortie
>_ Prêt à exécuter…

Et la lecture graphique, qui montre en deux images ce que trois tableaux disent mal :

main.py
Sortie
>_ Prêt à exécuter…
Ce que tu cherches sur un histogramme
Trois choses, dans cet ordre : la distribution est-elle à une seule bosse ou à plusieurs (deux bosses = deux populations mélangées, à séparer avant tout calcul) ? Est-elle symétrique ou étirée d'un côté ? Y a-t-il des points isolés loin du reste ? Ces trois réponses conditionnent tout ce qui suit.

Exercices type

Moyenne et médiane de 4, 7, 7, 9, 13, 15, 45

Moyenne : (4+7+7+9+13+15+45)/7=100/7(4+7+7+9+13+15+45)/7 = 100/7 \approx 14,3

Médiane : 7 valeurs, rang (7+1)/2=4(7+1)/2 = 4, donc Me=9Me = 9

La moyenne est bien supérieure à la médiane : la valeur 45 tire la série vers le haut. Ici la médiane est plus représentative, et l'écart entre les deux est déjà une conclusion sur la forme de la série.

Écart-type de 2, 4, 4, 4, 5, 5, 7, 9

xˉ=40/8=5\bar{x} = 40/8 = 5

xi2=4+16+16+16+25+25+49+81=232\sum x_i^2 = 4 + 16 + 16 + 16 + 25 + 25 + 49 + 81 = 232

V=232/825=2925=4V = 232/8 - 25 = 29 - 25 = 4, donc σ=\sigma = 2

L'écart typique à la moyenne vaut 2, sur une série centrée en 5 : CV=0,4CV = 0{,}4.

Toutes les mesures d'un capteur sont majorées de 2 °C par un défaut d'étalonnage. Que deviennent moyenne et écart-type ?

La moyenne augmente de 2. L'écart-type ne change pas : on a translaté toute la série sans modifier les écarts entre les valeurs.

Si le défaut était multiplicatif (toutes les valeurs × 1,1), moyenne et écart-type seraient multipliés par 1,1. C'est E(aX+b)=aE(X)+bE(aX + b) = aE(X) + b et σ(aX+b)=aσ(X)\sigma (aX + b) = |a|\sigma (X), vus depuis les données.

Sur 200 mesures de charge CPU, $Q_1 = 22 %$, $Me = 31 %$, $Q_3 = 68 %$. Que dire de la série ?

IQR = 46 points, c'est énorme : les 50 % centraux s'étalent sur presque toute l'échelle.

Surtout, la médiane (31) est beaucoup plus proche de Q1Q_1 (22) que de Q3Q_3 (68) : la moitié basse est serrée, la moitié haute très étalée. La distribution est fortement asymétrique à droite.

L'interprétation métier est nette : le serveur est le plus souvent peu chargé, avec des périodes de forte charge bien distinctes. Une bimodalité est probable, jour/nuit, ou traitement par lots. Il faut tracer l'histogramme et séparer les deux régimes avant tout autre calcul.

Pourquoi ne compare-t-on pas deux séries par leurs écarts-types quand elles n'ont pas la même unité ?

Parce que l'écart-type porte l'unité des données. Un écart-type de 12 sur une charge CPU en pourcentage et de 12 sur un trafic en Mo/s ne sont pas comparables.

On utilise alors le coefficient de variation CV=σ/xˉCV = \sigma /\bar{x}, sans unité. CV=0,05CV = 0{,}05 (trafic très régulier) et CV=0,8CV = 0{,}8 (charge très irrégulière) se comparent, eux.

Réserve : le CVCV n'a de sens que si la moyenne est positive et loin de zéro. Sur une série centrée en zéro, il explose.

Un point est en dehors des moustaches. Faut-il le retirer du jeu de données ?

Non : pas avant de savoir ce que c'est.

Trois cas et trois traitements : une erreur de mesure (capteur débranché, valeur 999-999) se corrige ou s'écarte, en le documentant ; un événement exceptionnel réel (jour de grève, pic de trafic) se garde, c'est souvent l'observation la plus intéressante du jeu ; un régime de fonctionnement rare mais normal signale que la population n'est pas homogène et qu'il faut la découper.

Écarter un point parce qu'il gêne le modèle, c'est fabriquer le résultat. Ce qui se note dans un rapport, c'est la phrase qui justifie la décision.

La méthode

  1. Ordonne la série avant tout calcul de médiane ou de quantile. C'est l'oubli le plus fréquent.
  2. Vérifie que ni=N\sum n_i = N et que fi=1\sum f_i = 1. Un tableau faux invalide tout ce qui suit.
  3. Vérifie qu'un caractère codé en nombres est bien quantitatif avant d'en faire la moyenne.
  4. Donne toujours position et dispersion ensemble : une moyenne sans écart-type ne décrit rien.
  5. Compare moyenne et médiane : leur écart est déjà une conclusion sur la symétrie.
  6. Trace l'histogramme avant de conclure. Deux bosses invalident tout indicateur global.
  7. Précise ta convention de quartile et de variance (NN ou N1N - 1) quand tu écris un résultat.
  8. Traduis en langage métier. « Q3Q_3 = 68 % » devient « un jour sur quatre, le serveur dépasse 68 % de charge ».

En résumé

  • Population, individu, caractère, modalité. Un caractère qualitatif n'a ni moyenne ni écart-type.
  • ni=N\sum n_i = N et fi=1\sum f_i = 1 : le contrôle qui prend trois secondes.
  • Moyenne : centre de gravité, utilise tout, sensible aux extrêmes. Médiane : robuste. Mode : seul indicateur des caractères qualitatifs.
  • Quantiles Q1Q_1, Q3Q_3IQR = Q₃ − Q₁, dispersion robuste des 50 % centraux.
  • Variance V=(nixi2)/Nxˉ2V = (\sum n_ix_i^2)/N - \bar{x}^2, écart-type σ=V\sigma = \sqrt{V}, dans l'unité des données.
  • Diviser par NN pour décrire, par N1N - 1 pour estimer. numpy et pandas ne font pas le même choix par défaut.
  • Coefficient de variation CV=σ/xˉCV = \sigma /\bar{x} : sans unité, pour comparer des séries d'échelles différentes.
  • Boîte à moustaches : cinq nombres, aberrantes au-delà de 1,5 × IQR. Faite pour comparer des séries.
  • Une valeur aberrante s'explique, elle ne s'efface pas.
  • describe() puis groupby() : les deux premières commandes sur un jeu de données inconnu.

Et ensuite ? Décrire une colonne ne suffit pas à décider. Le chapitre suivant met deux variables en relation (corrélation, moindres carrés et prédiction) pour répondre à la question qui décide vraiment : quels jours ouvrir le service ?