ROC曲線や累積反応曲線について

前回の記事で、モデルの性能評価として期待利益という値を使った。

データサイエンスの基本コンセプトのひとつに「モデルの性能の比較対象となる適切な基準は何であるかを考察することは重要である」というものがあるらしい。ビジネスとしては予想精度の最大化よりもモデルが利益を向上させているかがモデルの性能の改善として見るからかな?

今回はモデルの性能を可視化する方法をいくつか試したのでメモにする。コードはここ
まずは利益曲線。これはクラスの事前分布とコストと利益の推定が両方明らかな場合に利用するといいらしい。
前回の損益行列を使うと曲線は以下のようになった。
f:id:Owatank:20170928165536p:plain
横軸はデータの数(キノコの数ともいえる)。食用と判断したキノコのうち、スコア(安全度)が高いと判断したものほど左に、スコアが低いものほど右にある。
精度をわざと悪くしたため、少し下がっている部分がある。これは偽陰性(食用だと思ったらほんとは毒キノコ)と判断したものがあるからだな。
お客さんにキノコを売るとしては食用と判断した内の半分ほどは大丈夫、黒字ということで判断していいのだろうか。

現実ではモデルを作成する前にクラスの事前分布、利益・コストがわからない場合もある。そんな不確実性を許容できる取り得る性能の全体を示す方法がある。
これはROC(受信者動作特性)曲線と呼ばれるそうだ。(x,y)軸の組として(偽陽性,真陽性)または(偽陰性,真陰性)いずれかの組を取る。
つまり利益(tp,tn)とコスト(fp,fn)の間に生まれるトレードオフを示す。グラフはこんな感じになった。
f:id:Owatank:20170928170932p:plain

青い点が今回作ったモデルを示す。また組としては(偽陰性,真陰性)をとった。
ROC空間内においてはいくつか大事な座標がある。(0,0)は陰性の分類を全く行わないことを表し、(1,0)では無条件に陰性として分類を行う分類器ということを示す。
そして(0,1)が全て真陰性に分類する完璧な分類器ということになるんだな。

赤の対角線は半分の確率で陰性と分類するランダムな分類器を表す。そのためこの対角線より上にあるほどランダムではない、データ内の情報を活用できている分類器であることを意味して、逆にこの対角線より下にあるほど何でも陰性と判断する「ゆるい」分類器、ランダム分類器より悪いともいえる。
今回は座標の位置からしてランダムよりそこそこ良いといえるモデルができたかな。

データの数を一定の数で増やし、その時のモデルの性能としてROCグラフに点でプロットして線でつなげると曲線ができる。この曲線の下の面積を全体の面積で割った割合をAUCと呼び、モデルの性能を1つの数値で評価したい時や分類器の使用条件以外は何もわからないときに便利だそうだ。

社会人ではないのでわからないが、現実だとデータ分析がよくわからない営業の人にモデルの性能を説明しなくてはいけないときがあるそうで。そんなとき利益曲線やROC曲線を見せても、よくわからんヾ(`Д´)ノ" といった感じでコミュニケーションが取れないこともあるとか。

そのため人に説明しやすい一般的な可視化の手段として累積反応曲線がある。これはROC曲線と密接に関連しているがこっちの方が直感的でわかりやすいらしい。

累積反応曲線は縦軸(y軸)にヒット率(tpまたはtn率)正しく分類されたデータの割合をとる。横軸(x軸)には対象としている母集団の割合をとる。

f:id:Owatank:20170928174551p:plain

ここだとスコアが0.5未満のものは陽性(毒キノコ)としているため、途中でグラフの変化がなくなってしまった。
それでも食用と判断している x = 50 あたりまでのとこだと、青い対角線(ランダム分類器)よりも上にあることから何らかの長所があると見てもいいはず。

ここでモデル性能を表す曲線が、ランダム推定より優れているということを表すリフト値なるものがある。
10個のデータのうち5個が食用、残りの5個が毒キノコとする。このときランダム分類器で5個選んだら、陰性である食用キノコが半分あると判断してもいい。
このときリフト値は (食用キノコの割合) / (データの割合) より 0.5 / 0.5 = 1 となる。

次に自分が作ったモデルでスコア(安全度)が高い上位5個のキノコを選ぶ。このとき食用キノコがほぼ占めていると判断してもいい。
このときリフト値は 1.0 / 0.5 = 2 となる。

このリフト値をプロットしたものがリフト曲線となる。各モデルの(ランダムより)相対的な優位性を示す。
実際には累積反応曲線上にある x座標の値を同じ対角線でのx座標の値で割ったもの。

f:id:Owatank:20170928180418p:plain

累積反応曲線とリフト曲線は対象とするデータセットのうち陰性、または陽性の割合が明確でないと使えない。

本通りのいい感じな曲線がうまいこと引けなかったかも。プヨグラミング力が足りない。