Photo by vnwayne fan on Unsplash

Bibliotecário em Ciência de Dados: Introdução a probabilidade com Python

Francisco Foz

--

Aprender sobre probabilidade é essencial para a aplicação da ciência de dados. A probabilidade é o estudo numérico que prevê a possibilidade de um evento ocorrer dentro de um “universo delimitado”.

Números, previsões e possibilidades.

Só de ler essas palavras eu já deduziria que é algo muito utilizado no cotidiano da ciência de dados. E em diversos aspectos a probabilidade aparece mesmo. Seja na criação ou em testes de novos modelos e análises.

Continuando na “resenha” do livro “Data science do zero”. No capítulo seis, o autor introduz alguns conceitos de probabilidade.

Através de exemplos com Python mostrarei como é possível usar a probabilidade para a resolução de problemas.

Bora lá?!

Sumário:

  • Probabilidade
  • Distribuição Binomial
  • Distribuição de Poisson
  • Distribuição Normal
  • Teorema do limite central e intervalo de confiança
  • Considerações finais

Probabilidade

Ao calcular as possibilidades de um evento ocorrer.

O evento é o resultado que ocorrerá dentro deste “universo limitado”.

Você deve se lembrar daquelas aulas ou textos de probabilidade sobre lançamento de dados ou moedas.

Quando se joga uma moeda para cima ela poderá cair como cara ou coroa. Podemos contabilizar a quantidade de vezes que cai em cada uma.

Estes são os eventos dentro de um universo binário (cara ou coroa, 0 ou 1).

Cada vez que se joga a moeda tem 50% de chance de cair cara e 50% chance de cair coroa: ½.

Neste caso eles são independentes, porque se eu jogar uma segunda vez não terá nenhuma ligação com a primeira. Agora se eu quisesse entender a probabilidade do evento “a moeda caiu 3 vezes seguidas em cara” ela seria dependente do evento de “a moeda caiu em cara”.

Para isso ocorrer, cada vez que cair cara será dividida a probabilidade:

  • Primeiro lançamento: ½
  • Segundo lançamento: ¼ (50% de ½)
  • Terceiro lançamento:⅛ (50% de ¼)

A probabilidade nestes casos seguiram na linha Bayesiana (se puder aprofunde-se no Teorema de Bayes posteriormente, tem muita coisa interessante para se explorar) que é medida através das hipóteses e não através das frequências ocorridas.

A probabilidade frequencista iria observar os eventos, para que com um número grande o suficiente possa afirmar qual é o número mais próximo da realidade.

Mas pela impossibilidade de se observar o mesmo evento nas condições exatas ou em quantidades suficientes para se chegar mais próximo do número correto a bayesiana

Entender que aqui as variáveis são aleatórias é importante para estabelecer o acaso dentro da probabilidade. Como em uma moeda jogada ou um dado, qualquer lado ou número pode ser o resultado.

Distribuição Binomial

Vamos imaginar a seguinte situação:

Um usuário entra na biblioteca e procura livros de Cosmologia, você puxa no catálogo e verifica que tem 15 livros dentro da CDD 132.

Qual a probabilidade do usuário levar 2 livros?

Qual a probabilidade do usuário levar entre 0 e 5 livros?

Para resolver ela, usamos a Distribuição Binomial que é a probabilidade do número de sucessos numa sequência de N tentativas.

Para a primeira questão podemos usar a biblioteca scipy e o módulo binom:

Usaremos a função binom.pmf() e passaremos 3 parâmetros:

k = total de eventos que se quer ter sucesso (2 empréstimos)

n = total do número de ensaios (15 livros de possibilidade)

p = probabilidade de sucesso (½ , pois temos duas opções ou empresta ou não empresta)

E…

Te retorna a probabilidade de 0,32%.

Ela resolveu esta equação:

Confira a explicação da equação aqui

Não precisa nem entender a equação?

Claro que sim, mas não temos a necessidade de fazer manualmente o cálculo.

E a segunda questão?

Para medir a probabilidade do usuário levar entre 0 e 5 livros, podemos usar a binom.cdf():

Usando os mesmos parâmetros, mas modificando o k pelo limite do que queremos calcular, então ele irá somar a probabilidade de se levar 0 livros + a de 1 livro + a de 2 livros + a de 3 livros + a de 4 livros + a de 5 livros.

Pronto! Será de 15.09%

Distribuição de Poisson

Vamos para outra situação:

O quadro de colaboradores de uma biblioteca universitária está menor, devido ao afastamento de algumas pessoas. O horário de pico dela é entre 16:00–19:00 horas, no qual recebe em média 33 usuários/hora. Com o quadro reduzido, estima-se que ela conseguirá atender com qualidade até 38–39 usuários/hora.

Preocupada com a possibilidade de perder a qualidade, a diretora da biblioteca se questiona:

Qual a chance de em alguma hora ela receber 40 usuários?

Vamos resolver com a Distribuição de Poisson, que mede a probabilidade de eventos ocorrerem dentro de um período de tempo.

Usamos agora o módulo poisson:

E medimos com a função .pmf() , com dois parâmetros:

k = número de ocorrências (no caso o 40)

media = media por hora (33 usuários)

3,14% de chance de em alguma hora extrapolar o limite.

Ficamos mais tranquilos agora com esse número.

Com isso resolvemos essa fórmula da distribuição de Poisson.

Fonte

Distribuição Normal

Essa é mais conhecida, talvez você já deve ter ouvido falar da Distribuição Normal.

Fonte

Vamos para mais outra situação para entender onde ela se aplica na probabilidade:

Verificou-se que a quantidade de visitas mensal na biblioteca digital da universidade segue uma distribuição normal com uma média de 200 acessos por dia e desvio padrão de 79.

Qual a probabilidade de um dia ao acaso ter menos de 250 acessos?

Ou de ter entre 150 e 250 acessos?

Ou mais de 350 acessos?

Para resolver essa questão temos de entender que a curva:

  • Tem uma área correspondente a 100%
  • As extremidades vão até o infinito
  • As medidas de tendência central (se lembra delas no meu outro artigo?) são iguais
  • A medida do desvio padrão (que também falei no artigo) será o que definirá o achatamento da curva
  • A probabilidade será calculada de acordo com os limites dentro dela

Vou então calcular a probabilidade de ter menos de 250 acessos:

Se fossemos fazer na “mão”, poderia calcular a integral:

Fonte

Mas vamos padronizar e usar a variável Z.

E usar o scipy.stats e o módulo norm:

Obtendo a variável Z, através do cálculo:

Então passar o norm.cdf():

Pronto 73,66% de chance!

Poderíamos utilizar a tabela Z para encontrar o valor.

Se deu 0,63 lá atrás é só pegar o valor da coluna da esquerda e somar o valor da linha da direita e chegar na célula correta:

Fonte

Poxa, mas deu diferença.

A do Scipy estará mais precisa.

E a probabilidade entre 150 e 250?

Assim encontramos o valor do limite inferior e do superior (z1 e z2):

Por serem valores espelhados (já que é simétrico) são + e -

Calculamos o .cdf superior e subtraímos o inferior:

Pronto 47,32%!

E mais de 350 acessos?

Primeiro, descobrimos o Z:

Olha essa dica:

Se calcularmos a área até o limite do Z vai ser o .cdf(z), como calcular o lado oposto?

Com o Z negativo:

2,88% de chance de se ter mais de 350 acessos!

Teorema do limite central e Intervalo de confiança

Você já deve ter ouvido falar de amostras estatísticas para se estimar uma população.

Em resumo são pequenas partes de uma população, no qual representam o todo dela.

Mas como medir se elas estão de fato representando a população?

Bom…

O teorema do limite centralafirma que quando o tamanho da amostra aumenta, a distribuição amostral da sua média aproxima-se cada vez mais de uma distribuição normal”.

Meio confuso?

Vamos lá…

Ao extrair várias amostras de uma população, a distribuição das médias dessas amostras será uma curva normal.

O desvio padrão dessas médias é conhecido como erro padrão da média.

Que multiplicado pelo limite da função (z) chegará aos valores dentro do intervalo de confiança.

Fonte

Equação do intervalo de confiança

Fonte

Os 3 níveis de confiança mais utilizados são:

90 %

95 %

99 %

E seus respectivos Z’s:

1.645

1.96

2.575

A partir destas informações em conjunto com o norm, consigo medir o intervalo de confiança.

Vamos imaginar esse cenário:

A quantidade de empréstimos da biblioteca de São Francisco (se lembra do meu artigo?) possuem um desvio padrão populacional igual a 453.7. Selecionada uma amostra aleatória de 1000 usuários, obteve-se um valor médio de 145.47. Informe um intervalo de confiança para a média populacional assumindo um nível de significância de 10, 5 e 1%.

Nesse caso usamos o .interval () com os parâmetros e já conseguimos ver os conjuntos de valores com intervalos entre 90% e 99%.

Alpha = nível de significância (99%, 95%, 90%)

Loc = media amostral (145.47)

Scale = desvio padrão / tamanho da amostra²

Quanto mais preciso, maior a variação.

Entender esse aspecto é importante para lá na frente validar outros modelos.

Considerações finais

Probabilidade é um campo onde devo me aprofundar muito mais. O que eu estudei só me mostrou o quão pequeno foi dentre a profundidade que pode se chegar.

O livro é excelente, mas aqui nesse ponto eu já senti um pouco mais de dificuldade se fosse aprender apenas por ele. Não é um tema que vi na faculdade (como estatística descritiva) e tinha estudado pouco, antes deste momento.

Mas consegui ter uma visão e entendimento muito melhor com o curso de estatística com python 2 da Alura:

Eu fico bastante animado pela possibilidade de poder dominar as teorias da probabilidade e suas aplicações no mundo da tecnologia.

Se você quer estudar mais sobre, super indico esse podcast do Data Hackers:

E também esse o livro de Leonard Mlodinow:

Link na amazon

No qual ele descreve o quanto não estamos preparados para o acaso. Ainda não o li por completo, mas considero uma leitura muito interessante para quem está querendo entender estatística por outras perspectivas.

Agora me diga, você ficou mais interessado nas teorias da probabilidade?

Se você chegou até aqui e curtiu, dê o claps, compartilhe e se inscreva para me acompanhar.

Ainda há muito a se explorar…

--

--

Francisco Foz
Francisco Foz

Written by Francisco Foz

Bibliotecário | Analista de dados | Disseminando informações para produzir conhecimento.

Responses (1)