Menu
CoddyTech

Test t

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

Zanim pojawiły się komputery, statystyka miała skrót: test t. Wzór od razu przekształca średnie, rozrzuty i liczebności grup w wartość p:

from scipy import stats

result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))

W badaniu czcionek ten kod wypisuje 0.031 i -2.61. 1000 przetasowań dało 0.039: jak zwykle, całkiem blisko.

1000 przetasowanych różnic z badania czcionek przedstawionych jako jasny histogram, z nałożoną na niego krzywą w kształcie dzwonu testu t oraz przerywaną czerwoną linią przy rzeczywistej różnicy wynoszącej -6.6. Legenda podaje p = 0.039 dla przetasowań i 0.031 dla wzoru

Wartość t to różnica wyrażona w błędach standardowych; jej znak wskazuje tylko, która grupa była pierwsza. Wzór zakłada dane o rozkładzie dzwonowym, więc przy małych, skośnych grupach zaufaj tasowaniu.

Sprawdza również, czy jeden model rzeczywiście przewyższa drugi.

challenge icon

Wyzwanie

Średni

Producent farby zmierzył czas schnięcia trzech wykończeń. Kod początkowy umieszcza czas schnięcia każdego wykończenia w times, wymienia trzy pairs, definiuje permutation_p(a, b) i odczytuje level.

  1. Wypisz wartość p z testu t dla matowego i satynowego wykończenia obok wartości uzyskanej przez tasowanie.
  2. Przetestuj każdą parę, zaczynając od wykończenia wymienionego jako pierwsze, i wypisz parę z najmniejszą wartością p.
  3. Policz pary, dla których wartość p jest mniejsza od level.

Zaokrąglij wartości p do 3 miejsc po przecinku. Inny producent, poziom 0.05:

matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3

Spróbuj swoich sił

import numpy as np
import pandas as pd
from scipy import stats


# Test permutacyjny z dwóch poprzednich lekcji: zwraca wartość p dla porównania a z b
def permutation_p(a, b, shuffles=1000, seed=0):
    rng = np.random.default_rng(seed)
    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())
    real = b.mean() - a.mean()
    return (np.abs(np.array(diffs)) >= np.abs(real)).mean()


paint = pd.read_csv("paint.csv")
times = {
    "matte": paint[paint["finish"] == "matte"]["minutes"],
    "satin": paint[paint["finish"] == "satin"]["minutes"],
    "gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())

# 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