Menu
CoddyTech

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.

Les 1000 différences permutées de l’étude sur les polices, représentées sous forme d’histogramme. Les barres à 6,6 secondes ou au-delà, des deux côtés, sont rouges : 39 permutations, et une étiquette indique p = 39 / 1000 = 0.039

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.

challenge icon

Défi

Moyen

Une 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.

  1. 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.
  2. Affiche une ligne par colonne comme ci-dessous (écart à 2 décimales, p à 3) : differs lorsque p est inférieur à level.
  3. 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 4

Essayez 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
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Python en ligne