Não estou conseguindo fazer a previsão pra trás!

Home Fóruns Fórum Python para Finanças: Análise de Dados e Machine Learning Não estou conseguindo fazer a previsão pra trás!

Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #36003

    Oi, pessoal!!

    Eu estou tentando coletar série de cotações do dólar pela API do banco central, mas não estou conseguindo fazer as previsões.

    Seguinte, eu quero baixar as cotações e fazer a previsão para os últimos 100 dias, como a previsão do passado no curso, eu tentei fazer de uma forma que sempre que eu executasse fosse feito sobre os últimos 100 dias, caso um dado seja adicionado ao banco de dados ele já entre automático na nova execução.

    Na segunda parte, na projeção real futura, eu queria colocar a projeção real junto ao gráfico de cotações, deletei as datas pra poder juntar as duas series, mas a projeção não ficou incluída no final da serie.

     

    <
    !pip install pmdarima
    pip install python-bcb
    
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as fig
    import plotly.express as px
    import datetime
    from statsmodels.tsa.seasonal import seasonal_decompose
    from pmdarima.arima import auto_arima
    from bcb import sgs
    
    dolar = sgs.get('1', start = '2000-01-01')
    
    serie_temporal = dolar['1']
    
    print('-------------- Informações --------------') 
    print('Total de dias com cotações = ',len(serie_temporal))
    
    fig.plot(serie_temporal, label = 'Histórico da cotação do Dólar')
    fig.legend();
    
    decomposicao = seasonal_decompose(serie_temporal, period = len(serie_temporal)//2)
    
    tendencia = decomposicao.trend
    sazonal = decomposicao.seasonal
    aleatorio = decomposicao.resid
    
    fig.plot(tendencia, label = 'Tendência')
    fig.legend();
    
    fig.plot(sazonal, label = 'Sazonalidade')
    fig.legend();
    
    fig.plot(aleatorio, label = 'Residuo')
    fig.legend();
    
    
    # Teste: Projeção do Dólar a 100 dias atrás
    
    treinamento = serie_temporal[:-100]
    print('Treinamento: Total de dias ',len(treinamento))
    teste = serie_temporal[-100:]
    print('Teste: Total de dias ',len(teste))
    
    modelo_teste = auto_arima(treinamento, suppress_warning = True, error_action = 'ignore')
    previsoes = pd.DataFrame(modelo_teste.predict(n_periods = 100),index = teste.index)
    previsoes.columns = ['Previsões']
    print('Parâmetros ARIMA - P, Q e D = ',modelo_teste.order)
    
    fig.figure(figsize=(8,5))
    fig.plot(treinamento[-500:], label = 'Treinamento')
    fig.plot(teste, label = 'Teste')
    fig.plot(previsoes , label = 'Previsões')
    fig.legend();
    
    
    
    # Projeção: Dólar para os próximos 100 dias
    """
    modelo = auto_arima(serie_temporal, suppress_warning = True, error_action = 'ignore')
    
    previsoes = pd.DataFrame(modelo.predict(n_periods = 100))
    previsoes.columns = ['Previsões']
    print('Parâmetros ARIMA - P, Q e D = ',modelo.order)
    
    fig.figure(figsize=(8,5))
    fig.plot(previsoes , label = 'Previsões')
    fig.legend();""">

     

    Valeu pela ajuda, sucesso sempre!

    #36132
    Denny Ceccon
    Moderador

      Oi Gustavo,

      Tente colocar as datas como índice no dataframe com as previsões:

      index=pd.date_range(
                          serie_temporal.index[-1] # pega a última data disponível em serie_temporal
                          + pd.Timedelta('1D'),    # adiciona 1 dia porque estamos fazendo a previsão a partir do dia seguinte
                          periods=100)             # faz o intervalo de datas até 100 dias no futuro
                         )
      previsoes = pd.DataFrame(modelo.predict(n_periods = 100), index=index)

      Aí é só plotar os dois dataframes no mesmo gráfico:

      fig.plot(serie_temporal, label='Dados históricos')
      fig.plot(previsoes , label = 'Previsões')
      • Esta resposta foi modificada 1 ano, 9 meses atrás por Denny Ceccon.
      #36367

      Dae Denny,

      O que você disse funcionou, porem ações são negociadas apenas em dias úteis, e a s projeções foram  colocadas em dias corridos tipo sábado e domingo que a bolsa de valores não negocia. Mas, sem problemas, deu certo!!

      Só que eu estou com outro problema que havia esquecido de falar antes, minhas projeções ficam linhas retas……

      https://colab.research.google.com/drive/1SwfSgExprlMdfGzkVjUmeGe-Iz2CoVwC?usp=sharing  (Comentário habilitado)

      Se você ver o dataframe vai ver que a primeira projeção (dia) é diferente e as outras são iguais, se eu projetar 100 dias, a partir do 2º em diante fica o mesmo valor….

      #36368
      Denny Ceccon
      Moderador

        Olá Gustavo,

        A principal razão é porque o auto_arima não foi capaz de encontrar padrões e tendências que ele considera útil para as predições, então ele retorna sempre a última cotação. Dê uma olhada aqui: https://stats.stackexchange.com/a/529835

        Você deve conseguir resultados mais interessantes testando outros parâmetros na implementação do auto_arima, visite a documentação da biblioteca.

        #36237

        As datas funcionou, mas quando se trata das ações tem o problema dos finais de semana e feriados, mas tranquilo.

        Eu estou tendo outro problema, tentei varias vezes, as previsões sempre ficam uma linha reta, e não é por causa da data, na previsão a partir da 2 previsão fica tudo igual, veja:

         

         

         

        Obrigado amigo, você é um amigo!

        #36403

        Funcionou colocar as datas, só que como as ações só negociam dias úteis, as projeções de preços foram colocadas em dias de fins de semana. Mas, sem problemas. Valeu!

         

        Outro problema que não estou conseguindo resolver como você pode ver na imagem é que as projeções não dão certo, fica tudo uma linha reta….

        #36398

        Funcionou colocar as datas, só que como as ações só negociam dias úteis, as projeções de preços foram colocadas em dias de fins de semana. Mas, sem problemas. Valeu!

        Outro problema que não estou conseguindo resolver como você pode ver na imagem é que as projeções não dão certo, fica tudo uma linha reta….

        #36402

        Funcionou colocar as datas, só que como as ações só negociam dias úteis, as projeções de preços foram colocadas em dias de fins de semana. Mas, sem problemas. Valeu!

        Outro problema que não estou conseguindo resolver como você pode ver na imagem é que as projeções não dão certo, fica tudo uma linha reta….

         

      Visualizando 8 posts - 1 até 8 (de 8 do total)
      • Você deve fazer login para responder a este tópico.