# Statistiques pour la Data Science en 2026 : Probabilités, Tests d'Hypothèses et Questions d'Entretien > Guide complet sur les statistiques pour les entretiens data science : distributions de probabilités, tests d'hypothèses, p-values et questions fréquentes des recruteurs. - Published: 2026-08-21 - Updated: 2026-08-21 - Author: Anthony Fillion-Maillet - Reading time: 5 min --- Les statistiques constituent le socle mathématique de tout poste en data science. Les recruteurs des entreprises comme Google, Meta ou Netflix évaluent le raisonnement statistique car il distingue les candidats capables de construire des modèles de ceux qui comprennent pourquoi ces modèles fonctionnent. > **Ce que recherchent les recruteurs** > > Les questions de statistiques évaluent trois compétences : traduire des problèmes métier en cadres statistiques, choisir le test approprié pour les données, et interpréter les résultats sans tirer de conclusions hâtives. ## Les Distributions de Probabilités Essentielles en Data Science Les distributions de probabilités décrivent comment les points de données se répartissent sur les valeurs possibles. Les recruteurs attendent une maîtrise de ces distributions car elles sous-tendent l'échantillonnage, les tests A/B et les hypothèses des modèles. La **distribution normale** (gaussienne) apparaît partout : erreurs de mesure, taille, scores de tests. Sa courbe en cloche est centrée sur la moyenne, avec 68% des données dans un écart-type, 95% dans deux. Quand la taille de l'échantillon dépasse 30, le Théorème Central Limite garantit que les moyennes d'échantillon suivent une distribution normale quelle que soit la forme de la population d'origine. La **distribution binomiale** modélise les essais succès/échec. Les taux de clics, les événements de conversion et les contrôles qualité passé/échoué suivent des schémas binomiaux. Pour n essais avec une probabilité p de succès, l'espérance est np et la variance est np(1-p). La **distribution de Poisson** compte les événements rares sur des intervalles fixes : visites de site par minute, défauts par lot, appels par heure. Son unique paramètre λ représente à la fois la moyenne et la variance. Quand les événements se produisent indépendamment à un taux moyen constant, Poisson s'applique. ```python # distributions_demo.py import numpy as np from scipy import stats # Normal: customer spend follows N(μ=50, σ=15) normal_samples = stats.norm.rvs(loc=50, scale=15, size=1000) prob_above_80 = 1 - stats.norm.cdf(80, loc=50, scale=15) # P(X > 80) # Binomial: 100 users, 5% conversion rate binom_samples = stats.binom.rvs(n=100, p=0.05, size=1000) prob_at_least_10 = 1 - stats.binom.cdf(9, n=100, p=0.05) # P(X >= 10) # Poisson: 3 support tickets per hour on average poisson_samples = stats.poisson.rvs(mu=3, size=1000) prob_zero_tickets = stats.poisson.pmf(0, mu=3) # P(X = 0) ``` Ces trois distributions couvrent la plupart des scénarios pratiques. Les recruteurs demandent souvent quelle distribution correspond à un contexte métier donné, il faut donc s'exercer à associer les problèmes réels au bon modèle. ## Tests d'Hypothèses : Le Cadre Derrière les Tests A/B Les tests d'hypothèses fournissent une structure formelle pour prendre des décisions à partir des données. Le cadre commence par une hypothèse nulle (H₀) représentant l'absence d'effet ou de différence, et une hypothèse alternative (H₁) représentant ce que l'expérience cherche à détecter. Une hypothèse nulle typique de test A/B stipule : « La nouvelle fonctionnalité n'a pas d'effet sur le taux de conversion. » L'alternative affirme qu'un effet existe. Le test calcule la probabilité d'observer les données si l'hypothèse nulle était vraie. La **p-value** quantifie cette probabilité. Une p-value de 0.03 signifie qu'il y a 3% de chance d'observer des résultats aussi extrêmes si l'hypothèse nulle est vraie. Quand la p-value tombe en dessous du seuil de significativité (généralement α = 0.05), l'hypothèse nulle est rejetée. ```python # ab_test_analysis.py import numpy as np from scipy import stats # A/B test data: control vs treatment conversion rates control_conversions = 120 control_visitors = 2000 treatment_conversions = 145 treatment_visitors = 2000 # Proportions p_control = control_conversions / control_visitors # 0.060 p_treatment = treatment_conversions / treatment_visitors # 0.0725 # Pooled proportion under null hypothesis p_pooled = (control_conversions + treatment_conversions) / (control_visitors + treatment_visitors) # Standard error se = np.sqrt(p_pooled * (1 - p_pooled) * (1/control_visitors + 1/treatment_visitors)) # Z-statistic z_stat = (p_treatment - p_control) / se # Two-tailed p-value p_value = 2 * (1 - stats.norm.cdf(abs(z_stat))) print(f"Z-statistic: {z_stat:.3f}") # Z-statistic: 1.681 print(f"P-value: {p_value:.4f}") # P-value: 0.0928 ``` Avec une p-value de 0.0928, ce test ne rejette pas l'hypothèse nulle à α = 0.05. La différence observée pourrait être une variation aléatoire. Plus de données ou un effet plus important seraient nécessaires pour atteindre la significativité statistique. ## Erreurs de Type I et Type II : Les Compromis Explorés en Entretien Les tests statistiques équilibrent deux types d'erreurs. Une **erreur de Type I** (faux positif) survient quand on rejette une hypothèse nulle vraie. Une **erreur de Type II** (faux négatif) survient quand on ne rejette pas une hypothèse nulle fausse. Le seuil de significativité α contrôle directement la probabilité d'erreur de Type I. Fixer α = 0.05 signifie accepter 5% de chance de faux positifs. Abaisser α à 0.01 réduit les faux positifs mais augmente les faux négatifs. La **puissance statistique** (1 - β) mesure la probabilité de rejeter correctement une hypothèse nulle fausse. La puissance dépend de la taille d'effet, de la taille d'échantillon et du seuil de significativité. Le standard industriel vise 80% de puissance, soit 20% de chance de manquer des effets réels. > **Piège d'entretien** > > Les candidats confondent souvent « pas de différence significative » avec « aucune différence n'existe ». Ne pas rejeter l'hypothèse nulle ne prouve pas qu'elle est vraie. Le test peut manquer de puissance pour détecter un effet petit mais réel. Les calculs de taille d'échantillon équilibrent ces préoccupations. Pour un test A/B visant une augmentation de 2% du taux de conversion (de 5% à 7%) avec 80% de puissance et α = 0.05 : ```python # sample_size_calculation.py from statsmodels.stats.power import zt_ind_solve_power # Baseline conversion: 5%, expected lift: 2 percentage points baseline = 0.05 expected = 0.07 effect_size = (expected - baseline) / np.sqrt(baseline * (1 - baseline)) # Cohen's h # Required sample size per group n_per_group = zt_ind_solve_power( effect_size=effect_size, alpha=0.05, power=0.80, alternative='two-sided' ) print(f"Sample size per group: {int(np.ceil(n_per_group))}") # ~1,570 per group ``` Les tests sous-dimensionnés gaspillent des ressources en exécutant des expériences incapables de détecter des effets réalistes. ## Intervalles de Confiance : Quantifier l'Incertitude Un intervalle de confiance à 95% signifie : si le même processus d'échantillonnage était répété plusieurs fois, 95% des intervalles construits contiendraient le vrai paramètre. Les intervalles de confiance communiquent mieux l'incertitude que les estimations ponctuelles seules. Pour les moyennes avec variance de population connue, l'intervalle utilise la distribution z. Pour les petits échantillons ou une variance inconnue, la distribution t s'applique. La distribution t a des queues plus lourdes que la normale, produisant des intervalles plus larges qui tiennent compte de l'incertitude supplémentaire. ```python # confidence_intervals.py import numpy as np from scipy import stats # Sample data: response times in milliseconds response_times = np.array([245, 312, 278, 299, 256, 334, 287, 301, 265, 289]) n = len(response_times) mean = np.mean(response_times) # 286.6 std_err = stats.sem(response_times) # Standard error of the mean # 95% confidence interval using t-distribution (df = n-1) t_critical = stats.t.ppf(0.975, df=n-1) margin_of_error = t_critical * std_err ci_lower = mean - margin_of_error ci_upper = mean + margin_of_error print(f"Mean: {mean:.1f}ms") # Mean: 286.6ms print(f"95% CI: [{ci_lower:.1f}, {ci_upper:.1f}]ms") # 95% CI: [265.4, 307.8]ms ``` Des intervalles plus étroits indiquent des estimations plus précises. La taille d'échantillon détermine la précision : quadrupler n divise la marge d'erreur par deux. ## Bayésien vs Fréquentiste : Questions d'Entretien sur la Philosophie Statistique Les recruteurs sondent parfois la compréhension des paradigmes statistiques concurrents. Les **statistiques fréquentistes** traitent la probabilité comme une fréquence à long terme : les paramètres sont fixes, et les données varient à travers des expériences répétées. Les p-values et intervalles de confiance viennent de cette tradition. Les **statistiques bayésiennes** traitent la probabilité comme un degré de croyance : la connaissance a priori se combine aux données pour produire des croyances a posteriori. Le cadre permet d'incorporer l'expertise du domaine et produit directement des énoncés de probabilité sur les paramètres. Les tests A/B utilisent de plus en plus les méthodes bayésiennes car elles répondent à la question que les parties prenantes posent réellement : « Quelle est la probabilité que le traitement B surpasse le traitement A ? » plutôt que « À quel point ces données sont-elles surprenantes s'il n'y avait pas de différence ? » ```python # bayesian_ab_test.py import numpy as np from scipy import stats # Prior: Beta(1, 1) = uniform prior for conversion rate # Posterior: Beta(alpha + successes, beta + failures) control_successes, control_failures = 120, 1880 treatment_successes, treatment_failures = 145, 1855 # Posterior distributions posterior_control = stats.beta(1 + control_successes, 1 + control_failures) posterior_treatment = stats.beta(1 + treatment_successes, 1 + treatment_failures) # Monte Carlo estimation: P(treatment > control) samples_control = posterior_control.rvs(100000) samples_treatment = posterior_treatment.rvs(100000) prob_treatment_better = np.mean(samples_treatment > samples_control) print(f"P(treatment > control): {prob_treatment_better:.2%}") # ~95% ``` Les résultats bayésiens communiquent directement : « Il y a 95% de probabilité que le taux de conversion du traitement dépasse celui du contrôle. » Les résultats fréquentistes nécessitent une interprétation plus prudente. ## Questions d'Entretien Fréquentes sur l'Inférence Statistique Ces questions apparaissent fréquemment dans les entretiens data science des entreprises tech. Chacune teste un concept statistique spécifique. **« Expliquez le Théorème Central Limite et pourquoi il est important. »** Le TCL stipule que les moyennes d'échantillon de toute population (avec variance finie) approchent une distribution normale quand la taille d'échantillon augmente. Cela compte car les hypothèses de normalité dans les tests d'hypothèses tiennent pour les grands échantillons quelle que soit la distribution sous-jacente. Des tailles d'échantillon de 30+ suffisent généralement. **« Qu'est-ce que le p-hacking et comment le prévenir ? »** Le p-hacking gonfle les taux de faux positifs en testant de multiples hypothèses jusqu'à trouver une significativité, ou en arrêtant la collecte de données quand les résultats deviennent significatifs. Stratégies de prévention : pré-enregistrer les plans d'analyse, appliquer des corrections pour comparaisons multiples (Bonferroni, FDR), et fixer les tailles d'échantillon avant de collecter les données. **« Quand utiliser un test t vs un test de Mann-Whitney U ? »** Le test t suppose des données normalement distribuées (ou de grands échantillons via le TCL) et compare les moyennes. [Mann-Whitney U](https://en.wikipedia.org/wiki/Mann%E2%80%93Whitney_U_test) est une alternative non-paramétrique qui compare les distributions sans hypothèses de normalité. Utiliser Mann-Whitney pour les petits échantillons avec des données clairement non-normales ou pour comparer des mesures ordinales. **« Comment gérer les comparaisons multiples dans les tests A/B ? »** Tester de multiples variantes gonfle l'erreur de Type I. Avec 20 comparaisons à α = 0.05, la probabilité d'au moins un faux positif dépasse 60%. La correction de Bonferroni divise α par le nombre de tests. La procédure de Benjamini-Hochberg contrôle le taux de fausses découvertes tout en maintenant plus de puissance que Bonferroni. ## Le Paradoxe de Simpson : Un Sujet Favori en Entretien Le [paradoxe de Simpson](https://en.wikipedia.org/wiki/Simpson%27s_paradox) survient quand les tendances dans les données agrégées s'inversent au niveau des sous-groupes. Les recruteurs adorent ce sujet car il teste le raisonnement causal, pas seulement la mécanique statistique. Un exemple classique : l'Hôpital A a un taux de mortalité global plus élevé que l'Hôpital B. Mais l'Hôpital A a une mortalité plus basse pour les cas légers et sévères. Le paradoxe survient car l'Hôpital A traite plus de cas sévères, qui ont une mortalité plus élevée quelle que soit la qualité de l'hôpital. ```python # simpsons_paradox.py import pandas as pd # Hospital mortality data data = { 'Hospital': ['A', 'A', 'B', 'B'], 'Severity': ['Mild', 'Severe', 'Mild', 'Severe'], 'Patients': [200, 800, 800, 200], 'Deaths': [10, 160, 48, 50] } df = pd.DataFrame(data) df['Mortality'] = df['Deaths'] / df['Patients'] # Subgroup mortality print(df[['Hospital', 'Severity', 'Mortality']]) # Hospital A: Mild 5%, Severe 20% # Hospital B: Mild 6%, Severe 25% # Aggregate mortality agg = df.groupby('Hospital').agg({'Deaths': 'sum', 'Patients': 'sum'}) agg['Mortality'] = agg['Deaths'] / agg['Patients'] print(agg['Mortality']) # Hospital A: 17%, Hospital B: 9.8% ``` La résolution nécessite d'identifier la variable confondante (sévérité) et d'analyser les sous-groupes séparément. L'analyse agrégée induit en erreur quand les proportions de sous-groupes diffèrent. ## Concepts Statistiques pour le Feature Engineering Les connaissances statistiques améliorent directement le feature engineering. Comprendre les distributions guide les transformations ; comprendre les relations guide la création de features. L'**asymétrie** (skewness) mesure l'asymétrie de la distribution. Les données asymétriques à droite (revenus, prix) bénéficient des transformations logarithmiques qui normalisent la distribution et améliorent les performances du modèle. Les données asymétriques à gauche utilisent des transformations carrées ou exponentielles. La **corrélation** quantifie les relations linéaires. La corrélation de Pearson suppose la normalité et la linéarité. La corrélation de Spearman gère les relations non-linéaires monotones. Les features hautement corrélées causent la multicolinéarité dans les modèles linéaires, donc l'une est généralement supprimée. Les **valeurs aberrantes** affectent les moyennes et écarts-types de manière disproportionnée. Les statistiques robustes (médiane, IQR) résistent à l'influence des valeurs aberrantes. Décision : supprimer, plafonner ou transformer les valeurs aberrantes selon qu'elles représentent des erreurs ou des valeurs extrêmes authentiques. Pour plus d'informations sur l'application de ces concepts aux modèles de machine learning, consultez le [guide d'entretien sur le feature engineering](/blog/data-science/feature-engineering-machine-learning-techniques-interview-2026) et explorez le [module de pratique sur les statistiques inférentielles](/technologies/data-science/interview-questions/statistics-inferential). ## Ce Qui Distingue les Candidats Performants en Questions de Statistiques La compétence statistique dans les entretiens data science requiert plus que des définitions de manuel. Les candidats performants démontrent ces capacités : - **Connecter les statistiques aux résultats métier** : formuler les résultats de tests A/B en termes d'impact sur le revenu ou l'engagement utilisateur, pas seulement en p-values - **Connaître les hypothèses** : chaque test a des conditions (indépendance, normalité, variance égale) et les candidats doivent indiquer quand ces conditions pourraient échouer - **Quantifier l'incertitude** : les estimations ponctuelles sans intervalles de confiance ou intervalles crédibles laissent les parties prenantes dans le flou sur la fiabilité - **Reconnaître les limites de la causalité** : les données observationnelles montrent la corrélation, et les candidats doivent articuler quel design expérimental établirait la causalité - **Choisir le bon test** : faire correspondre le type de données (continue vs catégorielle), la taille d'échantillon et la question de recherche à la méthode statistique appropriée - **Communiquer les résultats clairement** : traduire les conclusions statistiques en recommandations actionnables que les parties prenantes non-techniques peuvent comprendre et sur lesquelles agir --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/fr/blog/data-science/statistics-data-science-probability-hypothesis-testing-interview-2026