No mundo orientado por dados de hoje, as empresas não podem depender só da intuição para tomar decisões cruciais. Elas precisam de técnicas estatísticas, como testes de hipótese, para embasar suas ações com dados sólidos. Um dos testes mais usados para isso é o t-test, que permite comparar as médias de dois grupos e verificar se são estatisticamente diferentes.
Mas como aplicar o t-test na prática e interpretar seus resultados? Neste tutorial, vamos explorar essas e outras questões. Especificamente, vamos guiá-lo por um exemplo em que você quer avaliar o sucesso de um novo recurso lançado por uma empresa. Vamos mostrar como usar t-tests em Python e suas bibliotecas poderosas para analisar os resultados.
Ao final, você terá uma compreensão sólida de t-tests e conseguirá aplicá-los aos seus próprios dados com confiança.
Neste tutorial, vamos explorar os diferentes tipos de t-tests – teste de uma amostra, teste de duas amostras, t-test pareado e teste de Welch – além de suas aplicações e quando usar cada um.
Termos explicados
Antes de entrar nos detalhes do t-test, vale entender rapidamente alguns termos associados que vão fortalecer sua base conceitual sobre esse teste estatístico.
Teste de hipótese
Teste de hipótese é o processo de partir de uma suposição, a hipótese nula, e tentar encontrar evidências para rejeitá-la. A hipótese nula representa o status quo, enquanto a hipótese alternativa representa o oposto da hipótese nula.
Por exemplo, podemos usar teste de hipótese para determinar se um novo recurso lançado por uma empresa recebeu uma boa resposta dos clientes e isso se refletiu na métrica de sucesso. Confira nosso curso de hypothesis testing para saber mais sobre o assunto.
Valor-p
O valor-p é a probabilidade de obter resultados tão extremos quanto os observados, assumindo que a hipótese nula é verdadeira. Um valor-p pequeno indica que a probabilidade de observar tais resultados é muito baixa, dado que a hipótese nula esteja correta.
Nível de significância
O nível de significância, denotado por alfa, representa a probabilidade de rejeitar a hipótese nula sendo ela verdadeira. Também é conhecido como erro do Tipo I.
Significância estatística
Significância estatística se refere à confiança de que o resultado observado não ocorreu ao acaso. Importante: significância estatística não implica, necessariamente, relevância prática, já que o efeito observado pode ser pequeno na prática. Erros de amostragem também podem contribuir para a significância estatística se a amostra não representar bem a população maior.
Premissas do t-test
Entender as premissas de um teste estatístico é essencial para garantir resultados corretos e confiáveis. Com o t-test não é diferente. Qualquer violação pode levar a conclusões equivocadas. Vamos ver em detalhe quatro premissas do t-test:
Propriedade de independência
Primeiro, a independência estabelece que as observações não são influenciadas por fatores implícitos nos dados e não são correlacionadas ao longo do tempo. Para garantir independência, várias técnicas podem ser aplicadas para lidar com dados dependentes, conforme explicado pela University of Texas at Austin.
Identicamente distribuídos
Segundo, a presença de outliers, ou registros anômalos, pode reduzir o valor do t-estatístico e aumentar a variância nos dados, afetando a probabilidade de rejeitar a hipótese nula. Por isso, é crucial identificar e entender as causas do comportamento anômalo para determinar se é legítimo ou erro de dados. Consultar um especialista do domínio ajuda a compreender o comportamento real dos dados.
Distribuição normal
Terceiro, o t-test é válido para dados com distribuição aproximadamente normal. Assimetria pode levar à rejeição incorreta da hipótese nula. No entanto, é difícil testar normalidade com poucos dados. Nesses casos, pode-se usar testes não paramétricos, que não assumem distribuição específica dos dados, ou aplicar transformações de dados como medida corretiva rumo à normalidade.
Variâncias iguais
Por fim, para que o t-test padrão se sustente, as duas populações comparadas devem ter variâncias iguais. Isso pode ser verificado graficamente com um gráfico Q-Q, entre outras abordagens.
Agora que entendemos melhor as premissas do t-test, vamos explorar os diferentes tipos de t-tests com um exemplo em Python. Ao final, você terá o conhecimento necessário para executar t-tests e interpretar seus resultados com segurança.
T-test de uma amostra
O t-test de uma amostra é um teste de hipótese estatístico que ajuda a determinar se a média de uma população desconhecida (mu) é diferente de um valor declarado.

Onde:
x = média amostral
𝝁 = média populacional
S = desvio padrão amostral
n = tamanho da amostra
t = estatística t
Vamos entender com um exemplo. Uma empresa afirma produzir esferas de rolamento com 10 cm de diâmetro (hipótese nula), e você decide auditar essa informação. Você coleta 21 esferas em várias lojas da cidade e mede seus diâmetros. É preciso determinar se a alegação da empresa é falsa (hipótese alternativa) com base nas medições.
O teste é definido assim:
Hipótese nula: H0 : x = 𝝁
Hipótese alternativa: Ha : x ≠ 𝝁

Para declarar a alegação como falsa, você precisa provar estatisticamente que as medições da amostra diferem dos 10 cm declarados pela empresa. Como o tamanho da amostra é 21 (menor que 30), usamos um t-test. Aqui, a média amostral é 11 cm e o desvio padrão é 1 cm.
Exemplo de t-test de uma amostra em Python
Vamos aprender a conduzir um t-test de uma amostra em Python usando a função 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
Interpretação dos resultados
O valor da estatística t é 4,69, que está bem distante da média zero de uma t-distribuição. Para quantificar esse valor extremo, recorremos ao valor-p (apresentado na seção de terminologia). O valor-p é menor que o nível de significância padrão de 0,05, o que indica que a probabilidade de um resultado tão extremo é próxima de zero e que a hipótese nula pode ser rejeitada.
Lembre-se: o nível de significância é definido no início do experimento.
Uma abordagem diferente
Vamos executar o t-test de uma amostra sem a função ttest_1samp(). A estatística t, nesse caso, é definida pela diferença entre as médias da amostra e da população dividida pelo erro padrão, como discutido anteriormente.
- Calcule a média amostral (x_bar)
- Em seguida, calcule o desvio padrão amostral com grau de liberdade igual a 1 (representa o desvio padrão da amostra).
- Calcule o erro padrão dividindo o desvio padrão pela raiz quadrada do tamanho da amostra.
- Use a fórmula do t-test de uma amostra explicada antes.
- Calcule o valor-p para estabelecer a significância da estatística t.
# 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
Como fazer t-test de duas amostras em Python
Vamos estender o exemplo supondo que a empresa abriu outra fábrica para produzir as mesmas esferas. Precisamos saber se as esferas das duas fábricas têm tamanhos diferentes. Para esse cenário, usamos o teste de duas amostras. A estatística t é definida assim:

Onde:
X1= média da primeira amostra
X2 = média da segunda amostra
S1 = desvio padrão da primeira amostra
S2 = desvio padrão da segunda amostra
N1 = tamanho da primeira amostra
N2 = tamanho da segunda amostra
Exemplo de t-test de duas amostras em Python
Considere que a primeira fábrica compartilha 21 amostras com média de 10,5 cm. Já a segunda fábrica compartilha 25 amostras com média de 9,5 cm. Ambas têm desvio padrão de 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
Interpretação dos resultados
Como o valor-p de 0,0026 é menor que o nível de significância de 0,05, rejeitamos a hipótese nula, indicando que as esferas das duas fábricas não são idênticas.
Como fazer t-test pareado em Python
Após ver esses resultados, a empresa decide aprimorar sua tecnologia de fabricação introduzindo uma nova máquina de fundição. Ela inicia esse piloto em uma das fábricas e realiza um teste para identificar se a nova máquina altera o diâmetro das esferas, comparando duas amostras de 25 esferas – uma antes da introdução e outra depois.
As médias dos diâmetros são 10,5 cm e 9,9 cm, respectivamente.
Exemplo de t-test pareado em Python
Vamos executar um t-test pareado para verificar se a mudança é estatisticamente significativa.
# 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
Interpretação dos resultados
O baixo valor-p indica rejeição da hipótese nula, ou seja, há mudança no diâmetro das esferas após a introdução da nova máquina de fundição.
Cuidados com o t-test pareado
As premissas do t-test pareado valem para as diferenças entre os pares, não para as observações originais. Portanto, é importante garantir que as diferenças entre os pares sejam simétricas e não contenham outliers.
Como fazer o t-test de Welch em Python
Após o piloto bem-sucedido da nova máquina de fundição em uma fábrica, a empresa quer testar uma nova máquina de polimento na segunda fábrica. Essa máquina é conhecida por produzir esferas altamente precisas, mas é sensível a variações de temperatura e oscilações de energia. A empresa precisa identificar se as esferas das duas fábricas são diferentes comparando 21 amostras da primeira fábrica e 25 da segunda.
Exemplo de t-test de Welch em Python
A média do diâmetro das esferas da primeira fábrica é 9,9 cm, com desvio padrão de 1 cm; já na segunda, a média é 10 cm com desvio padrão de 3 cm. Como os desvios padrão são diferentes, usaremos o t-test de 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
Interpretação dos resultados
O valor-p observado é maior que 0,05, o que indica que não rejeitamos a hipótese nula, sugerindo que as esferas das duas fábricas são idênticas. Não podemos ter alta confiança no resultado devido ao desvio padrão elevado das amostras da segunda fábrica; portanto, será necessário coletar mais amostras para realizar um z-test.
Cuidados com o t-test de Welch
Diferentemente de outros t-tests, o t-test de Welch é aplicável quando as variâncias populacionais são desiguais.
Conclusão
Dados têm o poder de revelar os fenômenos que realmente impactam as decisões de negócio, desde que analisados do jeito certo. Para isso, é essencial dominar diferentes testes estatísticos e saber quando aplicar cada um. Este tutorial foca nos t-tests e explica suas premissas, como observações independentes e identicamente distribuídas e distribuição normal.
Além de um panorama rápido sobre testes de hipótese, o tutorial também apresenta uma visão completa dos diferentes tipos de t-tests com um exemplo prático. Recomendamos fortemente que você pratique a execução de t-tests em Python e avalie qual deles usar para medir a significância estatística do seu experimento.

