Valeurs p
Fait partie de la section Statistiques pour le ML du Journey Machine Learning de Coddy. Leçon 44 sur 64.
La valeur p transforme les permutations en un seul nombre : la proportion des écarts simulés au moins aussi grands que l’écart réel, dans les deux sens.
Dans le code, pour l’étude des polices :
real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng) # la boucle de la leçon précédente
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)Cela affiche 0.039. np.abs considère qu’un écart de -7 est aussi grand que 7 : la question est de savoir si les polices diffèrent ou non.
En dessous du seuil de significativité, souvent 0,05, le hasard est une explication peu convaincante, qu’il s’agisse d’une police ou du gain d’un modèle. Ce n’est pas une preuve : 4 permutations sur 100 ont tout de même produit ce résultat.
Défi
MoyenUne ferme arrose les fraisiers le matin ou le soir. Le code de départ répartit strawberries.csv entre morning et evening, liste columns, lit level et définit shuffled_diffs.
- Pour chaque colonne, calcule l’écart réel (moyenne du soir moins moyenne du matin), les écarts mélangés (matin en premier) et la valeur p.
- Affiche une ligne par colonne comme ci-dessous (écart à 2 décimales, p à 3) :
differslorsque p est inférieur àlevel. - Compte celles qui diffèrent.
Une autre ferme, avec un niveau 0.05 :
berries: difference -5.4, p = 0.009, differs
weight_g: difference 0.2, p = 1.0, could be chance
sweetness_brix: difference 0.46, p = 0.022, differs
leaf_spots: difference 0.6, p = 0.397, could be chance
Columns that differ: 2 of 4Essayez vous-même
import numpy as np
import pandas as pd
# Renvoie les différences obtenues par permutation lors d’un test de permutation (boucle de la leçon 43) : moyenne simulée de b moins moyenne simulée de a
def shuffled_diffs(a, b, shuffles, rng):
pooled = np.concatenate([a, b])
diffs = []
for i in range(shuffles):
shuffled = rng.permutation(pooled)
diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
return np.array(diffs)
beds = pd.read_csv("strawberries.csv")
morning = beds[beds["watering"] == "morning"]
evening = beds[beds["watering"] == "evening"]
columns = ["berries", "weight_g", "sweetness_brix", "leaf_spots"]
level = float(input())
# Ne modifiez pas les lignes ci-dessous
rng = np.random.default_rng(21)
shuffles = 1000
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Statistiques pour le ML
1Centre et dispersion
Moyenne et médianePercentiles et quartilesVariance et écart-typeÉchantillon ou population ?La valeur la plus fréquenteRécapitulatif : délais de livraison4Échantillons et populations
Population et échantillonLes moyennes d’échantillon varientLa distribution d’échantillonnageDes échantillons plus grands, moins de bruitRécapitulatif : sonder une ville2Distributions
Histogrammes de densitéFormes des donnéesLa courbe normaleLa règle des 68-95-99,7Scores zRécapitulatif : autonomie de la batterie5Valeurs aberrantes
Diagrammes en boîteLa règle de l’écart interquartileLa règle du score ZTraiter les valeurs aberrantesRécapitulatif : anomalies des capteurs8Comparer des groupes
Diagrammes en boîte par groupeDifférence entre les moyennesEst-ce dû au hasard ?Valeurs pLe test tRécapitulatif : test A/B3Les probabilités par simulation
La probabilité comme fréquenceLa loi des grands nombresSommes de désEspérance mathématiqueProbabilité conditionnelleRécapitulatif : les chances au stand de dés6Relations
Lire des nuages de pointsCorrélationMatrice de corrélationCartes thermiques de corrélationCorrélation n’est pas causalitéRécapitulatif : glace et soleil9Mise à l’échelle des caractéristiques
Pourquoi mettre les caractéristiques à l’échelleMise à l’échelle Min-MaxStandardisationStandardScalerRécapitulatif : partenaires d’escaladeEntraînez-vous par vous-même : Compilateur Python en ligne