tkherox blog

データサイエンスおよびソフトウェア開発、たまに育児についての話を書いています

データ分析における基礎【モデル評価】

はじめに

データ分析におけるモデル評価についての内容をまとめてみます.
データ分析を初めて行うとモデル作成や手法に注目しがちですが,目的を達成するための最適なモデル選定においてはモデル評価は重要な要素になります.
また,私自身の備忘録としても本記事にモデル評価のまとめを記していこうと思います.

一般的なデータ分析の問題設定

問題設定の種類

一般的なデータ分析の問題設定は以下の2種類にカテゴライズされることがよくあります.

  • 分類
  • 回帰

厳密にはその他にもクラスタリング強化学習と言った問題もあるのですが,現実の世界でよく問題設定として挙がってくるのが分類と回帰の2つのカテゴリです.分類は教師あり学習の1つで,予測対象はカテゴリなどの離散的なクラスを予測します.例えば,画像に写っている内容が猫かそれ以外かを判別する二値問題などがこれに該当します.回帰は教師あり学習で連続値を予測する際に利用します.通信事業を行なっている事業者が自社のネットワークトラフィックの帯域をどれくらい確保するべきかを過去のトラフィック量から推測して帯域を確保するなどと言った問題がそれに当たります.
次ではこの2つの問題のそれぞれに対して適切な評価方法について述べていきます.

適切な分類とその評価

データ分析には大きく分けて2種類の問題設定があるということを話しました.ここでは各々の問題設定における評価方法について述べていきます.

分類

分類問題では正しいクラスに分類されたかどうかを評価する必要があります. そこで利用されるものが混合行列になります.

予測結果
Positive Negative
実際の結果 Positive True Positive False Nagative
Negative False Positive True Nagative

この行列をもとに適合率と再現率,F値を算出して各種モデルを比較することができます. 適合率や再現率,F値の解説はまたの機会とします.以下に各式を記載します.

\displaystyle 適合率 = \frac{TP}{TP + FP}

\displaystyle 再現率 = \frac{TP}{TP + FN}

\displaystyle F値 = \frac{2}{\frac{1}{適合率} + \frac{1}{再現率}}

正解率などを算出することもありますが,正解率が高いからと言って良いモデルとは限りません.というのも,システムの異常を予測検知するという問題設定を想定すると,異常状態はそこまで頻繁には発生しません.そのため,仮に5%の確率で異常が発生するとして,学習したモデルがすべての出力を正常と出力する場合であったとしても95%の精度を算出することが可能になります.このように正解率で比較してしまうと誤った評価・解釈をしてしまう可能性があるため,混合行列を算出して正確に吟味することを心がけましょう.

\displaystyle 正解率 = \frac{正解した数}{予測した全データ数}

回帰

回帰での連続する数値を予測する問題であると説明しました.
回帰における評価は主に平均二乗誤差を利用します.

\displaystyle RMSE = \sqrt{\frac{\sum_{i}(予測値_{i} - 実測値_{i})^{2}}{N}}

回帰分析で全データの平均値を出力する予測モデルを考えたとき,その平均二乗誤差は標準偏差となります.そのため,最低ラインとして標準偏差と比較,モデル間での平均二乗誤差を比較することでモデルの良し悪しを判別することができます.

また,平均二乗誤差とは別に回帰式の当てはまりの良さを表現する決定係数という評価指標を用いる場合もあります.決定係数は常に平均を出力するモデルに比べて相対的にどのくらい性能が良いのかを表します.決定係数が1に近ければ良い性能であることを表し,逆に0に近いほど良くない性能であることを示します.

\displaystyle 決定係数(R^{2}) = 1 - \frac{\sum_{i}(予測値_{i} - 実測値_{i})^{2}}{\sum_{i}(予測値_{i} - 実測値の平均)^{2}}

まとめ

今回は一般的なデータ分析の問題とその評価方法についての話をしました.初めの投稿ということもあって基本的な内容についてまとめてみました.データ分析ではモデルのアルゴリズムや手法に焦点が当てられることが多いため,評価について述べられる機会というのはそれほど多くはないと思います.ですが,実際のデータ分析ではどんな問題であったとしても必ず行う重要なプロセスになるので必ず抑えておきたいですね.
これからもデータ分析における知見を蓄積する目的で様々なブログを記載していこうと思います.まずは隔週での投稿を目指していこうと思います.