機械学習を使用して財務時系列を予測するための最初のステップ学習


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)

しかし、この予測はうまくいきませんでした。

モデルを近似する前に、予測したい数だけステップで他の変数を遅らせる必要がありますか?

おそらく他にも多くのことを考慮する必要がありますが、これらは機械学習を試す最初のステップです。

回答:


16

私の最初の観察は、あなたが終値に対して入力を遅らせなかったということであり、それがあなたがそのような良い適合を観察した理由です。SMA(単純移動平均)は計算で終値を使用し、高値と低値の範囲は終値を含むため、終値を予測するためにそれらを使用すると先読みバイアスが与えられます。私の意見では、終値を2日先に予測しようとする場合、終値から少なくとも2日遅れている入力を使用してモデルを構築する必要があります。入力の一部は2日以上遅れる場合がありますが、簡単に始めて、ほんの一握りの入力を使用してみます。

終値を予測する目的に関する限り、終値はノイズが多すぎてターゲット変数として使用できないため、それらを使用すると誤った目標の過剰適合または最適化につながると思います。代わりに、移動平均で終値を平滑化し、次の2日間の価格変化の方向を予測することから始めます。たとえば、終値を5日の終値のSMAに置き換え、次の2日間で正だった場合は1、それ以外の場合は0としてSMAの価格変更をコーディングします。現在、出力変数は1または0としてコーディングされているため、これは、使用していたランダムフォレスト関数で試してみて解決するのに適した問題です。また、ロジスティック回帰、ニューラルネットワーク、SVMなどの他の分類アルゴリズムを試してみて、いくつかを組み合わせてパフォーマンスを向上させることもできます。これは、オーバーフィッティングなしで解決するのは依然として難しい問題ですが、正しい方向への一歩です。もう1つの注意点は、次の2日間をポジティブまたはネガティブとして分類する際に最終モデルが驚くほど正確であるが、いくつかの大きな動きを誤って分類したため、依然としてお金を失うことです。

また、機械学習アルゴリズムが1つの株の特異性に焦点を合わせないように、複数のセキュリティでモデルを構築することをお勧めします。私は、相互にあまり相関していない少なくとも5つの株から始めます。

Guido DeboeckによるEdge on Tradingは、機械学習の金融時系列予測への応用を検討するための出発点として適しています。それは古い本ですので、今日利用できる技術の背後にありますが、良いスタートです。また、KaufmanによるNew Trading Systems and MethodsとJohn WolbergによるExpert Trading Systemsもお勧めします。


わかりました、この良い答えをありがとう。この例は、randomForestが使用できるようにデータを設定する方法を理解するためのものです。しかし、今では、入力を遅らせて動作させる必要があることがわかりました。あなたの例のSMAの価格を出力変数として持つことは意味がありますか、それとも0または1でなければなりませんか?\ n本の推奨にも感謝します。
ニッケ

出力変数として間違いなくSMAの価格を使用できます。問題はより複雑になります。方向を予測する代わりに、正確な価格値を予測しようとしています。私の経験では、これは機械アルゴリズムがサンプル外でうまく機能するのは非常に難しいことです。ただし、予測のために時系列データを設定するプロセスに精通している場合は、特に方向予測よりも直感的な場合は、これを開始するのに適した場所です。2つの移動平均が交差する価格を予測することもできます。
CrossValidatedTrading

こんにちは、いくつかの機能を作成し、モデルを作成しました:pastie.org/7958695メカニズムを理解したと思います。ただし、このモデルはすべてカーブフィットしています。同様のことをして、実際に使用しましたか?もっと話したいと思います。
ニッケ

私はいつもより詳細な会話を受け入れています。私の連絡先情報は私のプロフィールにあります。ご希望の場合は、私に電子メールを送ってください。
CrossValidatedTrading

価格価値の予測と比較して、うまくいくはずのリターンを予測するためにいくつかの簡単な回帰を行いました。リターンを予測することに加えて、スプレッド&コミッシュなどに勝つために十分な大きさのリターンを予測する必要があります。私は前のコメントで投稿したペーストにあります。
ニッケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.