Principais tipos de distribuições de probabilidade: Um guia introdutório

Diego Brum
7 min readMar 22, 2023

--

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!

--

--