乱数を上手く使うとモデルがオーバーフィッティングしているかどうか確認できます

説明変数 x と目的変数 y との間で数理モデル y = f(x) を構築するとき、構築されたモデルがオーバーフィッティングしているかどうか気になるときがあります。

ぜんぶオーバーフィッティングのせいだ。
オーバーフィッティングについて考えます。オーバーフィッティングは予測精度の高いモデルを構築するときの問題でして、モデルがトレーニングデータに合いすぎてしまい (目的変数 y の推定誤差が小さくなりすぎてしまい)、新しいデータにおける目的変数...

 

もちろんトレーニングデータとテストデータに分割してテストデータで検証したり、ダブルクロスバリデーションで検証したりしたあとに、扱っているデータセットに対して最適な回帰分析方法やクラス分類手法を選択して用いているわけですが、

回帰モデル・クラス分類モデルを評価・比較するためのモデルの検証 (Model validation)
いろいろな回帰モデル・クラス分類モデルを構築したり、モデルの中のハイパーパラメータ (PLSの成分数など) を決めたりするとき、モデルを評価・比較しなければなりません。そのためのモデルの検証 (model validation) の方法につ...
ダブルクロスバリデーション(モデルクロスバリデーション)でテストデータいらず~サンプルが少ないときのモデル検証~
回帰モデルやクラス分類モデルを検証するときの話です。 モデルの検証 一般的には、データセットが与えられたとき、サンプルをモデル構築用サンプル (トレーニングデータ, training dataset) とモデル検証用サンプル (テストデ...

 

最終的に構築されたモデルが、実際どの程度オーバーフィッティングしているかは、モデルが構築されるまでわかりません。オーバーフィッティングの原因は x と y の間の偶然の相関 (chance correlation) であり、その程度を調査する方法が y-randomization (もしくは y-scrambling) です。

y-randomizationで過学習(オーバーフィッティング), Chance Correlation(偶然の相関)の危険度を評価!
回帰モデル・クラス分類モデルの評価 のなかで、yランダマイゼーション (y-randomization) についてです。y-scrambling と呼んだりもします。 やることは簡単で、目的変数 y の値をサンプ...

 

y だけサンプルの値をシャッフルして、x と y の間に相関のない (おかしな) データセットにしたあとに、モデルを構築します。このフィッティングの結果、本来であれば (おかしなデータセットなので) y をまったく説明できないのが普通なのに、説明できてしまった場合は、その分は偶然の相関が原因であり、元のデータセットでも同程度の偶然の相関、すなわちオーバーフィッティングが起きていますよ、ということです。例えば回帰分析において、元の r2 が 0.9 のとき、y-randomization で r2 が 0.3 とでてしまったときには、0.9 − 0.3 で 0.6、すなわち 60 % くらいしか実際の y の変動を説明できていない、といったイメージです。

もちろん y-randomization でも相関の影響は考慮できますが、y ではなく x をシャッフルすることもできます。x の特徴量ごとにサンプルの値をシャッフルし、おかしくさせたデータセットを用いてモデルを構築します。あとは y-randomization のときの議論と同じです。

y をシャッフルするのか、x をシャッフルするのか、y と x の両方をシャッフルするのか、どれがよいのか色々と議論はありますが、実用的には、相手に伝えやすいやり方でよいと思います。「こんなデータセットでも r2 が 0.99 になってしまいました!このモデルを使用するのは危険です。もう少しサンプルを集めましょう!」、といった感じです。「こんなデータセット」 としたときに相手に伝わりやすいようなシャッフルをするとよいでしょう。

y-randomization をはじめとする乱数を用いてサンプルをシャッフルする検証方法は、偶然の相関の程度を確認できるだけではありません。いろいろな使い方があります。例えば、サンプル数が小さい中で変数の重要度を計算したとき、それをどのくらい信用してよいか迷うときもあると思います。こんなときは、シャッフルしたデータセットでもどれくらい変数の重要度が大きくなってしまうのか、検討するとよいと思います。元のデータセットにおける変数の重要度より大きくなってしまったら、その変数の重要度は参考にならないでしょう。

他にも、特にサンプル数が小さいとき、ダブルクロスバリデーションによる予測性能をどこまで信用してよいのか、クラス分類において ROC 曲線や AUC をどれくらい信じてよいのか、検証したい場合は、サンプルをシャッフルしてまったく同じことをしてみると良いと思います。

サンプル数が少ないときには、結果がよく見えてしまうことが多く、本当にそれが真実を示しているのか、それだけではわかりません。乱数を用いたシャッフルを活用して、結果を評価するとよいでしょう。

 

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

タイトルとURLをコピーしました