見出し画像

ML botterにオススメなLightGBMのとっておきパラメータ紹介

仮想通貨botter Advent Calendar 2021の10日目の記事です。幅広いbotterに有意義な優良記事が続いてる中で恐縮なのですが、ML botter向けにLightGBMの少々マニアックなパラメータを紹介します。

TL;DR

  1. LightGBMを使ってる?
    “extra_trees”: True がオススメ

  2. sklearnのExtraTreesRegressorを使ってる?
    “extra_trees”: True, ”boosting”: “rf” のLightGBMもオススメ

この2点について順を追って説明していきます。

Extra Treesって?

extra treesというのはextremely randomized treesの略で、直訳すると非常にランダム化された木です。意味分からないですね。extra treesはrandom forestの変種で、普通のrandom forestよりもっとランダムネスを強くして過学習に対策するものです。

random forestは決定木をbaggingで一杯並べたものです。普通のrandom forestで使われる普通の決定木では、分割をする際、一番良い分割を見つけようということで、各特徴量で一番良い分割の閾値を探します。

extra treesも決定木をbaggingで一杯並べます。ただし、決定木を作っていく際、各特徴量での分割の閾値を、一番良い値を見つけるのではなく、ランダムな値にしちゃいます。これが正則化となり過学習を更に避けられる、という仕組みですね。

もともとextra treesはsklearnで利用可能であり、UKI先生のこんなツイートもあったりと、ML botterに人気のあるアルゴリズムだと思います。

LightGBMでExtra Treesってどういうこと?

そんなExtra Treesですが、ちょっと前にLightGBMにもextra_treesというパラメータが入り、LightGBMでもextra treesが使えるようになりました。

こう説明しても、「ふーん、でもsklearnでも使えたし……?」って思う人が多そうですが、LightGBMでextra treesを使うというのは、全然違う意味になってくるんです!……ということを今から説明します。

LightGBMは決定木を用いたアンサンブル学習のライブラリで、デフォルトではアンサンブル学習としてgradient boostingを行います。なので、extra_treesパラメータをTrueにすると、extra treesでgradient boostingをすることになります。

表にするとこんな感じです。

こんな感じで、sklearnのextra treesとはかなり違う機械学習器になります。

baggingの世界で、RandomForestRegressorよりExtraTreesRegressorの方が強いんだったら、gradient boostingの世界でも、extra_trees: TrueのLightGBMの方が強そうな気がしてきませんか……?

実際、上でリンクしたLightGBMのpull requestスレッド内でも実験があり、extra_trees: Trueの方が良好な性能を示しています。ましてや金融データは非常にノイジーでとにかく過学習との戦いであり、決定木系の手法に限らず正則化はかなり強く効かせたいのが常ですよね。

baggingもLightGBMで?

ついでなので、LightGBMのboostingというパラメータを紹介します。このパラメータはアンサンブル学習の方法を制御するパラメータで、デフォルトは”gbdt”になっており、gradient boostingが使われます。

一方、boostingを”rf”にすると、baggingを行うこともできます。これとextra_treesパラメータを組み合わせると、以下の表のようになります。

で、個人的には、sklearnのRandomForestRegressorやExtraTreesRegressorを使っているなら、代わりにboosting: rfでのLightGBMの利用もオススメです。

表の中で同じ場所に位置することから分かる通り、大枠として実現できるアルゴリズムはsklearnと同じです。それでもLightGBMを推す理由は以下の通りです。

  • LightGBMの方がツリー構築に関して実装されている正則化が多いため、それらを使うことで、精度をより高くできるかもしれない。

  • LightGBMのほうが速い。速ければ試行錯誤を増やせる他、ツリーの数を増やして精度も稼げるかもしれない。

終わりに

長々と語りましたが、効果について過剰な期待はしないで下さい。特に、勝てなかったストラテジが、extra_treesをTrueにするだけで勝てるようになる、という程の違いを生むことはまぁまず無いと思います。

一方で、LightGBMを使ったbotを既にある程度確立している方であれば、これだけで成績をちょっぴり上げられるケースも結構あるかもしれないのでは?と思います。成績が上がったとか、上がらなかったとか、よければ是非教えて下さい。


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