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

 
サンサニッチ・フォメンコ
Rにおける「オブジェクト」というものは、多くのプログラミング言語よりもずっと複雑です。
オブジェクトに違いはなく、関数str, plot, summaryなどが何度もオーバーロードされているだけで、それぞれの型には独自の実装がある
 
アレクセイ・ブルナコフ
なぜこんなに時間がかかるのか、よく理解できません。optim_var_numberは何だったのでしょうか?10以内であること。1200秒に設定すれば、何かあるはずです。

予測変数の数が多い(9602個)ので、時間がかかるのです。eurusd d1から2015年版を取り出したもので、そこにはあらゆる種類の価格、時間、指標があります。まだd1から抜け切れていないので、学習例数は1年の取引日数で250以上しかない。スキップはしない。

optim_var_number = 0.8662363

ファイル:
trainData.zip  14378 kb
 
Dr.トレーダー

予測変数の数が多い(9602個)ので、時間がかかるのです。eurusd d1から2015年版を取り出したもので、そこにはあらゆる種類の価格、時間、指標があります。まだd1から抜け切れていないので、学習例数は1年の取引日数で250以上しかない。スキップはしない。

optim_var_number = 0.8662363

あなたのセットで遊んでみるわ。すべてが飛ぶはずです。
 
サンサニッチ・フォメンコ

最後の1列目は、PC1だけなら0.9761の変動が説明される(累積比率)、PC1とPC2の2成分なら0.99996が説明される、などとなっています。

pc1 pc2 pc3 pc4 pc5

標準偏差 2.2092 0.34555 0.01057 0.008382 0.004236

分散の割合 0.9761 0.02388 0.00002 0.000010 0.000000

累積比率 0.9761 0.99996 0.99998 1.000000 1.000000

この方法は、可能な限りのコンポーネントを用いて作業する場合にのみ有効です。prcomp関数にはパラメータ "tol "があり、デフォルトではNULLである。しかし、0から1までの任意の値を割り当てることができ、見つかった部品の数を減らすことができます。新しいコンポーネントを検索する際に、最初のコンポーネントのsdevを取得し、tolを掛けるという仕組みです。新コンポーネントのsdevが本製品を下回ると同時に、新コンポーネントは生成されなくなります。例えば、tol = 0.1であれば、sdev <0.22の成分はすべて捨てられるので、2つの主成分だけが残ることになります。tol=0.003 の場合、sdev > 0.0066276 の成分だけが残り、つまり4つだけとなります。tol=NULL (デフォルト) の場合、関数は最大数のコンポーネントを生成するが、時間がかかりすぎるため、この処理を短縮化したい。tolを使えば、部品点数も少なく、動作も速くなるのですが、この場合は壊れてしまいます。見つかった部品のみで何とか計算しています。最後に見つかった成分の累積比率は常に1になります。数千個ではなく2個しか見つからなかったとしても、2個目の成分の累積伝搬量は1になり(例えば、全ての成分を生成した場合は0.1)、その結果、PC1の累積伝搬量も増加することになります。予測変数のふるい落としの際に、Cumulative Proportionも正しく変化 しない可能性があります。

ですから、Cumulative Proportion は信用できません。もし、真剣に y-aware pca を使っているならば、説明される変動を計算する独自の関数を書くべきです。

 
Dr.トレーダー

この方法は、可能な限りのコンポーネントを使って作業する場合にのみ有効です。prcomp関数にはパラメータ "tol "があり、デフォルトではNULLである。しかし、0から1までの任意の値を設定することで、検出されるコンポーネントの数を減らすことができます。新しいコンポーネントを検索する際に、最初のコンポーネントのsdevを取得し、tolを掛けるという仕組みです。新コンポーネントのsdevが本製品を下回ると同時に、新コンポーネントは生成されなくなります。例えば、tol = 0.1であれば、sdev <0.22の成分はすべて捨てられるので、2つの主成分だけが残ることになります。tol=0.003 の場合、sdev > 0.0066276 の成分だけが残り、つまり4つだけとなります。tol=NULL (デフォルト) の場合、関数は最大数のコンポーネントを生成するが、時間がかかりすぎるため、この処理を短縮化したい。tolを使えば、部品点数も少なく、動作も速くなるのですが、この場合は壊れてしまいます。見つかった部品のみで何とか計算しています。最後に見つかった成分の累積比率は常に1になります。数千個ではなく2個しか見つからなかったとしても、2個目の成分の累積伝搬量は1になり(例えば、全ての成分を生成した場合は0.1)、その結果、PC1の累積伝搬量も増加することになります。予測変数のふるい落としの際に、Cumulative Proportionも正しく変化 しない可能性があります。

ですから、累積比率は信用してはいけません。もし、真剣に y-aware pca を使うのであれば、説明される変動を計算する独自の関数を書くべきです。

それは面白いアイデアですね、私があなたに見てほしいと煽っていたのは無駄ではありません。
 
Dr.トレーダー

予測変数の数が多い(9602個)ので、時間がかかるのです。eurusd d1から2015年版を取り出したもので、そこにはあらゆる種類の価格、時間、指標があります。まだd1から抜け切れていないので、学習例数は1年の取引日数で250以上しかない。スキップはしない。

optim_var_number = 0.8662363

セットを拝見しました。私が何かを理解していないのか、例えばすべての変数が来ていないのか、それともあなたが大きな間違いを犯しているのか、どちらかです。例えば1.1354(MAなど)のような生値がたくさんありますよね。完全に非定常データなので、できるわけがないのです。すべてのデータは、DIFFERENTまたは振動インジケータであり、全方位である必要があります。このようなデータから依存関係を見つけ出すのは、全く意味のない仕事です。
 

そうだ、忘れていた、データは特別に用意しなければならないと、すでに言っていたね。生データを撮りました。インジケーターの中にはオシレーターもあるので、それだけを取り上げてみることにします。

ところで、PCAモデルはこのようなデータでも機能するが、元データのセンタリング、スケーリング、回転が必要である。ニューロニクスの場合はもっと簡単で、データを[0...1]で正規化するだけでよい。

 
Dr.トレーダー

そうだ、忘れていた、データは特別に用意しなければならないと、すでに言っていたね。生データを撮りました。インジケーターの中にはオシレーターもあるので、それだけを取り上げてみることにします。

ところで、PCAモデルはこのようなデータでも機能するが、元データのセンタリング、スケーリング、回転が必要である。ニューロニクスの場合はもっと簡単で、データを[0...1]で正規化するだけでよい。

なーんだ、確かに非定常性の重要性をよく理解してないね。NSモデルでも線形モデルでも私のモデルでもいいのですが、データが非定常であれば、そこに見出される依存関係はサンプル外では発生しないことが保証されます。生の価格、MA(生の価格)、バーオープニング(生の価格)などの形式で持っているすべてのデータは、モデルから削除する必要があります。最後に判明した価格からその差を取る必要があります。

ここでは、区間へのスケーリングはできません。

 
アレクセイ・ブルナコフ

非定常なデータがあれば、そのデータから発見される依存関係はサンプルの外では発生しないことが保証されます。

ただ、ひとつだけ、このようなデータの再現性の適切さに疑念を抱かせる興味深いニュアンスがある(前回値との差異)。

1)例えば、価格がある場合。

2)その差分を生成する

3) 構造的に非常に近い2つの差分(ユークリッドとする)を取る。

4) これらの領域は、ほぼ100%RFの1つのクラスタに属しているか、同じ神経細胞であり、同一状況であると考えられる。

5) 次に、この2つのセクション(差分)を再び最初の価格に還元する、つまり、それらを累積する

そして、これらのセクションは全く異なっていることがわかります。しばしば、一方のセクションは上昇傾向にあり、他方は下降傾向にあります。つまり、アルゴリズムがこれらを同一のセクションであると考える一方で、類似性がないことがわかります

アレクセイ、君はどう思う? 経験者として君のコメントは興味深いね。

 
mytarmailS:

ただ、ひとつだけ、このようなデータの再現性の適切さに疑念を抱かせる興味深いニュアンスがある(前回値との差異)。

1)例えば、価格がある場合。

2)その差分を生成する

3) 構造的に非常に近い2つの差分を取る(ユークリッドとする)。

4) これらの領域は、ほぼ100%RFの1つのクラスターに属しているか、同じ神経細胞であり、同一状況であると考えられる。

5) 次に、この2つのセクション(差分)を再び最初の価格に還元する、つまり、それらを累積する

そして、これらのセクションは全く異なっていることがわかります。しばしば、一方のセクションは上昇トレンド、もう一方は下降トレンド、つまり類似性がないのですが、アルゴリズムはこれらが同一のセクションであると考えます...

アレクセイ、どう思う? 経験者としてのコメントは興味深いね。

なぜ、そのようなことになるのでしょうか?差分が同じであれば、積分級数は完全に一致することになる。ただ似ているだけなら、積分系列は(傾向的に)似ていることになる。

トレーダーには、データ準備の基本を読め、と言いたかったのです。エントリー時に生値で提出する人はいない。これはもう何十万回となく繰り返されてきたことです。非定常なデータは非定常な依存関係をもたらす。

理由: