Tests d'hypothèse et tests statistiques en Python

Mise à jour
- Une version antérieure de cet article avait inversé les définitions des faux positifs et faux négatifs. Une erreur de Type I est un faux positif, et une erreur de Type II est un faux négatif. HTG regrette cette erreur.
Ce guide explique comment vérifier si vos résultats de données sont significatifs avec Python. Il couvre les tests usuels : t-test, régression linéaire, ANOVA et tests non paramétriques. Vous trouverez aussi une méthodologie reproductible, des checklists par rôle, un flux de décision et des exemples de code utilisables tels quels.
Important : définissez l’hypothèse nulle et le niveau de signification avant l’analyse pour éviter les biais d’interprétation.
Table des matières rapide
- Qu’est‑ce que le test d’hypothèse
- Pourquoi réaliser des tests statistiques
- t‑test (Student)
- Régression linéaire et test de pente
- ANOVA et Kruskal‑Wallis
- Tests non paramétriques (Mann‑Whitney U)
- Assomptions, puissance statistique et taille d’échantillon
- Méthodologie reproduisible pas à pas
- Contre‑exemples et limites
- Approches alternatives
- Checklists par rôle
- SOP / Playbook pour un test statistique
- Mini glossaire et FAQ
Qu’est‑ce que le test d’hypothèse
Définition en une ligne : un test d’hypothèse compare une ou plusieurs observations à une affirmation de référence (l’hypothèse nulle) pour décider si les différences observées sont plausiblement dues au hasard.
Concepts clefs, en bref :
- Hypothèse nulle (H0) : affirmation par défaut, souvent « pas d’effet » ou « pas de différence ».
- Hypothèse alternative (H1) : ce que l’on cherche à prouver.
- Niveau alpha (α) : seuil de rejet de H0, typiquement 0,05 (95 % de confiance) ou 0,01 (99 %).
- p‑valeur : probabilité d’observer des données au moins aussi extrêmes si H0 est vraie.
- Erreur de Type I : rejeter H0 alors qu’elle est vraie (faux positif).
- Erreur de Type II : accepter H0 alors qu’elle est fausse (faux négatif).
Exemple illustratif : un essai clinique où H0 = “le médicament n’a aucun effet”. Les groupes placebo et médicament sont comparés ; si p < α, on rejette H0.
Mise à jour de l’article
Date de la correction : 27/09/2025 10:54 EST par David Delony
Une version antérieure avait inversé les définitions de Type I et Type II. Rappel : Type I = faux positif ; Type II = faux négatif. Avoir une taille d’échantillon suffisante est la meilleure défense contre ces erreurs.
Pourquoi réaliser des tests statistiques
Sans test statistique, on risque d’interpréter des fluctuations aléatoires comme des résultats réels. Les tests offrent une méthode structurée pour évaluer la vraisemblance que les différences observées viennent du hasard. Ils aident aussi à :
- Mettre des chiffres sur l’incertitude
- Communiquer des résultats reproductibles
- Prendre des décisions basées sur des seuils définis
Les tests statistiques ne remplacent pas la pensée critique. Ils doivent s’inscrire dans un protocole défini avant l’analyse.
t‑test (Student)
Quand l’utiliser : comparer la moyenne d’un échantillon à une valeur connue, ou comparer les moyennes de deux échantillons indépendants quand la distribution semble approcher la normale.
Limites : nécessite que les données soient approximativement normales ou suffisamment grandes pour appliquer le théorème central limite. Si l’écart type de la population est inconnu (cas fréquent), on utilise la distribution t.
Outils en Python : NumPy pour générer ou manipuler des tableaux ; Pingouin pour les tests statistiques simples ; SciPy fournit aussi des implémentations robustes.
Exemple reproductible (génération aléatoire et t‑test) :
import numpy as np
rng = np.random.default_rng()
# petit échantillon de 15 valeurs issues d'une distribution normale
a = rng.standard_normal(15)
# Test de normalité Shapiro-Wilk via pingouin
import pingouin as pg
pg.normality(a)
# Test t : H0 = moyenne égale à 0.45
pg.ttest(a, 0.45)Interprétation fournie par Pingouin : si la p‑valeur est supérieure à α, on ne rejette pas H0. Dans l’exemple ci‑dessus, la p‑valeur était 0,99, donc on n’a pas de preuve contre H0.
Conseil pratique : toujours vérifier la normalité pour petit échantillon, et regarder aussi l’effet pratique (taille d’effet) en plus de la p‑valeur.
Régression linéaire
But : estimer la relation entre une variable indépendante et une variable dépendante, et tester si la pente est significativement différente de zéro.
Exemple concret avec Seaborn et le jeu de données tips :
import seaborn as sns
tips = sns.load_dataset('tips')
# aperçu
tips.head()
# tracer une régression
import matplotlib.pyplot as plt
sns.regplot(x='total_bill', y='tip', data=tips)
plt.show()
# régression formelle avec pingouin
pg.linear_regression(tips['tip'], tips['total_bill']).round(2)Interprétation : la méthode renvoie une t‑statistique et une p‑valeur pour la pente. Si la p‑valeur est très faible (ex. 0.0 affiché par le logiciel), on rejette H0 : la pente n’est pas nulle.
Remarque : vérifiez la linéarité et l’homoscédasticité des résidus avant d’interpréter la régression.
ANOVA (Analysis of Variance)
But : comparer les moyennes de plus de deux groupes. ANOVA teste si au moins un groupe diffère des autres.
Exemple pratique : longueur des palmes de manchots selon l’espèce avec le jeu de données penguins de Pingouin.
penguins = pg.read_dataset('penguins')
pg.anova(data=penguins, dv='flipper_length_mm', between='species').round(2)Si la p‑valeur est très faible, on conclut qu’il existe une différence entre espèces. Pour savoir quels groupes diffèrent, on complète par des tests post hoc (ex. test de Tukey).
Tests non paramétriques
Pourquoi : lorsque les hypothèses de distribution (normalité, homogénéité des variances) sont violées, les tests non paramétriques offrent des alternatives plus robustes.
Exemples :
- Mann‑Whitney U : alternative au t‑test pour deux échantillons indépendants.
- Kruskal‑Wallis : alternative non paramétrique à l’ANOVA.
Exemples de code :
a = rng.random(15)
b = rng.random(15)
pg.mwu(a, b)
# Kruskal-Wallis pour penguins
pg.kruskal(data=penguins, dv='flipper_length_mm', between='species').round(2)Interprétation : ces tests évaluent si les distributions diffèrent entre groupes sans supposer la normalité.
Assomptions, puissance statistique et taille d’échantillon
Assomptions fréquentes :
- Indépendance des observations
- Normalité (pour t‑test, ANOVA)
- Homogénéité des variances
Si une ou plusieurs hypothèses ne tiennent pas, les résultats peuvent être biaisés. Pour minimiser les erreurs :
- Planifiez α et H1 avant l’analyse.
- Choisissez la taille d’échantillon en fonction de la puissance désirée (ex. 80 %).
- Estimez la taille d’effet minimale cliniquement ou pratiquement pertinente.
Conseil : utilisez des outils de calcul de puissance (G*Power, statsmodels.stats.power en Python) pour déterminer la taille d’échantillon nécessaire.
Méthodologie reproductible pas à pas (mini‑méthodologie)
- Définir clairement la question et formuler H0 et H1.
- Choisir le test approprié en fonction des données et des hypothèses.
- Pré‑enregistrer le plan d’analyse si possible.
- Nettoyer et explorer les données (visualisations, valeurs aberrantes).
- Vérifier les assumptions du test choisi.
- Exécuter le test et rapporter p‑valeur, intervalle de confiance et taille d’effet.
- Interpréter dans le contexte métier et rapporter limites.
- Archiver le code et les versions de paquets pour reproductibilité.
Exemple de bloc de code minimal pour un workflow reproductible :
# En-tête d'un notebook reproductible
import numpy as np
import pandas as pd
import pingouin as pg
import seaborn as sns
rng = np.random.default_rng(seed=42)
# Charger / préparer les données
# data = pd.read_csv('...')
# Exemple d'analyse
sample = rng.standard_normal(30)
print(pg.normality(sample))
print(pg.ttest(sample, 0))Contre‑exemples et situations où les tests échouent
- Données corrélées temporellement (séries temporelles) : tests classiques supposent indépendance ; utiliser des méthodes spécifiques (ARIMA, tests bootstrap adaptés).
- Échantillons trop petits : faible puissance, risque élevé d’erreur de Type II.
- Multiples comparaisons non corrigées : augmente le taux de faux positifs ; appliquer des corrections (Bonferroni, Benjamini‑Hochberg).
- Données avec forte asymétrie ou valeurs aberrantes : tests non paramétriques ou transformation des données.
Approches alternatives
- Bootstrap : estimation d’intervalles de confiance sans hypothèses fortes sur la forme de la distribution.
- Tests bayésiens : fournissent des probabilités directes sur les hypothèses et permettent d’incorporer un a priori.
- Modèles mixtes (mixed models) : pour données hiérarchiques ou longitudinales.
- Méthodes de permutation : tester les effets par réarrangements aléatoires des étiquettes.
Quand préférer ces alternatives : si les assumptions classiques ne tiennent pas, si le design est complexe (mesures répétées) ou si vous souhaitez un cadre bayésien pour interprétation intuitive.
Boîte à faits rapides (fact box)
- α typique : 0,05 (95 %). 0,01 pour plus de rigueur.
- Puissance recommandée : 80 % ou 90 % selon l’enjeu.
- Taille d’effet : décrit l’ampleur du phénomène (Cohen d pour t‑test, eta² pour ANOVA).
- Test non paramétrique courant pour 2 groupes : Mann‑Whitney U.
Checklist par rôle
Data scientist
- Définir hypothèses et métriques.
- Vérifier assumptions.
- Calculer taille d’échantillon et puissance.
- Documenter code et versions.
Product manager
- Valider l’importance pratique (taille d’effet minimale).
- Confirmer le plan d’analyse avant l’expérimentation.
- Examiner les implications métier des erreurs Type I/II.
Clinicien / chercheur
- Confirmer la pertinence clinique de l’effet.
- Assurer l’éthique et la sécurité (essais cliniques).
- Impliquer un biostatisticien pour protocole et interprétation.
SOP / Playbook : conduire un test statistique
Étapes opérationnelles :
- Formuler H0/H1 et α.
- Sélectionner la statistique et le test associé.
- Préparer et nettoyer les données.
- Vérifier assumptions (tests et visualisations).
- Exécuter le test.
- Vérifier l’intervalle de confiance et la taille d’effet.
- Réaliser analyses complémentaires si nécessaire (post hoc, robustesse).
- Rédiger rapport avec code, hypothèses, résultats et limites.
Critères d’acceptation rapides :
- Code reproductible soumis.
- p‑valeur et IC publiés.
- Taille d’effet interprétée.
- Vérification des assumptions documentée.
Exemples de cas de test et critères d’acceptation
Cas : comparer un nouveau procédé à l’existant sur une métrique continue.
- Prérequis : n >= taille minimale calculée par puissance.
- Test : t‑test indépendant (ou Mann‑Whitney si non normal).
- Critère d’acceptation : p < α ET taille d’effet >= seuil métier.
Cas : relation entre prix et volume de ventes.
- Prérequis : exploration de la distribution, transformation si besoin.
- Test : régression linéaire ou modèle robuste.
- Critère : pente significative et résidus bien comportés.
Visualisation et interprétation
La visualisation aide à détecter anomalies et à communiquer. Exemples utiles :
- Boxplots et violin plots pour comparer distributions.
- Scatterplots avec ligne de régression pour relations continues.
- Diagnostic des résidus (QQ plots, résidus vs ajustés).
Flux de décision (Mermaid)
flowchart TD
A[Définir question et H0/H1] --> B{Données indépendantes ?}
B -- Non --> C[Utiliser modèles pour dépendance ou bootstrap]
B -- Oui --> D{Distribution normale ?}
D -- Oui --> E{Comparer 2 groupes ?}
D -- No --> F[Utiliser test non paramétrique]
E -- Oui --> G[Appliquer t-test]
E -- No --> H{>2 groupes ?}
H -- Oui --> I[ANOVA + post-hoc]
H -- No --> J[Régression linéaire]
G --> K[Rapporter p, IC, taille d'effet]
J --> K
I --> K
F --> K
C --> KGlossaire (une ligne chacun)
- p‑valeur : probabilité d’obtenir les données observées si H0 est vraie.
- α : seuil de rejet de H0, risque toléré de Type I.
- Taille d’effet : mesure de l’ampleur d’un effet, indépendamment de la taille de l’échantillon.
- Puissance : probabilité de détecter un effet réel (1 − probabilité de Type II).
Sécurité, confidentialité et notes GDPR
- Ne conservez pas de données personnelles identifiables sans base légale.
- Pour les analyses de santé, anonymisez et suivez les règles locales et institutionnelles.
- Documentez la provenance et la transformation des données pour audits.
FAQ
Q : Quand utiliser un test non paramétrique ?
R : Quand les données ne respectent pas la normalité, sont ordinales, ou comportent des valeurs aberrantes rendant les tests paramétriques peu fiables.
Q : Quelle est la différence entre significatif statistiquement et significatif pratiquement ?
R : Statistiquement signifie qu’un effet est improbable sous H0. Pratiquement signifie que l’effet a une importance réelle pour le métier ou la clinique.
Q : Doit‑on corriger pour comparaisons multiples ?
R : Oui, si vous réalisez plusieurs tests indépendants sur les mêmes données, appliquez une correction pour limiter les faux positifs.
Exemples supplémentaires et astuces d’implémentation
- Toujours enregistrer la seed du générateur aléatoire pour reproduire des expériences simulées.
- Stocker les versions des paquets (pingouin, seaborn, numpy, pandas) dans un fichier requirements.txt.
- Pour analyses complexes, utilisez des notebooks accompagnés d’un script d’exécution et d’un test d’intégration automatisé.
Résumé final
Les tests statistiques en Python fournissent un cadre pour décider si des différences observées sont dues au hasard. Maîtriser les tests classiques (t‑test, régression, ANOVA) et leurs alternatives non paramétriques, vérifier les assumptions et documenter un workflow reproductible sont essentiels pour des analyses fiables. Pensez aussi à la puissance, à la taille d’effet et aux conséquences métiers des erreurs de Type I et Type II.
Statistical testing in Python offers a way to make sure your data is meaningful. It only takes a second to validate your data.
Matériaux similaires
Installer et utiliser Podman sur Debian 11
Guide pratique : apt-pinning sur Debian
OptiScaler : activer FSR 4 dans n'importe quel jeu
Dansguardian + Squid NTLM sur Debian Etch
Corriger l'erreur d'installation Android sur SD