Como prever uma série temporal de outra série temporal, se estiverem relacionadas


14

Eu tenho tentado resolver este problema por mais de um ano sem muito progresso. É parte de um projeto de pesquisa que estou realizando, mas ilustrarei com um exemplo de história que criei, porque o domínio real do problema é um pouco confuso (rastreamento ocular).

Você é um avião que rastreia um navio inimigo que viaja pelo oceano e, assim, colecionou uma série de (x, y, tempo) coordenadas do navio. Você sabe que um submarino escondido viaja com o navio para protegê-lo, mas, embora exista uma correlação entre suas posições, o submarino freqüentemente se afasta do navio; portanto, embora esteja próximo, ele também pode estar do outro lado do navio. mundo ocasionalmente. Você deseja prever o caminho do submarino, mas infelizmente ele está oculto.

Porém, um mês em abril, você percebe que o submarino esquece de se esconder, de modo que você tem uma série de coordenadas para o submarino e o navio ao longo de 1.000 viagens. Usando esses dados, você gostaria de construir um modelo para prever o caminho do submarino oculto, considerando apenas os movimentos da nave. A linha de base ingênua seria dizer "posição do submarino palpite =" posição atual do navio ", mas a partir dos dados de abril em que o submarino estava visível, você observa que há uma tendência do submarino estar um pouco à frente do navio, então" posição do submarino palpite = posição do navio em 1 minuto "é uma estimativa ainda melhor. Além disso, os dados de abril mostram que quando o navio faz uma pausa na água por um período prolongado, é provável que o submarino esteja longe patrulhando as águas costeiras. Existem outros padrões claro.

Como você construiu esse modelo, dados os dados de abril como dados de treinamento, para prever o caminho do submarino? Minha solução atual é uma regressão linear ad-hoc, na qual os fatores são "tempo de viagem", "coordenada x do navio", "o navio ficou inativo por 1 dia" etc. etc. e depois R determinou os pesos e fez uma validação cruzada . Mas eu realmente adoraria uma maneira de gerar esses fatores automaticamente a partir dos dados de abril. Além disso, um modelo que usa seqüência ou tempo seria bom, já que a regressão linear não faz e acho relevante.

Obrigado por ler tudo isso e eu ficaria feliz em esclarecer qualquer coisa.


5
Uma maneira de facilitar a construção do seu modelo é usar coordenadas polares em vez de cartesianas. Se você definir a origem igual à nave inimiga e sempre estiver voltada para o norte, poderá dizer algo como a posição do sub no momento em que é ( r ( ttj com r sendo distância e θ sendo ângulo. Agora esperamos | q | ser pequeno porque o submarino geralmente está na frente do navio er deve ser pequeno, mas não próximo de zero (caso contrário, o submarino colide com o navio). Você também tem(r(tj),θ(tj))rθ|θ|r aumentando para navios que param. r
probabilityislogic

2
Eu sugeriria algo semelhante ao probabilityislogic - você precisa de uma variável que seja a distância entre o navio e o submarino. O bom das coordenadas polares é que essas informações, assim como a direcionalidade, também estão incluídas. Você pode tentar uma regressão linear nessa nova variável.
aluno

Obrigado pelas sugestões. Uma coisa pela qual estou lutando com as coordenadas polares é que, se eu tentar prever a variável de ângulo, ela "circula" para que 0 == 360, o que não faz sentido do ponto de vista de previsão. Alguma sugestão de como lidar com isso?
Cargoship And Submarine

@probabilityislogic Depois de pensar um pouco mais sobre isso, faria sentido usar coordenadas polares, mas usar o pecado (teta) em vez de teta como a variável a prever? Embora então se comportasse mais como um delta_y.
Cargoship And Submarine

Em relação ao uso de coordenadas polares, você pode ler sobre Estatísticas Direcionais .
steadyfish

Respostas:


3

Aqui está uma abordagem que não usa nenhuma informação "contextual", isto é, não leva em conta o fato de "um submarino está seguindo um navio". Por outro lado, é fácil começar com:

Denotar por

xsvocêb(t),ysvocêb(t)

xshEup(t),yshEup(t)

t

xdEust(t)=xshEup(t)-xsvocêb(t)

ydEust(t)=yshEup(t)-ysvocêb(t)

Minha sugestão é que você preveja cada uma delas separadamente (você pode amarrá-las mais tarde).

x

Então

xdEust(t)=100±10WEuggeue(t)

WEuggeue

xyWEuggeueμσxdEust

xdEust(t)=μ+σWx(t)

Wx(t)xdEust

Outra estratégia empregada pelas pessoas (que acho que funcionará para você) é que elas dividam suas séries em

Polynomial base + Cyclic pattern + Bounded randomness

No caso de um submarino e um navio, a parte polinomial provavelmente seria constante e a parte cíclica uma soma de senos e cossenos (das ondas do oceano ...). Pode não ser o caso do rastreamento ocular.

Existem ferramentas que podem descobrir isso para você. Aqui estão dois que eu conheço:

  1. DTREG (licença de avaliação de 30 dias)
  2. Algoritmo de séries temporais da Microsoft, que faz parte do produto SQL Server. Atualmente, estou usando a edição de avaliação de 180 dias, é fácil de usar.

Aqui está uma captura de tela da ferramenta SQL Server (a parte pontilhada é a previsão):

insira a descrição da imagem aqui

Um algoritmo que eles usam é chamado ARIMA. Querendo aprender como funciona, eu pesquisei no Google e encontrei este livro: Primeiro curso sobre séries temporais (e não se preocupe, você não precisa ter o SAS para acompanhar. Não.). É muito legível.

Você não precisa saber como o ARIMA funciona para usar essas ferramentas, mas acho que é sempre mais fácil se você tiver contexto, pois existem "parâmetros de modelo" a serem definidos etc.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.