機械学習モデルの性能評価について解説!

この記事を書いた人
北爪 聖也

株式会社pipon代表取締役。 キャリアはADK(広告代理店)でテレビ広告運用をして残業120時間するが、ネット広告では自分の業務がAIで自動化されていることに驚愕する。そこで、機械学習受託会社に転職し、技術力を身につけた後、piponを創業。現在、製薬業界、大手監査法人、EC業界、様々な業界でAI受託開発事業を運営。

この記事は以下の人に向けて書いています。

  • なぜ機械学習モデルの性能評価をする必要があるのか知りたい人
  • 機械学習モデルの性能とは何かを理解したい人
  • どのような指標で評価をする必要があるか知りたい人

1. はじめに

機械学習で精度の高いモデルを作るとき、最も気になるのが、作成したモデルの性能(予測精度)です。

今回は、作成したモデルの性能を評価する指標を紹介します。

2. なぜモデルの性能評価が必要なのか

AIの一部である機械学習の目的の一つは、既知のデータ(学習用データ)の説明変数(特徴量)を使って目的変数を予測する予測式(モデル)を作り、結果が未知のデータを予測することです。

作成したモデルの予測精度(性能)を表せる数値指標があると、用いたアルゴリズムの妥当性などを数値で議論できるようになることから、数値によるモデルの性能評価は不可欠です。

3. モデルの評価指標について

作成したモデルの評価指標はただ一つというわけではありません。

分類モデルと回帰モデルで異なることはもちろんのこと、分類あるいは回帰モデルの中でも、評価指標は複数あり、結局どの指標を使ってモデルを評価すべきかが、非常に悩ましいです。

今回は、様々な評価指標を紹介するとともに、どのようなときにどの指標を用いるべきかを紹介したいと思います。

4. 分類モデルの性能評価

分類モデルとは、目的変数がどのカテゴリ(例:病気か健康か、合格か不合格か など)に属するかを予測するモデルです。
まずは、分類モデルの性能評価に用いる指標を見ていきましょう。簡略化するため、2クラス分類(目的変数がAかBの2種類)の例で見ていきます。

1) 混同行列について

分類モデルの性能評価でよく作成されるのが、「混同行列」です。行列と聞くと難しい数学をイメージしがちであるが、それほど難しいものではないのでご安心ください。

あるアルゴリズムを使って学習用データから予測モデルを作成し、検証用データでモデルを検証したとしましょう。

予測モデルに検証用データの特徴量を入力すると、各サンプルのクラス(AかB)を予測できます。この予測結果と、検証用データの観測結果を比較することで、図1のような「混同表列」を作成することができます。

この例の場合、観測値Aのデータは500個、観測値Bのデータも500個の合計1000個が検証用データであることが分かります。

もし、作成したモデルが100%正確だとしたら、左上(観測値がAで予測値もA)に500
、右下(観測値がBで予測値もB)にも500が入り、右上(観測値がAで予測値がB)と左下(観測値がBで予測値がA)は0になるはずです。
実際は、完璧なモデルではないため、右上や左下に数値が入っています。

もう少し一般化すると、混同行列の主対角成分の要素は、正確にクラス分類されたサンプル数を示し、それ以外の要素は、実際とは違うクラスに分類されたサンプル数を示します。

ここでAを陽性クラス、Bを陰性クラス、正しく予測したことを真、間違って予測したことを偽と表すと、図1の混同行列を図2のようにまとめることができます。

図2について、英語の頭文字を取って簡略化すると、図3のように整理できます。

書籍では、図3のように記号で表された混同行列がよく出てきますが、どっちだっけ?となることが多いので、以下のように読みかえるとよいでしょう。

TP:モデルはP(陽性クラス)って言ったけど、それってT(真)だよね。
FP:モデルはP(陽性クラス)って言ったけど、それってF(偽)だよね。
TN:モデルはN(陰性クラス)って言ったけど、それってT(真)だよね。
FN:モデルはN(陰性クラス)って言ったけど、それってF(偽)だよね。

では図3を使って、分類モデルの性能評価を行ってみましょう。

2) 分類モデルの性能評価指標

①精度(正解率)

精度は、すべてのサンプルについて、正確に予測できた割合を示します。

$$精度=\frac{TP+TN}{TP+FP+TN+FN}$$

感覚的にはこの指標が一番分かりやすいですが、陽性クラスと陰性クラスでサンプル数に大きな差があるとき、うまく性能を表せない場合があります。

例えば、以下のような極端な場合の精度を求めてみましょう。

観測結果Aのサンプルが990に対して、観測結果Bのサンプルは10しかありません。このような場合、何も考えずにすべてAと予測したとしても、精度は99%にもなります。

このようなサンプルの偏りは決して珍しくなく、例えば、ほとんど不良が出ない自動車用の部品など、品質管理の整ったメーカーでは、よく見られることです。

もちろん、サンプルに偏りがあるとは言え、99%の精度を実現したモデルは素晴らしいと言えるのですが、精度という指標では、常に「A」と答えるいい加減なモデルと、本当によいモデルを区別できません。
つまり、偏ったデータに対する予測性能を示す指標として、精度は不適切ということになります。

②適合率

適合率は、陽性であると予測されたものが、実際にどのくらい陽性だったのかを示す指標です。

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

偽陽性と予測することを低く抑えたい場合は、適合率を用います。

例えば、自動検査機である製品の検査を行い、合格品のみを客先に出荷する工程を考えてみましょう。
もし、不合格品を合格品として出荷してしまったら、客先に迷惑を掛けることになります。従って、不合格品を合格品と判定されたら非常に困るので、そのような誤判定を起こさないモデルを選びたいわけです。

不合格品を合格品と判定した場合(偽陽性)、分母のFPの値が大きくなる、つまり、適合率は低下するので、適合率が高いモデルを採用することが重要となります。

③再現率

再現率は、実際に陽性のサンプルのうち、どのくらい陽性と予測されたかを示す指標です。

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

偽陰性と予測することを低く抑えたい場合は、再現率を用います。

健康診断の例を考えてみましょう。

本当は大きな病気があるのに、異常なしと判定(偽陰性)されてしまったら、病気が進行して手遅れになってしまう可能性があります。
従って、健康診断では病気である人を、すべて見つける必要があります。
もし、健康な人を病気と判定したとしても、再検査してもらえばいいだけなのです。

抜けをできるだけ少なくしたいという場合は、再現率を重視してモデルを選定することになります。

適合率と再現率の定義を見て気づかれた方もいるかもしれませんが、再現率の最適化と適合率の最適化は、トレードオフの関係にあります。
つまり、適合率をよくしようとすると再現率は悪化し、再現率をよくしようとすると適合率は悪化します。

適合率と再現率の両立は、非常に難しいのです。

④F値

適合率と再現率は重要な指標ですが、片方だけではモデルの全体像が把握できません。
この2つの指標をまとめた評価指標がF値で、適合率と再現率の調和平均です。

$$F値=2 ×\frac{適合率×再現率}{適合率+再現率}$$

F値のメリットは、適合率と再現率の両方を取り込んでいるため、偏ったデータに対して①精度よりもよい指標となることです。

3. 回帰モデルの性能評価

回帰モデルを評価する際は、実測値と予測値の差(残差と言います)を使った指標を使うのが一般的です。

一次の線形回帰モデルで残差を示したものが図4です。
一次の線形回帰モデルとは、学習用データから回帰直線(y=a+bx)を作成し、回帰式を使って未知のxに対するyを予測できるモデルです。

図4に示した通り、実測値と予測値の差を残差と言います。残差は正にも負にもなり得ますので、通常は2乗した値を考えます。

なお、すべての点の残差の2乗を足したものを残差平方和と言いますが、残差平方和が最も小さくなるように引かれた直線が、回帰式で表される直線です。
この方法を最小二乗法と言います。

では、残差を使った回帰モデルの性能評価指標を見ていきましょう。

①平均二乗誤差(MSE)

$$MSE=\frac{1}{n}\sum_{i=1}^{n}(yi-y’i)^2$$

ただし、yiは実測値、y’iは予測値を指すものとします。

MSEは、誤差の二乗和の平均値で、学習用データ、検証用データともにMSEが小さければ、モデルの性能が良いと判断できます。

②二乗平均平方根誤差(RMSE)

MSEの平方根を取ったRMSEを用いる場合もあります。

$$RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(yi-y’i)^2}$$

RMSEもMSEと同じく、値が小さいほどモデルの性能が良いと判断します。

③決定係数(R2)

回帰モデルに対して、最もよく使われる評価指標が決定係数です。寄与率と呼ばれることもあります。

$$R^2=1-\frac{\sum_{i=1}^{n}(yi-y’i)^2}{\sum_{i=1}^{n}(yi-y)^2}$$

ただし、yは目的変数の平均値とします。

R2は0から1の範囲を撮り、1に近いほどモデルの性能が良いことを意味します。
MSEまたはRMSEが0のとき、R2は1となります。
一次線形回帰モデルであれば、すべての点が回帰直線に乗るとき、R2=1となります。

4. 過学習と汎化性能

教師あり学習において、よく起こるのが過学習(過剰適合)です。
「過学習」とは、作成したモデルが学習用データにあまりに適合しすぎて、学習用データは精度よく予測できるにもかかわらず、未知の検証用データを予測すると精度が低くなることです。
つまり、学習用データだけに最適化されてしまって、汎用性がない状態に陥ることです。

学習用データへの当てはまりは必ずしも良くないものの、未知の検証用データへの当てはまりが良い」状態を汎化性能に優れている、と言います。

いくら学習用データに対して精度のよいモデルを作っても、未知のデータをうまく予測できなければ、そのモデルは汎化性能が低く、あまり価値がありません。

一般に、実際のデータを使って、機械学習モデルを作成する場合、計測の誤差や様々なノイズが存在することを考えれば、精度が100%になることはまずあり得ません。
同様に、寄与率が0.9以上というのも、実際のデータを解析する限りはほとんどあり得ない数字だと思います。

従って、学習データで非常に高い精度あるいは寄与率が出たときは、モデル作成がうまくいったと喜ぶのではなく、まず「何かおかしい」と疑うことが必要です。

5. モデルの性能が低下するときの対処方法

作成したモデルの汎化性能が低いとき、汎化性能を向上させる手段はいくつかあります。
ただし、これをやれば必ず汎化性能が向上するという手段はありませんので、色々試してみる必要があります。

汎化性能向上のための対策の候補として、以下のようなものがあります。

①学習用データをもっと集める

機械学習では学習用データとモデルの精度の関係を表した、「学習曲線」というものがあります。(図5)

出典:https://aizine.ai/learning-curve0218/

図5. 機械学習の学習曲線

学習曲線から分かることは、学習用のデータが増えるほど、学習用データの予測精度は低下するものの、検証用データの予測精度は上昇する、つまり、汎化性能が向上することが分かります。

なぜ、学習用データを増やすと、検証用データの予測精度は向上するのでしょうか?
それは、外挿の可能性が減るからです。

外挿とは、モデル作成に用いた特徴量の範囲外のデータに対して、そのモデルを使って予測することです。
学習用データを基に作成したモデルは、その範囲外のデータに対しては、精度が落ちることは容易に想像がつきます。

機械学習の有力なアルゴリズムの一つであるランダムフォレストは、外層のデータに対しては非常に弱いことが知られています。

学習用データを増やせば、検証用データが外挿となる可能性が小さくなるため、モデルの性能向上が期待できるのです。

②特徴量を増やす

目的変数に効く重要な特徴量が抜けている場合、学習データに対しても精度は上がってきません。
色々なアルゴリズムを試しても学習データに対する精度が上がらない場合は、目的変数に効くと思われる特徴量を追加すると、性能が向上する場合があります。

③特徴量を減らす

②の場合とは逆に、特徴量が多すぎると、学習用データに対する予測精度は高いものの、検証用データに対する汎化性能が上がらない、過学習の状態になります。

その場合、目的変数に影響を与えないと思われる特徴量を減らすことで、過学習の状態が解消し、汎化性能が向上する可能性があります。

④2乗項(x12, x22,…)や交互作用項(x1x2, x2x3…)など、高次の特徴量を追加する

②に関連しますが、単純に新たな特徴量を追加するのではなく、今ある特徴量を使って2乗項や交互作用項を新たに特徴量に加えることで、精度が向上する場合があります。

⑤(正則化回帰を用いる場合)正則化の係数 λ を調整する

Lasso(ラスー)回帰やRidge(リッジ)回帰など、正則化回帰モデルを使う場合は、罰則項Iのパラメータを調整することで、汎化性能の向上が期待できます。

6. おわりに

今回は、分類モデルと回帰モデルの性能評価指標を紹介しました。
特に分類モデルの性能評価指標は、解析の目的により使い分ける必要があるため、自分は何のためにモデルを作っているのかをよく考えて、評価指標を選定してください。

piponではエンジニアの皆様に業務委託や副業でAI・データサイエンスの案件をご紹介しています!

piponの案件にご興味がある方は以下のフォームにご登録ください。案件をご案内します。

https://share.hsforms.com/1qk0uPA_lSu-nUFIvih16CQegfgt

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です