Menu
CoddyTech

Il test t

Fa parte della sezione Statistica per il machine learning del percorso Machine Learning di Coddy. Lezione 45 di 64.

Prima dei computer, la statistica aveva una scorciatoia: il t-test. Una formula trasforma le medie, le dispersioni e le dimensioni dei gruppi in un p-value in un colpo solo:

from scipy import stats

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

Per lo studio sui caratteri, stampa 0.031 e -2.61. I 1000 rimescolamenti hanno dato 0.039: vicino, come al solito.

Le 1000 differenze rimescolate dello studio sui caratteri, rappresentate come un istogramma chiaro, con la curva a campana del test t sovrapposta e una linea rossa tratteggiata in corrispondenza del divario reale di -6.6. La legenda indica p = 0.039 per i rimescolamenti e 0.031 per la formula

Il valore t è la differenza in errori standard; il suo segno indica solo quale gruppo è venuto prima. La formula presuppone dati con distribuzione a campana, quindi, con gruppi piccoli e asimmetrici, fidati delle permutazioni.

Verifica anche se un modello supera davvero un altro.

challenge icon

Sfida

Medio

Un produttore di vernici ha cronometrato l’asciugatura di tre finiture. Il codice iniziale inserisce i minuti di ciascuna finitura in times, elenca tre pairs, definisce permutation_p(a, b) e legge level.

  1. Stampa il p-value del t-test per matte vs satin accanto a quello degli rimescolamenti.
  2. Verifica ogni coppia, con la prima finitura per prima, e stampa quella con il p-value più piccolo.
  3. Conta le coppie con un valore inferiore a level.

Arrotonda i p-value a 3 decimali. Un altro produttore, livello 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

Provalo tu

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


# Il test di permutazione delle ultime due lezioni: restituisce il valore p del confronto tra a e 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())

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Statistica per il machine learning

Esercitati da solo: Compilatore Python online