기계 학습을 사용하여 재무 시계열을 예측하는 첫 단계 학습


12

기계 학습을 사용하여 미래의 재무 시계열 1 단계 이상을 예측하는 방법을 파악하려고합니다.

설명 데이터가 포함 된 재무 시계열이 있으며 모델을 구성한 다음 모델을 사용하여 n 단계를 미리 예측하고 싶습니다.

내가 지금까지 한 일은 :

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

그런 다음 randomForest 모델을이 데이터에 적용했습니다.

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

놀랍게도 잘 맞는 것 같습니다 :

> 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

그리고 그것을 예측하기 위해 그것을 사용하려고했습니다.

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

그러나이 c 예측은 효과가 없었습니다.

모델을 피팅하기 전에 예측을 원하는만큼 단계적으로 다른 변수를 지연시켜야합니까?

아마도 고려해야 할 다른 많은 것들이 있지만 이것은 실제로 기계 학습을 시도하는 첫 번째 단계입니다.

답변:


16

나의 첫 번째 관찰은 종가에 비해 투입이 지연되지 않았기 때문에 그러한 좋은 결과를 관찰 한 것입니다. SMA (단순 이동 평균)는 계산시 종가를 사용하며 높은 낮은 범위는 종가를 포함하므로 종가를 예측하기 위해이를 사용하면 사전 편향이 발생합니다. 내 의견은 2 일 전에 종가를 예측하려는 경우 종가에서 2 일 이상 지연된 입력으로 모델을 작성해야한다는 것입니다. 일부 입력은 이틀 이상 지연 될 수 있지만 간단하게 시작하여 소수의 입력 만 시도합니다.

마감 가격을 예측하려는 목표는 마감 가격이 너무 시끄럽기 때문에 목표 변수로 사용하기에 너무 시끄럽기 때문에이를 사용하면 잘못된 목표를 과적 합하거나 최적화 할 수 있습니다. 대신 종가를 이동 평균으로 매끄럽게 한 다음 다음 이틀 동안의 가격 변동 방향을 예측하는 것으로 시작하겠습니다. 예를 들어 마감일을 마감일의 5 일 SMA로 교체 한 후 다음 2 일 동안 긍정적 인 경우 SMA의 가격 변동을 1로 코딩하고 그렇지 않은 경우 0을 코딩 할 수 있습니다. 이제 출력 변수가 1 또는 0으로 코딩되었으므로 사용중인 임의의 포리스트 기능으로 시도하고 해결하는 것이 좋습니다. 로지스틱 회귀, 신경망 및 SVM과 같은 다른 분류 알고리즘을 시도하고 성능을 향상시키기 위해 몇 가지 앙상블을 결합 할 수도 있습니다. 이것은 과적 합없이 해결하기 어려운 문제이지만 올바른 방향으로 나아가는 단계입니다. 주의해야 할 또 다른 단어는 최종 모델이 다음 이틀을 양수 또는 음수로 분류하는 데 놀랄만 한 정확도를 가질 수 있지만 몇 가지 큰 움직임을 잘못 분류하여 돈을 잃는다는 것입니다.

머신 러닝 알고리즘이 하나의 주식 특유성에 영향을 미치지 않도록 하나 이상의 보안으로 모델을 구축하는 것이 좋습니다. 서로 연관성이없는 주식 5 개 이상부터 시작하겠습니다.

Guido Deboeck의 Edge 거래는 금융 시계열 예측에 기계 학습의 응용 프로그램을 탐색하기에 좋은 장소입니다. 이 책은 오래된 책이므로 오늘날 우리가 이용할 수있는 기술보다 뒤떨어져 있지만 좋은 출발입니다. Kaufman의 New Trading Systems and Methods와 John Wolberg의 Expert Trading Systems도 추천합니다.


좋아요, 좋은 답변 감사합니다. 이 예제는 randomForest가 사용할 수 있도록 데이터를 설정하는 방법을 이해하는 데 도움이되었습니다. 그러나 이제는 입력을 지연시켜야 작동합니다. 예제에서 SMA 가격을 출력 변수로 사용하는 것이 타당합니까, 아니면 0 또는 1이어야합니까? \ n 도서 추천에 감사드립니다.
nikke

SMA의 가격을 출력 변수로 사용할 수 있습니다. 문제는 더욱 복잡해진다. 방향을 예측하는 대신 정확한 가격을 예측하려고합니다. 내 경험상 이것은 기계 알고리즘이 샘플링을 잘 수행하기가 매우 어렵습니다. 그러나 예측을 위해 시계열 데이터를 설정하는 프로세스에 익숙한 경우 특히 방향 예측보다 직관적 인 경우에는 시작하기에 좋은 장소 일 수 있습니다. 두 이동 평균이 교차하는 가격을 시도하고 예측할 수도 있습니다.
CrossValidatedTrading

안녕하세요, 몇 가지 기능을 만들고 모델을 만들었습니다. pastie.org/7958695 역학을 알아 낸 것 같습니다. 그러나이 모델은 모두 너무 적합합니다. 비슷한 작업을 수행하고 실제로 사용 했습니까? 더 이야기하는 것이 좋을 것입니다.
nikke

나는 항상 더 자세한 대화를 할 수 있습니다. 내 연락처 정보가 내 프로필에 있습니다. 당신이 원한다면 나에게 이메일을 쏴.
CrossValidatedTrading

가격 가치를 예측하는 것과 비교하여 정상적으로 작동하는 수익을 예측하기위한 간단한 회귀 분석을 수행했습니다. 귀국을 예측하는 것 외에도 스프레드 및 컴 미지 등을 이길 수있을만큼의 대대적 인 수익을 예측해야합니다. 내 의견은 이전 의견에 게시 한 Pastie에 있습니다.
nikke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.