Introdução À Probabilidade Com O Uso De Python
Tags: python, probability, numpy, beginners
Published: 2020-08-02 21:14:59

## O Que é Probabilidade?
Quando lançamos um dado ou jogamos uma moeda lidamos com uma característica de algumas situações do nosso cotidiano, a aleatoriedade, nessas situações não temos total controle do resultado que vamos obter.

Utilizamos estudos de probabilidade para tentar assumir um pouco de controle nesse tipo de situação, isto é, tentar prever resultados mais fáceis ou difíceis de ocorrer em um evento. Desse modo, podemos dizer que probabilidade é o estudo do quão provável é um resultado em um fenômeno (evento).

De modo geral, representamos a probabilidade como a razão entre os resultados que queremos e resultados possíveis do evento. Isto é, sendo P(E) a probabilidade de um evento, podemos determinar a seguinte definição

{% katex %}
P(E) = \frac{n(resultadosDesejados)}{n(todosResultados)}
{% endkatex %}

Essa equação resulta em um valor em um número entre 0 e 1 e essa *probabilidade* representa as chances de ocorrência de um ou mais resultados a cada ocorrência do evento. Porém, é importante lembrar que geralmente no mundo real não registramos os exatos valores calculados, afinal, o evento é aleatório, a probabilidade determina o que geralmente tende a acontecer, ou seja, ela é uma aproximação.

Por exemplo, se desejamos saber quão provável é que um número par seja obtido em um lançamento de um dado devemos realizar o seguinte processo:

* Primeiro devemos separar nossos *casos favoráveis*, isto é, os números pares em um dado que são 2, 4 e 6 (**três possibilidades**).
* Depois devemos obter todas as possibilidades de números em um lançamento de um dado, o que também chamamos de *espaço amostral* (
{% katex inline %}
 \Omega
{% endkatex %}
), essas possibilidades são 1, 2, 3, 4, 5 e 6 (**seis possibilidades**).
* Após isso, aplicaremos esses valores na equação apresentada anteriormente, teremos:
{% katex %}
 P(E) = \frac{3}{6} = \frac{1}{2} = 0,5
{% endkatex %}
Ou seja, teremos uma probabilidade de 0,5 de obter um número par em um lançamento de um dado, o que significa que de 10 lançamentos provavelmente obteremos cerca de 5 números pares e em 10.000 obteremos aproximadamente 5.000 números pares.

Agora iremos conferir o comportamento da situação mencionada usando programação para simulá-la. 

## Evento de Probabilidade Usando Python
 
Criaremos um programa que quando executado nos apresenta a quantidade de números pares obtidos em 10.000 lançamentos de dado.

Para isso, usaremos a função `random.choice()` da biblioteca do Python `numpy` que é capaz de escolher, aleatoriamente, entre valores de uma array, por isso, vamos precisar importar a biblioteca `numpy` no início do nosso programa.

```python
import numpy as np
```

Agora definiremos o espaço amostral, os casos favoráveis, o contador de lançamentos favoráveis e uma constante com o número de lançamentos a ser realizado no nosso programa.

```python
# Definiremos nosso espaço amostral como uma lista de todos os valores de um dado
espaco_amostral = [1,2,3,4,5,6]

# Definiremos nossos casos favoráveis como uma lista valores pares de um dado
favoraveis = [2,4,6]

# Definiremos nosso contador de lançamentos com resultados pares
resultados_pares = 0

# Definiremos nosso número de lançamentos, iremos usar 10000 no nosso exemplo
# Usamos letra maiúscula para representar que estamos criando uma constante
NUM_LANCAMENTOS = 10000
```

Agora definiremos um `for` que percorrerá nosso código 10.000 vezes escolhendo um valor aleatório no nosso espaço amostral cada uma das vezes e checando se esse valor é par, caso seja, adicionaremos 1 ao nosso contador de lançamentos `resultados_pares`.

```python
# Agora escreveremos nosso iterador com nossos lançamentos
for i in range (NUM_LANCAMENTOS):
	# np.random.choice escolhe um dos valores no espaço amostral, ou seja, algum valor entre (1,2,3,4,5,6)
    x = np.random.choice(espaco_amostral)
    """O comando x in favoráveis checa se o valor escolhido
    está na nossa lista de favoráveis, ou seja, se é 2, 4 ou 6
    """
    if(x in favoraveis):
        resultados_pares += 1
```

Por fim, imprimiremos o valor de `resultados_pares`, ou seja, nosso número de lançamentos pares e a probabilidade de obtenção de números pares que será calculada com a equação apresentada anteriormente.
```python
# Definição da probabilidade
probabilidade_par  = resultados_pares/NUM_LANCAMENTOS

# Impressão do resultado obtido
print("{0: d} dos resultados é par, isto é, obtemos uma probabilidade de aproximadamente {1:.2f}".format(resultados_pares, probabilidade_par))
```
Ao executar o programa você irá observar que raramente o valor de probabilidade varia de 0,5 (a cada execução os valores obtidos no `numpy.random.choice()` são diferentes então a quantidade de lançamentos pares muda) que é o que previmos inicialmente como probabilidade de lançamento de dado com um resultado par.

Dessa maneira, podemos observar que o cálculo de probabilidade cria uma aproximação muito boa de como situações aleatórias reais costumam ocorrer. Logo, a partir de ferramentas dessa área podemos conseguir as mais diversas conclusões sobre eventos aleatórios quaisquer.

O programa desenvolvido nesse tutorial está disponível no [meu repositório do gitlab](https://gitlab.com/veronicamars73/introdu-o-probabilidade/). Espero ter ajudado e se você estiver com algum problema ou dúvida sinta-se convidado a comentar esse post.