Comment visualiser le théorème central limite en Python ?

Le théorème central limite se comprend bien quand on regarde des moyennes se répéter. Des dés, des audiences bimodales, des revenus très asymétriques. À chaque fois, la moyenne d’échantillons finit souvent par dessiner une courbe normale. Et c’est là que l’intuition devient claire.

Pourquoi les moyennes deviennent normales ?

Les moyennes deviennent souvent normales parce que les variations individuelles se compensent quand on agrège plusieurs observations indépendantes avec une variance finie.

Le théorème central limite, souvent appelé TCL, dit une chose très précise. Il ne dit pas que vos données brutes deviennent normales. Si vous mesurez des revenus, des délais de livraison ou des paniers moyens, les valeurs individuelles peuvent rester très asymétriques, avec des extrêmes, des trous, des bosses. Ce qui tend vers une forme normale, c’est la distribution des moyennes d’échantillons quand la taille des échantillons augmente.

La nuance est importante. Une observation individuelle, c’est une valeur. Un échantillon, c’est un petit groupe de valeurs. La moyenne d’un échantillon, c’est une seule valeur calculée à partir de ce groupe. La distribution des moyennes, c’est ce qu’on obtient quand on répète l’opération beaucoup de fois, par exemple 10 000 échantillons, donc 10 000 moyennes.

C’est souvent le déclic que je vois en formation. Tant qu’on parle formule, ça reste abstrait. Dès qu’on simule 10 000 moyennes en Python, on voit une cloche apparaître, même si les données de départ ne ressemblent pas du tout à une loi normale.

Formez-vous aux outils Data Visualisation !

Apprendre à utiliser Looker Studio vous permet de transformer des données complexes en insights clairs et actionnables. Nos formations Looker Studio vous apprendont à personnaliser vos rapports, accélérer l'analyse de données.

Il y a quand même quelques conditions à garder en tête :

  • Les observations doivent être indépendantes, ou au moins pas trop dépendantes.
  • Les observations doivent venir de la même distribution, ou de distributions comparables selon les versions du théorème.
  • La variance doit être finie, c’est-à-dire que la dispersion ne doit pas être infinie ou ingérable.
  • La taille d’échantillon doit être suffisante.

La convergence n’est pas magique. Elle peut être rapide avec des distributions raisonnables. Elle peut être lente avec des distributions très asymétriques ou avec des queues lourdes, c’est-à-dire beaucoup de valeurs extrêmes.

Le point clé derrière tout ça, c’est l’erreur standard. Plus n augmente, plus les moyennes d’échantillons se resserrent autour de la vraie moyenne. Leur dispersion baisse comme sigma divisé par racine de n, souvent écrit σ / √n. C’est la base des intervalles de confiance, des tests statistiques, et de beaucoup de raisonnements en data.

Objet observéCe qu’on voitPourquoi c’est utile
Données brutesDes valeurs individuelles parfois asymétriques ou extrêmes.Comprendre le phénomène réel mesuré.
Moyenne d’un échantillonUne seule valeur qui résume un groupe d’observations.Estimer la moyenne vraie à partir d’un échantillon.
Distribution des moyennesUne forme qui tend souvent vers une loi normale.Construire des intervalles de confiance et des tests fiables.

Que montrent plusieurs lancers de dés ?

Plusieurs lancers de dés montrent un truc assez contre-intuitif : une distribution uniforme peut produire des moyennes en forme de cloche quand on répète beaucoup d’échantillons.

Un dé seul, c’est simple. Chaque valeur de 1 à 6 a la même probabilité. La distribution est plate, pas normale. Mais si je lance 5 dés, que je calcule leur moyenne, puis que je répète ça 10 000 fois, je ne vais pas obtenir une distribution plate. Les moyennes proches de 3,5 vont sortir beaucoup plus souvent que les moyennes proches de 1 ou 6.

Pourquoi ? Parce qu’il y a beaucoup plus de combinaisons qui donnent une moyenne centrale. Faire une moyenne proche de 3,5, ça peut arriver avec plein de mélanges différents. Faire une moyenne proche de 1, il faut presque uniquement des 1. C’est beaucoup plus rare.

C’est exactement l’idée du théorème central limite, ou TCL. On ne transforme pas le dé en courbe normale. Le dé reste uniforme. Ce qu’on regarde, c’est la moyenne de plusieurs dés. Plus le nombre de dés par échantillon augmente, plus les moyennes se concentrent autour de 3,5, et plus la forme ressemble à une cloche.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

n_essais = 10000
n_des = 5

# Simulation de 10 000 essais avec 5 dés par essai
lancers = np.random.randint(1, 7, size=(n_essais, n_des))
moyennes = lancers.mean(axis=1)

plt.hist(moyennes, bins=30, edgecolor="black")
plt.title("Distribution des moyennes de 5 dés")
plt.xlabel("Moyenne")
plt.ylabel("Fréquence")
plt.show()

Pour comparer visuellement la convergence, je fais souvent tourner cette variante. Elle parle tout de suite, même à des équipes pas très stats.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

n_essais = 10000
tailles = [1, 2, 5, 20]

fig, axes = plt.subplots(1, 4, figsize=(14, 4))

for ax, n_des in zip(axes, tailles):
    lancers = np.random.randint(1, 7, size=(n_essais, n_des))
    moyennes = lancers.mean(axis=1)

    ax.hist(moyennes, bins=30, edgecolor="black")
    ax.set_title(f"{n_des} dé(s)")
    ax.set_xlabel("Moyenne")

plt.tight_layout()
plt.show()

Le résultat attendu est assez net. Avec 1 dé, l’histogramme est plat. Avec 2 dés, il devient plutôt triangulaire. Avec 5 dés, la forme est déjà arrondie. Avec 20 dés, on voit une cloche beaucoup plus nette, et surtout plus resserrée autour de 3,5.

Dans le business, c’est la même logique. Dès qu’on moyenne des comportements individuels, des ventes, des durées, des paniers ou des temps de traitement, on peut voir apparaître cette mécanique d’agrégation. C’est pour ça que le TCL revient partout dès qu’on analyse des données réelles.

Une population bimodale peut-elle donner une normale ?

Oui, une population bimodale peut donner une distribution de moyennes à peu près normale, à condition que les échantillons mélangent assez d’observations des deux groupes. C’est exactement le genre de cas où le théorème central limite, ou TCL, devient visuel. Le TCL ne dit pas que les individus deviennent normaux. Il dit que les moyennes d’échantillons tendent vers une forme normale quand la taille des échantillons augmente.

Prenez des temps de visionnage. Vous avez un premier groupe qui regarde peu de contenu, disons quelques minutes. Puis un second groupe de deep scrollers, ceux qui restent longtemps, parfois très longtemps. La distribution brute a deux bosses, avec une vallée au milieu. Et cette distribution brute reste bimodale. Elle ne devient pas magique. Ce qui change, c’est la distribution des moyennes calculées sur des échantillons.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

courts = np.random.normal(loc=5, scale=2, size=5000)
longs = np.random.normal(loc=45, scale=8, size=5000)

population = np.concatenate([courts, longs])
population = population[population > 0]
np.random.shuffle(population)

moyennes = [
    np.mean(np.random.choice(population, size=40, replace=True))
    for _ in range(5000)
]

plt.figure(figsize=(12, 4))

plt.subplot(1, 2, 1)
plt.hist(population, bins=60)
plt.title("Données brutes")

plt.subplot(1, 2, 2)
plt.hist(moyennes, bins=60)
plt.title("Moyennes d'échantillons")

plt.show()

Ce que vous devez observer est assez parlant. L’histogramme brut garde ses deux pics. L’histogramme des moyennes, lui, remplit progressivement la vallée centrale et prend une forme plus proche d’une courbe normale. La taille d’échantillon joue beaucoup. Avec de petits échantillons, une moyenne peut tomber surtout sur des utilisateurs courts, ou surtout sur des deep scrollers. Avec 40 observations, le mélange devient plus stable.

Petite mise en garde, parce que je l’ai vue chez un client média. Si vos échantillons ne sont pas représentatifs, par exemple seulement des deep scrollers le soir, ou seulement des utilisateurs courts sur mobile, le TCL ne sauve pas le biais. Une belle cloche sur les moyennes ne garantit pas une vérité métier.

SituationCe qu’on voitComment l’interpréter
Population brute bimodaleDeux pics netsDeux comportements utilisateurs coexistent
Échantillons petitsMoyennes instablesUn groupe peut dominer par hasard
Échantillons moyensForme plus normaleLe mélange devient plus régulier
Échantillon biaiséCloche trompeuseLe TCL ne corrige pas un mauvais tirage

Pourquoi les revenus asymétriques se lissent ?

Les revenus asymétriques se lissent dans les moyennes parce que les valeurs extrêmes sont diluées quand elles sont agrégées avec beaucoup d’autres observations. C’est tout bête, mais c’est exactement l’intuition derrière le théorème central limite, souvent appelé TCL.

Prenez des revenus simulés avec une loi exponentielle. Cette loi donne beaucoup de petites valeurs, et quelques valeurs très élevées. La donnée brute n’a rien d’une courbe normale. Elle a une longue queue à droite, et la moyenne peut être tirée par quelques extrêmes. C’est le genre de distribution qu’on croise souvent avec des paniers moyens, des montants de commande, des délais de livraison, ou des revenus clients.

Je construirais la simulation comme ça en Python :

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

population = np.random.exponential(scale=1000, size=1_000_000)

plt.hist(population, bins=100, color="steelblue")
plt.title("Distribution brute des revenus simulés")
plt.show()

moyennes = []

for _ in range(10_000):
    echantillon = np.random.choice(population, size=50)
    moyennes.append(echantillon.mean())

plt.hist(moyennes, bins=80, color="orange")
plt.title("Distribution des moyennes d'échantillons, n=50")
plt.show()

Le mécanisme est simple. Dans un échantillon de 50, une valeur énorme peut encore pousser la moyenne. Mais elle est compensée par les 49 autres valeurs. Et quand on répète ça 10 000 fois, les moyennes vraiment extrêmes deviennent plus rares. La masse se regroupe autour de la moyenne attendue.

Pour bien le voir, je compare souvent plusieurs tailles d’échantillon :

  • Avec n=5, la distribution des moyennes reste encore assez instable.
  • Avec n=20, elle commence à devenir plus symétrique.
  • Avec n=50, elle ressemble déjà beaucoup plus à une cloche.
  • Avec n=200, elle devient plus concentrée autour de la vraie moyenne.

Petite nuance importante. Si la distribution a des queues très lourdes, ou une variance infinie, le TCL classique peut ne pas s’appliquer de la même manière. La variance, c’est grosso modo la mesure de dispersion autour de la moyenne. Dans beaucoup de cas data courants avec une variance finie, l’intuition reste très utile.

Dans la vraie vie, je regarde toujours la distribution brute avant de faire confiance à une moyenne. Une moyenne peut être statistiquement pratique, mais métierement trompeuse. Un client peut avoir un panier moyen “correct” uniquement parce que trois commandes énormes cachent une majorité de petits achats.

Quand peut-on l’utiliser sans se tromper ?

On peut utiliser le théorème central limite quand on analyse des moyennes d’échantillons raisonnablement indépendants, avec une taille suffisante et une variance qui reste maîtrisée. Variance, ça veut juste dire à quel point les valeurs partent dans tous les sens autour de la moyenne. Plus elle explose, plus l’intuition devient fragile.

Le TCL aide à comprendre pourquoi les intervalles de confiance, les tests A/B et beaucoup d’estimations fonctionnent avec des moyennes. Il dit en gros que les moyennes d’échantillons finissent souvent par suivre une forme proche d’une loi normale, même si la donnée brute ne l’est pas. Mais il ne remplace pas le contrôle des données. C’est là que je vois souvent des erreurs chez des clients. Ils ont beaucoup de lignes, donc ils pensent que tout est solide. Un gros volume ne corrige pas un mauvais plan de collecte.

Les trois preuves visuelles deviennent des règles très simples à appliquer.

  • Regarder la distribution brute avant de faire confiance à la moyenne.
  • Faire varier la taille d’échantillon pour voir à partir de quand les moyennes se stabilisent.
  • Surveiller les valeurs extrêmes, parce qu’elles peuvent dominer la moyenne.

Avant d’utiliser cette intuition, je vérifie toujours quelques points. Est-ce que l’échantillon est assez grand. Est-ce qu’il y a des valeurs absurdes ou très rares. Est-ce que l’échantillonnage est biaisé. Est-ce que les observations sont vraiment comparables. Un panier moyen entre nouveaux clients et clients fidèles, ce n’est pas toujours la même histoire. Un revenu moyen entre pays, métiers ou segments très différents, pareil.

Un échantillon de 40 peut suffire sur des temps passés modérément dispersés, ou sur un taux moyen par segment assez stable. Ça devient plus fragile avec des revenus ultra-asymétriques, des paniers moyens tirés par quelques très gros acheteurs, ou des comportements très segmentés. Dans ces cas-là, la moyenne existe, mais elle raconte parfois une histoire trop propre.

Avec Python, mon réflexe est simple. Avant de débattre pendant une heure, je simule. Je trace la donnée brute, je trace les moyennes d’échantillons, je fais varier la taille n, et je regarde si l’intuition normale tient. C’est rapide, visuel, et ça évite beaucoup de faux débats.

SituationEst-ce que le TCL aidePoint de vigilance
Dés uniformesOui, très bienLa taille d’échantillon doit quand même être suffisante.
Population bimodaleOui, souventLa moyenne peut cacher deux groupes très différents.
Revenus asymétriquesOui, mais avec prudenceLes très hauts revenus peuvent tirer toute la moyenne.
Échantillon biaiséNon, pas vraimentLe TCL ne répare pas une mauvaise collecte.
Valeurs extrêmes massivesFragileIl faut tester la sensibilité ou utiliser d’autres indicateurs.

Et si je devais retenir une seule chose ?

Le théorème central limite devient beaucoup plus simple quand on le voit tourner. Un dé seul reste uniforme, mais les moyennes de plusieurs dés font apparaître une cloche. Une population avec deux groupes garde ses deux bosses, mais ses moyennes d’échantillons deviennent plus régulières. Des revenus très asymétriques restent asymétriques, mais leurs moyennes se stabilisent quand n augmente. Le point clé, c’est ça : on parle de la distribution des moyennes, pas des données brutes. Si vous gardez cette distinction en tête, vous interprétez mieux vos analyses, vos tests et vos décisions data.

FAQ

  • Qu’est-ce que le théorème central limite explique simplement ?
    Il explique que les moyennes de nombreux échantillons tendent souvent vers une distribution normale, même si les données de départ ne sont pas normales. Le point important, c’est qu’on parle des moyennes d’échantillons, pas des observations individuelles.
  • Est-ce que toutes les distributions deviennent normales ?
    Non. Les données brutes ne deviennent pas normales par magie. Une distribution uniforme, bimodale ou asymétrique peut rester comme elle est. Ce qui devient souvent proche d’une normale, c’est la distribution des moyennes calculées sur beaucoup d’échantillons.
  • Quelle taille d’échantillon faut-il pour appliquer le TCL ?
    Il n’y a pas un chiffre universel. Plus la distribution de départ est propre et peu extrême, plus la convergence peut être rapide. Avec des données très asymétriques ou très dispersées, il faut souvent des échantillons plus grands. C’est pour ça que j’aime simuler et regarder les graphiques.
  • Pourquoi utiliser Python pour comprendre le théorème central limite ?
    Parce que Python permet de voir le phénomène directement. On génère des données, on tire des échantillons, on calcule des moyennes, puis on trace les histogrammes. En quelques lignes, on comprend mieux qu’avec une formule isolée.
  • Le TCL suffit-il pour prendre une bonne décision data ?
    Non. Il aide à raisonner sur les moyennes, les intervalles de confiance et les tests, mais il ne corrige pas un échantillon biaisé, une mauvaise collecte ou des valeurs extrêmes mal comprises. Je m’en sers comme un outil, pas comme une excuse pour arrêter de regarder les données.

 

 

A propos de l’auteur

Je suis Franck Scandolera, expert et formateur en tracking avancé server-side, Analytics Engineering, automatisation No/Low Code avec n8n, IA appliquée aux entreprises et SEO/GEO. J’accompagne des équipes data, marketing et produit chez Logis Hôtel, Yelloh Village, BazarChic, la Fédération Française de Football, Texdecor et d’autres. Je dirige l’agence webAnalyste et l’organisme Formations Analytics. Si vous voulez fiabiliser vos analyses, automatiser vos workflows ou intégrer l’IA sans bricolage, contactez-moi.

Retour en haut
Formations Analytics