ブログ

Blog

絞り込んで表示する

2020.5.27 - 

MAGELLAN BLOCKSの数値回帰を使って相場予測に挑戦!(1)

お久しぶりです。グルーヴノーツ コンサルタントの吉村です。
2019年8月の記事からずっとストップしておりました。今月から改めてブログを書き進めていきたいと思います。

今回は2部構成となっております。
・前編:相場予測の対象とする商品を選んでデータの準備
・後編:MAGELLAN BLOCKSにて予測モデルを作り収益が上がるかシュミレーション


このタイミングで自己紹介するのも何ですが、「自己紹介したほうがいいのではないか?」という声もあったので今さらながらの自己紹介です。

私はグルーヴノーツに2017年4月に入社して、機械学習・AIのコンサルタントとして従事してきました。 今年からはさらに量子コンピュータを活用した組合せ最適化やデータ統合のコンサルティングへも幅を広げてお客様の課題解決へ力を尽くさせていただいております。
前職がデータベースベンダーだったため一番得意なのはクエリーによるデータ活用なのですが、今回のような数値回帰モデルを作るのも大好きです。 (あと以前のブログでも触れましたがコーヒーが大好きで、昨年から自宅で焙煎するようになりました。)

という事で改めて、今回はタイトルの通り 相場予測 に取り組んでいきたいと思います。
相場予測ということですがデータは 東京商品取引所ダウンロードページから入手します。(東京証券取引所ではないので注意)

このCSVデータをダウンロードすると貴金属から油・穀物まで35種類の商品のデータが含まれています。 その中で今回は 白金 で投資収益を上げられるモデルを作って予測してみたいと思います。

ここから先は下記の流れで順を追って解説していきます。(今回は操作手順系は割愛します)

  1. 商品を決めて何を予測するか決める
  2. データ分析して限月をまとめる
  3. 予測因子に短期・中期の移動平均を追加する
  4. 時系列にする
  5. モデルを作って予測する
  6. シミュレーションの説明をする
  7. 儲かるシミュレーションなことを説明する


1.商品を決めて何を予測するか決める

前述にて商品を白金にすると書きましたが、なぜ白金にしたかというと以下の理由です。
・データの期間が長く存在すること
・日々の出来高が極端に少ない・または取り引きの無い日が少ないこと
・なんとなく儲かったら嬉しそうなもの

3点目は大した理由じゃないですね。
チラチラとデータを見ながら、このような理由から白金に目をつけて取り組みを開始しました。

そしてこの白金の相場を予測するわけですが、いつの相場を予測するかというところを決める必要があります。
今回の(仮の)目的は「投資収益を上げられるモデルを作る」なので、売り買いである程度の日数ポジションを持って売買する必要があります。 そのため細かいシミュレーションについては後述しますが、 5日先の相場を予測する モデルを作りたいと思います。

今日の5日後の終値を予測し今日の終値と比較して、「上がりそうなら買いで入る」・「下がりそうなら売りで入る」を行って、5日後にポジションを手放す。これで儲けてみたいですね。



2.データを分析して限月をまとめる

限月 という言葉が出てきましたね。
それなりに金融商品などに詳しい方は常識かと思いますが、株や投資信託ではなく先物取引などの場合に いつの商品を購入するのか ということを指定する限月という概念があります。

例えば2020年5月に買うことが出来る白金の相場として、2020年6月,8月,10月,12月と2021年,2月,4月の6つの相場で同時に取引をすることが出来ます。
私も専門家ではないので限月に関しては「商品 限月」のキーワードで検索していただき、理解を進めていただくと良いと思います。

この限月があるために「白金の相場を予測すると言っても、どの相場を予測しよう?」という観点が発生します。 これを決めるために白金の限月ごとの出来高を見てみました。

この限月ごとの出来高をのグラフを見ていただくと、限月ごとに線の色がが違うのですが白金に関して言うと、常に一番遠い未来となる限月の相場における出来高が一番多い ということが分かりました。 逆に言うと新しい限月の相場が立つと、他の相場の出来高はすぐに下がってしまっています。

このことから何となく「出来高の多い相場を予測したほうが特徴が出そうな気がする」と当たりを付けました。
商品先物などの相場予測をする際によく取る方法の1つなのですが、「対象限月を決める基準を設定し、切り替えながらつなぎ合わせたデータにする」ということをします。
具体的に言うと下図のグラフのように一番遠い未来の限月の部分、取引の多い限月だけをつないだ1本の線にするイメージです。

こうして出来上がったデータが下のグラフになります。
先程のグラフと比較してみると出来高の高い線だけを繋いだ形になっているのが分かるかと思います。

せっかくなので相場も見てみましょう。長期で分かる終値の週足を見てみます。

週足のグラフを見ると2008年から2009年のところでひどい事になってますね。
これはリーマンショックの影響による相場の急落の実績になります。
今回のモデルを作るときにはデータの特徴が変わりすぎることが考えられるので、2010年以降を使うようにしようと思います。

(最近可視化するときにお気に入りのTableauを使ってみました)



3.予測因子に短期・中期の移動平均を追加する

普段の数値回帰モデルを作るときであれば「業務的に考えて予測因子を何にするか」をしっかり掘り下げるのですが、 今回は白金の相場に関する知識がないので(トレーディングとして)テクニカルに攻めてみます。

今回のデータを白金だけにして前述の限月を繋げたところ、データ項目として利用するのは下記の項目となります。

  • 日付
  • 出来高
  • 始値
  • 安値
  • 高値
  • 終値

上記の項目を元にまず予測対象の数字を作ります。
移動平均にしたのは日々の細かな価格変動にモデルが惑わされないように平滑化してみました。

予測対象の数字→5日後の終値の前後2日を含む5日の移動平均


続いて予測因子にテクニカルということで下記の項目を追加します。

  • 終値の過去5日移動平均(いわゆる短期移動平均線)
  • 終値の過去20日移動平均(いわゆる中期移動平均線)

そして白金なので穀物と違いあまり関係ないかもしれないですが、せっかく日付があるので1年間の周期性を意識してみましょう。

  • 日(365日)のsin変換
  • 日(365日)のcos変換

ということでデータ項目はこのようになりました。
最初が予測因子とならないkeyで、最後が予測対象となり、残りが予測因子となります。

  • 日付
  • 日のsin
  • 日のcos
  • 出来高
  • 始値
  • 安値
  • 高値
  • 終値
  • 終値5日移動平均
  • 終値20日移動平均
  • 5日後終値前後2日を含む5日移動平均


4.時系列にする

今回はもう1手加えてからモデルを作成します。
このデータをさらに5日間の時系列化されたデータにします。

グラデーションをかけていますが、同じ背景の部分が同じ値となっています。 このように1行の中に過去日付の数値項目のセットを与えることで、MAGELLAN BLOCKSでは時系列として取り扱うことが出来ます。

上図のデータから欠損(5日後のデータを作るため直近日付は必ず欠損する)を取り除いて、モデル作成・評価のためのデータセットとしては完成になります。

後編の記事では予測モデルを作成し予測して、実際に収益を挙げられそうかシミュレーションをしてみたいと思います。