Menu
CoddyTech

Wartości p

Część sekcji Statystyka w uczeniu maszynowym ścieżki Machine Learning w Coddy. Lekcja 44 z 64.

Wartość p zamienia permutacje w jedną liczbę: odsetek pozornych różnic co najmniej tak dużych jak rzeczywista, w obu kierunkach.

1000 przetasowanych różnic z badania czcionek przedstawionych na histogramie. Słupki po obu stronach przy 6,6 sekundy lub dalej są czerwone — 39 przetasowań — a etykieta brzmi p = 39 / 1000 = 0.039

W kodzie, na potrzeby badania czcionek:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # pętla z poprzedniej lekcji
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

To wypisuje 0.039. np.abs traktuje różnicę wynoszącą -7 jako tak dużą jak 7: chodzi o to, czy czcionki w ogóle się różnią.

Poniżej poziomu istotności, często wynoszącego 0.05, przypadek słabo tłumaczy poprawę czcionki lub modelu. To nie jest dowód: 4 na 100 przetasowań nadal dały taki efekt.

challenge icon

Wyzwanie

Średni

Gospodarstwo podlewa truskawki rano lub wieczorem. Kod startowy dzieli plik strawberries.csv na morning i evening, wyświetla listę columns, odczytuje level i definiuje shuffled_diffs.

  1. Dla każdej kolumny oblicz rzeczywistą różnicę (średnia wieczorem minus średnia rano), przetasowane różnice (najpierw rano) i wartość p.
  2. Wypisz wiersz dla każdej kolumny, jak poniżej (różnica z 2 miejscami po przecinku, p z 3): differs, gdy p jest mniejsze niż level.
  3. Policz te, dla których występuje różnica.

Inne gospodarstwo, poziom 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

Spróbuj swoich sił

import numpy as np
import pandas as pd


# Zwraca różnice po przetasowaniu w teście permutacyjnym (pętla z lekcji 43): średnia dla sztucznej próby b minus średnia dla sztucznej próby 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())
# Nie zmieniaj poniższych wierszy
rng = np.random.default_rng(21)
shuffles = 1000

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Statystyka w uczeniu maszynowym

Poćwicz samodzielnie: Kompilator Python online