【機械学習の分類問題の検証】AUC評価指標ってわかりずらくないですか?

見習いメイド

前回(詳しくは、後述します)、混同行列 (Confusion matrix)について解説してくれてありがとう。やっと混同行列の意味が理解できたよ!

メイド長

よかった!
これで少し前進だね。

混同行列が分かったと思ったら、今度はAUC評価指標が理解できないんだ。
機械学習の分類問題では、特に使われる検証方法だから、ちゃんと理解しておきたいんだ。

AUC評価指標も理解しづらいものだよね。
AIのプログラミングスクールでも良く宿題で出る項目だね。
まずは、混同行列について復習してから、AUC評価指標について解説するね。

混同行列についての復習

前回、混同行列についてオタクかどうか判断するカメラアプリの例で解説しました。

https://programming-info.dream-target.jp/confusion_matrix

混同行列のTP,FN,TN,FP について簡単に復習します。

■真陽性・TP(True-Positive)

ポジティブ(正例)に分類すべきものをちゃんとポジティブに分類できた件数のこと指します。

■真陰性・TN(True-Negative)

ネガティブ(負例)に分類すべきものちゃんとネガティブに分類できた件数を指します。

■偽陽性・FP(False-Positive)

偽陽性は、ネガティブに分類すべきものを間違ってポジティブに分類してしまった件数を指します。

■偽陰性・FN(False-Negative)

偽陰性とは、ポジティブと分類すべきものを間違ってネガティブに分類してしまった件数を指します。

ここからは、混同行列について理解している事を前提に話を進めます。

正解率は当てにならない

前回の記事にて、混同行列から正解率を求めてモデルを評価する方法を解説しました。

しかし、正例が極端に少ないデータだと正しく判定できないことがあります。

モデルがポンコツですべて負例と判定してしまっても、正解率が90%を超えてしまうことがあり、評価とはいえません。

そこで、AUC評価指標の出番です。

AUC評価指標は、一言で言ったら、最もまともに評価してくれる、モデルのチェッカーと言えるでしょう。

AUC評価指標について解説

AUC (Area Under the Roc Curve)とは

AUCとは、ROC曲線が描いた線を元に計算される評価指標です。

ROC曲線とは

ROC曲線は、X軸に偽陽性率、Y軸に真陽性率をとり、偽陽性率を0から1まで動かし、偽陽性率と真陽性率をプロットして描きます。

偽陽性率と真陽性率とFP、TN、TP、FNの関係

偽陽性率(FPR)・・・ FP/(FP+TN)

真陽性率(TPR)・・・TP/(TP+FN)

AUCはROC曲線が描いた面積部分

AUCは、曲線(下図はデータが少ないため四角みたいになっている)の下側の面積の部分です。

面積は最大で1になります。すなわち、AUCの値が1に近いほど良いモデルといえます。

ROC曲線の作り方

ROC曲線の作り方を解説します。

前提条件

・訓練データをロジスティック回帰のアルゴリズムで学習させてモデルを作成済み

・テストデータは4行ほどのデータとする

ROC曲線は、閾値をうごかし、閾値毎のFP,TN,TP,FNを計算し、FPR(偽陽性率),TPR(真陽性率)をプロトして作成します。

ポイント

閾値は、スコアの最大値に1を足したもの(原点にプロトするため)、それぞれのスコアを閾値とする。

具体例は、次の項目で解説します。

ROC曲線の作り方の例

ロジスティック回帰などのアルゴリズムで、4人の予測してみます。

予測の結果、以下のようなスコアが出力されたとします。

  1. 1人目のスコアは0.49029077
  2. 2人目のスコアは0.41097165
  3. 3人目のスコアは0.30278616
  4. 4人目のスコアは0.68056765

閾値は、4人のスコア、4人の中で最もスコアが高かった「0.68056765」に1を加えた「1.68056765」とします。

よって、閾値を大きい順に並べると以下の通りなります。

  1. 1.68056765
  2. 0.68056765
  3. 0.49029077
  4. 0.41097165
  5. 0.30278616

具体例の解説・閾値が0.41097165のときは?

閾値が0.41097165のときは、0.41097165以上が正例になるので実測値と予測値の関係は以下の通りになります。

その結果以下のような関係になります。

実測値 0 1 0 1

予測値 1 1 0 1

1人目のスコアは0.49029077で閾値以上で正と予測(実測値は負)

2人目のスコアは0.41097165で閾値以上で正と予測(実測値は正)

3人目のスコアは0.30278616で閾値未満で負と予測(実測値は負)

4人目のスコアは0.68056765で閾値以上で正と予測(実測値は正)

FRP= 0.5

FP= 1

TN= 1

TPR = 1.0

TP= 2

FN= 0

上記の結果から、ROC曲線のX軸0.5, Y軸1のところに点をプロットします。

以下、他のスコアについても同様のことを実施します。

同様のことを他のスコアにも実施した結果、以下のような表のようになります。

閾値 予測値 実測値 FP TN TP FN FPR TPR
1.68056765以上を正 0 0 0 0 0 1 0 1 0 2 0 2 0 0
0.68056765以上を正 0 0 0 1 0 1 0 1 0 2 1 1 0 0.5
0.49029077以上を正 1 0 0 1 0 1 0 1 1 1 1 1 0.5 0.5
0.41097165以上を正 1 1 0 1 0 1 0 1 1 1 2 0 0.5 1
0.30278616以上を正 1 1 1 1 0 1 0 1 2 0 2 0 1 1

表のFPR,TPRを元にプロットし線を引くと以下のようにROC曲線を引くことができます。

ROC曲線の曲線より下の部分の面積がAUCになります。

AUCは1.0が最大になり、1.0に近いほど、精度が高いモデルと言えるよ。
また、AUCが0.5だと、ランダムなモデルと言えるのよ

実際にコードを書いて解説する

次に、AUCを求めるコードを書きました。

コードは、githubに載せたので参考に

この記事を書くのに役だった参考資料

AIジョブカレの授業

AIジョブカレは、AIに特化したプログラミングスクールです。
決まった日に教室に通う形式のスクールで機械学習講座の中で最も料金が安いといえる。
全部で8回の授業(1回 2時間)で業務で使うレベルの機械学習の知識を得られます。

もちろん、今回取り上げた分類の検証についても授業でも学習します。

https://programming-info.dream-target.jp/aijobcolle-study

やさしく学ぶ 機械学習を理解するための数学のきほん

大学レベルの数学を知らなくても問題なく読みすすめることができます。

回帰問題、ロジスティック回帰など丁寧に解説していて、かつ、ライブラリーを使わない方法でpythonを使った実装例があるため大変参考になります。数学や統計学で挫折してしまった人におすすめの本といえます。

分類問題の検証についても取り上げています。

Kaggleで勝つデータ分析の技術

タイトルのとおりKaggleで勝つために必要な問題の解き方のノウハウが凝縮された本です。

今回のAUCの記事を書く際に参考にさせていただきました。

先程紹介した、AIジョブカレのプログラミングスクールの講師も絶賛していたので、おすすめです!

まとめ

分類においてAUCは、慣れないと難しいです。

しかし、業務では必ず使われるため是非抑えておく必要があります。

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR