Tenho experiência anterior com validação cruzada 'normal' dobra K para ajuste de modelo e estou um pouco confuso com o aplicativo em modelos de séries temporais.
Entendo que, para modelos de séries temporais, o corolário da validação cruzada é o procedimento de 'origem progressiva' descrito por Hyndman . Isso faz bastante sentido para mim e o código abaixo demonstra o uso da tsCV
função no R, no blog de Hydman , para mostrar como os erros diferem do CV versus o conjunto de dados inteiro de uma só vez.
library(fpp)
e <- tsCV(dj, rwf, drift=TRUE, h=1)
sqrt(mean(e^2, na.rm=TRUE))
## [1] 22.68249
sqrt(mean(residuals(rwf(dj, drift=TRUE))^2, na.rm=TRUE))
## [1] 22.49681
Agora, nesse link acima, ele menciona que o parâmetro deriva é re-estimado em cada nova origem de previsão. No CV 'normal', eu teria uma grade de parâmetros que avaliaria em cada dobra, para obter uma média para determinar os melhores parâmetros a serem usados. Eu usaria esses 'melhores' parâmetros para ajustar-se ao conjunto completo de treinamento e o usaria como meu modelo final para avaliar meu conjunto de testes realizado anteriormente. Observe que isso é validação cruzada aninhada, portanto não estou treinando no meu conjunto de testes em nenhum momento.
Isto claramente não é o caso com o procedimento de 'origem rolar para a frente', onde os parâmetros são optimizados para cada dobra (pelo menos para os métodos como R bats
, tbats
, auto.arima
, etc.). Estou enganado ao pensar sobre esse método em termos de ajuste de parâmetros do modelo ou como escolheria os parâmetros do modelo de série temporal para definir o modelo final que seria usado? Ou o ajuste de parâmetros não considera um problema nos modelos de séries temporais em que a otimização parece fazer parte do ajuste do modelo e o resultado do CV é apenas dizer o desempenho geral de cada modelo? E que o modelo final construído com a maioria dos dados no final é o modelo que eu usaria?
Sei que isso pode ser reformulado em uma pergunta ainda mais simples. Após a validação cruzada ('rolling forward origin'), apenas uso o último modelo construído (com o maior superconjunto como o modelo final ajustado? Ou o que é sugerido?
fonte
Respostas:
Você pode combinar a origem progressiva progressiva com a validação cruzada com dobras k (também conhecida como backtesting com validação cruzada). Determine as dobras na frente uma vez e, a cada momento do rolamento, percorra as dobras k, treine em k-1 e teste em k. A união de todas as dobras de teste realizadas oferece uma cobertura completa de todo o conjunto de dados naquele momento, e as dobras de trem cobrem o conjunto de dados k-1 vezes naquele momento, que você pode agregar da maneira que for mais apropriada (por exemplo, média ) Em seguida, marque o trem e faça o teste separadamente, como faria normalmente para obter os resultados separados do trem / teste naquele momento.
Ao otimizar parâmetros, crie primeiro um conjunto separado de holdouts e, em seguida, faça a validação cruzada descrita apenas nos dados restantes. Para que cada parâmetro seja otimizado, é necessário decidir se esse parâmetro é independente do tempo (para que você possa executar a otimização em todos os tempos de rolagem) ou depende do tempo (para que o parâmetro seja otimizado separadamente a cada momento). Nesse último caso, você pode representar o parâmetro como uma função do tempo (possivelmente linear) e, em seguida, otimizar os coeficientes independentes do tempo dessa função o tempo todo.
fonte
Se você otimizasse os parâmetros para os dados de teste, ajustaria parcialmente seus dados para testar dados em vez de dados de treinamento. Você deseja saber qual método é melhor para reter dados, não como, por exemplo, o que uma gama deve ser configurada em um modelo de Holt Winters.
fonte