Principais tipos de distribuições de probabilidade: Um guia introdutório
Introdução
Antes de utilizarmos qualquer algoritmo de classificação ou regressão em Machine Learning, é necessário termos uma compreensão sobre qual tipo de distribuição nossos dados seguem.
Por que isso é necessário?
Devemos entender o comportamento dos fenômenos que os dados representam! Isso acaba implicando que determinados métodos consideram que nossos dados seguem determinado tipo de função de probabilidade, por exemplo: Uma regressão linear simples assume que os resíduos (diferença entre valores reais e preditos) sejam normalmente distribuídos.
Quando essa condição é violada, devemos adotar outro tipo de abordagem. Mas, como saber qual tipo de distribuição meus dados seguem? E que tipo de fenômeno cada tipo de distribuição visa modelar?
Essas questões serão abordadas no decorrer do artigo. Portanto, boa leitura!
Vamos abordar as seguintes distribuições de probabilidade: Distribuição Normal, Distribuição Uniforme, Distribuição-T, Binomial, Poisson, Exponencial, Beta e Log-Normal.
1- Distribuição Normal
É uma das distribuições mais utilizadas! Muitos fenômenos na natureza obedecem a distribuição normal, também conhecida como distribuição gaussiana.
Em termos matemáticos, ela é continuamente distribuída, através da função expressa a seguir:
Na função acima podemos definir que a distribuição normal depende basicamente da média(letra mi) e do desvio-padrão/variância(letra sigma)dos dados. Quando a média é igual a 0 e o desvio-padrão é igual 1, temos que a distribuição é normalmente padronizada.
Vamos fazer um exercício agora no Python, vamos gerar um fenômeno qualquer, cujos dados serão aleatóriamente gerados a partir de uma função normal. Para isso necessitaremos de duas bibliotecas: Numpy para a geração de números aleatórios e Seaborn para visualização dos dados.
Ao final do artigo, disponibilizarei o repositório do Github com o Notebook que elaborei no Google Colab.
import numpy as np
import seaborn as sns
O primeiro passo foi importar as bibliotecas necessárias, basta executar o código acima.
Agora precisamos criar uma função que receba os dados aleatórios gerados e gere uma imagem com a distribuição.
def dist_func(x):
return sns.histplot(data=x)
Feitas as configurações básicas, agora vamos gerar os dados.
x=np.random.normal(0,1,1000)
dist_func(x)
Para gerar dados aleatórios, normalmente distribuídos, devemos especificar 3 parâmetros para a função. A média da distribuição (neste caso=0), o desvio-padrão (nesse caso=1) e o tamanho da amostra que vamos gerar (nesse caso=1000).
O comando dist_func(x) é o responsável por gerar o gráfico com a distribuição, conforme imagem a seguir.
Perceba que a distribuição é similar a um “sino”, essa é uma característica particular da distribuição normal.
2- Distribuição Uniforme
É uma distribuição utilizada quando assumimos probabilidades iguais para diferentes possibilidades de resultados de um determinado fenômeno. Por exemplo: Quando lançamos um dado de seis lados, não viciado, a probabilidade de que determinado número caia é de 1/6. Nota-se que a quantidade de probabilidades vai depender do tamanho do espaço amostral.
Matematicamente, a distribuição uniforme pode ser dada por:
Na equação acima, podemos ver que o valor de probabilidade depende de b e a, que são os valores mínimo e máximo da distribuição dos dados.
Assim como para a distribuição normal, vamos gerar dados uniformemente distribuídos.
x=np.random.uniform(0,100,1000)
dist_func(x)
Nessa função, passamos três parâmetros: Os valores mínimo e máximo (0–100, nesse exemplo) e o tamanho amostral (1000).
Como característica da distribuição, podemos ver que as barras do gráfico possuem comportamento similar.
3- Distribuição-T
Também conhecida como distribuição t de student, ela é similar a distribuição normal, é uma forma de se estimar se a média de uma amostra é representativa com relação a média populacional.
A função de probabilidade da distribuição-T pode ser definida como:
A distribuição-T depende do número de graus de liberdade (df). Quanto maior o número de graus de liberdade, mais a distribuição se aproxima de uma distribuição normal.
x=np.random.standard_t(10,1000)
dist_func(x)
Aqui precisamos fornecer dois parâmetros. O número de graus de liberdade ( aqui vamos testar valores diferentes, começando por 10) e o tamanho da amostra (=1000).
Considerando df=10:
Considerando df=50:
Aumentado o número de graus de liberdade, vemos que a distribuição dos dados na segunda figura se assemelha mais com o gráfico da distribuição normal.
4- Distribuição Binomial
É um tipo de distribuição discreta, utilizada para descrever o número de sucessos, dado um certo número de tentativas. Essa distribuição tem por característica duas possibilidades de saída: Sucesso ou fracasso.
Por exemplo, a probabilidade de cair cara ou coroa ao jogar uma moeda.
Onde: n é o número de tentativas, N é o número de sucessos e p é a probabilidade de sucesso.
x=np.random.binomial(size=1000, n=1, p= 0.3)
dist_func(x)
No exemplo acima, temos que: n=1000, N=1 e p=0,3.
Considerando o exemplo acima, podemos ver a diferença das distribuições de sucessos e fracassos depois de 1000 tentativas.
5- Distribuição de Poisson
É uma distribuição de probabilidade de variável aleatória discreta que expressa a probabilidade de uma série de eventos ocorrer num certo período de tempo se estes eventos ocorrem independentemente de quando ocorreu o último evento. Exemplos de aplicação dessa distribuição são: Estimar o número de acidentes em uma estrada , número de requisições que um site recebe ao longo do tempo, entre outras aplicações.
Na equação acima vemos que a distribuição de Poisson é dependente do intervalo observado (lambda) e do número de eventos (k).
x=np.random.poisson(1.0,1000)
dist_func(x)
Na função temos passar dois parâmetros: O valor de lambda e o tamanho da amostra.
A imagem da esquerda mostra a distribuição de Poisson com lambda=5, a da direita com lambda=1. O valor de lambda é equivalente à média e à variância. -se que quanto maior o valor de lambda, mais a distribuição se aproxima a distribuição normal.
6- Distribuição Exponencial
É uma distribuição de probabilidade contínua, utilizada em aplicações como modelar probabilidades que vão decaindo com o tempo de forma exponencial, por exemplo: Estimar a probabilidade de que um aparelho celular esteja funcionando conforme os anos, conforme os anos passam, a probabilidade não decai linearmente, mas sim exponencialmente.
Na equação acima, o termo beta corresponde à escala, ou seja, corresponde à média.
x=np.random.exponential(1,1000)
dist_func(x)
No caso do código acima, consideramos média=1.
É possível ver na figura acima exatamente o comportamento esperado, a probabilidade decai conforme os valores no eixo x aumentam.
7- Distribuição Beta
É uma distribuição que pode ser definida como uma distribuição de probabilidade em probabilidades. Pode ser utilizada para modelar a taxa de adesão à um produto, número de cliques em um anúncio publicitário em um site, entre outras aplicações.
A função acima depende, além de x, dos parâmetros alfa (a) e beta(b). Esses dois parâmetros podem ser interpretados como os números de sucessos e falhas.
Vamos então visualizar essa distribuição.
x=np.random.beta(1,1,1000)
dist_func(x)
No código acima definimos número igual de sucessos e fracassos para uma amostra de tamanho 1000. Vamos visualizar então como ficou a distribuição dos dados.
Como a probabilidade de sucesso ou de falha é igual, o gráfico acaba se assemelhando ao da distribuição uniforme, porém se as probabilidades variarem, ele tende a ser assimétrico, para esquerda ou para direita.
8- Distribuição Log-Normal
É uma distribuição de probabilidade contínua que considera que log(x) resulta em valores normalmente distribuídos. É um tipo de distribuição bastante utilizado quando o fenômeno que queremos modelar depende do produto de várias variáveis independentes, como na determinação do preço de ações no mercado financeiro.
Logo, se log(x) é normalmente distribuído, temos que:
Podemos ver que a função de densidade e probabilidade é similar à da distribuição normal, porém agora é feito ln(x) no expoente de e.
x=np.random.lognormal(0,1,100)
dist_func(x)
Nessa função precisamos definir a média, o desvio-padrão e o tamanho amostral, respectivamente. Vamos verificar como fica a distribuição nesse cenário.
É possível ver uma assimetria, com valores baixos representando a maior parte da distribuição, enquanto os valores mais altos correspondem a uma parte pequena.
Conclusão
Nesse artigo vimos alguns dos principais tipos de distribuição utilizados em Estatística e Machine Learning. O objetivo principal foi prover um guia básico sobre os principais conceitos dessas distribuições, além de reforçar a importância do entendimento do comportamento dos dados que normalmente trabalhamos.
Conforme prometido, segue o link do repositório que criei no GitHub:
diebrum/Statistics_Distributions (github.com)
Se souberem de alguma outra distribuição, sintam-se livres para colaborar.
Muito obrigado pela leitura e até a próxima!