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

 
また、予測ではどのような結果が出ているのでしょうか? あえて聞きます。
 
mytarmailS:
また、予測ではどのような結果が出ているのでしょうか? あえて、質問させてください。
と聞かれたら、おそらく明確に答えられないと思います。予測されていることがたくさんあり、すべてが異なっているのです。しかし、平均すると約60〜65%。
 

モデル学習用に用意したスプレッドシートはこちらです。

価格は列ごとに差分に変換され、変更なしまたはNAで列が削除されています。

各列の各行に3つのラグを詰め込んだ(現在の行から前回を引いたもの、前回から既設を引いたもの、既設から既設を引いたもの)

目標 - 次の行の増減値(次の行から現在の行を引いた値を四捨五入して+-1、変化がない場合は0。)すべてのターゲットは "target_"という接頭辞を持ちます。

*他のターゲットを予測に使用することはできませんし、未来を覗き見することになります。target_」を先頭に持つすべての列は、予測因子またはintuとして使用することはできません。

ファイル:
 

問題です。

csvファイルを行単位で2分割し、学習データとfronttestを10:1の割合で配置。target_SiH7.bid(上の表)に対してモデルを学習させたところ、学習データで62%、新規データで74%の分類精度を得ることができました。嬉しかったのですが、再確認したところ、クラス0は他とのバランスが非常に悪く、金額だけで言えば60%と74%あることがわかりました。つまり、0はうまく検出できるが、-1や1はうまく検出できない、という状態である。

別のスコアが必要です。2つのアンバランスなクラスに対して、この指標は素晴らしいです -https://en.wikipedia.org/wiki/Cohen's_kappa しかし、我々のケースでは、2つではなく3つのアンバランスなクラスがあります、3に対するKappaアナログはありますか?

 
していません
と聞かれたら、おそらく一義的には答えられないと思います。予測されることは非常に多く、すべてが異なるのです。しかし、平均すると約60〜65%。

面白いですね、もう少し詳しく説明してもらえますか...。

ただ、今は全く違う分野の予測をしていて、散漫な生活を送るわけにはいかないので、このマーチの日に一緒に実験をすることはできませんが、読んでいてとても面白く観察しています、もっと書いてください...。

Dr.トレーダー

を見ると、クラス0は他と比べて非常に偏りがあり、量だけを見ると60%と74%であることがわかります。つまり、0は非常によく検出できるようになったが、クラス-1や1については諦めてしまったということである。

Uターンのランダムフォレストを学習させたときも、当然ながらUターンの方が非Uターンよりもはるかに少ないという問題がありました。木を作れば作るほど、MOはターンクラスで点数を稼ぎ、ターン以外のクラスで集中的に点数を稼ぐようになりました。

caret にはクラスのバランスをとるためのいくつかの方法がありますが、どれも簡単です - オブザベーションの少ないクラスを2倍にしてすべてのクラスのオブザベーションの合計を同じに揃えるか、逆にオブザベーションの多いクラスから余分なオブザベーションを削除するかです。

どの方法も、バランシングを全くしないよりは利益が出ます(ただし、あくまでも私の場合ですが)。

 
mytarmailS:

面白いですね、もう少し詳しく説明してもらえますか...。

私はちょうど今、全く別の分野の予測に取り組んでいて、迷子になるわけにはいかないので、このマートであなたと一緒に実験をすることはできませんが、読んで観察するのはとても面白いです、もっと書いてください...。

Uターンのトレーニングをしていた時も同じ問題がありました。Uターンはもちろん、非Uターンよりもずっと少ないです。木を作れば作るほど、MOはUターン組に埋もれてしまい、無ターン組に集中するようになりました。

caret にはクラスのバランスをとる方法がいくつかありますが、いずれもオブザベーションの少ないクラスを2倍にして全クラスのオブザベーションの合計を同じに揃えるか、オブザベーションの多いクラスから不要なオブザベーションを取り除くという、些細なものです。

どの方法も、バランシングを全く行わない場合よりも利益が出ない(ただし、これはあくまで私の場合ですが)

caretでは、学習関数のfitness関数を何らかのパラメータで変更することができます。分類にはprecisionやkappaを、回帰にはr^2や他の何かなど、あなた独自の2つのバリエーションを使うことができます。私はそこからkappaを学びました。kappaは、非常にバランスの悪いクラスに対して、追加操作なしでモデルを適切に学習させる手助けをしてくれました。
 
もし、反転を議論するのであれば、反転のための1本のバーではなく、反転の前の数本のバーと反転の後の数本のバーというように、意味のある形でクラスのバランスをとる必要があるのです。どうせクラスがアンバランスでも、それほど致命的でなく、カレットでバランスが取れるなら
 
毒性

すべて交渉可能です。私は、例えばSiRIBRなど、一般的に最も流動性の高いフォート先物を提案しました。結果的にシグナル(-1,0,1)(ショート,キャッシュ,ロング)を提案します。シグナルは確率よりも曖昧さがなく、注文としてMM によって歪められることがありません。後処理、標識、ターゲティングはあなた次第、または本。

いくつかの思考の後、私は少なくとも1つのより多くのガラスが追加されるべきであるという結論に来た{価格:ボリューム、...||...、価格:ボリューム }そのまま、1秒あたりの最後の、それぞれの予測された楽器のために、その後デルタは必要ありませんと入札、あまりにも尋ねる、それはIMHO必須です、もし秒ごとのテープと分割ボリュームとOMのシフト、多かれ少なかれ有益で、その後ガラス1デルタは非常に小さく、少なくとも一つは、別の "プレート "分布などを見る必要があるとそれがスタートとして十分だ。タンブラーを追加して、トレーニングデータセットを数日分投稿してください、遊びます。:)

 

最終的にScottのPi metricに決定https://en.wikipedia.org/wiki/Scott's_Pi

この推定では、最初の91%の行でモデルを学習させ、最後に残ったデータでフロントテストを行いました(バックテスト:フロントテストの比率=10:1)。
表の「class_0_rate」列は、クラス0とクラス-1、1との比率で、この値が高すぎる結果をExcelでふるい落とすことができるようにしました。

最後の2つの列は、Scottの学習とテストのPi指標で、値は-1〜1である。0=結果はランダムでMeodelは役に立たない、1=全てうまくいく、である。負の結果はダメ、逆相関、予測結果を逆にしてみるのも手です。逆相関は、予測と正反対の取引をする場合、2つのクラスでうまくいくことがあります。しかし、3つのクラスがあると、その反対を見つけるのは難しく、どのクラスにも2つの反対値があり、この場合、マイナスの値も悪いことになります。

例えばxagusdのように、バックテストとフロントテストでbid(またはask)予測の値が似ていて高い通貨を選択する必要があると思います。0点満点で0.18点というのは小さいですが。また、実際の取引で1ティック先を予測することも悪いことです。一般的には結果が出ますが、適用できません :)

ScottのPiのRコード

ScottsPi <- function(act, pred){
  if(length(act) != length(pred)){
    stop("different length")
  }
  
  n_observ <- length(act)
  
  all_levels <- unique(c(act,pred))
  n_levels <- length(all_levels)
  
  marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
  colnames(marginal_matrix) <- all_levels
  rownames(marginal_matrix) <- all_levels
  
  for(i in 1:n_levels){
    for(j in 1:n_levels){
      marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
    }
  }
  diagSum <- 0
  for(i in 1:n_levels){
    diagSum <- diagSum + marginal_matrix[i,i]
  }
  diagSum <- diagSum / n_observ
  
  marginalSum <- 0
  for(i in 1:n_levels){
    marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
  }
  p <- marginalSum
  return((diagSum - p)/(1-p))
}
ファイル:
 
Dr.トレーダー

最終的にScottのPi metricに決定https://en.wikipedia.org/wiki/Scott's_Pi

この推定では、最初の91%の行でモデルを学習させ、最後に残ったデータでフロントテストを行いました(バックテスト:フロントテストの比率=10:1)。
表の「class_0_rate」列は、クラス0とクラス-1、1との比率で、この値が高すぎる結果をExcelでふるい落とすことができるようにしました。

最後の2つの列は、Scottの学習とテストのPi指標で、値は-1〜1である。0=結果はランダムでMeodelは役に立たない、1=全てうまくいく、である。負の結果はダメ、逆相関、予測結果を逆にしてみるのも手です。逆相関は、予測と正反対の取引をする場合、2つのクラスでうまくいくことがあります。しかし、3つのクラスがあると、その反対を見つけるのは難しく、どのクラスにも2つの反対値があり、この場合、マイナスの値も悪いことになります。

例えばxagusdのように、バックテストとフロントテストでbid(またはask)予測の値が似ていて高い通貨を選択する必要があると思います。0点満点で0.18点というのは小さいですが。また、実際の取引で1ティック先を予測することも悪いことです。一般的には結果が出ますが、適用できません :)

ScottのPiのRコード

ScottsPi <- function(act, pred){
  if(length(act) != length(pred)){
    stop("different length")
  }
  
  n_observ <- length(act)
  
  all_levels <- unique(c(act,pred))
  n_levels <- length(all_levels)
  
  marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
  colnames(marginal_matrix) <- all_levels
  rownames(marginal_matrix) <- all_levels
  
  for(i in 1:n_levels){
    for(j in 1:n_levels){
      marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
    }
  }
  diagSum <- 0
  for(i in 1:n_levels){
    diagSum <- diagSum + marginal_matrix[i,i]
  }
  diagSum <- diagSum / n_observ
  
  marginalSum <- 0
  for(i in 1:n_levels){
    marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
  }
  p <- marginalSum
  return((diagSum - p)/(1-p))
}
データはごくわずかで、友人は普通のデータセットをぶら下げていたのですが、どこかで迷子になってしまったようです。トレーダー博士:データは少ないのですが、どこかで失われています。 また、具体的に言うと、もちろん1ティック先では本当に無駄です。少なくとも1分先では、1分通過では純粋なMM、両側のリミッター、スプレッドに比例した距離、ここでは「量子泡」、スプレッドよりずっと小さいので方向について話す意味がないのですが、このようになります。
理由: