予測モデルの評価方法とバリデーション
予測モデルの評価方法とバリデーション
こんにちは!わいわわです。
前回は予測モデルに関しまして、前処理を学習しました。
今回はその続きである評価方法とバリデーションについて学習していきます。
予測モデルの評価方法
予測モデルの性能を評価する方法として
「教師データと予測値の誤差の測定」があります。
誤差が小さいほどモデルの性能がよいことになります。
代表的な誤差の測定方法をまとめていきます!
MSE(平均二乗誤差)
i番目の実測値(正解値)とi番目の予測値の差を2乗した総和を求め、
これをデータの数nで割って平均を求めます。
RMSE(平均二条平方根誤差)
i番目の実測値(正解値)とi番目の予測値の差を2乗した総和を求め、
これをデータの数nで割って平均を求めたものの平方根を取ります。
MSE(平均二乗誤差)では実測値と予測値の差を2乗しているので、
平方根をとることで元の単位に揃えます。
MSEとRMSE
この2つは予測値と正解値の差を大きく評価するので、価格予測のように
「正解値から大きく外れるのを許容できない」場合に最適な評価方法です。
使用する際の注意点として、正解値と予測値の差を2乗しているぶん、
外れ値の影響が強く得てしまうため事前に外れ値は除外しておくことが必要です。
この2つは誤差の幅(大きさ)に着目しているので、
誤差の比率や割合で知りたい場合は次の方法が有効です。
RMSLE(対数平均二乗平方根誤差)
対数平均二乗平方根誤差RMSLEは
予測値と正解値の対数差の二乗和の平均を求め、平方根をとったものです。
予測値が正解値を下回る(予測の幅が小さい)場合に、
大きなペナルティが与えられるので、下振れを抑えたい場合に使用されることが多いです。
来客数の予想や店舗の在庫を予測するようなケースにおいて、
来客数を少なめに予測したために仕入れや人員の不足が発生したり、
出荷数を少なく見積もって在庫が足りなくなってしまうことを避けるために用いられます。
また、分析に用いるデータのバラツキが大きく、かつ分布に偏りがある場合に、
データ全体を対数変換して正規分布に近似させることがあります。
目的変数(正解値)を対数変換した場合はRMSEを最小化するように学習することになりますが、
これは対数変換前のRMSLEを最小化するのと同じ処理をしていることになります。
MAE(平均絶対誤差)
回帰タスクでよく使われます。
正解値と予測値の絶対差の平均をとったものです。
MAEは2乗しないため、外れ値の影響を受けにくく、
外れ値を多く含んだデータを扱う際などに用いられます。
決定係数
決定係数は回帰モデルの当てはまりのよさを確認する指標として用いられます。
最大値は1で、1に近いほど精度の高い予測ができていることを意味します。
バリデーション
バリデーションとは学習済みのモデルに実際のデータを入力し、
予測性能の評価を行うことを指します。
予測モデルの評価には先ほどの紹介した手法が使われますが、
バリデーションを行う際に「どのデータを使えばいいのか」という問題があります。
そこで手もつのデータからバリデーション用のデータを抽出するための
ホールドアウト検証とクロスバリデーションについてまとめます。
ホールドアウト検証
ホールドアウト検証
分析用として用意されたデータをランダムに分解し、
その一部をバリデーション用に使用します。
train:モデルの学習に使用するデータ
valid:バリデーションに使用するデータ
データ全体が何らかの規則に従って並んでいると、データ自体に偏りが生じ、
正しい学習や検証がうまく行えません。
そこで用意したデータを分割する場合はデータをシャッフルしてランダムに分割することが重要です。
一見ランダムに並んでいるようなデータに対しても有効です。
ライブラリには用意されているデータ分割用の関数やメソッドでは
オプションを指定するだけでデータのシャッフル抽出が行えるようになっています。
クロスバリデーション(交差検証)
先ほどのホールドアウトを複数回繰り返すことで、
最終的に用意したデータの全てを使ってバリデーションを行います。
バリデーションを抽出することをfoldと呼びます。
foldを繰り返すことで用意したデータの全てがバリデーションに用いられます。
各階ごとでバリデーションが行われますが、スコアの平均をとることで各foldで
生じる偏りを極力減らします。
Scikit-learnのKfoldクラスで、クロスバリデーション用のデータセットを作成することができます。
用意したデータをfold数を指定して分割し、
それぞれ抽出されたバリデーションデータを使って
モデルで予測を行ってその平均をとる、という使い方をします。
fold数は例えば2から4に増やすと計算する時間は2倍になります。
またその場合学習に用いるデータは50%から75%に増えるため、
その分モデルの精度向上が期待できます。
ただし、fold数を増やすことと学習に用いるデータ量が増えることは比例しないため、
fold数をむやみに増やしても意味がありません。
一般的にfold数は4か5が採用されます。
もし手持ちのデータが大量にあるような状況だった場合、
バリデーションに使用するデータの割合を変えてもモデルの精度がほとんど変化しないということがあります。
そのような場合はfold数2にするかホールドアウト検証を行うようにすると
より効率よく精度よい選択肢を選ぶことができます。
所感
文章が多くなりました、、、
が、今回で機械学習の評価方法とバリデーションを学習しました。
次回からは今まで学習した知識をもとに、実際にデータを使用して
モデリングを行っていきます!
Discussion