1
resposta

Mão na massa: avaliando o desempenho das vendas

import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import numpy as np

# Conjunto de dados TechTaste
df_techtaste = pd.DataFrame({'avaliacoes': [38, 44, 33, 42, 47, 33, 36, 39, 42, 36, 39, 34, 42, 42, 36, 43, 31, 
                                            35, 36, 41, 42, 30, 25, 38, 47, 36, 32, 45, 44, 45, 37, 48, 37, 36, 
                                            44, 49, 31, 45, 45, 40, 36, 50, 38, 34, 36, 42, 46, 49, 36, 34, 38, 
                                            31, 53, 40, 57, 40, 36, 42, 26, 50, 32, 43, 35, 37, 42, 30, 36, 43, 
                                            40, 43, 44, 52, 37, 51, 35, 47, 40, 50, 37, 49]})
                                            
#Checando quantidade de avaliações
df_techtaste['avaliacoes'].value_counts()

#Calcule o desvio padrão amostral das avaliações.
print(f'O desvio padrão é: {df_techtaste['avaliacoes'].std()}')
#O desvio padrão é: 6.421827887581659

#Calcule o erro padrão amostral da média para as avaliações dos clientes.
print(f'O erro padrão é: {stats.sem(df_techtaste['avaliacoes'])}')
#O erro padrão é: 0.7179821848218233

#Utilizando um gráfico de histograma, analise visualmente a distribuição das avaliações dos clientes.
plt.hist(df_techtaste['avaliacoes'])
plt.title('Distribuição das avaliações dos clientes')
plt.xlabel('Nota das avaliações')
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Observe o formato da distribuição gerado no histograma. Ele se assemelha a uma distribuição normal?

Sim, assemelha-se a uma distribuição normal, apesar da irregularidade no meio do gráfico. Observa-se que as pontas direita e esquerda vão aumentando gradativamente ao centro com pico próximo de 35 e 45. Levemente lembra o formato de um sino.

#Com um nível de confiança de 90%, calcule o intervalo de confiança para a média das avaliações.

confianca = 0.90

media = df_techtaste['avaliacoes'].mean()
desvio_padrao_amostra = df_techtaste['avaliacoes'].std()
tamanho_amostra = len(df_techtaste)

intervalo_confianca = stats.norm.interval(
    confianca, #nível de confiança
    loc = media, #onde será adicionada margem de erro (localização)
    scale = desvio_padrao_amostra / np.sqrt(tamanho_amostra) #variabilidade do intervalo - cálculo do erro padrão
)

print('Intervalo de confiança (90%): ', intervalo_confianca)

#Intervalo de confiança (90%):  (np.float64(38.84402439920928), np.float64(41.205975600790715))

#A largura do intervalo de confiança seria afetada se o nível de confiança fosse aumentado para 95%?

confianca = 0.95

intervalo_confianca = stats.norm.interval(
    confianca, #nível de confiança
    loc = media, #onde será adicionada margem de erro (localização)
    scale = desvio_padrao_amostra / np.sqrt(tamanho_amostra) #variabilidade do intervalo - cálculo do erro padrão
)

print('Intervalo de confiança (95%): ', intervalo_confianca)

#A largura é afetada levemente, diminuindo casas decimais no mínimo e aumentando casas decimais no máximo
#Intervalo de confiança (95%):  (np.float64(38.617780776207844), np.float64(41.43221922379215))

1 resposta

Olá, Vinicius! Tudo bem?

Excelente trabalho no "Mão na Massa"! Você aplicou conceitos fundamentais de estatística inferencial com muita precisão técnica. O uso da biblioteca scipy.stats para calcular o erro padrão (sem) e o intervalo de confiança demonstra que você já está confortável com o ecossistema de Data Science no Python.

Gostaria de comentar alguns pontos interessantes da sua análise:

1. Análise Visual da Distribuição

Sua observação sobre o histograma foi muito aguçada. Embora existam esses "vales" no meio (especialmente perto da nota 40), a tendência central e a simetria sugerem, sim, que os dados podem estar vindo de uma Distribuição Normal. Em amostras reais, raramente teremos um sino perfeito como nos livros didáticos, e saber interpretar essas "imperfeições" faz parte do dia a dia do cientista de dados.

2. O Intervalo de Confiança e a Largura

Você notou algo crucial: ao aumentar o nível de confiança de 90% para 95%, o intervalo ficou mais largo.

  • 90%: $[38.84, 41.20]$
  • 95%: $[38.61, 41.43]$

Dica importante: Em estatística, quanto mais "certeza" (confiança) queremos ter de que a verdadeira média da população está dentro do nosso intervalo, mais espaço (largura) precisamos dar para esse intervalo. Pense como uma rede de pesca: para ter 95% de chance de pegar o peixe, você precisa de uma rede maior do que se aceitasse apenas 90% de chance.

3. Pequeno detalhe técnico: Distribuição Z vs Distribuição T

No seu código, você utilizou stats.norm.interval (Distribuição Normal/Z).

  • Para amostras grandes ($n > 30$), como a sua ($n=80$), isso é perfeitamente aceitável pelo Teorema do Limite Central.
  • Porém, se você estivesse trabalhando com uma amostra muito pequena (ex: menos de 30 avaliações), o ideal seria usar a Distribuição T (stats.t.interval), que é mais "conservadora" e ajusta melhor o intervalo para amostras menores.

Parabéns pelo progresso! Sua base em teste de hipóteses está ficando muito sólida.

Espero que possa ter lhe ajudado! Agora que você viu como o nível de confiança afeta o intervalo, o que você acha que aconteceria com a largura do intervalo se você conseguisse coletar mais 200 avaliações (aumentando o tamanho da amostra $n$)?