Jak przewidzieć jeden szereg czasowy z innego szeregu czasowego, jeśli są one powiązane

14

Od ponad roku próbuję rozwiązać ten problem bez większych postępów. Jest to część projektu badawczego, który realizuję, ale zilustruję go przykładem, który wymyśliłem, ponieważ rzeczywista dziedzina problemu jest nieco myląca (śledzenie wzroku).

Jesteś samolotem śledzącym wrogi statek, który płynie przez ocean, więc zebrałeś serię współrzędnych statku (x, y, czas). Wiesz, że ukryty okręt podwodny podróżuje ze statkiem, aby go chronić, ale chociaż istnieje korelacja między ich pozycjami, okręt podwodny często odchodzi od statku, więc chociaż często jest blisko niego, może również znajdować się po drugiej stronie świat od czasu do czasu. Chcesz przewidzieć ścieżkę łodzi podwodnej, ale niestety jest ona przed tobą ukryta.

Ale w kwietniu zauważysz, że okręt podwodny zapomina się ukryć, więc masz szereg współrzędnych zarówno dla łodzi podwodnej, jak i statku podczas 1000 podróży. Korzystając z tych danych, chcesz zbudować model do przewidywania ścieżki ukrytego okrętu podwodnego, biorąc pod uwagę tylko ruchy statku. Naiwnym punktem odniesienia byłoby powiedzenie „zgadnięcie pozycji łodzi podwodnej =„ aktualna pozycja statku ”, ale z danych z kwietnia, w których łódź podwodna była widoczna, można zauważyć, że istnieje tendencja, aby okręt podwodny nieco wyprzedził statek, więc„ pozycja łodzi podwodnej zgadnij = pozycja statku w ciągu 1 minuty "jest jeszcze lepszym oszacowaniem. Ponadto dane z kwietnia pokazują, że kiedy statek zatrzymuje się w wodzie na dłuższy czas, okręt podwodny prawdopodobnie będzie daleko patrolował wody przybrzeżne. Istnieją inne wzorce oczywiście.

Jak zbudowałbyś ten model, biorąc pod uwagę dane z kwietnia jako dane szkoleniowe, aby przewidzieć ścieżkę okrętu podwodnego? Moje obecne rozwiązanie to regresja liniowa ad hoc, w której czynniki to „czas podróży”, „współrzędna x statku”, „statek był bezczynny przez 1 dzień” itp., A następnie mając R obliczający wagi i przeprowadzający walidację krzyżową . Ale naprawdę chciałbym sposób na automatyczne wygenerowanie tych czynników na podstawie danych z kwietnia. Również model wykorzystujący sekwencję lub czas byłby fajny, ponieważ regresja liniowa nie ma i myślę, że jest istotna.

Dziękuję za przeczytanie tego wszystkiego i chętnie cokolwiek wyjaśnię.

Cargoship And Submarine
źródło
5
Jednym ze sposobów, który może ułatwić zbudowanie modelu, jest użycie współrzędnych biegunowych zamiast kartezjańskich. Jeśli ustawisz pochodzenie równe wrogiemu statkowi i zawsze masz statek skierowany na północ, możesz powiedzieć coś w rodzaju pozycji okrętu podwodnego w czasie jest ( r ( t j ) , θ ( t j ) ), gdzie r jest odległość i θ jest kątem. Teraz oczekujemy | θ | być mały, ponieważ okręt podwodny znajduje się zwykle przed statkiem, a r powinien być mały, ale nie bliski zeru (w przeciwnym razie okręt podwodny uderza w statek). Masz takżetj(r(tj),θ(tj))rθ|θ|r staje się duży dla statków, które zatrzymują się. r
Prawdopodobieństwo
2
Chciałem zasugerować coś podobnego do logiki prawdopodobieństwa - potrzebujesz zmiennej, która jest odległością między statkiem a okrętem podwodnym. Zaletą współrzędnych biegunowych jest to, że ta informacja, jak również kierunkowość, są również uwzględnione. Następnie możesz wypróbować regresję liniową dla tej nowej zmiennej.
uczeń
Dziękuję za sugestie. Jedną z rzeczy, o którą walczę ze współrzędnymi biegunowymi, jest to, że jeśli spróbuję przewidzieć zmienną kąta, „zapętli się”, więc 0 == 360, co nie ma sensu z punktu widzenia przewidywania. Wszelkie sugestie, jak sobie z tym poradzić?
Cargoship And Submarine
@probabilityislogic Po zastanowieniu się nad tym trochę więcej, czy sensownym byłoby użycie współrzędnych biegunowych, ale użycie sin (theta) zamiast theta jako zmiennej do przewidywania? Chociaż wtedy zachowałby się bardziej jak delta.
Cargoship And Submarine
Jeśli chodzi o użycie współrzędnych biegunowych, warto przeczytać o statystykach kierunkowych .
steadyfish

Odpowiedzi:

3

Oto podejście, które nie wykorzystuje żadnych „kontekstowych” informacji, tj. Nie bierze pod uwagę faktu, że „okręt podwodny podąża za statkiem”. Z drugiej strony łatwo jest zacząć od:

Oznacz przez

xsub(t),ysub(t)

xship(t),yship(t)

t

xdist(t)=xship(t)xsub(t)

ydist(t)=yship(t)ysub(t)

Sugeruję, aby każdy z nich przewidzieć osobno (możesz je później połączyć).

x

Następnie

xdist(t)=100±10wiggle(t)

wiggle

xywiggleμσxdist

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

Wx(t)xdist.

Another strategy people employ (which I think will work for you) is that they break up their series into

Polynomial base + Cyclic pattern + Bounded randomness

In the case of a submarine and a ship, the polynomial part would probably be constant and the cyclic part a sum of sines and cosines (from the waves of the ocean...). This may not be the case for eye-tracking.

Istnieją narzędzia, które mogą to dla Ciebie rozwiązać. Oto dwa, które znam:

  1. DTREG (30-dniowa licencja próbna )
  2. Algorytm szeregów czasowych Microsoft, który jest częścią ich produktu SQL Server. Obecnie używam ich 180-dniowej wersji ewaluacyjnej, jest łatwa w użyciu.

Oto zrzut ekranu z narzędzia SQL Server (część kropkowana to prognoza):

enter image description here

Jeden z używanych przez nich algorytmów nazywa się ARIMA. Chcąc dowiedzieć się, jak to działa, zrobiłem trochę Googlinga i znalazłem tę książkę: First Course on Time Series (i nie martw się, nie musisz mieć SAS, aby śledzić. Nie mam.). Jest bardzo czytelny.

Nie musisz wiedzieć, jak działa ARIMA, aby korzystać z tych narzędzi, ale myślę, że zawsze jest łatwiej, jeśli masz kontekst, ponieważ można ustawić „parametry modelu” itp.

Rohit Chatterjee
źródło