English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ランダムフォレストの予測トレンド

ランダムフォレストの予測トレンド

MetaTrader 5トレーディングシステム | 18 1月 2016, 09:44
3 628 0
СанСаныч Фоменко
СанСаныч Фоменко

はじめに

トレーディングシステムを構築する最初の目的はマーケットインスツルメント、たとえば通貨ペア、のふるまいを予測することです。予測の目的はさまざまです。われわれはトレンド予測、正確には通貨ペアクオートの成長(ロングポジション)または衰退(ショートポジション)に限定します。

通貨の動きを予測するにはトレーダーは通貨ペアチャートに数個のインディケータをアタッチし、予測力のあるパターンを見つけようとします。

本稿ではパターンの自動選択とR 統計解析システムのライブラリであるRattle パッケージを用いたその事前評価について考察します。


1. Rattle について

われわれは金融マーケットを予測するのに理想的な通貨ペアの動向を予測するのに R を利用していきます。とはいう物の、R は主に有資格の統計家用プログラム言語でトレーダーの多くの理解の及ぶところではありません。予測のためのツールが数多くありR の基本機能を作る多数のパッケージに散らばっていることで R はより複雑になっています。

Rattle(簡単に学習するための R 分析ツール )は1式の R パッケージに統合しています。それはトレーディングシステム開発にとっては重要なことですが、初心者には個別に利用するのは簡単ではありません。R が Rattle と連携しはじめるのを理解する必要はありません。Rattle との連携結果は R のコードです。それは実際のトレーディングシステムを開発するために使用できるものです。ただしこの段階では R の知識が必要です。

とにかく Rattle はトレーディングシステムを作成する段階において外せないツールです。それにより初心者でさえ多様な考えの結果を確認し、それを評価することができるのです。

Rattle (Williams, 2009) はパッケージとして作成されたオープンソースコードを持つ無料のソフトウェアで、R(R の開発ワーキンググループ, 2011)の一部です。無料のソフトウェアなので、Rattle および R のソースコードは無制限に利用可能です。Rattle ソースコードは С 言語で書かれた折、ユーザーはコードを学習し検証し拡張することが許され、また奨励されています。


2. ソースデータ記述

本稿で行われる計算は2011年1月10日~2013年12月24日の期間で Н1 のタイムフレームにおける終値の6とおりの通貨ペア-EURUSD、GBPUSD、 USDCHF、USDJPY、EURGBP、USDCAD のクオートを持つデータセットを基にしています。データは 18,000 本以上のバーを持ちます。これは計算を信頼性あるものとします。上記通貨ペアを基にしたデータセットはロングおよびショートポジションを予測するパターン検索に使用されました。

初期クオートを持つデータセットは "kot60_110101_131231_UA.txt" という名前の添付ファイルにあります。


2.1. 対象変数の作成

まず第一段階として正確に何を予測するのか決定する必要があります。シンプルに見えるものの、予測の正しい目標とこの目標を数値セットとして表現するデータを選択することは基本です。

トレンドを予測する考えについては、トレンドでトレードをするという要望に基づいています。

『トレンド』の定義に従い、『上向きのトレンドは連続する価格がそれぞれ1つ前のものよりも高いとき』で下向きのトレンドはその逆です。よって通貨ペア価格の予測の必要性は決定の次にきます。EURUSD の初期レートが 1.3500 で予測レートが 1.3550であれば、それは上向きのトレンドで買いを促します。

ただし、基本オーダーは『買い』と『売り』で、一方予測は価格レベルに対します。たとえば価格レベルはトレーディングシステムでレベルのブレークスルーを予測するのに使用されます。トレンドでトレードを行う考えを実装するには、さらなる価格比較を実行する必要があります。明らかにトレードしようとしていたものとは違ったものを予測しています。

トレーディングシステムが設計によってトレンドを追うものであれば、モデルはトレンドを予測する必要があります。モデルはトレンドを認識するようトレーニングされるので、目標値は『売り』と『買い』2つの値だけを取ります。コード(カテゴリーとしての)形式では、目標変数は "1" や "-1"のようになます。

ファイナンシャルインスツルメントの価格を計算するのにソースデータの母集団を使用するモデルとクラスに対するソースデータの 母集団を入れるモデルの間には根本的な違いがあります。前者は回帰モデルに属し、後者は分類モデルに属します。

回帰タイプの予測モデルは将来の同じ値を計算するのに使用されます。この将来がやってきたとき、予測値と比較する事実上の値を持つことになるのです。

分類タイプの予測モデルは予測時に受け取られるソースデータの 母集団が関連づけられるクラスを計算するのに使用されます。"long" と "short" の2クラスがそれです。質的タイプのあらゆるモデルで同じですが、これら2つのクラスも指定サイズを持ちません。そのため"long"クラスは"short"クラスと比較することができないのです。われわれは便宜上 "long" と "1"、"short" を "0" とコード化しますが、それは"long" が "short"よりも大きいということではありません。これを強調するためにそのような質的変数に対して R とそれゆえに Rattle は分類(名目上の)変数の特殊化したタイプを備えています。

目標変数としてのロングとショートポジションは存在せず、それは下に述べる独立変数との主な違いです。この側面はわれわれが今現在の瞬間に存在しない賞有を予測することを表しています。過去に関連する将来がわかっているので、履歴データ上でトレンドをうまく描くことができます。

履歴データ上でトレンドを区別するには ZigZag を利用します。これは履歴データにとって優れたインディケータで、実データにとっては役に立たないものです。というのも最終リンクと時には前回リンクが再作成されるためです。履歴データには動きがないので、このインディケータでひじょうに美しいトレンドを描写することができます。

0.0035 ドルに等しい『反転ポイントとの距離』 パラメータを持つZigZag インディケータは目標変数を計算するのに使用されました。図1は結果を表示しています。

図1 ZigZag インディケータ

図1 ZigZag インディケータ

インディケータ値は"long" = 1 または "short" = 0 の分類値に変換されています。

結果は図2に表示されています。

図2 ZigZag インディケータの分類形式

図2 ZigZag インディケータの分類形式

目標変数の最後の処理を行います。ZigZag インディケータを左に移動させれば、現在バーは ZigZag インディケータの将来の値に対応するようになります。本稿では移動は1バー分行われます。それは1時間前に使用されるデータに対して1ステップ先に進んだ予測に等しいものです。

移動はより大きなバー数に対して行われ、より大きなバー数にたいする予測と相関関係があります。この方法は複数の将来値を予測するのに前回値が使用され予測エラーの総和 につながる他の予測方法とは異なっています。

本稿で強調表示しているモデルは分類モデル同様一般的にエラーを集積しません。分類モデルでは、先行バー2本に対する予測はそれ自体が1本前のバーの予測エラーとは関連のない予測エラーを持ちます。


2.2. 独立変数の作成

独立変数またはプレディクタは外部からモデルにやってくるものなのでそのように呼ばれます。それらは部外者で測定可能な変数または外部変数を基に計算される変数です。通貨ペアに対するクオートを持つ経済的データや金融データはどれもその値がマーケットで活動するものの活動結果であるため独立変数です。テクニカルインディケータから受け取られるデータはクオートを基に計算されるため同じカテゴリーに属します。

独立変数の選択は目標変数の選択と同じくらい重要なものです。実際、モデル化の成功を決定するのは独立変数の選択です。モデル開発に費やす時間は分析と独立変数セットの選択に多く費やされます。

通貨ペア、日時の6とおりのクオートを持つソースファイル kot60_110101_131231_UA はプレディクタとすることができます。

時刻とデータはこの方法の観点からかなり興味深いものです。トレーディングシステムではつねに時刻とデータを使用する試みがあります。われわれのモデルでは、1日のうちの時刻と曜日へのクオートの依存関係における隠されたデータを考慮することは分類モデルによって自動的に明らかにます。ここで唯一行うことはこれら2つの変数をカテゴリー形式に変換することです。時刻は24レベルあるカテゴリとなり、日付は曜日の数と一致する5レベルのカテゴリー変数となります。

ソースプレディクター以外に、別のプレディクターを作成します。それは私の意見ではソースクオートでトレンドを明らかにするものです。追加のプレディクターを作成するのには有名なインディケータを使用します。

次のインディケータです。:5,10 および 15; MACD(12,26,9)、周期14,21,28 のRSI。その上にクオートのインクリメントと移動平均を利用します。これらすべての換算が通貨ペアの6とおりのクオートすべてに適用されます。

ZigZag インディケータはサポート目的の独立変数の数に含まれます。それはバーの右端の値がわからないため、モデル作成には使用されません。

われわれには独立変数が88、ターゲット変数が1、サービス変数が1(ZigZag)あります。各変数のデータ量は 18083 バーです。

このデータセットは R ワークスペースの形式をしており、本稿添付資料の中に TC.RData という名前で見つけることができます。このデータセットは次のように使用することができます。

  • ロード R
  • Rattle ライブラリをロードする
  • タブ File/Workspace;
  • ディスク上に TC.RData ライルを見つけロードする。


3. ソースデータの知的な分析

Rattle パッケージは事前のまたは知的なデータ処理-データマイニング用のツールセットが提供されています。


3.1. 入力とプレビュー

前出のセクションでお話したアクションを行った後で可能となることがらについて考察します。

結果は図3にある絵で確認することができます。

図3 Rattle ホームスクリーン

図3 Rattle ホームスクリーン

Rattle でのモデル開発は場所をとります。データタブからログタブに移動するためです。

Rattle の最初のタブは「データ」です。その名前によれば、このタブは将来処理するデータをロードすることができるということです。

われわれにとっては「スプレッドシート」 と「R データベース」の2つのボタンが特に関心のあるものです。

「スプレッドシート」ボタンにより Excel ファイルをアップロードすることができます。読者のみなさんがご自身の考えを検証したいなら、独自の Excel ファイルを準備して Rattle を試してみることができます。

本稿で説明しているアクションを繰り返したり、本稿に添付のある生データを持つファイルで別のアクションを行ってみるには、「R データベースボタン」を使用します。このボタンは R フォーマットでファイルをロードします。ファイルは『ワーキングディレクトリ』または『ワークファイル』と呼ばれます。それらは .RData ディスクに拡張子を持ちます。このファイルは R にアップロードすることができます。その後このボタンをクリックすることで使用可能となります。

準備したファイルをアップロードし、図4の上側の絵と図5の下側を取得します。

図4 ソースファイルの上側

図4 ソースファイルの上側

図5 ソースファイルの下側

図5 ソースファイルの下側


3.2. ターゲット変数と独立変数の相関関係

注意:『実行する』ボタンは重要な役目をします。アクションは準備されますが、処理されません。どのアクションも実行するには『実行する』ボタンを押します。本稿で述べられているアクションを繰り返すたびごとに押す必要があります。

図4は変数、その特徴、変数の役割のリストを表示しています。このモデルでZigZag インディケータは使用するつもりがなくいずれにせよ使用できないので、それに無視するマークを入れます。Ignore に設定するのです。

その他変数は最後のもの以外は入力変数として使用されます。最後のものはターゲット変数として使用されます。

「パーティション」ボタンはモデル化の結果に対して信頼できるレベルを証明するために重要な役目をします。このボタンを使うとデータセットは必要に応じ三分割されます。モデルのトレーニング、検証、テストに使用されるデータセットの割合はこの段階で決められます。

次のフィールドでは、疑似乱数数センサーに対するシードが指定されます。たとえば、トレーニングデータセット用に集められたソースデータの70%がランダムにソースデータセットから選択されます。結果、15% の他の2つの部分(われわれのケースのように)もまたランダムバーシーケンスです。

ソースデータセットから「シード」を変更することで多様なトレーニングまたはその他データセッのト不明確な料を取得するのです。

図6 変数の相関関係

図6 変数の相関関係

受け取った表で ZZ.35 という名前の列を見つけます。下の表に示しているサンプルはその列から取られました。

変数 ZZ.35
RSI_cad.14 -0.0104122177
JPY.dif2 -0.0088412685
EUR.dif3 -0.0052379279
CHF.dif3 -0.0049692265
GBP.dif3 -0.0047409208
GBP.dif1 0.0044691430
MA_cad.15.dif1 -0.0039004722
JPY.dif1 -0.0023831247
GBP.dif2 -0.0015356091
EUR.dif2 -0.0013759749
CHF.dif2 -0.0012447101
EUR.dif1 0.0005863149
MA_cad.10.dif1 0.0023981433
CHF.dif1 0.0024543973
MA_gbp.5.dif1 0.0043757197
MA_cad.5.dif1 0.0075424397
MA_gbp.10.dif1 0.0094964069
EURGBP.dif1 0.0095990416
CAD.dif1 0.0110571043

表1 変数の相関関係

見てのとおり、ZZ.35 と0.01 より小さい相関を持つ変数のひじょうに長いリストがあります。相関のレベル 0.1 からはターゲット変数への独立変数の影響について何も結論が得られません。.

この段階でわれわれはこの事実に注意し、モデルが評価されたあとでそれを適切に利用します。

分類モデルでは、ターゲット変数でのプレディクターの影響度はひじょうに重要な役割を果たします。低い相関レベルでは、一致するプレディクターは再トレーニングにつながるモデル内のノイズであると思われます。もでるが詳細を考慮し始めプレディクターがたーげと変数に対して非有意であるとき、モデルの再トレーニングです。

相関レベルに推奨はありません。通常、統計のありえない数字-5% を採用します。これは基本的に誤りです。モデル内のノイズであるプレディクターを削除すると予測エラーの減少につながります。モデル内でノイズではないプレディクターを削除すると予測エラーの増加につながります。そのため実験をとおして、モデルにとって有用なプレディクターの最小リストが作成されます。


3.3. スケーリング

サポートベクトルマシン(SVM)のようにプレディクターのスケールの違いに敏感なモデルがあります。それは以下を意味します。たとえば、通貨ぺア EURUSD のデータが限度 0.5 内で変化します。そのため USDJPY は数十ユニット内で変化します。プレディクターのスケール差を排除するには、「変換」タブで1スケールにもっていきます。プレディクターの変動は限度 [0-1] 内で起こるのが好ましいといえます。

スケーリングを行うには、Transform/Rescale/Scale [0-1] を選択します。その後、変数をすべてマークして『実行する』ボタンを押します。


3.4. カテゴリフォームへの変換

カテゴリフォームへ変換することで、数値変数の値を複数レベルの要因に変換することができます。RSI インディケータはマルチレベルファクターに変換される最初のものです。その値がゼロか100に近づくとトレンドの反転を示すと思われています。

RSI インディケータ値をカテゴリフォームに変換するには Transform/Recode/KMeans を選択します。そうしてファクターレベルを8に設定します。RSI インディケータをすべてマークして『実行する』ボタンを押します。

ZZ.35 変数を Ignore に設定したら、モデル作成に進みます。


4. 分類モデルの一般的アルゴリズム

次のモデルは Rattle で利用可能です。

  • ツリー状分類のモデル(Tree)
  • ランダムフォレストモデル(forest)
  • ブーストツリーモデル(ada)
  • サポートベクタマシンモデル(SVM)
  • 一般化線形モデル(glm)
  • ニューラルネットワークモデル(NNET)

分類モデル間の基本的相違にもかかわらず(われわれはRattleで利用可能な物だけについて話しているのではありません)、それらはすべて以下のような共通の性質を持っています。

文字列(われわれの場合その数は18030)で構成され、プレディクター値(われわれの場合は88)とターゲット変数("long" および "short")値を持つトレーニングセットを取ります。

分類アルゴリズムのどれもが "short"に対応するプレディクター値の組合せからの "long"に対応するプレディクター値の組合せを分離することについての問題に取り組みます。これはモデルのトレーニング段階です。

そして続くのはモデルを検証する段階です。

ソースデータセットを三分割したので、別のデータセットを取り、トレーニング段階でこれら受け取ったものと比較されるプレディクターの組合せを考察します。プレディクタの組合せはどれも"short" または "long"に属している場合に行われます。検証で9-他セットは既知の値を持つため、結果は実際のデータと比較されます。実際のロングとショートポジションの予測に対する比率は予測エラーです。

結果がわれわれに適していなければ、知的なデータ分析段階に戻り結果を改善します。残念ながらこの段階のクオリティーは完全にトレーダーの経験によって決定されてしまいます。変化はソースデータセットで加えられ、モデルは作成し直しとなります。

トレーニングおよび検証データセットについて取得される結果が満足のいくものであれば、モデルをまだ使用されていないテストデータセットについて検証します。

もでるのクオリティーは小さな予測エラーだけでなく、異なるデータセット上のこのエラー値によって決定されます。これがモデルの堅牢さと再トレーニングまたはトレーダーが超調整とよぶところのものが不要であることを示します。

本稿ではランダムなフォレストモデルを詳しく見ていくこととなります。


5. ランダムフォレストモデル

5.1. 概要

トレーダーの作業アルゴリズムは以下のようなものです。インディケータセットは通貨ペアのクオートに追加され、通貨クオートとインディケータ合計を判定してトレード決定がなされます。

このもっともシンプルなトレーディングシステムは『移動平均』で、現価格が移動平均より高ければ買い、低ければ売ります。トレーダーは RSI インディケータから受け取るデータのような別の条件を追加することができます。結果、トレーダーは決定木を取得します。その木の葉に通貨ペアのクオート、移動平均の値、RSI インディケータがあるのです。木の根には2つの値しかありません。-『売り』と『買い』です。

木を構築する手順説明は分類木のモデルに自動化されています。よって木は1本だけある、またはトレーダーのスラングでは、1パターンだけあるのです。

1本の木のアルゴリズムは正確なモデルを構築することはできません。多様性は不安定につながるためです。それは個別の決定木を構築する際見られます。

読者のみなさんは Rattleのツリーモデルによってこの意見をご自身で検証することができます。このモデルは木を構築する記述されたアルゴリズムを実装します。

ランダムフォレストモデルの考えは、一つだけではなく数多くの分類木(パターン)をモデルに持ちます。ランダムフォレストはデータ変化やノイズ(ターゲット変数にほとんど影響のない変数)に対して高抵抗性があります。

ランダムフォレストアルゴリズムで用いられるランダムさは表の列(観察)とプレディクターを選択するとき明らかになります。このランダムさはノイズ、異常値、スタンドアロンの木のような分利子と比較するときトレーニングに対して大きな抵抗を決定します。

確立もかなりの計算効率を決定します。スタンドアロン判断木を構築するとモデルの開発者はトレーニングでデータセットで利用可能な観察のランダムな対象を選択することができます。その上、木を構築する過程の各ノードでデータセットを分割する最良の比率を決める際、利用可能な変数全体からほんの一部を考慮するだけです。それが計算処理に対する条件をかなり緩めることにつながります。

そのためランダムフォレストモデルは数多くの理由でモデルを開発するのにはよい選択です。ちょっとした事前データ処理が必要となることがよくあります。それはデータが正規化されることになっておらず、方法が異常値に対して弾性的なためです。変数選択の必要性は避けることができます。アルゴリズムの効率が自分の変数せっとを選ぶためです。二段階のランダムさ(観察とプレディクター)をもって多くの木が構築されるので、木はどれも効率的な独立したモデルなのです。このモデルはトレーニングデータセット上で再トレーニングされる傾向はありません。

ランダムフォレストのアルゴリズムは100~500の木を作成することがよくあります。最終モデルができると、各木によってされた結滞が木を同じように処理することで統合されます。組み立った木についての最終決定は構成ツリーの大部分です。100ポイントからの51のツリーが "long" であれば、信頼は低いですが、"long"の値は受け入れられます。


5.2. アルゴリズム

5.2.1. データセットからのサンプル作成

ランダムツリーを作成するアルゴリズムはブートストラップ集約またを用いたりサンプル作成の過程にランダムさを取り入れるために略してバギングをして多くの決定木を生成します。ブートストラップ集約はバッグに観察のランダムなサンプルを集める考え方です。ランダムなオーダーで形成される多くのバッグはトレーニングデータセットのソース観測から受け取られる選択された観測値で構成されています。

バッグへの照合は置換によって行われます。それは観測値はすべて特定のバッグの中で複数出現するチャンスがあることを意味します。サンプルサイズは頻繁に完全データセットと等しくになっています。実践が観測値の3分の2はバッグにインクルードされ(繰り返し)、3分の1は考慮されないことを示しています。どの観測値のバッグも決定木を構築するためのトレーニングデータセットとして使用されます。使途不明の観測値は結果を評価するための独立したサンプルとして使用可能です。


5.2.2. プレディクターの選択形成

ランダムさの第二の基本エレメントはデータセットを分割するためのプレディクターの選択に関連します。個別の決定ノードを作成するステップの一つ一つ、すなわちツリーの各分岐点では、ランダムで通常小さいプレディクターセットが選択されます。分基点で選択されるプレディクターのみ考慮されます。ツリーを構築する各ノードに対してはそれらはプレディクターの異なるランダムセットを考えます。


5.2.3. ランダムさ

データと変数のランダムセットを形成すると、それらはデータのサブセットによるさまざまな結果の決定木を受け取ります。この変化ことがこのツリーの組み立てをもっとも信頼性のある予測を行う能力の異なるレベルを持つエキスパートの協力チームとして扱います。

サンプル形成にはもうひとつ意味のある利点があります。計算効率です。プレディクターのトータル数のほんの小さな一部を考慮することで、データセットを分割するとき必要な計算ボリュームがかなり減ります。

すべての決定木を作成し、ランダムツリーを形成するアルゴリズムは決定木を切りません。超調整を伴うランダムフォレストはひじょうにすぐれたモデルを作成することができます。それは新規データについてよく動作するものです。


5.2.4. 組み立てにおける計算

数多くの決定木を一つのモデルとして扱う場合、各ツリーは最終決定では等しく重要です。シンプルな過半数が結果を決めるのです。それはスプリットの 51% とスプリットの99% が同じクラス、たとえば "long" を作成するということです。

Rattle による計算は部分的なものです。それはユーザーがクラスの形式で結果を取得するためです。モデルが R で使用される場合、クラス形式の結果の確率は利用可能となります。


5.3. ランダムフォレストモデルの開発

モデル構築には Model/Forest を選択します。開始されたモデルの計算はわれわれのソースデータについては数分かかります。

私は計算結果を数個の部分に分割し、それぞれにコメントを付けます。

出た結果を図7で確認します。

図7 ランダムフォレストモデルの調整結果の上部

図7 ランダムフォレストモデルの調整結果の上部

この数字の情報をいくつか強調する必要があります。

TREND はここでのターゲット変数です。

このモデル構築の再、500 のツリーが生成されました。ツリーのノードをすべて分割するところでプレディクター(変数)は9個使用されました。またボタンエラーと OOB ROC がわれわれにとって特に興味のあるところです。

それから予測エラーが続きます。それは次のようなものです。

エラー率のOOB 推定:15.97%

混同行列:

0 1 class.error
0 4960 1163 0.1899396
1 858 5677 0.1312930

表2 トレーニングセットについてのエラーメトリックの分割表

それは『エラーout of bag は15.97%である』と解釈します。

取得した予測エラーは重大なものです。それがどのように取得されたか、また正確に言えば、それが『バッグから』取得されたかどうか明らかにすることが重要です。トレーニングデータセットの一部だけがこのモデル作成に使用されました。このモデルは今度、ソースデータセットを 70% 作ります。トレーニングデータセットの約 60% がこのモデル構築に使用され、40% は使われませんでした。データのこの 40% が"Out of bag"と呼ばれるのです。15.97% の予測エラーはそのデータで受け取られました。

先に進みます。

分割表またはエラーメトリックは次のように解釈されます。

最上列には予測したショートおよびロングポジションが入っています。左側の列は実際のショートおよびロングポジションで履歴データについて ZigZag インディケータから受け取られました。

座標 (0,0) の値 4960 は正しく予測されたショートおよびロングポジションの数です。次の値T 1163 はロングポジションとして予測されたショートポジション数です。

座標 (1,0) の値 858 はショートポジションとして予測されたロングポジション数です。値 5677 は正しく予測されたロングポジション数です。

それではモデル化の結果に進みます。

以下はモデルの変数すべてを持つ大きな表からの数列分です。これは変数の重要性を示す表です。

0 1 MeanDecreaseAccuracy MeanDecreaseGini
MA_eur.5.dif1 42.97 41.85 54.86 321.86
EUR.dif3 37.21 46.38 51.80 177.34
RSI_eur.14 37.70 40.11 50.75 254.61
EUR.dif2 24.66 31.64 38.24 110.83
MA_eur.10.dif1 22.94 25.39 31.48 193.08
CHF.dif3 22.91 23.42 30.15 73.36
MA_chf.5.dif1 21.81 23.24 29.56 135.34

表3 ランダムフォレストモデルにおける変数の重要性

変数の重要性の評価がいくつかあります。ここでの語『重要性』は特定の変数のターゲット変数に対する影響度を表します。値が大きいほど、その変数はより『重要である』と言えます。

この表はモデルからもっとも重要性の低い値を除外するためのデータを提供しています。統計と特に分類では、モデルがシンプルであるほど優れているものです。モデルの精度が損なわれない限り、ですが。

エラーボタンは「モデル」タブではもっとも重要性の低いものです。それを押すと図8が表示されます。

図8 モデル化エラーのツリー数への依存性

図8 モデル化エラーのツリー数への依存性


6. モデルの効率化

モデル効率化評価は「評価」タブで行われます。ここでは Rattle がそれへのオプションセットへのアクセスを提供します。

われわれは「エラーメトリック」を使用します。それは以前に「分割表」と呼ばれたものでモデル効率評価の利用可能なおぷ本リストにあるものです。

「モデル」タブから「評価」タブに移動すると、作成されたモデルの一番最後のものに自動でフラグが付けられます。それは Rattle での処理の一般的原則と合っています。モデルを作成し、セットアップし、それから「評価」タブでその効率性を調査するのです。

モデルの評価には、確認を行うためのデータセットが指定される必要があります。次の Rattle のオプションの次の行はデータソースの代替セットです。

データに対する最初の4個のオプションは「データ」タブで指定されたデータセットの分割に対応しています。選択肢は「トレーニング」、「検証」、「テスト」、「すべて(全部のセット)」です。トレーニングのセットへの分割データ設定、検証、テストについてはすでにお話しました。

第一オプションはトレーニングデータセットについてモデルを検証することです。通常それはよい考えではありません。トレーニングデータセットでモデルを評価することについての問題は、モデルはこのデータセットを基に作成されていることです。そこでモデルはわれわれが当初達成しようとしていた良い結果を提示するでしょう。モデルはこれまで未知のデータで使用されるように作成されています。

新しいデータでモデルが良いパフォーマンスを行うことを保証する方法が必要です。同時に、わえわれはモデルエラーの現レーティングを得ています。それはモデルに対する予測と実データとの差を表すものです。トレーニングデータではなくこの未知のデータセットにおけるエラーレーティングは、モデルの効率を評価するには最良の方法です。

われわれは作成とセットアップの際、モデルの効率性検証のために「検証」データセットを使用します。 よってモデルが作成されたあと、その効率性はこの検証データセットで検証されます。モデルを作成するためのセットアップオプションをいくつか変更することは可能です。検証データセットを基にその効率性で、われわれは新しいモデルを古いモデルと比較します。この意味で検証データセットは最終モデル作成のためのモデル化に使用されます。われわれは検証データセットに依存するなら、まだモデル効率をシフト推定します。

「テスト」データセットはモデル作成時にまったく使用されていませんでした。トレーニングおよび検証データセットで『最優良』モデルを特性したらすぐに、テストデータセットでモデルの効率を推定します。これは任意の新規データに対して予想された効率の検証です。4番目のオプションはモデル評価にフルデータセットを使用します。フルデータセットとはトレーニング、検証、テストデータセットをすべて一緒に、ということです。これは好奇心にすぎず、必ずしも正確なデータを取得することになるかどうかは確かではありません。

サンプルエントリーから配信されるデータソースとしてもうひとつ別の選択肢があります。それは評価タイプとしてスコアオプションを選択すると利用できます。この場合、追加データへ入るウィンドウが開きます。

カテゴリ対象変数を予測するのにエラーメトリックが使われます。

エラーメトリックは予測結果に対して事実に基づいた結果を表示します。表が2つあります。1番目の表は定量的な結果を、2番目の表はパーセントで結果を示しています。

エラーメトリックは Rattle の「評価」タブにあります。『実行する』を押すことでこのデータセット内の観測すべてに対する予測値について指定されたデータセットで選択したモデルが実装されます。そして予測値は実観測値と比較されます。

図9は前に計算されたランダムフォレストモデルに対するエラーメトリックを表示しています。

図9 ランダムフォレストモデルのの評価結果

図9 ランダムフォレストモデルのの評価結果

数字は平均エラーが 0.167、すなわち16.7% であることを示しています。トレーニング段階の予測エラーは 15.97% でした。これら値は等しいとみなすことができます。

テストデータセットについて計算します。結果は以下のとおりです。

TC [test] (counts) におけるランダムフォレストモデルについてのエラーメトリック

予測値 予測値
実値 0 1
0 1016 256
1 193 1248

表4 絶対的ランダムフォレストモデルについてのエラーメトリック(テストデータセット)

TC [test] (proportions) におけるランダムフォレストモデルについてのエラーメトリック

予測値 予測値
実値 0 1 エラー
0 0.37 0.09 0.20
1 0.07 0.46 0.13

表5 相対的ランダムフォレストモデルについてのエラーメトリック(テストデータセット)

全体的エラー:0.1654994、平均クラスエラー:0.1649244

予測エラーは 16.4% です。

3つの数字はすべてほぼ等しくなっています。それはモデル化の合理的結果の印です。

Rattle によって計算されるモデル効率は МetaТrader 4 または MetaTrader 5 の「ストラテジーテスタ」で確認する必要があることに留意ください。それから小ロットでデモアカウントおよび実アカウントでもテストします。テストがすべて実行されて初めて、このモデルについて最終結論を出すことができます。


7. モデルの改善

疑似変数 ZZ.35 の相関ををプレディクターで調査したとき、かなりの数のプレディクターがターゲット変数との弱い相関を持つことが判りました。

相関係数 0.01 未満のプレディクターは削除します。そのためにはデータタブで関連するプレディクターを「無視する」に設定し、モデルタブでランダムフォレストモデルの計算を繰り返します。

そこで以下の結果を得ます。

  • 予測エラー out of bag = 15.77%;
  • 検証データセットについての予測エラー = 15.67%;
  • テストデータセットについての予測エラー = 15.77%.

エラーはかなり減少しましたが、異なるデータセットに対する予測エラー差は増大しました。これはモデルの安定性を示すものです。

相関表に従いプレディクターを削除し続けることができます。モデル効率性は改善しました。モデル計算で取得されたプレディクターの重要性の表からのデータを使用して予測エラーは減少したということです。

いずれにしてもプレディクターの削除は、モデル効率の低下を招く別のプレディクターを削除するまで行います。既定のプレディクター数に対して最小限のもっとも効率的なモデルを取得した時点でストップします。


8. MetaTrader 4 でのモデル使用

理論では、Rattle を用いたトレードは次の用に作ることができます。Rattle への Excel での入力データは日中および夜間の期間に対する外部ツールにて準備します。為替をクローズする際、トレーダーは依頼価格を得、それをソースファイルに入れます。数分後、翌日の予測値が準備され、開始からすぐに利用できます。

日中のトレードには МetaТrader 4 ターミナルまたはその類似物が必要です。

Rattle を用いて自動または半自動トレードを行うには、以下のものが必要です。

  • 事前にトレーニングされたモデル。これは R ワークスペースとして保存されています。
  • ターミナルと R の連携ライブラリ
  • R でのコード。これはデータの各ブロックをモデルに渡し、結果を取得し、ターミナルにモデル化の結果を送信します。

Rattle で利用可能な6件のモデルのトレーニングについては上記で考察しました。R で利用可能な分類モデル数は 150 まで増えていますが Rattle はそれらに対しては使用できません。

R と МetaТrader 4 ターミナルの連携ライブラリは CodeBase: mt4R for new MQL4にあります。

トレーニングされたモデルに対応する R でのコードはジャーナル(ログタブ)にあります。モデル作成で行われた処理はすべて R のコード形式で登録されます。これが実トレードで使用されるものです。


おわりに

初心者も経験あるトレーダーも、予備評価とトレーディングシステム選択について本稿が有用であることがお判りでしょう。

Rattle を使用し、トレーディングシステム開発における主要な知的課題はターゲット変数およびそれに必要なプレディクターの正しい選択なのです。経験あるトレーダーの方はすでにこの分野での知識を取得され、初心者の方は Rattle でこれから必要な練習を行われることでしょう。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1165

添付されたファイル |
Article.zip (6598.05 KB)
メカニカル・トレーディングシステム "スタニスラブの三角形" メカニカル・トレーディングシステム "スタニスラブの三角形"
スタニスラブ・チャバショブ(Stanislav Chuvashov)氏のアイデアに基づいたメカニカル・トレーディングシステムの概要とプログラムコードを提供します。三角形の構造は上部・下部フラクタルからなる2本のラインの交差から成っています。
マニュアル . トレード自動化の3つの側面パート1:トレード マニュアル . トレード自動化の3つの側面パート1:トレード
本稿は、メタトレーダー4・トレーディング・プラットフォームにおけるマニュアル・トレード自動化シリーズの第1稿にあたります。どの記事も、次の観点から記述されています。すなわち、マニュアルトレードの自動化、現トレード状況表示の自動化、トレード結果レポート作成の自動化です。本稿では、トレーダーが手動で操作するEAを開発するための興味深いアプローチを紹介します。
MetaTrader 5でのトレードイベント MetaTrader 5でのトレードイベント
トレード用アカウントの現在の状況を監視すると、オープンポジションと注文をコントロールしていることがわかります。トレードシグナルが取引に変わる前に、クライアントターミナルからリクエストとしてトレードサーバーに送信され、そこで処理待ちの注文キューに配置されます。トレードサーバーによるリクエストを受け取る、機嫌切れとして削除する、それに基づき取引を実行を行うといったこれら全ては、トレードイベントに従っています;そして、トレードサーバーはターミナルにそれらについて通知します。
GUIのレイアウトとコンテナの使用: CBoxクラス GUIのレイアウトとコンテナの使用: CBoxクラス
この記事は、CBoxクラスによるレイアウトマネージャーを使って、レイアウトとコンテナに基づくGUIの生成の代替手法について取り扱います。CBoxクラスは、GUIパネルの必要不可欠なコンテナとして機能する補助コントロールです。グラフィカルパネルのデザインを容易にし、ときとして、コーディングの時間を割きます。