ParcoursOuvrir l'appli

Résumer des nombres : moyenne, médiane, écart-type

Les maths du ML, en code · 45 min

La moyenne peut mentir

Une petite entreprise de Douala annonce fièrement : « Le salaire moyen chez nous est de 285 000 FCFA par mois. » Voici les huit salaires :

80 000   95 000   100 000   110 000   120 000   125 000   150 000   1 500 000

Sept employés gagnent entre 80 000 et 150 000 FCFA. Le huitième, c'est le patron. La moyenne est mathématiquement juste, mais aucun employé ne gagne quoi que ce soit qui ressemble à 285 000 FCFA. Une seule valeur extrême a tiré la moyenne vers le haut.

Avec NumPy :

import numpy as np

salaires = np.array([80000, 95000, 100000, 110000, 120000, 125000, 150000, 1500000])
print(salaires.mean())          # 285000.0
print(np.median(salaires))      # 115000.0

L'écart-type : mesurer la dispersion

Deux classes ont la même moyenne, 10 sur 20 :

Elles ne se ressemblent pas du tout. Dans la A, tout le monde est au même niveau ; dans la B, il y a des élèves brillants et des élèves perdus. Il faut un nombre pour dire à quel point les valeurs sont étalées autour de la moyenne.

Pour la classe B : moyenne 10, écarts -10, 10, -5, 5, carrés 100, 100, 25, 25, variance (100 + 100 + 25 + 25) / 4 = 62,5, écart-type racine de 62,5, environ 7,9 points. Pour la classe A : tous les écarts sont nuls, écart-type 0.

np.array([10, 10, 10, 10]).std()    # 0.0
np.array([0, 20, 5, 15]).std()      # 7.905...

Exercice : Les salaires, honnêtement

Avec le tableau salaires, calcule :

  • moyenne et mediane de tous les salaires ;
  • sans_patron : la moyenne des salaires sans le plus grand (utilise un masque, ne retire pas la valeur à la main) ;
  • ecart : l'écart-type des salaires sans le patron, arrondi à l'entier.
Voir une solution
import numpy as np

salaires = np.array([80000, 95000, 100000, 110000, 120000, 125000, 150000, 1500000])   # donné

moyenne = salaires.mean()
mediane = np.median(salaires)
autres = salaires[salaires < salaires.max()]
sans_patron = autres.mean()
ecart = round(autres.std())
print(moyenne, mediane, sans_patron, ecart)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : L'écart-type, à la main

Pour bien comprendre ce que fait .std(), écris ecart_type(valeurs) sans utiliser .std() ni .var() : calcule la moyenne, les écarts, leurs carrés, la moyenne des carrés, puis la racine carrée avec np.sqrt.

Voir une solution
import numpy as np


def ecart_type(valeurs):
    """Renvoie l'écart-type d'un tableau NumPy, calculé étape par étape."""
    ecarts = valeurs - valeurs.mean()
    variance = (ecarts ** 2).mean()
    return np.sqrt(variance)


print(ecart_type(np.array([0, 20, 5, 15])))

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Teste-toi

Dans un village, 99 familles gagnent 50 000 FCFA par mois et une famille gagne 10 000 000 FCFA. Quelle phrase est juste ?
  1. La moyenne et la médiane sont proches
  2. La médiane (50 000) décrit mieux une famille typique que la moyenne (environ 150 000) (bonne réponse)
  3. La moyenne décrit mieux une famille typique
  4. L'écart-type est nul