先日から取り組んでいたランク学習によるランキングトレードモデルの製作ですが、終盤に差し掛かってきました。見事、ランク学習が成功し、これまでのモデルから特徴量を複数にし、エッジが増したように感じています。
ランク学習は特に複雑なものではなく、ランキング自体を目的関数とするもので、巷によくあるLambdaRankを使わずとも、株の場合は配列が綺麗に作れるので単なる回帰モデルとした機械学習で実施できます。
ただし、実施するときは一通り、ランク学習について学んでおく必要はあると思います。
今回はNumeraiのデータセットからもヒントを得て、説明関数も一般化・標準化することにしました。
下は私が厳選した30銘柄で、ある区間におけるリターンをランキングを予想するという課題設定を行い、学習した結果です。なお、下の結果はtrain,validation,testの全てを含んだ結果です。期間は3年半。
最終的な期間累積リターンの棒グラフは右肩上がりとなり、ある程度の順位を予想できていることがわかります。
これが得られれば、あとはこのモデルを使ってトップ集団をロング、ボトム集団をショートすればよいのです。明日から楽しみですね。
このモデルは毎日、とある時間におけるリターンランキングを予測したものですが、別に期間は週次であっても良いかと思います。数年前は週次でのランキングトレードを実施しており、一時はかなりの利益をあげていました。
また特徴量はリターン予想期間が長ければ長いほど、価格情報ではなく、質的情報を入れた方が良いかと思っています。私の場合はモメンタム・リバーサルの性質を取り入れたものなので、価格情報が主体的です。
ユニバースの選定は自由にどうぞ、というイメージです。たとえば、質的に差が開きにくいREITで実施しても面白いかもしれません。ただし、REITは配当が月末にあり、その配当時期も銘柄によってバラついているのでショートを入れる時は注意が必要です。(これを逆手にとって配当日までの日数を特徴量にしても面白いです)ユニバースの選定に関してはトレードストーリーを作ってから実施した方が良いと思っています。
いまから、これをトレードシステムに落とし込み、実戦投入といたします。
次はNumeraiだ!