🤖

システムトレードを始めるための基本のスコア設計

2023/03/21に公開

はじめに

マケデコという主に株式関連のマーケットAPIを活用し、分析や予測モデルを構築しているbotterのDiscordコミュニティをJPX総研様、AlpacaJapanの協賛で運営しています。

https://market-api.dev/

マケデコの中で、さまざまなイベントを企画する中で、前提知識として、機械学習モデルが生成するスコアについての知識があまり共有されていないと感じていて、この文章を書いた次第です。

過去に作成したものだと、JPX総研様と一緒に作成した株式分析チュートリアルなどはかなり網羅的にいろいろなトピックを扱っているのですが、こちらはSIGNATEで開催された株式分析コンペの内容を踏襲しており、与えられたコンペのお題に対してスコアを生成することを前提に記載されています。(補足: この株式分析コンペの設計の仕方は以前記事にまとめたので、ご興味あればぜひお読みください)

システムトレードを行うときも、このスコアを自分で設計することになるのですが、少しコンペ設計で実施するスコア設計と異なります。いや、本質は同じなのですが、たくさんあるアプローチの中で、問題設計として 株式投資の戦略を立案する場合、投資する株式の銘柄選択を助けるためのスコアをまず設計する というアプローチをとることが多いのです。

コンペ設計では点数を競う関係上、問題設計=スコア設計みたいなところがありますが、システムトレードは多種多様なアプローチがあるなかで、スコア設計を通して株式分析を実施するのは、データサイエンス的なアプローチとの高い親和性があります。この記事はではシステムトレードを始めるための基本となるスコア設計についてまとめていきます。

また、今後日本株のデータ取得が可能なJ-Quants APIでは機関投資家も利用するような様々なプレミアムデータを提供することが決まっており、個人投資家でもいままでなかなか触れなかったデータを用いて投資戦略を考えていく余地がうまれそうです。こちら気になる方はぜひ3/23のマケデコイベントにご参加ください!

https://mkdeco.connpass.com/event/273256/

計算したスコアの利用方法

この記事におけるスコアとは、投資対象の銘柄群に対して、銘柄Aは0.3、銘柄Bは0.5という形で銘柄に1:1対応する形でスコアをつけていくことを指します。スコアを複数の銘柄に対して計算した上で、システムトレードでは以下のような使い方をすることを想定しています。

スコアが高い銘柄を投資対象に組み入れる

スコアが未来の収益率に対して相関があることを期待値として、スコアが高い銘柄を投資対象に組み入れます。ただし、スコアが高くてもリスクが高い銘柄を購入しすぎると、リターン/リスクでみたときに収益が悪化するので、スコアはリスクで調整する(デイリーリターンの標準偏差で割る、など)ことも多く、スコアをリスク考慮済みとするかなど銘柄選択には工夫が必要です。

スコアが低い銘柄は投資対象から除外する

スコアが未来の収益率に対して、相関がある場合は、スコアが低いことは値下がりする可能性が高いことを示します。ある投資対象のグループに投資する場合もそのなかからスコアが低い銘柄を除外するような使い方をすることもあります。

複数のスコアを合成して新たな戦略を構築する

良いスコアが2つ設計できた時、片方の効果を計測しながら合成したスコアで全体的な収益を計算したいことがあります。この時は、スコアを足し合わせたりするのですが、スコアは0平均となるように調整しておくと複数のスコアを足し合わせる時に便利なので、スタンダードスケーラーなどで標準化しておくと便利なことが多いです。

スコアはどうやって計算する?

スコアを計算する代表的なアプローチは以下の3つかと思います。

手法 説明
テクニカル分析 移動平均乖離率などそもそも銘柄全体を通して比較できるテクニカル分析はそのままスコアになる。
ファンダメンタル分析 ROEなどファンダメンタルから銘柄間で比較可能な正規化したスコアを生成する手法。ある種の王道のアプローチであり、多数先行研究があります。
機械学習モデル マケデコでよく取り扱っている機械学習を利用してスコアを生成する方法です

テクニカル分析を行う場合は上に述べたような移動平均乖離率などの相対的に他の銘柄と比較可能なテクニカル分析を利用することが重要です。たとえば移動平均線などはチャート上で描画する上では役に立ちますが、スコアとしては銘柄間で比較することができないため、役に立ちません。移動平均線ではなく、移動平均乖離率をスコアとして利用することが重要で、これはすべてのテクニカル分析にいえます。銘柄間で比較可能な数値であれば、その数値がどのくらい収益性に効果があるかも検証可能です。例えば、200日移動平均乖離率は評価手法を使うとそこそこ効果があることなどもわかります。

ファンダメンタル分析を行う場合はちょっと厄介で、業種によって平均が異なるため、素直に比べるのは難しいのですが、何らかの形で銘柄群を決めたうえで、正規化してスコアをつくることが多いです。ファンダメンタル分析で銘柄を比較する場合、結構ノウハウが必要なのでファクター投資などの文献を参考にしましょう。例えば、この論文を読むと、ROEをスコアとして使う時に気をつけるべきことなどもわかります。

スコアはどうやって評価するのか?

投資戦略の評価を行う際は、かならずその投資戦略の用途(デイトレード、長期投資など)に合致した評価手法を採用する必要があります。まず、スコアは殆どの場合、未来の値動きに対して評価します。未来の値動きといっても、その用途によってさまざまな計算方法があります。以下は僕が様々なプロジェクトで利用してきた代表的なもので、エントリー価格からエグジット価格に対する変化率を計算し、未来の値動きとします。

エントリー価格 エグジット価格 用途
次の営業日の始値/後場の始値 次の営業日の終値 スコアの有効性が当日限りにおいて有効かどうかを検証するために計測。イントラデイトレードの基本スコアであり、もっとも機械学習としても再現性が高い。
次の営業日の終値 2営業日後の終値 スコアの有効性が日をまたいで有効かどうかを計測します。スイングトレードやスコアの基本性能を計測するために利用します。Kaggleコンペでも採用したスコア
次の営業日の終値 1週間以降の終値 計測された有効性が複数日付をまたいで有効かどうかを計測します。どのくらいの期間を対象とするかは戦略によって変わります。
2営業日後の終値 1ヶ月以上先の長い期間の終値 エントリーの価格に2営業日後の終値を使うことで次の日に発生するアノマリー的な動きに収益性が依存しないことを検証するために利用。4半期ベースなどの長期的な投資における有効性を検証する場合に採用

この未来の値動きの定義を決めた上で以下のような方法でスコアは評価します。

スコア vs 将来の値動きによる順位相関を計算する

算出されたスコアが将来のリターンに対して有益な情報を含んでいた場合、スコアが高い銘柄ほど将来の収益率が高いとしたら、順位相関が0より大きく(もしくはマイナスの効果を期待するなら0より小さく)なります。

この結果を数値化する場合、スコア vs 将来の値動きによる順位相関を計算すればよいことになります。Numeraiでも一時採用されていた(今はもっとルールが複雑になっています)由緒正しいメトリクスです。生成したスコアが各銘柄の将来のリターンに対して、順序が似通っているものを設計すればこの数値は高くなりますから、予測性能を示すわかりやすいメトリクスとなります。なお、ほとんどのスコアはつくってみると未来のぬ動きに対して順位相関は0近辺になります。0.1でていたらめちゃくちゃ良いスコアの可能性が高いことに注意してください。

このあたりの話を網羅的に勉強したいひとはUKIさんの記事を読めばよいかと思います。

https://qiita.com/blog_UKI/items/25dc1c2559c61890a449
https://qiita.com/blog_UKI/items/09fab7baecd677819895
https://qiita.com/blog_UKI/items/c718334247a083f250c7

各分位リターンのスプレッドを計算する

もう一つメジャーな手法として、各分位リターンのスプレッドを計算するものがあります。

銘柄群に対するスコアの分位を利用した評価方法であり、スコアを生成したときに上位X%、下位X%の銘柄に投資し続けて取得できるリターン(収益率)の差分を評価する手法です。おそらく特徴量の評価などで、クオンツアプローチではもっとも利用されている、最初にチェックする検証方法です。

若干手順が複雑なので、詳しい計算方法はこの記事では述べませんが、スコアがきちんとワークしている場合、各分位リターンのPLのスプレッドが時間経過で上のように広がって行くのが期待値です。つまり、スコアが高い銘柄がPLを稼いでおり、逆にスコアが低い銘柄がPLを稼げていないことを確認することができます。

さいごに

システムトレードを始めるための基本のスコア設計をまとめてみました。この内容はマケデコで2022/9/28(水) に開催した「初心者向け株式分析セミナー: データ分析/モデル作成から評価まで全部!」で利用した資料を文章化したものです。

https://speakerdeck.com/gamella/zhu-shi-nosisutemutoredochu-xin-zhe-nozui-chu-no-bu-ping-jia-fang-fa-wozhong-xin-ni

スコアを生成する方法に興味がある方は、機械学習を利用したプロジェクトの推進方法について、まとめましたので、こちらも御覧ください。

https://zenn.dev/gamella/articles/3cd1bf254b68b8

Discussion