Menu
CoddyTech

O teste t

Parte da seção Estatística para ML do Journey de Machine Learning da Coddy. Lição 45 de 64.

Antes dos computadores, a estatística tinha um atalho: o teste t. Uma fórmula transforma as médias, as dispersões e os tamanhos dos grupos em um valor p de uma só vez:

from scipy import stats

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

Para o estudo de fontes, isso imprime 0.031 e -2.61. As 1000 permutações deram 0.039: próximo, como de costume.

As 1000 diferenças permutadas do estudo de fontes em um histograma claro, com a curva em forma de sino do teste t sobreposta e uma linha vermelha tracejada no intervalo real de -6.6. A legenda indica p = 0.039 para as permutações e 0.031 para a fórmula

O valor de t é a diferença em erros padrão; seu sinal apenas indica qual grupo veio primeiro. A fórmula pressupõe dados com distribuição em forma de sino, então, com grupos pequenos e assimétricos, confie nas permutações.

Ele também verifica se um modelo realmente supera outro.

challenge icon

Desafio

Médio

Um fabricante de tinta cronometr orou o tempo de secagem de três acabamentos. O código inicial coloca os minutos de cada acabamento em times, lista três pairs, define permutation_p(a, b) e lê level.

  1. Imprima o valor p do teste t para matte vs satin ao lado do valor obtido pelos embaralhamentos.
  2. Teste cada par, com o primeiro acabamento primeiro, e imprima aquele com o menor valor p.
  3. Conte os pares abaixo de level.

Arredonde os valores p para 3 casas decimais. Outro fabricante, nível 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

Experimente você mesmo

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


# O teste de permutação das duas últimas aulas: retorna seu valor-p para a em comparação com 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())

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Estatística para ML

Pratique por conta própria: Compilador de Python online