Pergunta: Quero ter certeza de alguma coisa, o uso da validação cruzada k-fold com séries temporais é direto ou é necessário prestar atenção especial antes de usá-lo?
Antecedentes: estou modelando uma série temporal de 6 anos (com cadeia semi-markov), com uma amostra de dados a cada 5 minutos. Para comparar vários modelos, estou usando uma validação cruzada 6 vezes, separando os dados em 6 anos, para que meus conjuntos de treinamento (para calcular os parâmetros) tenham duração de 5 anos e os conjuntos de teste com 1 ano. Como não estou levando em consideração a ordem do tempo, meus conjuntos diferentes são:
- dobra 1: treinamento [1 2 3 4 5], teste [6]
- dobra 2: treinamento [1 2 3 4 6], teste [5]
- dobra 3: treinamento [1 2 3 5 6], teste [4]
- dobra 4: treinamento [1 2 4 5 6], teste [3]
- dobra 5: treinamento [1 3 4 5 6], teste [2]
- dobra 6: treinamento [2 3 4 5 6], teste [1].
Estou fazendo a hipótese de que a cada ano são independentes um do outro. Como posso verificar isso? Existe alguma referência que mostre a aplicabilidade da validação cruzada com dobras k com séries temporais.
fonte
Respostas:
Séries temporais (ou outros dados ordenados intrinsecamente) podem ser problemáticas para validação cruzada. Se algum padrão surgir no ano 3 e permanecer nos anos 4 a 6, seu modelo poderá segui-lo, mesmo que não faça parte dos anos 1 e 2.
Uma abordagem às vezes mais baseada em princípios para séries temporais é o encadeamento para a frente, onde seu procedimento seria algo como isto:
Isso modela com mais precisão a situação que você verá no momento da previsão, em que modelará dados passados e futuros. Também lhe dará uma noção da dependência da sua modelagem no tamanho dos dados.
fonte
O método usado para validar cruzadamente meu modelo de série temporal é a validação cruzada em uma base contínua. Comece com um pequeno subconjunto de dados para fins de treinamento, preveja os pontos de dados posteriores e verifique a precisão dos pontos de dados previstos. Os mesmos pontos de dados previstos são incluídos como parte do próximo conjunto de dados de treinamento e os pontos de dados subsequentes são previstos.
Para tornar as coisas intuitivas, aqui está uma imagem para o mesmo:
Um código R equivalente seria:
fonte
A maneira "canônica" de realizar a validação cruzada de séries temporais (pelo menos como descrito por @Rob Hyndman) é "rolar" o conjunto de dados.
ou seja:
Basicamente, seu conjunto de treinamento não deve conter informações que ocorram após o conjunto de testes.
fonte
Não há nada errado em usar blocos de dados "futuros" para validação cruzada de séries temporais na maioria das situações. Na maioria das situações, refiro-me aos modelos para dados estacionários, que são os modelos que normalmente usamos. Por exemplo, quando você ajusta um , com a uma série, você pega diferenças da série e ajusta um modelo para dados estacionários aos resíduos.d > 0 dARIMA(p,d,q) d>0 d
Para que a validação cruzada funcione como uma ferramenta de seleção de modelo, você precisa de independência aproximada entre o treinamento e os dados de teste. O problema com os dados de séries temporais é que os pontos de dados adjacentes geralmente são altamente dependentes; portanto, a validação cruzada padrão falha. O remédio para isso é deixar um espaço entre a amostra de teste e as amostras de treinamento, nos dois lados da amostra de teste . A razão pela qual você também precisa deixar uma lacuna antes da amostra de teste é que a dependência é simétrica quando você avança ou retrocede no tempo (pense na correlação).
Essa abordagem é chamada de validação cruzada (deixe fora, exclua observações de ambos os lados da amostra de teste) e é descrita neste documento. No seu exemplo, isso seria assim:v hhv v h
Onde h indica que h observações da amostra de treinamento são excluídas desse lado.
fonte
Como comentado por @thebigdog, "Sobre o uso da validação cruzada para avaliação de preditores de séries temporais" por Bergmeir et al. discute a validação cruzada no contexto de séries temporais estacionárias e determina que o encadeamento direto (proposto por outros respondentes) não é útil. Observe que o encadeamento direto é chamado Avaliação de Último Bloco neste documento:
" Avaliando modelos de previsão de séries temporais: um estudo empírico sobre métodos de estimativa de desempenho " por Cerqueira et al. concorda com esta avaliação. No entanto, para séries temporais não estacionárias, eles recomendam o uso de uma variação no Hold-Out, chamada Rep-Holdout. No Rep-Holdout, um ponto
a
é escolhido na série temporalY
para marcar o início dos dados de teste. O pontoa
está determinado a estar dentro de uma janela. Isto é ilustrado na figura abaixo:Este artigo mencionado é longo e exaustivamente testa quase todos os outros métodos mencionados nas respostas a esta pergunta com código disponível ao público . Isso inclui a reivindicação de @Matthias Schmidtblaicher de incluir lacunas antes e depois dos dados do teste. Além disso, apenas resumi o artigo. A conclusão real do artigo envolve uma árvore de decisão para avaliar modelos de séries temporais!
fonte