Validação cruzada para dados de séries temporais com regressão

8

Eu estou familiarizado com a validação cruzada "regular", mas agora quero fazer previsões de séries temporais enquanto estiver usando a validação cruzada com uma função de regressão linear simples. Escrevo um exemplo simples, para ajudar a esclarecer minhas duas perguntas: uma sobre a divisão trem / teste, uma pergunta sobre como treinar / testar modelos quando o objetivo é prever para n diferente, com n as etapas de previsão, em avançar.

(1) os dados

Suponha que eu tenha dados para os pontos no tempo 1, ..., 10 da seguinte maneira:

timeseries = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]

(2) Transformando os dados em um formato útil para aprendizado supervisionado

Pelo que entendi, podemos usar "atrasos", ou seja, alterações nos dados para criar um conjunto de dados adequado para o aprendizado supervisionado:

input = [NaN,0.5,0.3,10,4,5,6,1,0.4,0.1]
output/response = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]

Aqui, eu simplesmente mudei as séries temporais por uma para criar o vetor de saída. Pelo que entendi, agora eu poderia usar a entrada como entrada para um modelo de regressão linear e a saída para a resposta (o NaN poderia ser aproximado ou substituído por um valor aleatório).

(3) Pergunta 1: validação cruzada ("backtesting")

Digamos que eu queira fazer agora duas divisões, preciso mudar o trem e os conjuntos de testes?

Ou seja, algo como:

Conjunto de trem:

Variável independente: [NaN, 0,5,0,3,10,4,5]

Variável de saída / resposta: [0.5,0.3,10,4,5,6]

Conjunto de teste:

Variável independente: [1,0.4,0.1]

Variável de saída / resposta: [0.4,0.1,0.9]

(ii) Questão 2: Prevendo diferentes atrasos com antecedência :

Como óbvio, mudei de dependente para variáveis ​​independentes por 1. Supondo agora que gostaria de treinar um modelo que possa prever cinco etapas de tempo de antecedência - posso manter esse atraso de um e, no entanto, usar o modelo para prever n + 1 , ..., n + 5, ... ou altero a mudança da variável independente para a variável dependente para 5? Qual é exatamente a diferença?

Ferdi
fonte
2
Tradicionalmente, você validaria cruzadamente modelos de séries temporais usando uma janela contínua na amostra. Mais recentemente, porém, outras abordagens também foram desenvolvidas; consulte a publicação no blog de Rob J. Hyndman "Validação cruzada para séries temporais" . A propósito, sua pergunta pode ser uma duplicata de uma das perguntas anteriores sobre validação cruzada de séries temporais - veja estas .
Richard Hardy
Eu entendo isso, mas a janela de rolamento é usado em ambos A e B. A minha pergunta é sim, se eu precisaria de trem e conjuntos de testes e de entrada e uma (deslocado) vetor de saída
Eu não acho que a minha pergunta é uma duplicata - pelo menos eu não encontrar a resposta para a minha pergunta ainda

Respostas:

11

Para a primeira pergunta, como aponta Richard Hardy, há uma excelente postagem no blog sobre o assunto. Há também este post e este post que eu achei muito útil.

Para a segunda pergunta, é necessário levar em consideração as duas abordagens básicas da previsão de séries temporais de várias etapas: Previsão recursiva e previsão direta:

  • Na previsão recursiva (também chamada de previsão iterada), você treina seu modelo apenas para previsões um passo à frente. Após a conclusão do treinamento, você aplica seu modelo final recursivamente para prever 1 passo à frente, 2 passos à frente, etc ... até atingir o horizonte de previsão de passos desejado . Para fazer isso, você alimenta a previsão de cada etapa sucessiva novamente no modelo para gerar a próxima etapa. Essa abordagem é usada por algoritmos tradicionais de previsão, como os algoritmos ARIMA e Exponential Smoothing, e também pode ser usada para previsão baseada em Machine Learning (consulte esta publicação para obter um exemplo e esta publicação para algumas discussões).n
  • A previsão direta é quando você treina um modelo separado para cada etapa (para tentar "diretamente" prever o passo à frente, em vez de atingir passos recursivamente. Consulte Ben Taied et al. Para obter uma discussão sobre previsão direta e mais abordagens combinadas complexas.nthn

Observe que o post de Hyndman no blog sobre validação cruzada para séries temporais abrange um passo à frente e a previsão direta.


Para esclarecer a previsão recursiva (com base nos comentários):

  1. Primeiro você treina seu modelo.
  2. Depois que o treinamento é concluído, você toma para calcular (esta é sua previsão de um passo à frente),[Y1,Y2,....Yt]Y^t+1
  3. então você usa para calcular , em seguida, para calcular e assim por diante ... até chegar a . [Y2,...,Yt,Y^t+1]Y^t+2[Y3,...,Yt,Y^t+1,Y^t+2]Y^t+3Y^t+n

(Aqui são valores reais e são valores de previsão.)YY^

Skander H.
fonte
Obrigado, também pelos links! Ainda há algumas perguntas: (1) Se eu entendi, a previsão iterativa é lag n = 1, enquanto a previsão direta é lag n> 1. Isso está correto? Na prática, quando estou treinando / testando meu modelo, isso determina quanto tenho que mudar em um problema supervisionado da série cronológica (por exemplo, se eu quiser fazer uma previsão em 5 etapas à frente, utilizarei os carimbos de data e hora t-5 para prever t)? (2) Você mencionou o uso das previsões para atualizar iterativamente o modelo, acho que deve ser o caso de lag n = 1, n> 5. No entanto, depois de aplicar o modelo, presumo que dados reais possam ser usados?
@TestGuest "(1) Se eu entendi, a previsão iterativa é lag n = 1, enquanto a previsão direta é lag n> 1. Isso está correto? Praticamente, quando estou treinando / testando meu modelo, isso determina quanto eu tenho para mudar um problema supervisionado da série temporal (por exemplo, se eu quiser dar um passo em frente na previsão de 5 passos, uso os carimbos de data / hora t-5 para prever t)? " - sim correto .
Skander H.
@TestGuest "(2) Você mencionou o uso das previsões para atualizar iterativamente o modelo, acho que esse deve ser o caso de lag n = 1, n> 5. No entanto, depois de aplicar o modelo, presumo que dados reais possam ser usados ? " - ** Não exatamente. O modelo já foi treinado neste caso e não precisa mais ser atualizado. Você está aplicando um modelo já treinou - você está simplesmente alimentando as saídas do modelo de volta em forma recursiva ... [continua]
Skander H.
Então primeiro você [Y1,Y2,....Yt] calcular Y^t+1 (esta é sua previsão de um passo à frente), então você usa [Y2,...,Yt,Y^t+1] calcular Y^t+2, então [Y3,...,Yt,Y^t+1,Y^t+2] calcular Y^t+3e assim sucessivamente até chegar Y^t+n (Aqui Y são valores reais e Y^são valores de previsão.
Skander H.
Obrigado! Parece-me, no entanto, estranho não substituir as previsões por valores reais, assim que estiverem disponíveis - se o objetivo é obter os melhores resultados possíveis. Então porque é isso? Obrigado novamente ..