Desvendando Estatística e Probabilidade em Ciência de Dados
Published on
Estatística e probabilidade são a base da Ciência de Dados. Compreender esses conceitos nos equipa com as ferramentas para analisar, interpretar e tirar conclusões dos enormes conjuntos de dados com os quais lidamos diariamente. Este artigo explorará conceitos-chave, exemplos práticos e trechos de código Python para ilustrar cada ponto.
Distribuição de Probabilidade
A distribuição de probabilidade descreve como as probabilidades são distribuídas pelos valores das variáveis aleatórias. No caso de variáveis discretas, frequentemente usamos a distribuição uniforme, onde cada resultado tem uma probabilidade igual.
Para ilustrar isso, vamos considerar um dado justo de seis lados. A distribuição de probabilidade dos resultados seria uniforme, com cada número de 1 a 6 tendo uma probabilidade igual de 1/6.
import numpy as np
resultados = [1, 2, 3, 4, 5, 6]
probabilidades = np.full(6, 1/6)
print(f'Distribuição de Probabilidade de um Dado Justo:')
for resultado, probabilidade in zip(resultados, probabilidades):
print(f'P(X={resultado}) = {probabilidade}')
Ao lidar com variáveis contínuas, como o tempo de chegada de um ônibus, usamos funções de densidade de probabilidade (PDFs). PDFs indicam a probabilidade de uma variável cair dentro de um determinado intervalo de valores.
Um exemplo de uma conhecida distribuição de probabilidade contínua é a distribuição normal, também conhecida como distribuição Gaussiana. Ela é caracterizada pela sua curva em forma de sino.
import matplotlib.pyplot as plt
import numpy as np
# Gerar amostras aleatórias de uma distribuição normal
mu = 0 # média
sigma = 1 # desvio padrão
amostras = np.random.normal(mu, sigma, 1000)
# Plotar o histograma das amostras
plt.hist(amostras, bins=30, density=True, alpha=0.7)
plt.xlabel('Valor')
plt.ylabel('Densidade de Probabilidade')
plt.title('Distribuição Normal')
plt.show()
Média, Variância e Desvio Padrão
A média é o valor médio de um conjunto de dados. É calculada somando todos os valores e dividindo pelo número de valores.
A variância mede o quão distante cada número do conjunto está da média. Ela quantifica a dispersão ou variação dos dados. O desvio padrão é a raiz quadrada da variância e fornece uma medida da quantidade de variação no conjunto de dados.
import numpy as np
dados = np.random.normal(0, 1, 1000) # Gerando uma distribuição normal com média 0 e desvio padrão 1
media = np.mean(dados)
variancia = np.var(dados)
desvio_padrao = np.std(dados)
print(f'Média: {media:.2f}')
print(f'Variância: {variancia:.2f}')
print(f'Desvio Padrão: {desvio_padrao:.2f}')
Moda, Mediana e Quartis
A moda é o valor que aparece com mais frequência em um conjunto de dados. Ela indica o pico ou o valor mais comum na distribuição.
A mediana é o valor do meio que separa a metade superior da metade inferior de uma amostra de dados. Ela é útil ao lidar com dados assimétricos ou valores discrepantes.
Os quartis dividem um conjunto de dados ordenado em quatro partes iguais. O primeiro quartil (Q1) é o valor abaixo do qual 25% dos dados estão, o segundo quartil (Q2) é a mediana e o terceiro quartil (Q3) é o valor abaixo do qual 75% dos dados estão.
import numpy as np
dados = np.array([3, 7, 1, 5, 2, 9, 4, 6, 8, 2])
moda = np.argmax(np.bincount(dados))
mediana = np.median(dados)
q1 = np.percentile(dados, 25)
q3 = np.percentile(dados, 75)
print(f'Moda: {moda}')
print(f'Mediana: {mediana}')
print(f'Primeiro Quartil (Q1): {q1}')
print(f'Terceiro Quartil (Q3): {q3}')
Dados do Mundo Real e Distribuição Normal
Dados do mundo real frequentemente seguem uma distribuição normal. Por exemplo, os pesos dos jogadores de beisebol podem seguir uma distribuição normal com uma certa média e desvio padrão. Ao saber esses parâmetros, podemos gerar amostras aleatórias que imitam os pesos potenciais de jogadores de beisebol.
import numpy as np
media = 180
desvio_padrao = 10
tamanho_amostra = 1000
pesos = np.random.normal(media, desvio_padrao, tamanho_amostra)
print(f'Pesos de Amostra de Jogadores de Beisebol Potenciais:')
print(pesos[:10])
Intervalos de Confiança
Intervalos de confiança fornecem uma faixa na qual o verdadeiro parâmetro da população se encontra com um certo grau de confiança. Eles são cruciais para estimar a média e a variância de uma população a partir de uma amostra.
Para calcular um intervalo de confiança, precisamos conhecer a média da amostra, o desvio padrão da amostra, o tamanho da amostra e o nível de confiança desejado. Vamos supor que queremos calcular um intervalo de confiança de 95% para a média de uma variável com distribuição normal.
import numpy as np
from scipy.stats import norm
dados = np.random.normal(0, 1, 100) # Gerando uma amostra de uma distribuição normal
nivel_confianca = 0.95
media_amostral = np.mean(dados)
desvio_padrao_amostral = np.std(dados)
tamanho_amostra = len(dados)
escore_z = norm.ppf((1 + nivel_confianca) / 2)
margem_de_erro = escore_z * (desvio_padrao_amostral / np.sqrt(tamanho_amostra))
intervalo_confianca = (media_amostral - margem_de_erro, media_amostral + margem_de_erro)
print(f'Intervalo de Confiança de 95%: {intervalo_confianca}')
Teste de Hipótese
O teste de hipótese nos permite fazer inferências sobre a população ao examinar as diferenças entre os dados observados da amostra e os resultados que esperaríamos sob a hipótese nula, que geralmente propõe que não há efeito ou diferença.
Um teste de hipótese comum é o teste t, que é usado para comparar as médias de duas amostras. O pacote SciPy fornece a função ttest_ind
para realizar testes t.
from scipy.stats import ttest_ind
amostra1 = np.random.normal(0, 1, 100)
amostra2 = np.random.normal(1, 1, 100)
estatistica_t, valor_p = ttest_ind(amostra1, amostra2)
print(f'T-Estatística: {t_statistic:.2f}')
print(f'Valor-P: {p_value:.2f}')
Covariância e Correlação
Covariância mede como duas variáveis se movem em relação uma à outra. Ela nos dá a direção do relacionamento entre as variáveis. Correlação, por outro lado, não apenas nos dá a direção, mas também a intensidade do relacionamento.
import numpy as np
data1 = np.array([1, 2, 3, 4, 5])
data2 = np.array([5, 4, 3, 2, 1])
covariância = np.cov(data1, data2)[0, 1]
correlação = np.corrcoef(data1, data2)[0, 1]
print(f'Covariância: {covariância:.2f}')
print(f'Correlação: {correlação:.2f}')
Entender conceitos de probabilidade e estatística é fundamental para qualquer cientista de dados. Esses conceitos fornecem as ferramentas e técnicas para analisar dados, tomar decisões informadas e obter insights significativos. Ao aplicar esses princípios e utilizar as poderosas bibliotecas do Python, podemos desbloquear todo o potencial da ciência de dados.
Conclusão
Em conclusão, entender conceitos de estatística e probabilidade é crucial para quem trabalha no campo da Ciência de Dados. Dominando esses conceitos, você estará bem equipado para obter insights significativos a partir dos dados, projetar modelos de aprendizado de máquina robustos e tomar decisões informadas.