見出し画像

【機械学習自動売買ボットの改善案】 richmanbtcさんのチュートリアルの改良 〜特徴量の定常性と定常化〜

こんにちは。rog_peterです。

今日は、特徴量の定常性と定常化について書いてみたいと思います。richmanbtcさんのチュートリアルでは、特徴量としてTa-libから計算したテクニカル指標が使われていますが、これらは目的変数であるリターンy_buyy_sell)に対して適切な特徴量となっているでしょうか?

この疑問に取り組むために「終値」を特徴量として採用した場合に関して、リターン(ここでは簡単のためにリターンを次の足の始値と終値の差分とします)を予測する上で"適切な"特徴量かどうかを考えてみます。例えば、終値が80万のときにリターンが+0.01%で95万円のときに-0.02%、150万円のときに+0.01%、500万円のときに-0.02%というデータがあった場合に、「終値」は、機械学習モデルの目的変数リターンを正しく予測するのに役立つ特徴量といえるでしょうか?答えはNOです。かなり特殊な事情が無い限り、「終値」単体でリターンを予測することは不可能でしょう。この理由は終値が非定常性を持っており、その一方リターンが定常性を持っているからです。定常性というの正確には平均と自己共分散が時間に依存しないことで、大雑把には時間によって分布が変わらないことです。終値は平均も分散も時間とともに変わっていますが(3年前と今のビットコイン価格比べて見ましょう)、その一方、リターンに関しては時間平均は0で分散も時間依存していませんよね。

では特徴量をどのように定常かどうか判断すればよいのでしょうか?ある特徴量が定常性を持つかどうかは 単位根検定、例えばADF(Augmented Dickey-Fuller)検定を行うことで調べられます。PythonでどのようにADF検定を行うかは下記の記事が参考になると思います。

1つ定常性のある特徴量の例をあげると、終値と前の終値の比です。ricnmanbtcさんのチュートリアルのようなpandasのDataFrameにいれた状態で書くと

df["cl_ratio"] = df["cl"]/df["cl"].shift(1)

と表せます。ぜひ自分の手元で、「リターン」と「終値」と「終値と前の終値の比」が定常なのか非定常なのか上の単位根検定を行って確認してみてください。

今回紹介したような定常かどうか調べる作業は地味ですが、よい特徴量を見つける上でとても基本的で重要な作業です。もし「聖杯」となる特徴量が存在するならばそれは必ず定常な量だと思います。その一方、定常であることは「聖杯」の十分条件ではないので、1000個定常な特徴量を見つけたとしてもモデルの精度はあまり改善しないかもしれません!ただそういった1つ1つの積み重ねが「聖杯」な特徴量を見つける上では重要なのかもしれまんせん。

本記事で出てきた定常性などの詳細な話は「経済・ファイナンスデータの計量時系列分析」に詳しくのってます。

また別の記事で、richmanbtcさんのチュートリアルでどういう特徴量が非定常料でどう直していけばよいのかという点についても書いてみます。

【追記 こちらの記事書きました。】

こちらの記事も御覧ください。

それでは、よいBotter Lifeを!

以下投げ銭用です。

ここから先は

0字

¥ 500

この記事が気に入ったらサポートをしてみませんか?