Estatística

Aula

Calculando probabilidades com Scipy em Python

, editado , 0Comment Regular Solid icon0Comment iconComment iconComment iconComment icon

Descubra como utilizar o Scipy em Python para calcular probabilidades com eficiência e precisão. Este guia completo guiará você pelo processo passo a passo com exemplos reais.

Writer image

revisado por Leon

Edit Article

Material para acompanhar esta aula

Baixe a planilha encontrada aqui no Google Planilhaslink outside website. Usaremos esta planilha para a aula. Baixe ela para CSV, o método mais comum de guardar um banco de dados que pode ser lido por qualquer linguagem (Comma-Separated Values).

Crie um ambiente de desenvolvimento python3 ou utilize ambientes online já prontos como o jupyter lab onlinelink outside website e importe o banco de dados.

Scipy em Python

Comece baixando os dados para CSV, renomeando-os para "dados-3.csv" para ficar mais fácil de mexer. Vamos usar os pacotes pandas, numpy, statsmodels, scipy e matplotlib no python. Abaixo pode ver como importar cada um:

Importação dos pacotes em python
Importação dos pacotes em python

Tempo como índice

Repare que estamos usando decimal="," e thousands="." justamente por nossos dados estarem em português. Agora vamos usar o tempo como índice da nossa tabela de dados. Abaixo está o código para deixar o tempo como índice.

Transformação da coluna Tempo em índice
Transformação da coluna Tempo em índice

Após transformar a coluna Tempo em índice, vamos verificar o quanto o preço do Ouro aumentou no tempo. Repare que estou usando ouro aqui, mas recomendo vocês testarem outros preços de ações. Para saber como cresceu no tempo usamos as funções .diff() ou pct_change().

Histograma da variação do preço do Ouro

Vamos verificar como aparenta nossos dados. Para isso, a melhor forma é realizar um gráfico de histograma como abaixo.

Criando o histograma do preço do ouro
Criando o histograma do preço do ouro

O resultado ficou:

Histograma da variação
Histograma da variação

Repare que este histograma lembra a distribuição normal!

Teste de normalidade

Como nossos dados lembram muito uma distribuição normal, podemos fazer um teste de normalidade para verificar a hipótese que de fato é uma distribuição normal. Para isso usamos o scipy com a função normaltest.

Teste de normalidade com Scipy
Teste de normalidade com Scipy

O resultado deu uma probabilidade muito pequena! Uma probabilidade de 4.0693e-07. Pode ser uma coincidência? Claro que pode, mas a chance é tão pequena que podemos rejeitar a hipótese nula que não há normalidade. Veja abaixo o gráfico da normal plotado com nossos dados:

Distribuição real vs Distribuição normal
Distribuição real vs Distribuição normal

Identificando Outliers

Vamos considerar de agora em diante então que a variação diária dos preços do Ouro seguem uma distribuição Normal. Como isso podemos verificar dias com anomalia. Esses dias com anomalia são chamados de "outliers", dias muito pouco prováveis. Para isso vamos utilizar a distância de 3 desvios padrões para caracterizar que um dado está muito longe da média e é de fato uma anomalia. Essa característica de 3 desvios padrões é muito usada na indústria, mas vocês podem modificar o valor para caso queiram detectar anomalias ainda maiores.

Código para detectar Outliers
Código para detectar Outliers

Os dias detectados como outliers para o Ouro foram:

DiaVariação %
2014-11-069.212306
2014-11-28-8.177172
2014-12-177.559081
2015-10-027.866508
2016-02-088.710089
2016-05-04-10.840477
2016-06-038.437426
2016-10-04-8.755668
2016-11-10-10.078868

Se quiser pode procurar no jornal cada dia desses. Será que aconteceu algo diferente nesses dias?

Devemos investir em Ouro?

Agora que sabemos que a distribuição é Normal, temos dados o suficiente para dizer que Ouro está crescendo no tempo? Para isso precisamos construir um intervalo de confiança do aumento do Ouro usando nossa amostra.

Construção do Intervalo de confiança com Scipy
Construção do Intervalo de confiança com Scipy

Repare que apesar do Ouro ter uma média amostral positiva, ainda não temos dado o suficiente para confirmar que a variação do Ouro é acima de zero.

E se quisermos ter mais certeza, quantas amostras precisamos?

Imagine então que queremos verificar se de fato o Ouro é um investimento seguro. Será que só 3 anos de dados é o suficiente? Quantos dias precisamos para nossa amostra? Vamos ver abaixo como faríamos para ter uma margem de erro de apenas 0,1% no aumento, podendo nos ajudar com a inferência sobre esse investimento.

Tamanho Amostral com Scipy
Tamanho Amostral com Scipy

Qual deverá ser o tema da prova?

Loading icon