機械学習

過学習とは?過学習を回避する方法についてまとめていく!

こんにちは!デジタルマーケターのウマたん(@statistics1012)です!

普段、嘘みたいに高い予測精度を何も考えず使っていませんか?

アカデミックの世界では、当たり前のように過学習について注意されているのですが、ビジネスの世界では意外とないがしろにされていることも多いようです。

この記事では、モデル構築時に必ず陥る罠「過学習」について見ていきたいと思います。

ウマたん
ウマたん
過学習は非常に危険な罠なので注意しよう!

過学習とは

過学習は別名「オーバーフィッティング」・「過適合」とかとも言ったりしますが、データ分析の分野では有名な罠です。

簡単に言うと、手元にあるデータだけにピッタリ合い未知データに対して全く合わないモデルを作ってしまうこと。

手元のデータだけ説明できても未知のデータを説明できるとは限らないんですね。むしろ手元のデータに対してフィッティングし過ぎると未知データの予測精度は下がってしまいます。

データには必ずノイズ(誤差)が存在するため、完璧に当てることはほぼ不可能です。完璧に当てようとするとノイズ自体にも適合したムダに複雑なモデルを作ってしまい、未知データには上手く当てはまらなくなってしまうのです。

そんな過学習はバリアンス・バイアスと関係性が深いです。

■バリアンスは予測結果のばらつき
■バイアスは予測結果と実測値の差

もちろんバイアスが低い方がモデルとしては優秀なのですが、バイアスを低くしすぎるとノイズに対しても適合することになるので予測結果のばらつきが大きくなってくる、すなわちバリアンスが大きくなってきます。

つまり、「バリアンスが大きい状態」=「過学習している可能性がある」ということです。

バイアスとバリアンスはある程度トレードオフになりますが、なるべくバイアスを下げてかつバリアンスも下げることが必要です。

バリアンス・バイアスに関してはこちらの記事で詳しくまとめています。

アンサンブル学習とは?バギングとブースティングの違いこんにちは!デジタルマーケターのウマたん(@statistics1012)です! 様々な機械学習が登場する中、地味に存在感を強めて...

過学習を回避する様々な方法

そんな過学習ですが、回避する方法は非常にたくさんあります。

学習データと未知データを分ける

手元の全てのデータを用いてモデルを作成しようとするから過学習が起きてしまうのです。

学習モデルと未知データを分けてモデルを構築することで過学習の起きにくいモデルを作成することができます。

そんな学習モデルと未知データを分ける方法にもいくつか方法があります。

ざっくり学習データと未知データにランダムに振り分けてモデル構築を行うhold-out法、データをいくつかグループ分けして1つのグループデータセットを他のグループで作成したモデルで予測するcross-validation法、データを1個だけ取り出してそれ以外でモデル構築を行い1個の予測を行う作業をサンプル数分繰り返すleave-one-out法などなど。

hold-out法はランダムに分けたデータセットの組み合わせ次第では精度がムダに高く出てしまう可能性があるので、シミュレーションを何回か繰り返して平均を取った方が良いです。

leave-one-out法はサンプル数が多いと物凄く計算負荷がかかるのであまりオススメしません。

ちなみに僕の場合は普段hold-out法を1000回くらい繰り返して精度比較しています。

データ分割する手法について詳しくは以下の記事にまとめています!

交差検証法とは?実際にRで行ってみよう!こんにちは!デジタルマーケターのウマたん(@statistics1012)です! データ解析を行う上で気を付けておきたい「過学習」...

AIC/BIC

実は、学習データと未知データを分けなくても過学習を回避する方法はあるんです。

AIC(赤池情報量基準)・BIC(ベイズ情報量基準)などは、変数の数を罰則項として考えることで、過学習を回避しています。

モデルの評価=(予測精度)ーf(変数の数)

変数の数に対してどのように罰則を付けるかは情報量基準によって違いますがどれも変数が多ければ多いほどモデルの評価を下げる式になっています。

ウマたん
ウマたん
情報量基準にはAICやBIC以外にもたくさんの種類があるよ!

これにより、あまりにも多くの変数を用いて作った複雑なモデルは評価が低くなり、過学習を回避することができるのです。

正則化

正則化は推定した回帰係数に対して罰則項を設けることで、過学習を防ぐ方法です!

主にL1正則化とL2正則化という考え方があります。

正則化に関しては以下の記事で詳しくまとめていますので良ければご覧ください!

正則化 正則化手法についてざっくりと説明していきます。 正則化とは、目的関数に対して最適化したいパラメータの関数を追加することでパラメータ...

またL1正則化であるスパース推定に興味のある方はこちらもご覧ください!

スパース推定とは?理論とオススメ本を紹介! この記事では、スパース推定について説明していきます! 予備知識として、このページを見る前に正則化についてまとめている以下のペー...

過学習 まとめ

実際に過学習を回避するようにモデルを構築しても、未知データの予測がどうなるかは分かりません。

最強のデータサイエンティストが集うデータ分析コンペ「Kaggle」でも最後の最後まで順位は分かりません。

既存のデータに対するフィッティングで仮順位が出ているのですが、最終的な順位は本番データによって決まります。

本番データで順位が大変動することも往々にしてあるのです。

過学習は気を付けておけば基本大丈夫ですが、突き詰めようとすると非常に奥が深い分野なんです!