Estatística

Aula

Como fazer Regressão com Statsmodels no Python

0Comment Regular Solid icon0Comment iconComment iconComment iconComment icon

Descubra como realizar análises de regressão com Statsmodels em Python. Da preparação de dados ao ajuste do modelo, aprenda instruções passo a passo para aproveitar esta poderosa ferramenta estatística para uma modelagem preditiva robusta.

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.

Statsmodels em Python

Comece baixando os dados para CSV, renomeando-os para "dados-2.csv" para ficar mais fácil de mexer. Vamos usar os pacotes pandas, numpy, statsmodels 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 e também criar uma coluna "Dias". A coluna "Dias" será usada na regressão linear, com ela vamos verificar quando cada ação está crescendo no tempo usando o coeficiente angular.

Transformação para usar o tempo como índice
Transformação para usar o tempo como índice

Matriz de correlação

Antes de começar as regressões, vamos para uma análise muito importante para quem investe: a matriz de correlação. Essa matriz mostra como cada ação é correlacionada. Caso você queira fazer uma carteira de investimentos no futuro, lembre-se de escolher ações correlacionadas negativamente entre elas, assim diminui o risco da carteira. Abaixo está o código para calcular a matriz de correlação:

Cálculo das correlações
Cálculo das correlações

A matriz deve ficar assim ao final:

Matriz de correlação entre as ações
Matriz de correlação entre as ações

Abaixo está o que foi printado pelo python com relação as correlações. Correlações mais positivas:

Empresa 1Empresa 2Correlação
BradescoTim0.957497
TimBradesco0.957497
Domino's pizzaDias0.948813
DiasDomino's pizza0.948813
MastercardDomino's pizza0.921368
Domino's pizzaMastercard0.921368
SantanderAmerican Express Company0.888684
American Express CompanySantander0.888684
TimSantander0.888301
SantanderTim0.888301

Correlações mais negativas:

Empresa 1Empresa 2Correlação
DiasSantander-0.642465
SantanderDias-0.642465
Ford motorsBraskem-0.668737
BraskemFord motors-0.668737
Ford motorsMastercard-0.708027
MastercardFord motors-0.708027
Domino's pizzaFord motors-0.826345
Ford motorsDomino's pizza-0.826345

Regressão linear Simples

Vamos agora de fato utilizar o Statsmodels. Abaixo está o código para fazer uma regressão linear simples entre Ouro e número de Dias.

Regressão linear no Statsmodels
Regressão linear no Statsmodels

A regressão linear traz diversos resultados, veja a tabela abaixo e tente interpretar cada parâmetro:

OLS resultados
OLS resultados

Abaixo está nossa previsão e os pontos observados da realidade:

Previsão vs observado
Previsão vs observado

Não é das melhores regressões né? Vamos olhar para os resíduos também.

Os resíduos se mostram com uma tendência e não simétricos
Os resíduos se mostram com uma tendência e não simétricos

Regressão ARIMA

Se nosso amigo Regressão Linear não consegue prever, podemos procurar outros modelos. Vamos então tentar fazer uma regressão ARIMA(1,1,1) entre o valor do Ouro e o Tempo.

Código python para ARIMA
Código python para ARIMA
Resultado da ARIMA
Resultado da ARIMA
Previsto vs Observado com ARIMA
Previsto vs Observado com ARIMA

Por mais que a previsão parece boa, não podemos nos esquecer de olhar para os resíduos:

Resíduos da ARIMA
Resíduos da ARIMA

Conjunto treino vs conjunto teste

Por mais que a ARIMA tenha tido um ótimo resultado, é bom verificarmos dividindo nossa amostra em dois conjuntos ao menos: conjunto treino e conjunto teste. Vamos dividir pela metade, treinar nosso modelo com o conjunto treino e verificar se no teste ele também possui bons resultados.

Criando o conjunto teste e treino e fazendo nova regressão
Criando o conjunto teste e treino e fazendo nova regressão
Resultados da ARIMA de treino
Resultados da ARIMA de treino

Previsão final:

Teste, Treino e valores observados
Teste, Treino e valores observados

Regressão Multivariada

Caso você não queira trabalhar com ARIMA, é possível fazer uma regressão Multivariada escolhendo ações correlacionadas com a sua para fazer previsões. No exemplo abaixo eu uso o preço da Chevron e o número de Dias para prever o preço da Vale do Rio Doce.

Código python para multivariada
Código python para multivariada
Resultado da Regressão Multivariada
Resultado da Regressão Multivariada
Previsto e observados pela Regressão Multivariada
Previsto e observados pela Regressão Multivariada

Exercícios

Agora faça você:

1) Importe em pandas esse conjunto

2) Faça a matriz de correlação

3) Escolha uma ação e faça uma regressão linear entre ela e os dias. Não pode ser ouro!

4) Escolha uma ação e faça um ARIMA entre ela e o tempo.

5) Escolha uma ação e treine um ARIMA com metade dos dados e depois teste com a outra metade.

6) Desafio: faça uma regressão multivariada que tenta explicar o valor de uma ação usando o tempo e o valor de outra ação como referência.