Você está na página 1de 35

DESTAQUES

Como Utilizar Machine Learning para Prever Preços


de Ações da Bolsa de Valores - O Estudo de Caso
Completo.
Escrito por Rodrigo Santana
em maio 19, 2017

JUNTE-SE A MAIS DE 30.000 PESSOAS.

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

 Seu melhor e-mail Quero me Inscrever na Lista VIP


Você gostaria de ganhar dinheiro com ações na Bolsa ? Já pensou como Machine Learning
poderia te ajudar nessa empreitada?

O fato é que o mercado de ações é algo bem complexo,pois, existem diversos fatores que
in uenciam no preço dos ativos

Fatores estes que sao difíceis de prever, ou ainda, que estão fora do controle até mesmo de
pro ssionais da área.

Esse assunto tem interessado muita gente e existem vários estudos que buscam criar estratégias
vencedoras na bolsa.

Como por exemplo, robôs que automatizam as estratégias e operam de forma automática.

Nesse artigo vamos utilizar os preços de uma ação para criar um modelo que irá predizer o valor
de fechamento desta.

O objetivo aqui é usar Machine Learning para predizer um valor futuro de uma ação baseado em
seu histórico.

Resumo da ópera:

Dados de Preços e Código

Explorando o Dataset

Visualização de Dados

Como funciona a Regressão Linear?

Gradient Descent

Treinando o modelo e fazendo previsões

Validando o modelo

Podemos melhorar o modelo?

Conclusão

Se você já gostou do assunto desse artigo, não deixe de compartilhar com seus amigos para que
cada vez mais pessoas aprendam sobre Machine Learning pode ser usado no mercado de ações.

Aproveite e assine nossa lista para car sempre atualizado com novas postagens.

[shareaholic app=”share_buttons” id=”26541438″]

[epico_capture_sc id=”1002″]
Dados de Preços e Código

O Google Finance é um portal muito interessante onde são disponibilizadas diversas


informações sobre Ações e mercados.

Na página de uma ação é possível consultar informações de preços, notícias, balanços e muito
mais.

E o mais legal

É possível exportar dados de forma fácil e sem burocracia, tudo isso gratuitamente

Veja a página da PETR4, ação da PETROBRAS.

Para este artigo utilizei os dados históricos de preços da PETR4 (ações da petrobras) de janeiro
de 2010 até abril de 2017.
São dados diários com valor de abertura, valor da máxima, valor da mínima, valor de fechamento
e volume do dia.

Ou seja, são dados de valores diários da ação nesse período.

Exportei os dados utilizando o link Historical Prices a esquerda da pagina

Mas não se preocupe, você pode fazer download dos dados aqui

Para acompanhar o artigo segue o notebook com todos os scripts que usei nesse artigo, aqui

Explorando o Dataset

Com os dados em mãos vamos visualizar e entender como está sua estrutura.

O primeiro a ser feito é usar o famoso Pandas para ler o arquivo de dados e já exibir a estrutura
do arquivo

Dica: Caso você não tenha o pandas instalado, veja como instalar essa e outras ferramentas
fundamentais para trabalhar com Big Data no artigo 10 Melhores Ferramentas e Bibliotecas
para Trabalhar com Mineração de Dados e Big Data.

import pandas as pd
dataset = pd.read_csv('petr4_1_2010_11_2017.csv')
dataset.head()
Como você pode ver, no dataset temos as colunas mencionadas acima.

Vamos converter a coluna Date para um formato de data propriamente dito (datetime), pois,
esta informação está como do tipo string.

Para fazer isso, use o comando abaixo:

dataset['Date'] = pd.to_datetime(dataset['Date'])

Pronto, o comando acima usa a função to_datetime do próprio pandas para converter os valores
da coluna Date.

Para ver se funcionou corretamente utilize a função head() novamente:

dataset.head()

A função describe do pandas, nos dar uma ótima visão da base de dados, veja:

dataset.describe()
Variação dos preços
Veja que temos um total de 1802 linhas, a média, desvio padrão e várias outras informações por
colunas.

Como temos dados diários, é importante saber a variação entre o preço de abertura e
fechamento do dia.

É comum vermos nos noticiários, coisas como: “Ação X teve 5% de alta no dia de hoje”

Ou

“Acao Y caiu 3% no dia de hoje”

Essa alta ou queda podemos denominar de percentual de variação entre o preço de abertura e
fechamento do dia.

O dataset não contém essa coluna, mas podemos gerá-la com a ajuda do pandas:

dataset['Variation'] = dataset['Close'].sub(dataset['Open'])

Pronto, criamos uma coluna chamada Variation que representa a diferença entre o preço de
abertura e fechamento do dia.

Visualize usando o método head().

dataset.head()

Visualizacão de Dados
Vamos agora plotar os dados em um grá co para uma visualização mais geral.

Para isso iremos plotar o preço de fechamento da ação e a data, dessa forma podemos ver o
histórico de preços da ação no período

Para isso usaremos a biblioteca Plotly, pois essa, contém pacotes para plotagem de dados de
mercado nanceiro além de ser bem elegante

Para instalar a biblioteca é bem facil, use o comando pip, veja:

pip install plotly

Depois de instalar, Importe a biblioteca e habilite o modo of ine

import plotly.of ine as py


plotly.of ine.init_notebook_mode()

Em seguida use o código abaixo para plotar os valores da ação no período


x1=dataset.Date
y1=dataset.Close
data = [go.Scatter(x=x1, y=y1)]
layout = go.Layout(
xaxis=dict(
range=['01-01-2010','11-04-2017'],
title='Ano'
),
yaxis=dict(
range=[min(x1), max(y1)],
title='Valor da Acao'
))
g = go.Figure(data = data, layout = layout)
py.iplot( g)

O grá co acima mostra o histórico de preço da ação no período da nossa base.

Podemos ver que de lá pra cá o preço da ação só caiu hein?

Mas isso não tem nenhuma relevância neste artigo.

No mercado de ações é bem comum plotar dados de preços (abertura, alta, mínima e
fechamento) no padrão candlesticks.

Candlesticks?
Este formato representa os dados na forma de “vela”, onde o corpo, a cor e as pontas
representam bem os valores.

No nosso artigo, como temos dados diários de preços, cada candle será referente a um dia

Para entender como é formado o grá co de candlestick, veja o grá co de 7 dias abaixo:
A vela é formada por um corpo e por traços, onde um traço longo para cima, signi ca uma alta
signi cativa e o contrário nos traços longos para baixo.

O corpo é composto do valor de abertura e fechamento, a vela verde signi ca que o preço
fechou positivo, ou seja, maior que o valor de fechamento do dia anterior.

E um corpo vermelho signi ca que o preço da ação fechou negativo com relação ao dia
anterior.

O tamanho da vela signi ca variação do preço.

É bem simples interpretar um grá co de candlesticks, aqui você encontra uma explicação mais
completa.

Com o código abaixo plotamos um grá co dos últimos 6 meses. Lembre-se: cada candle é
referente a um dia.

# candles dos ultimos 6 meses..


dataset2 = dataset.head(180)
dados = go.Candlestick(x=dataset2.Date,
open=dataset2.Open,
high=dataset2.High,
low=dataset2.Low,
close=dataset2.Close,
)
data=[dados]
py.of ine.iplot(data, lename='gra co_candlestick')

A variação dos preços é algo interessante também de plotar, veja o grá co abaixo e perceba
como a preço dessa ação variou.
import matplotlib.dates as mdates
import datetime as dt

x = dataset['Date']
y = dataset['Variation']

plt.plot_date(x,y, color='r',fmt="r-")
plt.xticks(rotation=30)
plt.show()

O grá co acima ca claro a variância dos preços no período acima.


[epico_capture_sc id=”1002″]

Existe alguma correlação entre alguma variável e a


classe ?
È legal olhar para o dado para ver se existe uma correlação das features com a classe.

Por exemplo, o preço de abertura é um valor que está próximo do preço de fechamento?

Existe uma correlação entre essas duas variáveis?

No grá co abaixo plotamos os dados de abertura e fechamento no período de 100 dias atrás

x = treino.Open[:100]
y = treino.Close[:100]
plt.scatter(x,y,color='b')
plt.xlabel('preco de abertura')
plt.ylabel('preco de fechamento')
plt.axis([min(x),max(x),min(y),max(y)])
plt.autoscale('False')
plt.show()
Podemos ver que entre 13,00  até 14.50 os preços de abertura e fechamento estão distantes,
mas de 15,00 em diante estes se aproximam mais.

Isso mostra que existem uma grande variação entre o preço de abertura e fechamento.

E o se plotarmos o preço de alta e o preço de fechamento ?

Obs: Os códigos para plotar os grá cos abaixo é o mesmo, só alterar o valor de x. Está tudo no
notebook, aqui

Talvez possamos dizer o mesmo acima, a medida que o preço vai aumentando esse varia menos
do preço de fechamento.

Veja o preço de mínima e o preço de fechamento.


Aqui a variação é maior ainda.

E por m, vamos analisar o volume e o preço de fechamento.

O grá co acima é interesse que mostra que os preços de fechamento mais altos estão mais
concentrados em volumes “médios”, concorda?

Como funciona a Regressão Linear?


Na área de Machine Learning Regressão Linear é algo bem comum.

Mas como isso funciona realmente?

É simples você vai ver.

Basicamente, a Regressão Linear é uma técnica que consiste em uma equação linear que usa
valores de entrada para predizer valores de saída.

Essa equação utiliza coe cientes que são aplicados a valores de entrada para predizer as saídas.

Esses coe cientes, nesse artigo vou chamar de pesos, acho que facilita mais o entendimento ok?

Os pesos são aplicados aos valores de entrada, para a regressão linear temos pesos para cada
valor de entrada.

Os pesos são importantes, pois, ditam como será o nível da regressão, se é algo mais complexo ou
mais simples.

O objetivo é aplicar os pesos nos dados de entrada para tentar predizer um valor de saída mais
próximo possível do valor real.

Os pesos são ajustados conforme o erro entre o valor real e o valor predito (vou falar mais sobre
a função que calcula esse erro mais a frente).

Vejamos um exemplo..
Imagine que temos os dados de entrada (x1,x2,x3) e a saída (y) em {x1, x2, x3, y}

Os pesos vamos chamar de p0,p1,p2,p3


Teríamos a seguinte equação :

y = p0 + p1 * x1 + p2 * x2 + p3 * x3

A equação mostrada acima gera um valor de saída que quando plotado em um grá co pode ser
representada como uma linha reta  (lembra do linear ?).

Por exemplo:

Imagina que os valores de preços de uma dia da PETR4 seja:

Abertura= 12,30

Máxima = 12,35

Minima = 12,20

Fechamento = ?

Agora iremos tentar predizer um valor de fechamento com a equação mostrada acima:

Para os pesos temos os valores:

p0 = 1

p1 = 0,7

p2 = 0,06

p3 = 0,08

Aplicando os valores a equação:

y = p0 + p1 * x1 + p2 * x2 + p3 * x3

1 + 0,7 * 12,30 + 0,06 * 12,35 + 0,08 * 12,20

10,84 + 0,74 + 0,97 = 12,55

Após aplicar a equação nos dados de exemplo tivemos um resultado de predição 12.55

O próximo passo é veri car esse valor com o valor real, e calcular o erro disso.

Por exemplo, se o valor real do fechamento do dia for 12,33 temos que calcular o erro (entre o
valor predito e o valor real) e ajustar os pesos novamente.
Esse processo é feito durante todo o processo de treinamento do algoritmo.

Agora que você entendeu como a predição é  feita podemos dizer que os valores preditos podem
ser plotados em grá co como uma reta simples. Veja:

No grá co acima, a linha azul seria nossa reta, ou seja, as saída da regressão linear.

Os pontos seriam os dados reais.

A distância entre os pontos e a reta são os erros de cada predição.


[epico_capture_sc id=”1002″]

Gradient Descent

O que queremos é que os erros sejam minimizados, ou seja, queremos que nosso modelo erre
menos possível
O Gradient Descent é a função usada para minimização do erro dos pesos do modelo

Como falado anteriormente os erros são calculados usando técnicas como Mean Squared Error.

Essa técnica calcula o erro médio quadrático entre o valor predito pelo modelo e o valor real.

O Gradient Descent utiliza todos os dados de treinamento de forma interativa para medir o
valor dos pesos e fazer os ajustes para que estes errem menos possível

Esse processo é realizado utilizando todas instâncias do treino e os ajustes são feitos
gradativamente até que o erro chega a zero.

Para usar essa função é preciso parametrizar a taxa de aprendizado. Essa determina qual o nível
de aprendizado em qual iteração do algoritmo.

Vamos chamar esse parâmetro de alpha.

Vejamos um exemplo..
Como mostrado acima, nosso modelo utiliza a equação:

Y = p0 + p1 * x

Isso signi ca que temos o peso p0 + p1 multiplicado pelo valor de entrada (dados de treino).

Ok, agora como calcular o erro?

Imagine os seguintes valores:

p0= 1

p1 = 0.9

x1 =12,30 (o valor de entrada)

Y = 12,33 (valor real)

Agora vamos jogar isso na equação acima:

Y = 1 + 0.9 * 12.30

Y = 12,07

O valor predito foi 12,07, agora vamos calcular o erro:

erro = 12,07 – 12,33


erro = -0,26

Agora que sabemos o quanto é o erro de predição, temos que atualiza os valores dos pesos para
tentar minimizar novos erros.

Update weights..
É isso que o Gradient Descent faz.

A seguinte equação será usada para atualização do peso p0 onde p0(+1) signi ca o novo valor de
p0 e alpha signi ca o valor da taxa de aprendizado como falado anteriormente.

O erro é o valor obtido anteriormente.

Vamos de nir alpha como 0.01

p0(+1) = p0 – alpha * error

Calculando..

p0(+1) = 1 – 0.01 * -0,26

p0(+1) = -0,25

Pronto, já temos o novo valor de p0

Vamos agora fazer o mesmo para p1.

A única diferença é que agora o valor de entrada é usado na equação, pois, o valor de p1 deve
ter in uência do valor de entrada.

p1(+1) = p1 – alpha * error * x1

p1(+1) = 0.9 – 0,01 * -0,26 * 12,30

p1(+1) = 0,93

Pronto, conseguimos realizar a primeira iteração do Gradient Descent.

Agora temos que atualiza os pesos p0 para -0,25 e p1 para 0,93.

O Gradient Descent repete esse processo para cada instância dos dados de treinamento até os
pesos se ajustarem com o mínimo de erro.

A cada ciclo completo damos o nome de época.


Uma imagem vale mais que mil palavras…

A imagem acima ilustra bem o processo de convergência do Gradiente Descent.

Podemos observar que após várias épocas se consegue chegar no ponto mínimo de erro.

Treinando o modelo e fazendo Previsões

Agora que entendemos como a Regressão Linear funciona, vamos treinar o modelo

Queremos predizer o preço de fechamento de um dia da Petr4 certo?

Pois bem, vamos excluir da nossa base de treino a coluna com esses valores.

Para isso vou criar um novo dataframe que conterá somente as colunas necessárias para treinar
o modelo

features = ['Open','High','Low','Volume']
treino = treino[features]

Ok, o dataframe treino só contém as seguintes colunas:

treino.head(10)

Perceba que não temos mais o preço de fechamento nesse dataframe, pois, é justamente isso
que queremos predizer.
Vamos criar um dataframe simples que conterá somente o valor de fechamento, este será usado
pelo modelo para ajustar os pesos lembra ?

y = dataset['Close']

Queremos um modelo que seja capaz de predizer um preço de fechamento para uma ação se for
lhe passado os preços de abertura, alta, mínima e volume.

Mas, antes de fazer predições vamos entender como validar o modelo.

A forma mais e ciente de validar o modelo é com dados que este ainda não viu, ou seja, treina o
modelo com uma parte do dado e testar este com outra parte do dado.

Split Dataset
A parte que será usada para treinar o modelo chamamos de treino e a parte que usaremos para
testar chamamos de teste.

Dessa forma, o modelo é treinado com uma parte e testado com outra, como em uma situação
real.

Usaremos o scikit-learn para fazer essa divisão dos dados para nós, com o método
tran_test_split ca fácil, veja:

X_treino, X_teste, y_treino, y_teste = train_test_split(treino, y, random_state=42)

Não se assuste com o código acima, o que ele faz é dividir o dado em 75% dos dados
aleatoriamente para treino e restante para teste.

O nome já fala por si só, o dataset X_treino recebe a porção de dados que iremos usar para
treinar o modelo.

Este contém apenas os dados, sem as classes, veja:

X_treino.head()

As classes estão em y_treino, veja:

y_treino.head()

O dataset X_teste estão os dados que iremos usar para testar o modelo (dados que o modelo não
conhece) veja:

X_teste.head()

E as classes deste estão em y_teste, imprima para visualizar.

Vamos criar o modelo, para isso crie um objeto do tipo LinearRegression da biblioteca Scikit-
learn.

lr_model = LinearRegression()
O meu objeto chama lr_model, agora vou usar o método t() para treinar o modelo.

lr_model. t(X_treino,y_treino)

O método t() imprime a saída do modelo treinado, mostrando as con gurações de nidas, nesse
caso usamos as opções padrões.

Com o modelo treinado, podemos visualizar os pesos, lembra deles?

Use o comando abaixo:

Lr_model.coef_

Interessante observar que o peso associado a feature valor de abertura (OPEN) está negativo,
isso mostra que a maioria dos valores de abertura estão muito acima do valor de fechamento.

Prevendo preços
Para predizer alguma coisa é fácil, use o método predict()

No exemplo abaixo vou usar o dataset X_teste , ou seja, vou passar a parte dos dados separados
para teste para testar o modelo.

lr_model.predict(X_teste)[:10]

Veja, que os preços de fechamento foram preditos pelo modelo, (neste exemplo estou
imprimindo apenas 10)

Compare os valores de fechamento preditos pelo modelo com os valores reais imprimindo o
dataset y_teste(real) e o retorno do método predict() (predict (X_teste))
[epico_capture_sc id=”1002″]

Validando o modelo
Imprimir os resultados é bom para bater o olho e ver a coisa funcionando.

Mas, para validar um modelo, precisamos de uma métrica.

Existem várias, nesse artigo irei utilizar a Root Mean Square Error. Esta é muito usada para
medir as diferenças entre os valores reais e preditos pelo modelo.

Essa diferença é normalmente chamada de resíduos que são calculados a partir do desvio padrão
dos erros de predição.

Como o RMSE tem a mesma variável que a unidade dependente, por exemplo, no nosso caso, se
o valor de fechamento de um dia foi 12,25 e o modelo previu 12,35 teríamos uma diferença de
0,10 (centavos) retornados pelo RMSE.

Com isso poderíamos dizer  que o erro médio é de 10 centavos.

Vamos validar o modelo usando a RMSE, o código abaixo calcula isso, veja:
RMSE = mean_squared_error(y_teste, lr_model.predict(X_teste))**0.5
RMSE

No código acima, passamos o valor real dos preços (y_teste), a função e o dataset de teste para
função predict().

Após isso multiplicamos duas vezes por 0.5 para obter o RMSE.

O erro apresentado foi de 0.15, ou seja, tivemos 0.15 centavos de erro médio em nossas
predições.

Nada mau hein

Podemos melhorar o modelo ?


E se construíssemos outro modelo? Será que nossa regressão melhoraria?

Um modelo que use só o preço de abertura e a máxima do dia pode ser interessante para
predizer o preço de fechamento?

Vamos testar.

Vou instânciar outra variável que será o novo modelo “lr_model2”.

lr_model2 = LinearRegression()
features = ['Open','High']
treino2 = treino[features]

Veja como cou o novo treino:

treino2.head()

Dividindo o dado…

X_treino, X_teste, y_treino, y_teste = train_test_split(treino2, y, test_size=0.33, random_state=42)

Treinando o modelo…

lr_model2. t(X_treino,y_treino)

Validando o modelo..

RMSE = mean_squared_error(y_teste, lr_model2.predict(X_teste))**0.5


RMSE

Nessa con guração tivemos um erro maior, o modelo se saiu pior na regressão

Tivemos um erro de 0.24, ou seja, um erro médio entre os valores preditos de 0,24.

Isso mostra que apenas as features de preço de abertura e máxima não é legal para predizer um
valor de fechamento.

Você pode fazer outros testes, usando outras con gurações para construir o modelo.
Conclusão
Na área de Big Data, Regressão Linear é uma técnica bastante usada e muito famosa por
apresentar resultados interessantes.

Nesse artigo vimos como funciona a Regressão Linear através de exemplos simples.

Após isso, usamos uma base real de preços da ação da Petrobras (PETR4) para aplicar uma
Regressão Linear usando Machine Learning.

Vimos que é possível usar essa técnica para tentar predizer valores de preços com um erro baixo.

Se você gostou desse artigo, não se esqueça de assinar nossa lista de e-mails para receber todo
conteúdo de forma gratuita e também compartilhe com seus amigos!

Vamos criar uma comunidade de mineradores

[epico_capture_sc id=”1002″]

TAGS: data-science machine_learning; python python

Artigos Relacionados
CONCEITOS E FUNDAMENTOS CONCEITOS E FUNDAMENTOS DESTAQUES

Saiba mais sobre a Entenda a importância do Tutorial Completo de Como


linguagem Python Big Data para o Marketing Trabalhar com a Biblioteca
Digital Seaborn

DESTAQUES

Prevendo a Demanda de
Alugueis de Bicicletas com
Machine Learning

Ver mais

Hey,
o que você achou deste conteúdo? Conte nos comentários.

Joni Santos , maio 25, 2017 às 2:44 am

Muito didático e design excepcional! Parabéns Rodrigo! Estou começando a car mais familiarizado com Python, vivo ainda
no mundo R. Um grande abraço! Parabéns pelo trabalho de compartilhar conhecimento em português! Saudações da
Aquarela Advanced Analytics do Sul

Rodrigo Santana Ferreira , maio 25, 2017 às 2:24 pm

Grande Joni, tudo bem cara?


Que bom que gostou do artigo. Venha para o mundo python, é legal quanto o R.
Abraço e obrigado pelo comentário.
Samuel Zimmermann , junho 27, 2017 às 9:44 pm

olá!
parabéns pela postagem !
sou um jovem aprendiz de python e não sei muito sobre Machine Learning
mas se o fato de fazer regressão linear é Machine Learning então eu seu alguma coisa,
sei alguns métodos numéricos.
então minha pergunta é se não poderíamos pensar em ajuste de curva com método de mínimos quadrados?
talvez conseguiríamos mais proximidade?
grande abraço e parabéns o/ python 4ever!! !o/

Rodrigo Santana Ferreira , junho 28, 2017 às 1:16 am

Olá Samuel, tudo bem cara? obrigado pelo comentário.


Respondendo a sua pergunta, Regressão Linear é sim Machine Learning amigo, você já sabe sim.
Quanto ao ajuste da curva, se entendi bem o que você quis dizer, é possível ajustar a curva sim, para isso tem
que otimizar o modelo para geração boa dos pesos.
Grande abraço e conte com a gente para você aprender Machine Learning. Aqui no blog tem vários posts pra
quem quer começar do zero. =)
Um abraço.

Samuel Zimmermann , julho 24, 2017 às 8:29 pm

Estudei todo o seu poste, depois de algumas di culdade de iniciante, consegui ir até o nal, ainda não consegui
dominar a técnica, mas estive lendo nos pacotes no site do python e vi que a biblioteca sklearn tem outras
formar de fazer regressões. mais um vez muito obrigado e parabéns pelo Artigo.
poderiamos ter um contato? sou Licenciado em Matemática, mas gosto muito de matemática aplicada e
modelagem deixo meu email aqui para podermos conversar mais… ssz.profmat@gmail.com
att,
Samuel

Rodrigo Santana Ferreira , julho 26, 2017 às 12:12 pm

Olá Samuel, que bom que conseguiu ir até o nal do post. Fico feliz de ter te ajudado amigo.
Com certeza, é possível fazer regressão de outras formas sim, e é claro que podemos ter mais contato, tanto por
aqui ou por e-mail.
Um abraço, farei contato com você
Gustavo Vzfo , junho 30, 2017 às 8:17 pm

Parabens!! Rodrigo muito bem explicado .


Valeu
Abraço!

Rodrigo Santana Ferreira , julho 3, 2017 às 11:50 am

Obrigado pelo comentário Gustavo.


Que bom que gostou do artigo, tamo junto amigo.

Bruno Henrique , dezembro 24, 2017 às 8:12 pm

Parabéns pelo artigo. Muito bem detalhado.

Rodrigo Santana Ferreira , dezembro 25, 2017 às 6:27 pm

Olá Bruno, Que bom que você gostou. Forte Abraço!

Luiz Fernandes , janeiro 9, 2018 às 3:37 pm

Parabéns muito bom o artigo.


Estou com um problema no código, podem me ajudar?
init_notebook_mode
raise ImportError(‘`iplot` can only run inside an IPython Notebook.’)
ImportError: `iplot` can only run inside an IPython Notebook.

Rodrigo Santana Ferreira , janeiro 16, 2018 às 11:41 am

Olá Luiz, tudo bem? pelo que entendi do erro, você tentou executar o arquivo de notebook? para usar o script
notebook você precisa da ferramenta jupyter. Nesse e-book ensinamos como instalar essa ferramenta, da uma
olhada, forte abraço. https://minerandodados.kpages.online/ferramentas-datascience

Antonio Marcos , janeiro 12, 2018 às 4:59 am

Artigo didático e detalhado! Muito bom!


Parabéns!

Rodrigo Santana Ferreira , janeiro 16, 2018 às 11:42 am

Obrigado Antonio, que bom que gostou. Abraço!


Octávio Santana , janeiro 12, 2018 às 7:25 pm

Você sabe dizer pq aqui no meu notebook não aparece o link “historical price” para fazer download? No demais, foi bem
explicativo.

Carlos Augusto Chiarelli , janeiro 15, 2018 às 1:58 pm

Tenho o mesmo problema! Onde encontrar os dados de fechamento de mercado?

Rodrigo Santana Ferreira , janeiro 16, 2018 às 11:45 am

Olá Carlos, tudo bem? Também veri quei e parece que o portal do google nance não está mais disponível. Você
pode obter os dados usando o Yahoo Finance, veja esse link
https:// nance.yahoo.com/quote/PETR4.SA/history?p=PETR4.SA
Forte Abraço!

Carlos Augusto Chiarelli , janeiro 16, 2018 às 5:27 pm

Obrigado Rodrigo! Parabéns pelo trabalho, melhor page de Data Science que conheço.

Rodrigo Santana Ferreira , janeiro 17, 2018 às 9:41 am

Opa, obrigado Carlos, que bom que está gostando do nosso conteúdo. Forte Abraço!

Rodrigo Santana Ferreira , janeiro 16, 2018 às 11:45 am

Olá Octavio, tudo bem? que bom que gostou do artigo. Também veri quei e parece que o portal do google
nance não está mais disponível. Você pode obter os dados usando o Yahoo Finance, veja esse link
https:// nance.yahoo.com/quote/PETR4.SA/history?p=PETR4.SA
Forte Abraço!

Carlos , março 7, 2018 às 1:45 pm

Excelente artigo, Rodrigo gostaria de saber se vc, nao teria algum curso (em vídeo), ou alguns materiais que possa me
indicar, para aprofunde mais no assunto, pois estou querendo usar o assunto como tema do meu TCC.
Cristhian Miguel , março 21, 2018 às 1:03 am

Olá, muito bom o artigo!


Uma dúvida, na parte “dataset[‘Variation’] = dataset[‘Close’].sub(dataset[‘Open’])” está acontecendo o seguinte erro:
TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’
Poderia ajudar?
Obrigado!

Rodrigo Santana Ferreira , março 21, 2018 às 2:35 pm

Olá Cristhian tudo bem?


Não estou tendo o mesmo erro, você baixou a base diretamente aqui do artigo ou pegou em outro site?
Testei com a base que coloquei no github (link aqui no artigo) e funcionou normalmente.
Outra coisa, como está usando o comando acima?
Um Abraço.

Cristhian Miguel , março 21, 2018 às 4:47 pm

Olá, tudo bem sim e você?


Eu peguei do Yahoo.
Estou usando exatamente na mesma ordem que você postou.
Att.

Rodrigo Santana Ferreira , março 22, 2018 às 1:35 pm

Oi Cristhian, me parece que ao ler o arquivo algumas colunas foram lidas como string.
Ao dar o comando dataset.info() o que é retornado? Este comando mostra os tipos das colunas.
Tenta ler o arquivo forçando o tipo correto:
dataset = pd.read_csv(‘petr4_1_2010_11_2017.csv’, dtype=
{‘Open’: oat,’High’: oat,’Low’: oat,’Close’: oat,’Volume’:int})
Acredito que isso vai resolver.
Um Abraço!

Cristhian Miguel , março 23, 2018 às 3:55 pm

Oi Rodrigo, muito obrigado, consegui consertar o erro!


Mais uma dúvida – desculpe ser chato rs -, como faço para aplicar o Gradient Descent? Quero que ajuste os
pesos e vá retreinando até o erro zerar.
Como posso fazer isso?
Abraços!

Rodrigo Santana Ferreira , março 27, 2018 às 2:18 pm

Olá Cristhian, tudo bem?


O Gradiente Descent já é utilizado na atualização dos pesos. O erro é minimizado a medida que os dados são
treinados.
Entendeu?
Ronaldo Dametto , abril 25, 2018 às 6:33 pm

Olá Rodrigo, parabéns pelo artigo, muito didático!


Gostaria de tirar uma dúvida com relação a geração dos valores preditos. Você usou valores já existentes, mas se você quer
gerar para os próximos 10 dias, você ainda não tem esses valores, com isso, que valores você passaria em X_teste?
lr_model.predict(X_teste)[:10]

Rodrigo Santana Ferreira , maio 29, 2018 às 1:53 am

Olá Ronaldo, que bom que você gostou do artigo


No exemplo do artigo eu passei de valores para estre predizer o fechamento destes. Isso é diferente de pedir o
modelo para predizer os próximos 10 dias, entendeu?
Se você quer predizer os valores dos próximos 10 dias, vc precisa treinar o seu algoritmo para que este consiga
predizer T+ 10 por exemplo.
O que normalmente se faz, é treinar o algoritmo com “resultado dia seguinte” dessa forma ao passar os dados
de fechamneto do dia corrente, o algoritmo prediz a saída do próximo dia.
Espero que tenha conseguido te ajudar.
Obrigado pelo comentário, um abraço!

lincoln amaral sotto , julho 13, 2018 às 5:45 pm

Olá Rodrigo, primeiramente gostaria de agradecer por compartilhar, o conteúdo está muito bem produzido,
parabéns.
Quanto a esse trecho: “Se você quer predizer os valores dos próximos 10 dias, vc precisa treinar o seu algoritmo
para que este consiga predizer T+ 10 por exemplo.”
Poderia ser mais claro? dando algum exemplo de como isso pode ser feito?
Desde já muito obrigado.

Rodrigo Santana Ferreira , julho 17, 2018 às 2:52 pm

Claro, o que quis dizer é que se você quer predizer o valor de fechamento de uma ação ou do índice nos 10 dias
seguintes, você precisar treinar o algoritmo para que este aprenda predizer 10 “fechamentos a diante”
Essa não é uma forma muito comum de trabalhar, pois, acredito que seu modelo não teria muita acurácia para
predizer o valor de fechamento de 10 saídas para a frente.
O que é muito usado é você usar um algoritmo de classi cação para predizer se o dia seguinte será de ALTA ou
NÃOALTA.
Para fazer isso você tem que treinar seus dados da seguinte forma:
ABERTURA, MÁXIMA, MINIMA, FECHAMENTO, SAÍDA
dia1: 10.30 10,50 10,38 10,49 ALTA ( dia 2)
dia2: 10:49 10:55 10:45 10:58 NÃOALTA (dia 3)
Da forma acima, seu algoritmo vai aprender a classi car se o dia seguinte será de ALTA ou NÃO ALTA.
Ai no X_teste você vai passar os dados de hoje para predizer o resultado de AMANHÃ, entendeu?
Forte Abraço.
Felipe Moreira Jorge , maio 1, 2018 às 11:22 am

Ótimo artigo!

Rodrigo Santana Ferreira , maio 29, 2018 às 1:39 am

Que bom que gostou Felipe.


Forte Abraço!!

Jivago Bottenberg , maio 25, 2018 às 11:15 pm

Olá, Rodrigo
Esse estudo poderia virar um robô pra já comprar as ações de acordo com esses preços?
Em que plataforma rodaria? MT5?
Ou é só pra te dar a previsão do que vai acontecer, tendo que fazer a compra e a venda na mão.
Abraço

Rodrigo Santana Ferreira , maio 29, 2018 às 1:42 am

Olá Jivago, tudo bem?


Nesse artigo usei os dados da bolsa de valores para exempli car como utilizar a regressão linear e mostrar
como esse algoritmo funciona. Quanto a uma estratégia, isso ca a seu critério, você poderia sim automatizar
um robot para fazer as operações para você usando o MT5 ou alguma outra plataforma que permite isso.
Para uma implementação que geraria um robot, talvez aplicação de indicadores técnicos ou fundamentalistas
poderiam melhorar a e cácia do algoritmo.
Obrigado pelo comentário, qualquer dúvida estou a disposição.
Um Abraço.
Matheus Henrique Dal Molin Rib , junho 5, 2018 às 1:07 pm

Bom dia Rodrigo, você sabe como obter os dados dos mercados futuros da Bovespa, para commodities agrícolas
comercializadas (Soja, Boi Gordo, etc).

Rodrigo Santana Ferreira , junho 7, 2018 às 12:42 pm

Olá Matheus, Tudo bem?


Ainda não sei como obter esses dados, talvez se tiver acesso a um terminal da Bloomberg você consiga.
Por hora, não conheço nenhum portal público que disponibilize esses dados.
Um Abraço.

Matheus Henrique Dal Molin Rib , junho 8, 2018 às 3:14 am

Certo. Essa bloomberg é uma base de dados paga tal como a Thomson Reuters?
Eu vi que tem um pacote no R para extrair os dados dela, contudo não estou conseguindo usar.
Att

Rodrigo Santana Ferreira , julho 17, 2018 às 2:32 pm

Opa, tudo bem Matheus?


Não conheço a base Thomson Reuters.
Um Abraço.

Michel Castro , junho 8, 2018 às 1:34 pm

Olá
Rodrigo, muito legal o artigo, principalmente para mim que sou apenas um entusiasta no assunto…. Tenho uma dúvida qual
técnica utilizou para estimar o “peso”/coe ciente inicial da regressão antes de iniciar o aprendizado??? No seu exemplo seria
os valores de p0=1 p1=0,7 p2=0,06 p3=0,08….. Abs e sucesso!!!

Rodrigo Santana Ferreira , junho 14, 2018 às 4:31 pm

Olá Michel, tudo bem?


Os pesos inicialmente são gerados aleatoriamente, a partir dai o Gradiente Descent irá corrigindo esses
valores.
Obrigado pelo comentário, e que bom que está sendo útil para você.
Abraço!
carlos junior , junho 13, 2018 às 9:20 pm

Olá Rodrigo!
Gostaria primeiramente de parabenizá-lo pelo artigo, material muito bom e extremamente bem explicado!
Mas estou tendo um pequeno problema na hora de importar o Histórico de preços pelo Google Finance, aparece uma
mensagem de erro.
Gostaria de saber se o Google ainda disponibiliza esses dados? e como eu faço para importa-lo?

Rodrigo Santana Ferreira , junho 14, 2018 às 4:13 pm

Olá Carlos, tudo bem?


Me parece que o Google não mais disponibiliza esse portal. Sendo assim, sugiro você baixar os dados pelo
Yahoo Finance, segue o link: https:// nance.yahoo.com/quote/PETR4.SA/history?p=PETR4.SA
Obrigado pelo comentário, um abraço.

Anderson Roberto da Silva , outubro 12, 2018 às 11:27 pm

Existe esta API gratuita:


https://www.alphavantage.co
É muita bem documentada.
Um exemplo para obter os dados por minuto da PETR4.
https://www.alphavantage.co/query?
function=TIME_SERIES_INTRADAY&symbol=PETR4.SA&interval=1min&outputsize=full&apikey=SEU_API_KEY
Gabriel Schneider , julho 3, 2018 às 12:30 pm

Olá, Rodrigo! Parabéns pelo artigo, está muito bem explicado.


Notei que você utilizou os dados históricos com frequência diária, você saberia me dizer por onde consigo dados históricos
com freqüência por minuto? Através do Google Finance eu consegui alguns dados, porém encontrei uma limitação de
aproximadamente 5700 minutos de negociação antecedentes ao atual.
Obrigado!

Rodrigo Santana Ferreira , julho 3, 2018 às 2:06 pm

Olá Gabriel, tudo beleza?


Não conheço um portal que disponibilize nessa frequência que deseja. Der uma olhada também no Yahoo
Finance: https:// nance.yahoo.com/quote/PETR4.SA/history?p=PETR4.SA
Outra opção é você ter acesso ao Metatrader ou a algum terminal da Bloomberg, acho que nesses você
conseguiria.
Um Abraço.

Anderson Roberto da Silva , outubro 12, 2018 às 11:26 pm

Existe esta API gratuita:


https://www.alphavantage.co
É muita bem documentada.
Um exemplo para obter os dados por minuto da PETR4.
https://www.alphavantage.co/query?
function=TIME_SERIES_INTRADAY&symbol=PETR4.SA&interval=1min&outputsize=full&apikey=SEU_API_KEY

Thiago , julho 20, 2018 às 5:52 am

Curti bastante o post, porém, não faz muito sentido pra mim a usabilidade desse método. Por exemplo, quando o mercado tá
aberto a única informação 100% que você tem é o preço de abertura. O máximo, mínimo, e o volume são desconhecidos até
boa parte do pregão (talvez até o nalzinho dele).. Ao meu ver, seria interessante testar essa estratégia, porém utilizando
somente o preço de abertura como input e colocar o output como preço de fechamento esperado.. Apesar de que seria
praticamente impossível calcular os pesos baseando-se apenas no preço de abertura.. O que acha ? Obrigado pelo post !

Rodrigo Santana Ferreira , outubro 3, 2018 às 10:51 am

Olá Thiago tudo bem? Nesse artigo usei os dados de uma forma didática para mostrar o uso da Regressão
Linear. Com certeza em um cenário real, você entraria com os dados de abertura para predizer o fechamento
sim, seria uma estratégia válida. Como você mesmo disse, com poucas features de entrada, o desempenho da
regressão pode não ser dos melhores. É interessante compor o seu modelo com outras features também, como
técnicas de análise técnica por exemplo.
Obrigado pelo comentário, forte abraço!
Evandro Pezzi , outubro 3, 2018 às 10:29 am

Olá Rodrigo. Para este tipo de problema, onde todas as variáveis são quantitativas, com predição quantitativa. Há algum
outro método de ML que pode ser usado, ou somente a regressão linear mesmo?
Obrigado.

Rodrigo Santana Ferreira , outubro 3, 2018 às 10:53 am

Olá Evandro tudo bem?


Primeiramente obrigado pelo comentário.
Sim, pode-se utilizar outras técnicas de Machine Learning. Nesse artigo quis de forma didática exempli car o
uso da regressão linear. Você pode usar classi cação para classi car se o próximo candle (ou dia) será de ALTA
ou NÃOALTA.

Evandro Pezzi , outubro 3, 2018 às 6:08 pm

Certo Rodrigo, obrigado pela resposta.


Estou fazendo no TCC, uma abordagem para prever o preço da bitcoin conforme variação de alguns termos
pesquisados no google. E o trabalho consistirá em testar várias abordagens de ML. Você poderia me sugerir
alguns esquemas de ML que podem funcionar legal para este contexto?
Abraços.

Rafael Assis , outubro 17, 2018 às 3:52 pm

Olá, Rodrigo,
Sou novo na área e quei com uma dúvida em relação ao cálculo do RMSE.
Qual o sentido de “multiplicamos duas vezes por 0.5 para obter o RMSE”?
Abraço!

danielacd , novembro 27, 2018 às 6:36 pm

***
danielacd , novembro 27, 2018 às 6:39 pm

Oi rodrigo! Boa tarde.


Sou nova nesse universo de data science, você poderia me indicar algum curso de imersão ? Eu realmente gostaria de
aprender a fazer predição de preços por meio de Machine learning / data science, mas não sei por onde começar! Obrigada
desde ja!

Rodrigo Santana Ferreira , novembro 27, 2018 às 11:55 pm

Olá Daniela, tudo bem?


Iniciei uma mentoria em Data Science. O objetivo é ajudar as pessoas que querem iniciar nessa área do Zero
mesmo.
É gratuito e acho que seria interessante pra você.
Basta se cadastrar no link: http://bit.ly/2A4wAZE
Um Abraço.

analsb , dezembro 15, 2018 às 11:28 am

Olá Rodrigo,
você sabe me dizer quantos neurônios existem na camada intermediária?
Obrigada

Os comentários estão desativados para esta publicação.

Entre para nossa lista e receba conteúdos exclusivos e com prioridade


Junte-se a mais de 12.457 pessoas

Todos os direitos reservados.

Você também pode gostar