Photo by Andrew Neel on Unsplash

Bibliotecário em Ciência de Dados: Introdução aos testes de hipóteses com Python

Francisco Foz
6 min readMay 3, 2022

Em ciência de dados é muito comum se criar hipóteses à partir dos dados como por exemplo:

  • As bibliotecárias do estado do RJ ganham mais do que a do estado de SC?
  • A média salarial de um cientista de dados sênior no Brasil é acima de R$ 15.000,00?
  • Os cientistas de dados de Minas Gerais preferem R do que Python?

Só que para afirmar que elas são verdadeiras, precisa ser validado estatisticamente.

Como fazer?

Para começar precisaríamos ter uma hipótese nula (H0) e uma hipótese alternativa (H1), por exemplo:

H0 = As bibliotecárias do estado do RJ ganham igual as do estado de SC.

H1 = As bibliotecárias do estado do RJ ganham mais do que a do estado de SC.

A partir da coleta de amostras e análise faria a comparação e com a teoria da probabilidade poderia inferir se ela é verdadeira ou falsa.

Continuando na “resenha” do livro “Data science do zero”. Nesse capítulo, o autor introduz alguns conceitos de hipóteses e inferências.

Através de alguns exemplos farei uma introdução ao tema utilizando Python.

Bora lá?!

Sumário:

Formulação de hipóteses

Valor-P

Teste de normalidade

Testando a hipótese

Teste A/B

Considerações finais

Formulação de hipóteses

Primeiro passo é formular hipóteses, mas sobre o que?

Bom nesse caso, utilizarei o conjunto de dados da lista de livros do Goodreads localizada no Kaggle.

Esse conjunto de dados contém informações básicas de cada livro, título, autor, editora, número de páginas… e também de avaliações que os usuários realizaram, como a nota média (de 0 a 5) para cada livro e a quantidade de avaliações por livro.

Para que as notas médias fossem menos enviesadas pela quantidade de votos eu filtrei os dados para que tivessem apenas livros que as médias da notas tivessem sido compostas por pelo menos 100 votos.

Será que livros com mais páginas tem notas maiores do que os livros com menos páginas?

Vou definir o H0 e H1:

H0 = As notas médias dos livros com mais de 500 páginas são iguais aos livros com menos de 200 páginas

H1 = As notas médias dos livros com mais de 500 páginas é superior aos livros com menos de 200 páginas

Armazenei os dados em duas variáveis:

livros_com_menos_de_200_paginas = goodreads_livros.query("num_pages < 200")livros_com_mais_de_500_paginas = goodreads_livros.query("num_pages > 500")

Depois extraí uma amostra de 100 livros de cada grupo:

amostra_dos_livros_com_menos_de_200_paginas = livros_com_menos_de_200_paginas.sample(100,random_state=369)amostra_dos_livros_com_mais_de_500_paginas = livros_com_mais_de_500_paginas.sample(100,random_state=369)

E plotei os gráficos para entender melhor eles:

Olhando elas, diria que são curvas normais, mas para ter a certeza precisarei realizar um teste estatístico.

Valor-P

Mas para entendermos o teste é importante saber sobre o Valor-P ou P-Value.

O Valor-P nada mais é do que o valor da probabilidade da significância do teste.

Bom, você se lembra do intervalo de confiança de uma distribuição normal?

Ele que irá calcular a probabilidade do intervalo.

Como na figura abaixo, um intervalo de confiança de 95,44% será o valor da média +- 2 o desvio padrão:

Fonte da imagem

O nível de significância é o valor restante da probabilidade nas extremidades do intervalo.

Fonte da imagem

Por exemplo no teste de hipótese, pode-se estipular a hipótese nula a um nível de significância de 5% e se caso o valor-p for menor que 5%, a hipótese é considerada nula.

É importante destacar que dentro desse nível de significância é possível que se tenha dois tipos de erros:

Fonte da imagem

Teste de normalidade

Voltando ao teste de normalidade… Para ter a certeza estatística precisarei realizar o teste com o Scypy.stats.normaltest:

from scipy.stats import normaltest

Essa função, irá testar a hipótese de que esses dados vem de uma distribuição normal. Considerando:

H0 = O conjunto de dados é uma distribuição normal.

Então gera dois valores: a estatística de teste e o Valor-P.

Como o Valor P é maior que 0.05, posso considerar que a hipótese nula é verdadeira. Portanto eles são de uma distribuição normal.

Testando a hipótese

Para testar a hipótese, agora precisarei comparar as duas amostras.

Nesse caso irei utilizar o DescrStatsW, o CompareMeans e o Ztest_ind

from statsmodels.stats.weightstats import DescrStatsW, CompareMeans, from statsmodels.stats.weightstats import ztest_ind

Coleto a descrição estatística com o DescrStatsW:

estatistica_livros_com_mais_500_paginas = DescrStatsW(amostra_dos_livros_com_mais_de_500_paginas.average_rating)estatistica_livros_com_menos_200_paginas = DescrStatsW(amostra_dos_livros_com_menos_de_200_paginas.average_rating)

Fiz então o comparativo com o CompareMeans:

comparativos_de_estatisticas = CompareMeans(estatistica_livros_com_mais_500_paginas,estatistica_livros_com_menos_200_paginas)

E finalmente usei o ztest_ind (que é o teste Z para a hipótese nula das médias):

comparativos_de_estatisticas.ztest_ind(alternative='larger',value=0)

Passei com parâmetro o ‘larger’, para fazer o teste apenas na extremidade positiva da distribuição.

Pois aqui estou realizando um teste unilateral a direita, testando a hipótese que a média dos livros com mais de 500 páginas é maior do que as do com 200 páginas.

Link da foto

Voltando ao teste… ele me devolveu dois valores, mas o segundo será o que principalmente irei utilizar aqui: o Valor-P.

O valor P encontrado foi: 0.00024702531226086387

E é menor do que o nível de significância (5%), o que nos leva a descartar a Hipótese nula.

Portanto estatisticamente é possível observar que:

As notas médias dos livros com mais de 500 páginas é superior aos livros as notas dos livros com menos de 200 páginas.

Sendo que essa observação é apenas para os livros do Goodreads desse conjunto de dados.

Teste A/B

Uma prática muito comum de teste de hipótese é o teste A/B, principalmente em testes de usabilidade e design de sites.

Tem esse podcast muito massa do Hipsters.tech sobre teste A/B:

Link para o Podcast

Não deixe de conferir.

Considerações finais

Essa pequena introdução foi apenas eu encostando a ponta do dedo no oceano da estatística inferencial. Existe muito mais, como testes:

Wilcoxon

Mann-Whitney

Kruskal-Wallis

No qual tem lá nos cursos da Alura:

Link para a página do curso curso
Link para a página do curso curso

Se você ainda não é aluno da Alura e tiver interesse, confira esse meu cupom de desconto.

Você também pode conferir essa aula sobre teste de hipótese e valor-p com Python:

Agora me diga, quais hipóteses você quer testar?

Se você chegou até aqui e curtiu, dê o claps, compartilhe e se inscreva para me acompanhar.

Ainda há muito a se explorar…

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Francisco Foz
Francisco Foz

Written by Francisco Foz

Bibliotecário | Analista de dados | Disseminando informações para produzir conhecimento.

No responses yet

Write a response