トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 101

 
Dr.トレーダー

この多くは、あなた自身が知っているし、やっていることですが、同じように話しているのに違うことをやっているという思い込みを排除するために、もう少し詳しく書きますね。


全てはこのフォーラムからのアドバイスと経験によるものです。

ありがとうございます。

一点一点お答えします。

モデルパラメータを推定するためには、綿密に練られたフィットネス関数が必要である。もし、この関数が特定のモデル・パラメータと選択された予測因子を高いスコアで評価するならば、新しいデータでのテストでは良い結果が得られるはずです。
(高ければ高いほど良いというのは、どんな見積もりでも心がけます)。

そんな機能があるんですね。R^2なんていらない(最初は回帰でマーケットがバカみたいに予測できることを確認しようと思ったが)。私は、MOとスプレッドとのポイントの合計を推定するために、書かれた関数を使用しています。この関数は,CVループの内部で動作し,モデルを学習するための最適なパラメータを選択します.

適性関数は1サイクルで少なくとも50回繰り返す必要があります。
1) データを50%/50%の2つに分割する。サンプルによるランダムサンプリングとシーケンシャルサンプリングの両方があるはずです(トレーニング用のピースは中間のどこかにあり、バリデーション用は生データの最初と最後にそれを囲むものです)。表の前半でトレーニング、後半でバリデーション、その逆の極端なバージョンも含めて。 トレーニングには、シーケンシャルにサンプリングされたサンプルとランダムなサンプルの両方が重要だと思います。図では、ランダム分割と逐次分割の例をより明確に見ることができます。緑色の線は学習用、黄色の線は検証用です。

よくわからないんです。ただ、どのような繰り返しを指しているのかが理解できません。

今回も99セット(10年ずつ)のトレーニングがあります。各セットとも作例はユニークですが、すべて同じ「以前」の時期から撮影したものです。

各セットで、2~10ファールのCVを走らせています(サイクルも回しています)。

しかし、私は厳密にすべてのファウルを時間ごとに分けています。侵すことのできない正しい方法だと思います。

つまり、99 * CVパラメータの組み合わせ数(数百) = 数百の学習済みモデルであり、検証用ファウルで最高の品質指標を示すことになります。

そして、「後」の時間枠(5年間)から同じ数の遅延サンプルが採取されます。また、それらはユニークなものです。ネストされたCVを行う:得られた各モデルを延期されたサンプルのCV経験についてチェックする。CVとディファードサンプルの2つの品質指標のベクトルを得ることができます。

目利きの方に質問です。

一定のデータと適切なモデル(パッケージ)がある場合、繰延べられたサンプルで何が得られると予想されますか?

回答:延期されたサンプルの品質指標(QM)は、検証用ファウルの品質指標と相関があるはずです。

現実には、これを実現するのは大きな問題です。

なぜ必要なのか?そうすれば、クロスバリデーションに頼るだけで、自信を持って最適なモデルを選択することができます。今後とも安定した結果が得られることは検証済みですので。

委員会などのトップレベルのモデルも、何の訓練も受けていないその延期されたサンプルでフィットネステストに合格する必要があります。

 
Dr.トレーダー


2) トレーニングサンプルでモデルをトレーニングし(使用されるモデルパラメータと予測変数はサイクルを通して同じで、あなたが推定しようとしているものです)、次にこのモデルでまさにこのデータを予測し、予測にスコア(精度、r^2、その他)をつけます。私は、例えば、回帰結果をクラスに丸め、推定にCohenのカッパ関数を使います。caretのものですが、分類精度や回帰精度よりも気に入っています。しかし、それは2つのクラスに対してのみ有効です。3クラスの場合は、それぞれのクラスの精度を考慮した上で、総合的に判断することが重要だと思います。
3) 学習したモデルを検証サンプルのデータ予測に適用し、同じ関数で予測値を推定する。
4) 両方の推定値(訓練値と検証値)は互いに近く、できるだけ高くすること。最終的なスコアはこのコードを使っています - (min(score1,score2)-(max(score1,score2)-min(score1,score2))- を最小値から差し引いたものをデルタとする。

各反復の終わりには、あるスコアを得ることになるが、データのランダムな分割のため、それは-1から1まで(あるいは、使用する関数によっては別の区間で)変化する可能性がある。その平均値を計算し、フィットネス関数の結果として返す。さらに、必要なデータセットが大きすぎる場合のペナルティーとして、使用した各予測子のフィットネス値から小さな数値(0.0001)を差し引きます。


トレーニングとは、クロスバリデーションのファールに関する評価のことでしょうか?

訓練と検証の推定値の近接性 - 遅延サンプリングとクロスバリデーションの結果の相関性を意味するのか?

そうだとしたら、まさに至れり尽くせりですね。

 
アレクセイ・ブルナコフ

トレーニングとは、クロスバリデーションのファールに関する評価のことでしょうか?

訓練と検証の推定値の近さ - 遅延サンプリングとクロスバリデーションの結果の相関を意味するのでしょうか?

そうだとしたら、まさに至れり尽くせりですね。

相関」とは何でしょうか?"+1"?"-1"?何を使って?

ここでは、私が理解できる50の実行結果を紹介します。50の結果ですでに統計学を応用し、平均値、偏差値、そして最も重要な信頼区間を 数えることができる......。

 
mytarmailS:

昨日の取引結果を見ることはできますか?

Ү 完璧ではないが、それでもモデルの80%は一般化されている......。

 
サンサニッチ・フォメンコ

相関」とは何でしょうか?"+1"?"-1"?何を使って?

ここでは、私が理解できる50の実行結果を紹介します。50の結果ですでに統計学を応用し、平均、分散、そして最も重要な信頼区間を 数えることができる...。

なーんだ、わかってなかったんだ、CC。

ディファードサンプルの品質指標とクロスバリデーション(学習済みモデルを評価するテストサンプルのようなもの)の品質指標との相関。数百の学習済みモデルがある場合、2つの品質指標のベクトルが得られます。

例:クロスバリデーションでの分類精度は57%、ディレイドサンプリングでは50%です。そして、そのような値は何百(何千)個もある。しかし、訓練されたモデルは何百、何千とあるのです。そこで疑問が湧いてくる。

 
アレクセイ・ブルナコフ

トレーニングとは、クロスバリデーションのファールに関する評価のことでしょうか?

訓練と検証の推定値の近さ - 遅延サンプリングとクロスバリデーションの結果の相関を意味するのでしょうか?

そうだとしたら、まさに至れり尽くせりですね。

コードで言うとこんな感じです。

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё  нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо  TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
機械学習の要素は、取引履歴からの学習ではなく、ロボット自身の取引セッション内で一連のシグナル/オプションを使用した履歴から、特定の構成/市場条件/シグナルで「ライブ」市場の特定のパターンのトリガーに相関させるために、実際に適用されました。
 
Dr.トレーダー

コードで言うと、こんな感じです。

はい、どのサンプルを比較しているのか、言葉で教えてください。トレーニングがあり、テストがある(複数のトレーニングとテスト=クロスバリデーション)。バリデーション(遅延サンプリング)がある。

3つのカラムを持っています。

をすべてトレーニングします。---- test fouls crossvalidation.----- 観測待ち

0.7 0.65 0.55

... ... ....

トレーニングがテストと相関があるというのはナンセンスです。なぜなら、結果として選ばれたモデルは、テストに含まれていた部分が集合全体に対してトレーニングされたものだからです。

しかし、テストの推定値と延期された推定値が相関しているという事実は、私にとって重要なことなのです。

 

あなたの言葉で言えば、トレーニングとテストの比較ですね。
モデルのトレーニング時に検証用(遅延)サンプルがないのですが。延期されたサンプルは、学習後にモデルが取引する新しいデータになります。

トレーニングとテストが相関していることはナンセンスである

そのため、複数のデータ分割と複数のモデルの再トレーニングを行うのです。モデルパラメータが不成功に終わった場合、テストサンプルの平均結果は、トレーニングサンプルの平均結果よりもはるかに低くなります

 
Dr.トレーダー

あなたの言葉で言えば、トレーニングとテストの比較ですね。
モデルのトレーニング時にバリデーション(遅延)サンプリングをしていない、ことがわかった。学習後にモデルが取引する新しいデータは、ディファード・サンプリングとなる。

そのため、データの多重分割とモデルの多重学習を何度も繰り返しています。モデルパラメータが不成功に終わった場合、テストサンプルの平均結果は、トレーニングサンプルの平均結果よりもはるかに低くなります

あなたのやっていることには、ジマがある。

ただし、ディレイサンプリングも試してみてください。これは名作ですね。トレーニング、テスト、バリデーション。

そして、その手順をさらに複雑なものにする。学習とテストがうまくいった各モデル(これをモデルXと呼ぶ)について、遅延データで検証を行う。このように、学習とテストだけで、モデルの選択が正しいかどうかを知ることができるのです。パラメータを変えて多くのモデルを作り、最適なものを選ぶ(10、100、1000)。失敗する。自分の「ベスト」な指標が、今後のデータに反映されるかどうかが理解できるようになります。その上で初めて戦いに臨むのです。