Pierwsze kroki nauki przewidywania okresów finansowych za pomocą uczenia maszynowego


12

Próbuję zrozumieć, w jaki sposób korzystać z uczenia maszynowego do przewidywania okresów finansowych 1 lub więcej kroków w przyszłość.

Mam finansowe szeregi czasowe z niektórymi danymi opisowymi i chciałbym stworzyć model, a następnie użyć tego modelu do przewidzenia n-krok naprzód.

Do tej pory robiłem:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Następnie dopasowałem do tych danych model randomForest.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Co wydaje się pasować zaskakująco dobrze:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

I próbował użyć go do przewidywania:

predict(fit, GOOG, n.ahead=2)

Ale ta prognoza nie działała.

Staram się przewidzieć Close, czy powinienem opóźnić pozostałe zmienne o tyle kroków, ile chcę prognozy, przed dopasowaniem modelu?

Prawdopodobnie wiele innych rzeczy, które powinienem wziąć pod uwagę, ale tak naprawdę to moje pierwsze kroki w nauce uczenia maszynowego.

Odpowiedzi:


16

Moja pierwsza obserwacja jest taka, że ​​nie opóźniłeś danych wejściowych w stosunku do ceny zamknięcia i dlatego zaobserwowałeś tak dobre dopasowanie. SMA (prosta średnia ruchoma) wykorzystuje cenę zamknięcia w swoich obliczeniach, a wysoki dolny zakres obejmuje cenę zamknięcia, więc użycie ich do przewidywania ceny zamknięcia daje uprzedzenie na przyszłość. Moim zdaniem, jeśli próbujesz przewidzieć cenę zamknięcia dwa dni wcześniej, powinieneś zbudować swój model z danymi wejściowymi opóźnionymi od ceny zamknięcia o co najmniej dwa dni. Niektóre dane wejściowe mogą być opóźnione o więcej niż dwa dni, ale zacznę od prostych i spróbuję użyć tylko garści danych wejściowych.

Jeśli chodzi o cel przewidywania ceny zamknięcia, uważam, że ceny zamknięcia są zbyt głośne, aby można je było stosować jako zmienne docelowe, a ich użycie doprowadzi do przeszacowania lub optymalizacji niewłaściwego celu. Zamiast tego zacznę od wygładzenia ceny zamknięcia ruchomą średnią, a następnie przewidywania kierunku zmiany ceny w ciągu najbliższych dwóch dni. Na przykład mogę zastąpić zamknięcie 5-dniowym SMA zamknięcia, a następnie zakodować zmianę ceny SMA jako 1, jeśli byłaby dodatnia w ciągu najbliższych dwóch dni, a 0 w przeciwnym razie. Ponieważ zmienna wyjściowa jest teraz zakodowana jako 1 lub 0, jest to dobry problem, aby spróbować rozwiązać za pomocą losowej funkcji lasu, z której korzystałeś. Możesz także wypróbować inne algorytmy klasyfikacji, takie jak regresja logistyczna, sieci neuronowe i maszyny SVM, a może połączyć kilka w zespół, aby poprawić swoją wydajność. Jest to nadal trudny problem do rozwiązania bez nadmiernego dopasowania, ale jest to krok we właściwym kierunku. Innym ostrzeżeniem jest to, że twój ostateczny model może mieć niesamowitą dokładność w klasyfikowaniu kolejnych dwóch dni jako pozytywnych lub negatywnych, ale nadal traci pieniądze, ponieważ nieprawidłowo sklasyfikował kilka dużych ruchów.

Poleciłbym również zbudowanie modelu na więcej niż jednym zabezpieczeniu, aby algorytm uczenia maszynowego nie dopracował osobliwości jednego zapasu. Zacznę od co najmniej 5 akcji, które nie są ze sobą ściśle powiązane.

Trading on the Edge Guido Deboeck jest dobrym miejscem do rozpoczęcia badań nad zastosowaniem uczenia maszynowego do prognozowania szeregów czasowych. To starsza książka, więc jest daleko w tyle za technologią, którą mamy dziś dostępną, ale to dobry początek. Poleciłbym również nowe systemy i metody handlu Kaufman oraz Expert Trading Systems Johna Wolberga.


ok, dziękuję za tę dobrą odpowiedź. Ten przykład był dla mnie bardziej zrozumiały, jak skonfigurować dane, aby randomForest mógł z nich korzystać. Ale teraz wiem, że muszę opóźnić dane wejściowe, aby działało. Czy sensownym byłoby umieszczenie ceny SMA w twoim przykładzie jako zmiennej wyjściowej, czy też byłoby to 0 lub 1? \ n Dziękujemy również za rekomendacje książek, które się z nimi zapoznam.
nikke

Zdecydowanie można użyć ceny SMA jako zmiennej wyjściowej; problem staje się bardziej złożony. Zamiast przewidywać kierunek, teraz próbujesz przewidzieć dokładną wartość ceny. Z mojego doświadczenia jest to bardzo trudne dla algorytmu maszynowego, aby dobrze sobie radził poza próbą. Ale jeśli dopiero zapoznajesz się z procesem konfigurowania danych szeregów czasowych do przewidywania, może to być dobre miejsce na rozpoczęcie, szczególnie jeśli jest ono bardziej intuicyjne niż przewidywanie kierunkowe. Możesz także spróbować przewidzieć cenę, po której przekroczą dwie średnie ruchome.
CrossValidatedTrading

Cześć, stworzyłem kilka funkcji i wykonałem model: pastie.org/7958695 Myślę, że udało mi się ustalić mechanikę. Ten model jest jednak zbyt dopasowany do krzywej. Czy zrobiłeś coś podobnego i korzystałeś z tego w jakikolwiek sposób? Byłoby fajnie rozmawiać więcej.
nikke

Zawsze jestem otwarty na bardziej szczegółowe rozmowy. Moje dane kontaktowe znajdują się w moim profilu. Wyślij mi e-mail, jeśli chcesz.
CrossValidatedTrading

Czy kilka prostych regresji, aby przewidzieć zwroty, które powinny działać dobrze, w porównaniu do przewidywania wartości ceny. Oprócz przewidywania zwrotu musisz przewidzieć wystarczająco duży zwrot, aby pokonać rozprzestrzenianie się i rozpoczęcie itp. Byłoby fajnie mówić więcej, nie mogłem znaleźć twojej poczty w twoim profilu. Mój jest w cieście, które zamieściłem w poprzednim komentarzu.
nikke
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.