今回はAdversarial validationについて学習したので、自分の中で重要だなと思う点をまとめていこうと思います。
このバリデーションを簡単に行えるPythonのクラスファイルを作成し公開しているので、試してみたい方は是非ご活用ください。
Adversarial validationとは?
Adversarial validationとは、学習データとテストデータを見分ける2値分類を行い、それぞれのデータの分布に違いがあるか否かを検出する手法のことです。
Kaggleのデータコンペでよく使われている有名な手法なようです。
Adversarial validationの論理等について詳しく解説すると少々長くなるので、より詳しく知りたいという方はこちらのサイトで詳しく解説されていましたので、そちらをご参考ください。
個人的には、上記に記載した『Adversarial validation=データ間の分布の差異を検出する』という点を押さえておけばOKかなと思います。
Adversarial validationの嬉しいこと
一言でいうと、より汎化性能の高いモデルの作成につながるという点です。
では、なぜAdversarial validationがモデルの汎化性能の向上につながるのかを簡単に説明していきます。
理由1:オーバーフィッティングの予防に役立つ
1つ目は、Adversarial validationによって、モデルのオーバーフィッティングを抑制することができるという点です。
Adversarial validationによってどのようにオーバーフィッティングを防ぐかというと、
バリデーションの結果、学習データとテストデータで分布が異なる場合に、特定の特徴を取り除いたり別の特徴量を作り出したりすることでテストデータに近づけられ、それを用いて学習することで未知のデータへの対応力を向上させることが期待できます。
逆にバリデーションの結果、テストデータと学習データの分布が同様である場合は、分布の違いによるオーバーフィッティングは起きづらいと考えられるので、あまり気にすることなくその学習データをそのまま学習に用いることができると考えられます。
理由2:バリデーションデータの切り分けに使える
Adversarial validationがモデルの汎化性能の向上につながるもう1つの理由は、よりテストデータに近いデータを用いてバリデーションが行えるという点です。
これは特にKaggleコンペのようなテストデータに対する制度を競う場合には重要になります。
Adversarial validationをデータの切り分けにどう活用するかというと、
Adversarial validationを実施し、テストデータである可能性が高いと判定された学習データを一定数選択し、それをバリデーションデータとして用います。
そうすることで、学習データの中からよりテストデータに近いデータをモデルのバリデーションに用いて検証を行うことができ、テストデータ(未知のデータ)に対する予測性能の向上につなげられます。
これを応用した手法『non-stationary score』
最後に、このAdversarial validationを応用した手法についてご紹介したいと思います。
その手法とは、richmanbtcさんが『日給300万円のSS級トレーダーが明かすbotterのリアル』の書籍内で紹介されていたnon-stationary scoreです。
Adversarial validationではテストデータと学習データの特徴量の分布に着目していますが、これを時間への依存に観点を映したものがnon-stationary scoreです。
この手法を用いて学習データの特徴量を分析することで、時系列データの中で時間により依存していない(依存度が低い)特徴量の選択が可能になります。
non-stationary scoreの計算を行うためのコードはrichmanbtcさんのGithubにあるので、それを参照してください。
そこでは、時系列データの予測モデルの汎化性能とnon-stationary scoreの関係が詳しく説明されているので、そこをご参照ください。
まとめ
今回はKaggleコンペでもよくつかわれているAdversarial validationについて考察しました。
Adversarial validationとはデータ間の分布の違いを検出する手法で、この手法はオーバーフィッティングの予防やバリデーションデータの切り分けに活用でき、モデルの汎化性能の向上につなげられます。
より汎化性能の高いモデルを作るためにはAdversarial validationは不可欠かと思うので、今後の機械学習でもぜひ取り入れていきたいと思います。
もし間違いなどありましたら、ご指摘いただけますと幸いです。
コメント