Estatística

Aula

Como fazer Regressão com Statsmodels no Python

, Comment regular icon0 comments

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.

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.

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.

Ad

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

Ad

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:

Ad

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

Ad

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

Ad

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

Ad

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.