Last chance! 50% off DataCamp Premium
Sale ends in
Nel mondo odierno guidato dai dati, le aziende non possono basarsi solo sull’intuizione per prendere decisioni critiche. Devono invece usare tecniche statistiche come i test d’ipotesi per supportare le loro azioni con dati solidi. Un test molto diffuso a questo scopo è il t-test, che ti permette di confrontare le medie di due gruppi e determinare se sono statisticamente diverse.
Ma come si applica il t-test nella pratica e come si interpretano i risultati? In questo tutorial esploreremo queste domande e altro ancora. In particolare, ti guideremo attraverso uno scenario d’esempio in cui vuoi valutare il successo di una nuova funzionalità lanciata da un’azienda. Ti mostreremo come usare i t-test in Python e le sue potenti librerie per analizzare i risultati.
Al termine di questo tutorial, avrai una solida comprensione dei t-test e sarai in grado di applicarli con sicurezza ai tuoi dati.
In questo tutorial esploreremo i diversi tipi di t-test – one-sample test, two-sample test, paired t-test e Welch’s test – oltre alle loro applicazioni e a quando utilizzarli.
Prima di addentrarci nei dettagli del t-test, facciamo rapidamente chiarezza su alcune terminologie associate che ti aiuteranno a rafforzare la comprensione concettuale di questo test statistico.
Il test d’ipotesi è il processo che parte da un’assunzione, detta ipotesi nulla, e cerca evidenze per respingerla. L’ipotesi nulla rappresenta lo stato di fatto, mentre l’ipotesi alternativa rappresenta l’opposto dell’ipotesi nulla.
Per esempio, possiamo usare un test d’ipotesi per determinare se una nuova funzionalità lanciata da un’azienda riceve una buona risposta dai clienti ed è riflessa nella metrica di successo. Dai un’occhiata al nostro corso sul test d’ipotesi per saperne di più sull’argomento.
Il p-value è la probabilità di ottenere risultati estremi quanto quelli osservati, assumendo che l’ipotesi nulla sia vera. Un p-value piccolo indica che la probabilità di ottenere i risultati osservati è molto bassa, dato che l’ipotesi nulla è corretta.
Il livello di significatività, indicato con alfa, rappresenta la probabilità di rifiutare l’ipotesi nulla assumendo che sia vera. È noto anche come errore di Tipo 1.
La significatività statistica si riferisce al grado di confidenza che il risultato osservato non sia dovuto al caso. È importante notare che la significatività statistica non implica necessariamente significatività pratica, poiché il risultato osservato potrebbe comunque essere trascurabile dal punto di vista applicativo. L’errore di campionamento può inoltre contribuire alla significatività statistica se il campione non rappresenta accuratamente la popolazione più ampia.
Comprendere le assunzioni di un test statistico è fondamentale per garantire risultati accurati e affidabili. Il t-test non fa eccezione. Qualsiasi violazione delle sue assunzioni può portare a conclusioni fuorvianti, risultando controproducente. Esploriamo in dettaglio le quattro assunzioni del t-test:
Per prima cosa, la proprietà di indipendenza afferma che le osservazioni non sono influenzate da fattori impliciti nei dati e non sono correlate nel tempo. Per garantire l’indipendenza, si possono applicare varie tecniche per gestire dati dipendenti, come spiegato dall’Università del Texas ad Austin.
In secondo luogo, la presenza di outlier, o record anomali, può ridurre il valore della t-statistic e portare ad un aumento della varianza nei dati, influenzando la probabilità di rifiutare l’ipotesi nulla. È quindi fondamentale identificare e comprendere le ragioni alla base del comportamento anomalo per determinare se si tratti di dati legittimi o errati. Consultare un esperto di dominio può aiutare a comprendere il reale comportamento dei dati.
In terzo luogo, il t-test è valido solo per dati distribuiti normalmente. Dati asimmetrici possono portare a un rigetto errato dell’ipotesi nulla. Tuttavia, è difficile verificare la normalità con pochi punti dati. In tali casi, si possono usare test non parametrici che non assumono una distribuzione dei dati, oppure eseguire una trasformazione dei dati come misura correttiva per raggiungere la normalità.cases, it is suggested to either use a nonparametric test (which does not make a distributional assumption of data) or perform data transformation as a corrective measure toward normality.
Infine, perché il t-test sia valido, le due popolazioni confrontate dovrebbero avere varianze uguali. Questo può essere verificato graficamente mediante un Q-Q plot.
Ora che abbiamo compreso meglio le assunzioni del t-test, esploriamo i diversi tipi di t-test con un esempio in Python. Al termine di questo tutorial, avrai le conoscenze necessarie per eseguire t-test e interpretarne i risultati con sicurezza.
Il one-sample t-test è un test d’ipotesi statistico che aiuta a determinare se una media ignota di popolazione (mu) è diversa da un valore dichiarato.

Dove,
x = media campionaria
𝝁 = media della popolazione
S = deviazione standard del campione
n = numero di esempi nel campione
t = t-statistic
Capiremmo meglio con un esempio. Un’azienda afferma di produrre cuscinetti a sfera di 10 cm di diametro (ipotesi nulla) e tu decidi di verificarlo. Raccogli 21 cuscinetti da diversi negozi in città e ne misuri il diametro. Devi determinare se l’affermazione dell’azienda è falsa (ipotesi alternativa) sulla base delle misurazioni.
Il test è impostato come segue:
Ipotesi nulla: H0 : x = 𝝁
Ipotesi alternativa: Ha : x ≠ 𝝁

Per dichiarare false le affermazioni, devi dimostrare statisticamente che le misurazioni del campione di cuscinetti sono diverse dai 10 cm dichiarati dall’azienda. Poiché la dimensione del campione è 21 (inferiore a 30), usiamo un t-test. Qui la media campionaria è 11 cm e la deviazione standard è 1 cm.
Impariamo a condurre un one-sample t-test in Python usando la funzione scipy.stats.ttest_1samp().
import numpy as np
from scipy import stats
# Population Mean
mu = 10
# Sample Size
N1 = 21
# Degrees of freedom
dof = N1 - 1
# Generate a random sample with mean = 11 and standard deviation = 1
x = np.random.randn(N1) + 11
# Using the Stats library, compute t-statistic and p-value
t_stat, p_val = stats.ttest_1samp(a=x, popmean = mu)
print("t-statistic = " + str(t_stat))
print("p-value = " + str(p_val))
t-statistic = 4.689539773390642
p-value = 0.0001407967502139183
Il valore della t-statistic risulta 4,69, che sembra essere molto distante dalla media zero in una t-distribuzione. Per quantificare un valore così estremo, facciamo riferimento al p-value (introdotto nella sezione di terminologia). Il p-value è inferiore al livello di significatività predefinito di 0,05, il che indica che la probabilità di un esito così estremo è prossima a zero e che l’ipotesi nulla può essere respinta.
Nota che il livello di significatività si imposta all’inizio dell’esperimento.
Eseguiamo il one-sample t-test senza la funzione ttest_1samp(). In questo caso, la t-statistic è definita dalla differenza tra media campionaria e media di popolazione divisa per l’errore standard, come discusso nella sezione precedente.
# Sample Mean
x_bar = x.mean()
# Standard Deviation
std = np.std(x, ddof=1)
# Standard Error
ste = std/np.sqrt(N1)
# Calculating the T-Statistics
t_stat = (x_bar - mu) / ste
# p-value of the t-statistic
p_val = 2*(1 - stats.t.cdf(abs(t_stat), df = dof))
print("t-statistic = " + str(t_stat))
print("p-value = " + str(p_val))
t-statistic = 4.689539773390642
p-value = 0.0001407967502139183
Estendiamo il nostro esempio ipotizzando che l’azienda apra un altro stabilimento per produrre cuscinetti identici. Dobbiamo capire se i cuscinetti dei due stabilimenti hanno dimensioni diverse. In uno scenario del genere si usa il two-sample test. Qui la t-statistic è definita come sotto.

Dove,
X1= prima media campionaria
X2 = seconda media campionaria
S1 = prima deviazione standard campionaria
S2 = seconda deviazione standard campionaria
N1 = prima dimensione campionaria
N2 = seconda dimensione campionaria
Supponiamo che il primo stabilimento condivida 21 campioni di cuscinetti con una media del diametro pari a 10,5 cm. Il secondo stabilimento condivide invece 25 campioni con una media del diametro di 9,5 cm. Entrambi hanno una deviazione standard di 1 cm.
# Sample Sizes
N1, N2 = 21, 25
# Degrees of freedom
dof = min(N1,N2) - 1
# Gaussian distributed data with mean = 10.5 and var = 1
x = np.random.randn(N1) + 10.5
# Gaussian distributed data with mean = 9.5 and var = 1
y = np.random.randn(N2) + 9.5
## Using the internal function from SciPy Package
t_stat, p_val = stats.ttest_ind(x, y)
print("t-statistic = " + str(t_stat))
print("p-value = " + str(p_val))
t-statistic = 3.18913308431476
p-value = 0.0026296199823557754
Considerando il p-value di 0,0026, inferiore al livello di significatività di 0,05, rifiutiamo l’ipotesi nulla che afferma che i cuscinetti dei due stabilimenti siano identici.
Dopo aver condiviso questi risultati con l’azienda, questa decide di migliorare la propria tecnologia produttiva introducendo una nuova macchina di colata. Avvia questo pilota in uno degli stabilimenti e conduce un test per identificare se la nuova macchina di colata comporti un cambiamento nel diametro dei cuscinetti confrontando due campioni di 25 cuscinetti – uno prima dell’introduzione della nuova macchina e l’altro dopo.
La media del diametro risulta rispettivamente 10,5 cm e 9,9 cm.
Eseguiamo un paired t-test per verificare se il cambiamento è statisticamente significativo.
# Sample Sizes
N = 25
# Degrees of freedom
dof = N - 1
# Gaussian distributed data with mean = 10.5 and var = 1
x = np.random.randn(N) + 10.5
# Gaussian distributed data with mean = 9.9 and var = 1
y = np.random.randn(N) + 9.9
t_stat, p_val = stats.ttest_rel(x,y)
print("t-statistic = " + str(t_stat))
print("p-value = " + str(p_val))
t-statistic = 3.446152658909739
p-value = 0.0021043953630465787
Il p-value basso indica che l’ipotesi nulla è rifiutata, cioè non c’è alcun cambiamento nel diametro dei cuscinetti dopo l’introduzione della nuova macchina di colata.
Le assunzioni del paired t-test sono valide sulle differenze delle coppie e non sulle osservazioni originali. È quindi importante assicurarsi che le differenze tra le coppie siano distribuite simmetricamente e non presentino outlier.
Dopo un pilota riuscito con la nuova macchina di colata in uno stabilimento, l’azienda vuole provare un altro pilota nel secondo stabilimento con una nuova macchina di levigatura. Questa macchina è nota per produrre cuscinetti molto accurati, ma è influenzata dai cambiamenti di temperatura e dalle fluttuazioni di corrente. L’azienda deve identificare se i cuscinetti dei due stabilimenti sono diversi confrontando 21 campioni del primo stabilimento e 25 del secondo.
La media del diametro dei cuscinetti del primo stabilimento risulta 9,9 cm con una deviazione standard di 1 cm, mentre la media del diametro del secondo stabilimento risulta 10 cm con una deviazione standard di 3 cm. Poiché le deviazioni standard dei due campioni sono diverse, useremo il t-test di Welch.
# Sample Sizes
N1, N2 = 21, 25
# Degrees of freedom
dof = min(N1,N2) - 1
# Gaussian distributed data with mean = 9.9 and var = 1
x = np.random.randn(N1) + 9.9
# Gaussian distributed data with mean = 10 and var = 3
y = 3*np.random.randn(N2) + 10
## Using SciPy Package
t_stat, p_val = stats.ttest_ind(x, y, equal_var = False)
print("t-statistic = " + str(t_stat))
print("p-value = " + str(p_val))
t-statistic = 1.3828843424092643
p-value = 0.17753505304053804
Il p-value osservato è maggiore del livello di significatività di 0,05, il che indica che non riusciamo a rifiutare l’ipotesi nulla, implicando che i cuscinetti dei due stabilimenti siano identici. Non possiamo essere certi dei risultati a causa dell’elevata deviazione standard dei campioni del secondo stabilimento; sarà quindi necessario raccogliere più campioni per eseguire lo z-test.
A differenza di altri t-test, il t-test di Welch è applicabile a varianze di popolazione diseguali
I dati possono far emergere i reali fenomeni che influenzano le decisioni aziendali solo se interrogati nel modo giusto. Serve una solida comprensione dei diversi test statistici per sapere quale applicare e quando. Questo tutorial si concentra sui t-test e ne spiega le assunzioni alla base, come osservazioni indipendenti e identicamente distribuite e distribuzione normale.
Oltre a fornire un rapido promemoria sul test d’ipotesi, questo tutorial offre anche una panoramica completa dei diversi tipi di t-test con l’aiuto di un esempio. Ti incoraggiamo vivamente a esercitarti nell’esecuzione di un t-test usando Python e a valutare quale utilizzare per misurare la significatività statistica del tuo esperimento.

blog
Abid Ali Awan
10 min
blog
Tim Lu
12 min

blog
Abid Ali Awan
15 min