Menu
CoddyTech

Valores-p

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

O valor-p transforma os embaralhamentos em um único número: a proporção de diferenças falsas pelo menos tão grandes quanto a real, em qualquer direção.

As 1000 diferenças embaralhadas do estudo da fonte em um histograma. As barras em 6,6 segundos ou além, em ambos os lados, são vermelhas, 39 embaralhamentos, e um rótulo mostra p = 39 / 1000 = 0.039

No código, para o estudo de fontes:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # o loop da aula anterior
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

Isso imprime 0.039. np.abs considera uma diferença de -7 tão grande quanto uma de 7: a questão é saber se as fontes diferem de alguma forma.

Abaixo do nível de significância, geralmente 0.05, o acaso é uma explicação pouco provável para o ganho de uma fonte ou de um modelo. Isso não é uma prova: ainda assim, isso aconteceu em 4 embaralhamentos de 100.

challenge icon

Desafio

Médio

Uma fazenda rega os morangos de manhã ou à noite. O código inicial divide strawberries.csv em morning e evening, lista columns, lê level e define shuffled_diffs.

  1. Para cada coluna, calcule a diferença real (média da noite menos média da manhã), as diferenças embaralhadas (manhã primeiro) e o valor-p.
  2. Imprima uma linha por coluna como abaixo (diferença com 2 casas decimais, p com 3): differs quando p for menor que level.
  3. Conte quantas apresentam diferença.

Outra fazenda, nível 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

Experimente você mesmo

import numpy as np
import pandas as pd


# Retorna as diferenças embaralhadas de um teste de permutação (o loop da lição 43): média simulada de b menos média simulada de 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())
# Não altere as linhas abaixo
rng = np.random.default_rng(21)
shuffles = 1000

# 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