Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Machine Learning - Predição de Preços de Bitcoin (Gabriela Viana)

Machine Learning - Predição de Preços de Bitcoin (Gabriela Viana)

PyData BH

August 27, 2019
Tweet

More Decks by PyData BH

Other Decks in Programming

Transcript

  1. Machine Learning: Predição de Preços do Bitcoin Indicação de técnicas

    e ferramentas para estudo através do exemplo de predição de preços do bitcoin
  2. Sobre mim • Cientista de Dados na MaxMilhas • Estudante

    de Ciência de Dados • Participo da coordenação do PyData • Fã de jogos de computador e boa música
  3. Google Collab • Permite utilizar o Notebook no seu navegador

    • Tem a mesma funcionalidade de compartilhamento das planilhas e documentos do Google Docs • Permite ler datasets direto do Google Drive ou através do upload de arquivo usando suas bibliotecas. • Permite importar e rodar scripts • Permite usar GPU no notebook (Tesla K80 GPU)
  4. Google Collab • Importando dados para o Collab ◦ Fazendo

    upload do dataset ◦ Usando do Google Drive Processo detalhado no Notebook: https://colab.research.google.com/drive/1vX-26MCx31lhZk5ikwl24xWwpOXe cfDC
  5. Dados do Bitcoin - Base Pequena Amostra 1 : Dados

    coletados sobre os preços de abertura, maior preço, menor preço,preço de fechamento e volume dos dados do Bitcoin de 18/05/2019 a 31/05/2019. Esse dataset está disponível no Kaggle em: https://www.kaggle.com/frankyano/bitcoin-trading-values
  6. Dados do Bitcoin - Base Grande Amostra 2 : Dados

    coletados sobre os preços de abertura, maior preço, menor preço,preço de fechamento e volume dos dados do Bitcoin de Janeiro/2012 a Agosto/2019. Esse dataset está disponível no Kaggle em: https://www.kaggle.com/frankyano/bitcoin-trading-values
  7. Candlestick no Plotly Express - Na cor verde = preço

    de fechamento maior que abertura - Na cor vermelha = preço de fechamento menor que abertura
  8. Previsão do valor de fechamento Regressão Linear: É uma equação

    linear que usa valores de entrada para predizer valores de saída. Essa equação utiliza coeficientes (pesos) que são aplicados a valores de entrada para predizer as saídas.
  9. Previsão do valor de fechamento yi = Valor predito alfa

    = Constante, que representa a interceptação da reta com o eixo vertical; beta = Inclinação da reta ou coeficiente angular (peso); xi = Variável explicativa (independente); epsilon = Todos os fatores residuais mais os possíveis erros de medição
  10. Previsão do valor de fechamento Equação para o nosso problema:

    y (valor predito) = p0 + p1 * x1 + p2 * x2 + p3 * x3 p0 = Interceptação da reta com o eixo vertical p1,p2,p3 = Pesos a serem calculados pelo modelo x1,x2, x3 = Variáveis usadas na predição
  11. Previsão do valor de fechamento Teste da equação: Valores 12/08/2019

    - Open = 11527.44, High = 11551.57, Min = 11520.00, Close = ? p0 = 1, p1 = 0.03, p2 = 0.91, p3 = 0.04 predito = p0 + p1 * x1 + p2 * x2 + p3 * x3 predito = 1 + (0.03 * 11527.44) + (0.91 * 11551.57) + (0.04 * 11520.00) predito = 11.319,55 real = 11520.00 • Calcular o erro (entre o valor predito e o valor real) e ajustar os pesos novamente
  12. Previsão do valor de fechamento Teste: Prever o valor de

    fechamento com uma base pequena (14 dias) x Base grande (de 2011 a Agosto/2019)
  13. Previsão do valor de fechamento - Base pequena Vamos separar

    o dataset em dados para o treino e para o teste do modelo: treino = df2[['Open','High','Low']] y = df2['Close'] Vamos separar os dados em datasets para treino e teste do modelo: # 25% para teste e 75% para treino X_treino, X_teste, y_treino, y_teste = train_test_split(treino, y, random_state=42)
  14. Previsão do valor de fechamento - Base pequena from sklearn.linear_model

    import LinearRegression # Criar um modelo usando Sklearn lr = LinearRegression() # Treinar o modelo com os dados separados para teste lr.fit(X_treino,y_treino) # Visualizar os pesos calculados para as 3 variáveis (Open, High, Low) lr.coef_ array([-0.31379481, 1.14190692, 0.2543172 ])
  15. Previsão do valor de fechamento - Base pequena from sklearn.linear_model

    import LinearRegression # Mostrar os valores preditos pelo modelo lr.predict(X_teste) array([8695.42081917, 8879.46669906, 8226.97365119, 8458.52824156]) Validação do modelo: Raiz do Erro Médio Quadrático (RMSE), Erro Médio Quadrático (MSE) e Coeficiente de determinação (R2)
  16. Previsão do valor de fechamento - Base pequena Erro Médio

    Quadrático (MSE): Cálculo da média dos quadrados dos erros. Usado para calcular o erro no algoritmo. Quanto menor, melhor Como é calculado: 1. Valores são preditos pelo algoritmo 2. Valores de erros são calculados (Real - Predito) 3. Valores de erros são elevados ao quadrado 4. Valores de erros são somados e é calculada a média dessa soma MSE = mean_squared_error(y_teste, lr.predict(X_teste)) 93969.20236984327
  17. Previsão do valor de fechamento - Base pequena Raiz do

    Erro Médio Quadrático (RMSE): Raiz do erro médio quadrático da diferença entre a predição e o valor real. Usado para visualizar o erro no preço. Quanto menor, melhor. Como é calculado: 1. Valores são preditos pelo algoritmo 2. Valores de erros são calculados (Real - Predito) 3. Valores de erros são elevados ao quadrado 4. Valores de erros são somados e é calculada a média dessa soma 5. Calcula-se a raiz quadrada desse valor RMSE = mean_squared_error(y_teste, lr.predict(X_teste))**0.5 306.54396482371544
  18. Previsão do valor de fechamento - Base pequena Coeficiente de

    Determinação (R²): Quanto (%) o modelo consegue explicar os valores observados. Quanto maior o R², mais explicativo é o modelo, melhor ele se ajusta à amostra Como é calculado: r2 = r2_score(y_teste, lr.predict(X_teste)) -1.089408042829365
  19. Predição do valor de fechamento - Base grande Vamos separar

    o dataset em dados para o treino e para o teste do modelo: treino = df2[['Open','High','Low','Volume_(BTC)','Volume_(Currency)','Weighted_Price']] y = df2['Close'] Vamos separar os dados em datasets para treino e teste do modelo: # 25% para teste e 75% para treino X_treino, X_teste, y_treino, y_teste = train_test_split(treino, y, random_state=42)
  20. Predição do valor de fechamento - Base grande from sklearn.linear_model

    import LinearRegression # Criar um modelo usando Sklearn lr = LinearRegression() # Treinar o modelo com os dados separados para teste lr.fit(X_treino,y_treino) # Visualizar os pesos calculados para as 6 variáveis ('Open','High','Low','Volume_(BTC)','Volume_(Currency)','Weighted_Price') lr.coef_ array([-4.08063873e-01, 7.33343405e-01, 6.74764364e-01, 8.78734592e-04, -2.13809820e-06])
  21. Predição do valor de fechamento - Base grande from sklearn.linear_model

    import LinearRegression # Mostrar os valores preditos pelo modelo lr.predict(X_teste) array([3860.7948276 , 9438.76957157, 356.51081728, ..., 1558.37656488, 402.96236342, 9216.05449338]) Validação do modelo: Raiz do Erro Médio Quadrático (RMSE), Erro Médio Quadrático (MSE) e Coeficiente de determinação (R2)
  22. Predição do valor de fechamento - Base grande Erro Médio

    Quadrático (MSE): Cálculo da média dos quadrados dos erros. Usado para calcular o erro no algoritmo. Quanto menor, melhor MSE = mean_squared_error(y_teste, lr.predict(X_teste)) 19.74504531232648
  23. Predição do valor de fechamento - Base grande Raiz do

    Erro Médio Quadrático (RMSE): Raiz do erro médio quadrático da diferença entre a predição e o valor real. Usado para visualizar o erro médio no preço. Quanto menor, melhor. RMSE = mean_squared_error(y_teste, lr.predict(X_teste))**0.5 4.443539727776323
  24. Predição do valor de fechamento - Base grande Erro Médio

    Absoluto (MAE): O erro absoluto médio é uma medida da diferença entre duas variáveis contínuas. Valor real do erro MAE = mean_absolute_error(y_teste, lr.predict(X_teste)) 1.6088196403765398
  25. Predição do valor de fechamento - Base pequena Coeficiente de

    Determinação (R²): Quanto (%) o modelo consegue explicar os valores observados. Quanto maior o R², mais explicativo é o modelo, melhor ele se ajusta à amostra Como é calculado: r2 = r2_score(y_teste, lr.predict(X_teste)) 1.00 ou seja, modelo com overfitting
  26. Conclusão Não foi possível criar um modelo que faça a

    predição real desses valores, devido ao overfitting durante o treinamento (as técnicas usadas não permitiram generalizar e realizar a predição para qualquer valor). Para criar um modelo mais realista é necessário testar outros tipos de modelo, como o LSTM que permite criar janelas de predição e um melhor entendimento do comportamento dos preços.
  27. Referências Google Colab - https://colab.research.google.com/drive/1vX-26MCx31lhZk5ikwl24xWwpOXecfD C#scrollTo=LU2XRD0oN6m8 Correlação : https://medium.com/brdata/correla%C3%A7%C3%A3o-direto-ao-ponto-9ec1d487 35fb

    Tutorial Prever preços do Minerando Dados: https://minerandodados.com.br/prevendo-precos-de-acoes-da-bolsa-de-valores-c om-machine-learning/
  28. Referências Scatter Plot: https://plot.ly/python/line-and-scatter/ Plotly Express: https://plot.ly/python/plotly-express/ - https://medium.com/plotly/introducing-plotly-express-808df010143d Graficos

    plotly: https://paulovasconcellos.com.br/como-criar-gr%C3%A1ficos-interativos-utilizand o-plotly-e-python-3eb6eda57a2b Model Accuracy: https://coredump.pt/questions/47577168/how-can-i-increase-the-accuracy-of-my -linear-regression-modelmachine-learning-with-python
  29. Referências Colab e Jupyter Notebooks: :https://www.quora.com/Whats-the-difference-between-Google-Colaboratory-and- Jupyter-notebooks Regressão Linear: https://pt.wikipedia.org/wiki/Regress%C3%A3o_linear

    MSE: https://www.statisticshowto.datasciencecentral.com/mean-squared-error/ Coef. de determinação: https://pt.wikipedia.org/wiki/Coeficiente_de_determina%C3%A7%C3%A3o