機械学習

機械学習で頻出のROC曲線とAUCについて初心者向けに分かりやすく解説&Python実装!

ROC曲線とAUC アイキャッチ
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、ROC曲線とAUCについて解説してきます。ROC曲線とAUCは、主に機械学習における分類問題の指標で用いられています。特に2値分類問題で出力値が0~1の確率の場合、閾値によってどれだけ分類が変化するかを示す性質を持っています。今回はROC曲線・AUCの定義を解説しつつ、これらの関係性について分かりやすく解説していきます!

こんにちは!

データサイエンティストのウマたん(@statistics1012)です!

今回はROC曲線・AUCについて解説していきます。簡単な説明をすると、ROC曲線は縦軸に真陽性率、横軸に偽陽性率を取ったときのグラフとして描かれます。そしてAUCはグラフの下の部分の面積のことを指します!

ロボたん
ロボたん
ROC曲線とAUCの関係はなんとなくわかったけど、実際にどんな場面で使うんだろう?
ウマたん
ウマたん
ROC曲線とAUCは分類問題で使うよ!特に出力値の閾値で正常か異常かの判定が変化してしまうことを踏まえた総合的な評価ができる利点があるんだ!

この記事では、そんなROC曲線・AUCの定義と関係性について解説していきながらPythonで実装していきます!

・ROC曲線・AUCの定義について解説!
・ROC曲線・AUCの性質について解説!
・PythonでROC曲線・AUCを見てみよう!

以下のYoutube動画でも解説していますのでこちらもあわせてチェックしてみてください!

混同行列について解説!

stories Data-pana
ロボたん
ロボたん
早速ROC曲線の解説を…と思ったら混同行列?の解説をするの?
ウマたん
ウマたん
混同行列はROC曲線・AUCを理解するために必須なものだよ!まずは基礎から固めていこう!

それでは混同行列を解説していきます!

混同行列とは「元の教師ラベルと予測結果の2つを表した行列」と定義されています。

教師ラベルは元からサンプルについているラベル(正常・異常)を指します.そして予測結果はデータから推定されたラベル(正常・異常)を指します.したがって混同行列は2×2の行列を示していることが分かりますね!

混同行列

このような混同行列は分類問題における様々な指標で用いられています!

混同行列 アイキャッチ
混同行列と評価指標についてわかりやすく解説&Python実装!当サイト【スタビジ】の本記事では、混同行列について解説してきます。混同行列は分類問題で用いられており、Accuracyに限らないモデルの性能を評価することができます。今回は混同行列の定義を解説しつつ、これらの関係性について分かりやすく解説していきます!...

今回はROC曲線で用いる真陽性率(TPR)、偽陽性率(FPR)を見ていきましょう!

真陽性率(TPR)とは全てのPositiveのうち,実際にPositiveだったものを正しくPositiveと判定した割合です。一方、偽陽性率(FPR)は全てのNegativeのうち、実際はNegativeだがPositiveと誤判定した割合です。

\(TPR\) = \(\frac{TP}{TP+FN}\)

\(FPR\) = \(\frac{FP}{FP+TN}\)

この真陽性率(TPR)・偽陽性率(FPR)はROC曲線で必ず必要な概念ですので、覚えておきましょう!

ROC曲線について解説!

stories data trend
ロボたん
ロボたん
混同行列と真陽性率(TPR)・偽陽性率(FPR)についてわかったけど、ROC曲線はどんな曲線なの?
ウマたん
ウマたん
ROC曲線とは、縦軸が真陽性率(TPR)、横軸を(FPR)としたグラフと定義されているんだ!先程の例題を使って見ていこう!

次にROC曲線について解説していきます!ROC曲線とは縦軸が真陽性率(TPR)、横軸を(FPR)のグラフを指します.そして各軸の閾値を変化させたときに曲線が生成されます。

ロボたん
ロボたん
さっきから「閾値」っていう単語を使っているけど、これはどんな意味があるの?
ウマたん
ウマたん
分類問題では、出力値である確率を閾値によって正常か異常かを判定することがあるんだ。
閾値について

次にこの閾値を左にずらしてみると、実際はNegativeだけどPositiveと間違える割合FPが変化するので偽陽性率(FPR)も変化することが分かります。つまり閾値を変化させることで正常か異常かの判定が変わってしまうことになります!

これを踏まえると、ROC曲線は閾値によって変化した真陽性率(TPR)・偽陽性率(FPR)をプロットして線でつないだ曲線と言い換えることができます!

しかしこれだけだと本当に良い分類器かわかりませんので、ROC曲線から求められるAUCについて解説していきます!

AUCについて解説!

Data Trends

それではAUCについて解説していきます!

AUCはROC曲線の下の部分の面積と定義されています!まず初めに、なぜAUCが指標として用いられているか見ていきましょう!青の分布がNegative、オレンジ色の分布がPositive、緑の線(閾値)の右をPositiveと判定、左をNegativeと判定するとします。

例えばPositiveの分布とNegativeの分布は重なっていない場合を考えます。

AUC=1

この時、閾値がオレンジの分布に入った時、TPRは小さくなりますが、FPRはずっと0のままであることが考えられますね!何故ならNegativeは全てNegativeと予測しているのでFPは0だからです!

逆に閾値が青の分布に入ると、TPRはずっと1のままで、FPRは大きくなることが分かります!

したがって、このようなROC曲線となります。この時のAUCは1です!

auc=1

一方、Positiveの分布とNegativeの分布が完全に重なった場合、閾値をどう動かしてもFPR、TPRは同じ値をとります!何故ならTP=FP、TN=FNとなるため、先程の式を見てみるとFPR=TPRとなりますね!

AUC=0

したがってROC曲線はこのようになります。この時のAUCは0.5となります。

auc=0.5

つまりAUCは0.5~1.0の範囲において、PositiveとNegativeを綺麗に分けることができるなら1に近づき、ランダムに分けるなら0.5に近づく性質を持っています!

実際にROC曲線・AUCをPythonで実装してみよう!

stories pc

実際にPythonで混同行列とROC曲線・AUCを実装して見ていきましょう!

混同行列はsklearn.metricsのconfusion_matrix関数、ROC曲線はsklearn.metricsのroc_curve関数、AUCはsklearn.metricsのauc関数を使って実装できます!

import numpy as np
from sklearn.metrics import roc_curve,confusion_matrix, auc

y_true = [0, 1, 0, 1, 0, 1, 1, 1, 1, 1]
y_pred = [0, 1, 1, 1, 1, 0, 0, 0, 1, 1]
y_score = [0.4, 0.3, 0.1, 0.7, 0.3, 0.2, 0.7, 0.5, 0.6, 0.4]

#混同行列は右下がTP,左上がTNなので注意!
mat = confusion_matrix(y_true, y_pred)
print("confusion_matrix:\n",mat)

roc = roc_curve(y_true, y_score)
fpr, tpr, thresholds = roc_curve(y_true, y_score)
auc = auc(fpr,tpr)
print("auc:{}".format(auc))
plt.plot(fpr, tpr, marker='o')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.grid()
rocとauc,混同行列

AUCを見てみると約0.8であり、優れた分類モデルであることが分かりますね!

このようにROC曲線・AUCを使うことで、精度に頼らず優れた分類モデルであるか判断できるところが利点であると考えられます!

ROC曲線・AUC まとめ

本記事ではROC曲線・AUCについてまとめました!

分類問題ではROC曲線・AUCやAccuracy(精度)を用いることがありますが、予測問題の場合決定係数やRMSEといった指標を用いることがあるため、問題の設定によって評価指標を適切に使い分ける必要があります!

そうしたデータサイエンスの力を身に付けるためにはスタビジの記事やスクールを活用すると良いでしょう。

そして僕の経験を詰め込んだデータサイエンス特化のスクール「スタアカ(スタビジアカデミー)」を運営していますので,興味のある方はぜひチェックしてみてください!

ウマたん
ウマたん
目指せデータサイエンスマスター!

AIデータサイエンス特化スクール「スタアカ」

スタアカトップ
【価格】ライトプラン:980円/月
プレミアムプラン:98,000円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組みあわせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!

当メディアが運営するスクールです。

24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解などもあわせて学べるボリューム満点のコースになっています!

Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!

・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ

データサイエンスに関する記事はこちら!

統計学入門に必要な知識と独学勉強方法を簡単に学ぼう!当ブログ【スタビジ】の本記事では、統計学入門に必要な知識をカンタンにまとめ、それらをどのように効率的に独学で勉強していけばよいかをお話ししていきます。統計学は難しいイメージが少しありますが、学び方をしっかり考えれば大丈夫!...
デーサイエンス本
【データサイエンティスト厳選18冊】データサイエンスを学ぶ上でオススメな本・教材!当ブログ【スタビジ】の本記事では、データサイエンスを学ぶ上でオススメできる本を厳選して紹介していきます。ここではデータサイエンティストになるために習得するスキルをデータサイエンスと称しております。いくつかの観点に切り分けて見ていきます。...

データサイエンスを勉強できるスクールやサイトは、ぜひこちらを参考にしてみてください!

データサイエンティスト スクール
【徹底比較】データサイエンティストのための学習ができるスクール9選! スクール名 オススメ度 価格の安さ サポート体制 公式サイト テックアカデミー ...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら