Accéder au contenu principal

Test de normalité : comment vérifier si vos données suivent une loi normale

Découvrez ce qu'est un test de normalité, pourquoi il compte, et comment utiliser les tests courants (Shapiro-Wilk, Kolmogorov-Smirnov) et des méthodes visuelles pour contrôler vos données + exemples en Python et R.
Actualisé 4 mai 2026  · 14 min lire

Vous est-il déjà arrivé de lancer un test t, d'obtenir une belle p-value, puis de réaliser que vous n'aviez jamais vérifié si vos données étaient normalement distribuées ?

Les tests statistiques ne vous préviennent pas quand leurs hypothèses sont violées. Ils se contentent de renvoyer une valeur. Or des tests comme les tests t et l'ANOVA supposent que vos données suivent une loi normale. Si ce n'est pas le cas, vous bâtissez vos conclusions sur des bases fragiles.

Les tests de normalité permettent de vérifier cette hypothèse. Il existe des approches visuelles et statistiques. Savoir lesquelles utiliser – et comment lire les résultats – vous permet de défendre vos conclusions en toute confiance.

Dans cet article, je vous présente les méthodes visuelles et statistiques les plus courantes pour contrôler la normalité, je vous montre comment les exécuter en Python et en R, et quoi faire quand vos données ne passent pas le test.

Ce que signifie une loi normale en pratique

Vous avez sûrement déjà vu la courbe en cloche – voici ce qu'elle implique vraiment pour vos données.

Une distribution normale se caractérise par une concentration de la plupart des valeurs autour du centre, avec de moins en moins de valeurs à mesure qu'on s'éloigne dans un sens ou dans l'autre. Représentée graphiquement, elle forme une courbe symétrique en cloche : la partie gauche est le miroir de la partie droite.

Représentation d'une distribution normale

Représentation d'une distribution normale

La spécificité de la loi normale, c'est que la moyenne, la médiane et le mode coïfncident au même point – au centre de la cloche. Aucune asymétrie vers la gauche ou la droite. En d'autres termes, les données sont équilibrées.

On retrouve très souvent cette forme dans les mesures du monde réel : taille humaine, tension artérielle, tolérances de fabrication, notes d'examen… Lorsque l'échantillon est suffisamment grand, ces données tendent à suivre une distribution normale. La variabilité naturelle des systèmes biologiques et physiques génère fréquemment cette forme.

Cela dit, toutes les données ne se comportent pas ainsi. Les revenus sont asymétriques à droite. Les temps de réponse des sites web présentent de longues queues.

Dans la pratique, les choses peuvent très mal tourner si vous supposez la normalité sans vérification.

Pourquoi tester la normalité est essentiel

Le problème si vous ne vérifiez pas la normalité, c'est que la plupart des tests statistiques courants – tests t, ANOVA – sont des tests paramétriques.

Autrement dit, ils reposent sur des hypothèses concernant la distribution de vos données. La normalité en fait partie. Quand cette hypothèse est violée, les fondements mathématiques du test le sont également. Vous obtiendrez toujours un résultat, mais il peut vous mener à de mauvaises conclusions.

Les tests paramétriques formulent des hypothèses mathématiques sur la population d'où provient votre échantillon. Quand ces hypothèses tiennent, ces tests sont utiles et précis. Quand elles ne tiennent pas, vos p-values deviennent peu fiables et vous ne pouvez plus conclure correctement.

C'est là que les tests non paramétriques entrent en jeu.

Des tests comme Mann-Whitney U ou Kruskal-Wallis ne supposent pas la normalité – ils travaillent sur les rangs plutôt que sur les valeurs brutes. Ils sont plus flexibles, mais aussi moins pertinents quand vos données sont normales. Passer à ces tests sans raison n'est donc pas la solution.

L'erreur récurrente chez les débutants en data science, c'est de sauter complètement cette vérification.

Tester la normalité prend quelques lignes de code. Ne pas tester, c'est faire confiance à vos données – ou ne pas y penser du tout.

Méthodes visuelles pour vérifier la normalité

Avant tout test formel, tracez vos données. Les visuels vous en diront déjà beaucoup.

Histogramme

Un histogramme révèle la forme de votre distribution.

Exemple d'histogramme

Exemple d'histogramme

Si vos données sont normales, l'histogramme ressemble à une cloche : haut au centre, qui s'affine symétriquement de chaque côté. Soyez attentif(ve) à l'asymétrie : une longue queue à droite indique une asymétrie positive, à gauche une asymétrie négative. Dans les deux cas, c'est un signe de non-normalité possible.

Le souci avec les histogrammes, c'est que leur forme dépend de la taille des classes :

  • Trop peu de classes, et la distribution paraît aplatie
  • Trop de classes, et elle devient « dentelée »

Testez toujours plusieurs tailles de classes avant de conclure.

Q-Q plot

Un Q-Q plot (quantile-quantile) compare les quantiles de vos données à ceux d'une loi normale théorique.

Exemple de Q-Q plot

Exemple de Q-Q plot

Si vos données sont normales, les points s'alignent le long d'une diagonale. Les écarts à cette ligne indiquent où la normalité se dégrade. Des points qui se courbent vers le haut aux extrémités suggèrent des queues lourdes. Une forme en S traduit une asymétrie.

Les Q-Q plots sont plus précis que les histogrammes pour déceler des écarts subtils à la normalité – notamment dans les queues, souvent mal captées par les histogrammes.

Boîte à moustaches

Une boîte à moustaches affiche en un coup d'œil la médiane, la dispersion et les valeurs aberrantes.

Exemple de boîte à moustaches

Avec une distribution normale, la médiane est approximativement au centre de la boîte, et les moustaches s'étendent de manière équilibrée. Si la médiane est décalée ou si une moustache est nettement plus longue, il y a asymétrie. Les points au-delà des moustaches sont des valeurs aberrantes.

Le problème général des visuels, c'est leur subjectivité. Deux personnes peuvent voir le même histogramme et ne pas être d'accord. Utilisez-les pour vous faire une idée, puis confirmez avec un test formel.

Tests de normalité fréquents en statistique

Il n'existe pas un test de normalité idéal en toute situation. Le bon choix dépend de la taille de votre échantillon et de ce que vous cherchez à détecter.

Test de Shapiro-Wilk

Le test de Shapiro-Wilk est la référence pour les petits à moyens échantillons, jusqu'à quelques centaines d'observations.

Il évalue la proximité de vos données avec une loi normale en comparant les valeurs observées à ce que l'on attendrait si elles étaient normales. Il est très utilisé, bien compris et disponible dans toutes les principales bibliothèques statistiques. Pour la plupart des analystes, c'est le premier test à envisager.

Sa principale limite : il devient trop sensible sur de grands échantillons, signalant des écarts minuscules et sans portée pratique comme statistiquement significatifs.

Test de Kolmogorov-Smirnov

Le test de Kolmogorov-Smirnov (KS) compare la distribution cumulée de votre échantillon à une distribution théorique – ici, la normale.

Plus général que Shapiro-Wilk, il permet de tester contre n'importe quelle distribution, pas seulement la normale. Il est cependant moins puissant pour la normalité, donc moins apte à déceler des écarts subtils. Il exige aussi de spécifier les paramètres de la distribution à l'avance, ce qui peut biaiser si vous les estimez avec ces mêmes données.

Utilisez-le pour une vérification rapide et générale – pas comme test principal de normalité.

Test d'Anderson-Darling

Le test d'Anderson-Darling est une variante du KS, avec une différence clé : il accorde plus de poids aux queues de la distribution.

Il détecte donc mieux les écarts qui apparaissent aux extrêmes – queues lourdes, valeurs aberrantes, comportements non normaux que le KS pourrait manquer. Si votre cas d'usage est sensible au comportement en queue, Anderson-Darling est un bon choix.

Test de D'Agostino-Pearson

Le test de D'Agostino-Pearson adopte une autre approche.

Plutôt que de comparer directement des distributions, il mesure deux propriétés : l'asymétrie (skewness) et la curtose (poids des queues).

Il combine les deux en une statistique de test unique. Il permet ainsi d'identifier pourquoi vos données pourraient ne pas être normales – pas seulement si elles le sont. Il fonctionne mieux avec de grands échantillons, où les estimations d'asymétrie et de curtose sont fiables.

Test de Jarque-Bera

Le test de Jarque-Bera utilise également l'asymétrie et la curtose, à l'instar de D'Agostino-Pearson.

Il est courant en économétrie et en séries temporelles. Comme D'Agostino-Pearson, il nécessite un échantillon suffisamment grand pour être fiable. Sur de petits échantillons, il l'est nettement moins. Si vous travaillez en finance ou en économie, vous le croiserez souvent.

En résumé, commencez par Shapiro-Wilk pour les petits échantillons et associez-le à un Q-Q plot. Utilisez Anderson-Darling quand les queues comptent, et D'Agostino-Pearson si vous voulez comprendre la nature de l'écart.

Comment interpréter les résultats d'un test de normalité

Tout test de normalité est un test d'hypothèse.

L'hypothèse nulle d'un test de normalité stipule que vos données suivent une loi normale. Le test demande alors : au vu des données, quelle est la probabilité que cette hypothèse soit vraie ?

La réponse revient sous forme de p-value :

  • p > 0,05 – vous n'avez pas assez d'éléments pour rejeter la normalité. Supposés normales, les données permettent d'utiliser des tests paramétriques
  • p < 0,05 – l'écart à la normalité est statistiquement détectable. Rejetez l'hypothèse de normalité

Simple en apparence, mais source de nombreuses erreurs.

Une p-value faible ne dit pas à quel point vos données sont non normales – seulement qu'un écart a été détecté. Avec de grands échantillons, les tests de normalité deviennent très sensibles et signalent des écarts si minimes qu'ils n'ont aucun impact pratique.

Le problème inverse existe aussi. Avec de petits échantillons, des données visiblement asymétriques peuvent donner p > 0,05 car le test manque de puissance pour détecter l'écart.

La significativité statistique n'est pas la significativité pratique.

La p-value vous dit s'il existe un écart à la normalité. Elle ne dit pas si cet écart compte pour votre analyse. Associez toujours le résultat à un Q-Q plot : si les points suivent bien la ligne, vos données sont probablement suffisamment normales, indépendamment de la p-value.

Tests de normalité en Python

Le module scipy.stats de Python contient tout le nécessaire pour exécuter des tests de normalité en quelques lignes.

Dans tous les exemples ci-dessous, j'utilise le même jeu de données : 100 échantillons tirés d'une loi normale – vous pouvez exécuter le code et suivre.

import numpy as np
from scipy import stats

np.random.seed(42)
data = np.random.normal(loc=0, scale=1, size=100)

Test de Shapiro-Wilk

Utilisez shapiro() en premier recours, surtout avec de petits jeux de données.

stat, p_value = stats.shapiro(data)
print(f"Statistic: {stat:.4f}, p-value: {p_value:.4f}")

Voici la sortie :

Sortie d'un test de Shapiro-Wilk sous Python

Sortie d'un test de Shapiro-Wilk sous Python

La p-value est bien au-dessus de 0,05, nous ne rejetons donc pas la normalité. Les données semblent normales – logique, puisqu'elles ont été générées selon une loi normale.

Test de Kolmogorov-Smirnov

kstest() compare votre échantillon à une distribution nommée. Pour la normalité, passez "norm" avec la moyenne et l'écart type de l'échantillon.

stat, p_value = stats.kstest(data, 'norm', args=(data.mean(), data.std()))
print(f"Statistic: {stat:.4f}, p-value: {p_value:.4f}")

Sortie d'un test de Kolmogorov-Smirnov sous Python

Sortie d'un test de Kolmogorov-Smirnov sous Python

Là encore, p > 0,05 : rien à signaler contre la normalité.

Avec ce test sous Python, passez toujours explicitement la moyenne et l'écart type via args. Sinon, kstest() suppose une normale standard (moyenne = 0, écart type = 1), ce qui biaise les résultats si vos données ne sont pas standardisées.

Test de D'Agostino-Pearson

normaltest() vérifie la normalité en combinant asymétrie et curtose. Il est plus adapté aux grands échantillons.

stat, p_value = stats.normaltest(data)
print(f"Statistic: {stat:.4f}, p-value: {p_value:.4f}")

Sortie d'un test de D'Agostino-Pearson sous Python

Sortie d'un test de D'Agostino-Pearson sous Python

p > 0,05 encore. Les données passent les trois tests ici, ce qui est attendu. En pratique, il arrive que ces tests divergent, surtout autour du seuil de 0,05. Dans ce cas, fiez-vous à votre Q-Q plot pour trancher.

Tests de normalité en R

R propose des fonctions natives pour tester la normalité. Pas besoin de packages supplémentaires pour les bases.

Comme pour Python, j'utilise partout le même jeu de données : 100 échantillons d'une loi normale.

set.seed(42)
data <- rnorm(100, mean = 0, sd = 1)

Test de Shapiro-Wilk

shapiro.test() est à privilégier pour les petits à moyens échantillons. Il suffit de lui passer votre vecteur :

shapiro.test(data)

Sortie d'un test de Shapiro-Wilk sous R

Sortie d'un test de Shapiro-Wilk sous R

p > 0,05 : pas d'élément contre la normalité. La statistique W varie de 0 à 1, une valeur proche de 1 indiquant une bonne adéquation à la loi normale.

Test de Kolmogorov-Smirnov

ks.test() compare votre échantillon à une distribution théorique. Pour la normalité, indiquez "pnorm" et passez la moyenne et l'écart type de l'échantillon.

ks.test(data, "pnorm", mean(data), sd(data))

Sortie d'un test de Kolmogorov-Smirnov sous R

Sortie d'un test de Kolmogorov-Smirnov sous R

De nouveau, p > 0,05. La même mise en garde qu'en Python s'applique : passez toujours mean(data) et sd(data). Sinon, le test prendra une normale standard, ce qui faussera si vos données ne sont pas standardisées.

Q-Q plot

Les fonctions natives qqnorm() et qqline() génèrent un Q-Q plot en deux lignes.

qqnorm(data, main = "Q-Q Plot")
qqline(data, col = "steelblue", lwd = 2)

Q-Q plot sous R

Q-Q plot sous R

qqnorm() trace les quantiles de votre échantillon contre ceux d'une normale théorique. qqline() ajoute la ligne de référence. Des points proches de la ligne indiquent un comportement normal. Des écarts aux extrémités signalent des problèmes de queues à investiguer.

Que faire si les données ne sont pas normales

Si vos données échouent au test de normalité, plusieurs options s'offrent à vous.

Transformer les données

Parfois, la solution consiste à transformer vos données pour les rapprocher d'une loi normale, puis à appliquer vos tests sur les valeurs transformées.

Transformation logarithmique : le choix le plus courant. Efficace sur les asymétries à droite – revenus, temps de réponse, mesures biologiques à longue queue à droite. La fonction en Python est np.log(data), l'équivalent R est log(data).

Transformation racine carrée : option plus douce pour une asymétrie modérée, utile si vos données contiennent des zéros (on ne peut pas prendre le log de zéro). Utilisez np.sqrt(data) en Python ou sqrt(data) en R.

Après transformation, relancez le test de normalité. Si les données transformées passent, poursuivez avec vos tests paramétriques – en gardant à l'esprit que l'interprétation se fait dans l'échelle transformée.

Utiliser des tests non paramétriques

Si la transformation ne fonctionne pas ou n'est pas pertinente, basculez vers des tests non paramétriques. Ils ne supposent pas la normalité : ils opèrent sur les rangs et non sur les valeurs brutes.

  • Test de Mann-Whitney U : alternative non paramétrique au test t pour échantillons indépendants. À utiliser pour comparer deux groupes
  • Test de Kruskal-Wallis : version non paramétrique de l'ANOVA à un facteur. À utiliser pour comparer trois groupes ou plus

Les deux sont disponibles dans scipy.stats (mannwhitneyu() et kruskal()) et dans le package de base de R (wilcox.test() et kruskal.test()).

S'appuyer sur de grands échantillons

Avec des échantillons suffisamment grands, on peut souvent relativiser la normalité.

Le théorème central limite indique qu'en grand échantillon, la distribution d'échantillonnage de la moyenne tend vers la normale – quelle que soit la distribution initiale. En pratique, les tests paramétriques restent fiables avec de grands échantillons même si les données ne sont pas parfaitement normales.

Erreurs fréquentes lors des tests de normalité

Tester la normalité est simple – vous avez vu qu'il suffit d'une ligne de code. Mais on peut s'y tromper.

Voici des erreurs courantes chez les débutants en data science :

  • Se fier uniquement aux p-values : une p-value dit s'il y a un écart détecté, pas son ampleur ni sa portée pratique. Considérer p > 0,05 comme un feu vert et p < 0,05 comme un feu rouge est trop simpliste. Associez toujours votre test à un Q-Q plot
  • Ignorer l'effet de la taille d'échantillon : avec peu d'observations, les tests de normalité peuvent manquer de vrais écarts et renvoyer p > 0,05 même si les données sont visiblement asymétriques. Avec de grands échantillons, ils deviennent si sensibles qu'ils signalent des écarts infimes et insignifiants. La taille influe sur l'interprétation de la p-value
  • Trop tester la normalité : toutes les analyses n'exigent pas de test formel. En exploratoire, un histogramme et un Q-Q plot suffisent souvent
  • Mal interpréter de légers écarts : les données réelles ne sont presque jamais parfaitement normales. Un léger écart à la ligne de référence d'un Q-Q plot, ou une p-value juste en dessous de 0,05, ne signifie pas une forte non-normalité. La question est : est-ce suffisamment normal pour le test envisagé ?

En conclusion, le test de normalité est un contrôle parmi d'autres. Utilisez-le comme un input, pas comme la vérité ultime.

Quand vous pouvez vous passer du test de normalité

Le test de normalité n'est pas toujours indispensable. Sous contrainte de temps, savoir quand l'éviter vous fait gagner du temps sans compromettre les résultats.

Grands jeux de données

Avec un échantillon important, le théorème central limite garantit que la distribution d'échantillonnage de la moyenne est approximativement normale, quelle que soit la forme des données brutes. Les tests paramétriques sont alors généralement fiables, et un test formel de normalité apporte peu.

Certaines méthodes statistiques sont aussi robustes à la non-normalité. Des techniques comme la régression linéaire tiennent souvent bien la route avec des tailles d'échantillon raisonnables et des violations modérées. (La régression linéaire suppose toutefois la normalité des résidus.)

Analyse exploratoire

Quand vous cherchez des motifs, construisez votre intuition ou sélectionnez des variables à creuser, un histogramme ou un Q-Q plot suffit. Les tests formels servent à la validation – quand vos conclusions doivent tenir la route.

Gardez en tête que les tests de normalité existent pour éviter des conclusions erronées. Si une conclusion fausse n'a pas de conséquence pratique, ou si votre méthode ne dépend pas de la normalité, le test est optionnel.

Conclusion

Tester la normalité revient à vérifier si vos hypothèses tiennent suffisamment pour faire confiance à vos résultats.

Aucun jeu de données n'est parfaitement normal. L'objectif est de comprendre le comportement de vos données et de choisir vos méthodes en conséquence. Un Q-Q plot montre où se situent les écarts. Un test formel indique s'ils sont statistiquement détectables. Ensemble, ils offrent une vision plus claire que chacun pris isolément.

Le bon test dépend du contexte. Utilisez Shapiro-Wilk pour les petits échantillons, Anderson-Darling quand les queues importent, des alternatives non paramétriques quand la normalité est hors de portée. Et parfois – avec de grands échantillons ou des méthodes robustes – aucun test du tout.

La notion de p-value vous déroute ? Lisez notre article Hypothesis Testing Made Easy pour vous assurer de les interpréter correctement.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Scientifique de données senior basé en Croatie. Rédacteur technique de premier plan avec plus de 700 articles publiés, générant plus de 10 millions de vues. Auteur du livre Machine Learning Automation with TPOT.

FAQ sur les tests de normalité

Qu'est-ce qu'un test de normalité ?

Un test de normalité est une méthode statistique qui vérifie si vos données suivent une distribution normale (gaussienne). La plupart des tests statistiques courants – comme les tests t, l'ANOVA et la régression linéaire – supposent la normalité. Vérifier cette hypothèse avant l'analyse vous aide à éviter des conclusions erronées.

Dois-je toujours tester la normalité ?

Pas toujours. Avec de grands échantillons, le théorème central limite rend les tests paramétriques fiables indépendamment de la distribution sous-jacente. En exploratoire, un histogramme rapide ou un Q-Q plot suffit généralement – les tests formels de normalité sont surtout utiles en analyse confirmatoire, quand vos conclusions doivent tenir la route.

Que faire si mes données échouent au test de normalité ?

Plusieurs options existent : vous pouvez transformer les données (log ou racine carrée), puis re-tester. Si la transformation n'aide pas, utilisez des tests non paramétriques comme Mann-Whitney U (deux groupes) ou Kruskal-Wallis (trois groupes ou plus), qui ne supposent pas la normalité.

Quelle différence entre les tests de Shapiro-Wilk et de Kolmogorov-Smirnov ?

Shapiro-Wilk est conçu spécifiquement pour la normalité et fonctionne mieux avec de petits à moyens échantillons. Kolmogorov-Smirnov est plus général – il compare un échantillon à n'importe quelle distribution théorique, pas seulement la normale – mais il est moins puissant que Shapiro-Wilk pour détecter la non-normalité subtile.

Comment interpréter un Q-Q plot pour la normalité ?

Un Q-Q plot compare les quantiles de vos données à ceux d'une loi normale théorique. Si les points suivent de près la diagonale de référence, vos données se comportent comme une normale. Des écarts aux extrémités signalent des problèmes de queues : une courbe en S indique une asymétrie, tandis que des points qui s'écartent aux deux bouts suggèrent des queues plus lourdes ou plus légères que la normale.

Sujets

Apprenez avec DataCamp

Cours

Comprendre la science des données

2 h
856.8K
Une introduction à la science des données sans codage.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Contenus associés

Tutoriel

Normalisation vs. Standardisation: comment faire la différence

Découvrez les principales différences, les applications et la mise en œuvre de la normalisation et de la standardisation dans le prétraitement des données pour l’apprentissage automatique.
Samuel Shaibu's photo

Samuel Shaibu

Tutoriel

Tableaux Python

Tableaux Python avec exemples de code. Découvrez comment créer et imprimer des tableaux à l'aide de Python NumPy dès aujourd'hui.
DataCamp Team's photo

DataCamp Team

Tutoriel

Python NaN : Quatre méthodes pour vérifier les valeurs manquantes en Python

Découvrez quatre méthodes pour détecter les valeurs NaN en Python, à l'aide de NumPy et Pandas. Apprenez les différences essentielles entre NaN et None afin de nettoyer et d'analyser efficacement les données.
Adel Nehme's photo

Adel Nehme

Tutoriel

Tutoriel et exemples sur les fonctions et méthodes des listes Python

Découvrez les fonctions et méthodes des listes Python. Veuillez suivre les exemples de code pour list() et d'autres fonctions et méthodes Python dès maintenant.
Abid Ali Awan's photo

Abid Ali Awan

Tutoriel

Séquence de Fibonacci en Python : Apprenez et explorez les techniques de codage

Veuillez découvrir le fonctionnement de la suite de Fibonacci. Veuillez explorer ses propriétés mathématiques et ses applications concrètes.
Laiba Siddiqui's photo

Laiba Siddiqui

Tutoriel

Python Switch Case Statement : Guide du débutant

Découvrez le match-case de Python : un guide sur sa syntaxe, ses applications en data science, ML, et une analyse comparative avec le switch-case traditionnel.
Matt Crabtree's photo

Matt Crabtree

Voir plusVoir plus