Menu
CoddyTech

p-Werte

Teil des Abschnitts Statistik für ML der Machine Learning-Journey von Coddy. Lektion 44 von 64.

Der p-Wert macht aus den Durchmischungen eine Zahl: den Anteil der fiktiven Abstände, die mindestens so groß sind wie der tatsächliche Abstand, in beide Richtungen.

Die 1000 durchmischten Differenzen der Schriftstudie als Histogramm. Die Balken bei 6,6 Sekunden oder darüber auf beiden Seiten sind rot, 39 Durchmischungen, und eine Beschriftung lautet p = 39 / 1000 = 0.039

Im Code für die Schriftartenstudie:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # die Schleife aus der letzten Lektion
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

Dies gibt 0.039 aus. np.abs zählt eine Abweichung von -7 als genauso groß wie 7: Die Frage ist, ob sich die Schriftarten überhaupt unterscheiden.

Unterhalb des Signifikanzniveaus, oft 0,05, ist Zufall eine wenig überzeugende Erklärung für den Vorteil einer Schriftart oder eines Modells. Kein Beweis: 4 von 100 zufälligen Durchmischungen erzielten ihn trotzdem.

challenge icon

Aufgabe

Mittel

Ein Bauernhof bewässert Erdbeeren morgens oder abends. Der Starter teilt strawberries.csv in morning und evening auf, listet columns auf, liest level ein und definiert shuffled_diffs.

  1. Berechne für jede Spalte die tatsächliche Differenz (Mittelwert abends minus Mittelwert morgens), die gemischten Differenzen (morgens zuerst) und den p-Wert.
  2. Gib für jede Spalte eine Zeile wie unten aus (Differenz mit 2 Dezimalstellen, p mit 3): differs, wenn p kleiner als level ist.
  3. Zähle, wie viele sich unterscheiden.

Ein anderer Bauernhof, level 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

Probier es selbst

import numpy as np
import pandas as pd


# Gibt die gemischten Differenzen eines Permutationstests zurück (Schleife aus Lektion 43): simulierter Mittelwert von b minus simulierter Mittelwert von 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())
# Ändere die folgenden Zeilen nicht
rng = np.random.default_rng(21)
shuffles = 1000

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Statistik für ML

Übe selbstständig: Online-Python-Compiler