混同行列、期待利益からのモデルの評価について

その2で終わるはずだったが続いた。

期待値としての評価をキノコの分類モデルで試して見た。コードはここ。

github.com

前回3つのモデルを作成し、性能の計測については損失関数や以下のような精度を使って評価した。
f:id:Owatank:20170925101624p:plain
精度は分類器の性能を1つの値で表すことができ、また簡単に計算ができるためとても便利。
これらの評価の方法は単純すぎていくつか問題があるようだ。分類器を正しく評価するためにはクラスの混同という考え方と、分割表の一種である混同行列を理解する必要が大切らしい。

混同行列は n個のクラスを含む分類問題の場合、 (n,n) 行列になる。その行列の列はデータの実際のクラスを表し、行は分類器が予測したクラスを表す。
そのためテストデータに対して混同行列を用いると、分類器によって行われた決定を混同行列内の該当するセルに当てはめ、あるクラスの中に誤って別のクラスがどれくらい混ざっているかが一目でわかる。すごい!!!
2クラス分類での混同行列は以下のように定義される。

f:id:Owatank:20170925104500p:plain

  • 真陽性(実際のクラス、予測したクラスがどちらとも陽性のとき)
  • 偽陽性(実際のクラスは陰性だが、予測したクラスは陽性のとき)
  • 真陰性(実際のクラス、予測したクラスがどちらとも陰性のとき)
  • 偽陰性(実際のクラスは陽性だが、予測したクラスは陰性のとき)

各セルからわかる通り、対角成分には正しく分類されたデータの数が入り、非対角成分には間違った予測をおこなったものが入る。

混同行列で誤った予測の数がわかるからなんぞや、となるが現実のビジネスだとモデルが誤った判断、偽陽性偽陰性となった場合のコストを考慮しなくてはいけない。また偽陽性偽陰性でのエラーは同じ重要度であるとは限らない。
真陽性・真陰性での利益、偽陽性偽陰性でのコストが明確であれば、混同行列を組み合わせることで分類器を期待利益(期待値)という点で評価することができる。

さっそく前回のロジスティック回帰のモデルで期待利益を計算してみる。
まず混同行列を求める(テストデータ 2438件)。
f:id:Owatank:20170925120439p:plain
この時モデルの損失としての精度は 0.68 ほど。陽性、陰性どちらとも五分五分な感じで分割されている。。
各セルは以下のように定義した。

  • 真陽性(毒キノコとどちらも判断して警戒した時)
  • 偽陽性(毒キノコと予測したが食用キノコだった場合)
  • 真陰性(食用と判断して害がなかった場合)
  • 偽陰性(食用と予測したが毒キノコだった場合)

次に期待利益を計算するため利益とコストを定義し、損益行列を作る。
f:id:Owatank:20170925111252p:plain

近くの山で適当にキノコをたくさん拾って、そしてそのキノコを分類モデルにかけ、食用(陰性)と分類されたならそのキノコを焼いて客に売り、1000円の利益を得るとする。また食用と分類されたが毒キノコを客に売ってしまった場合、代金を払い戻してさらに500円支払う(コスト)ことにする。
毒キノコ売った時のコストがかなり軽い気がするが舌が痺れるくらいの症状しか起きない毒キノコとすれば軽くてもいいや。

f:id:Owatank:20170925120612p:plain

上記を背景として以下のように損益行列を作った。(100円=1ドルみたいな感じに変換してる)
f:id:Owatank:20170925112129p:plain

真陽性は毒キノコを分類するだけなので利益には影響しない 0 の値が、偽陽性も食用だったけど毒キノコと分類して売らないだけなので 0 の値が入る。
偽陽性偽陰性の深刻度の違いが見て取れる。

期待利益はこのような数式で得ることができる。
f:id:Owatank:20170925113018p:plain
確率にはこんな性質があるようで。
f:id:Owatank:20170925113459p:plain
これを用いて変形すると、クラスの事前確率でくくり出すことができ、クラス配分が不均衡である影響を分離することができるらしい。かしこい。 f:id:Owatank:20170925113425p:plain
ちなみにp(Y | p)などは混同行列を割合へ変換することで求めることができるので、こんな感じに表すこともできる。
f:id:Owatank:20170925114103p:plain

事前確率などを混同行列から求め、期待利益を計算する。5000兆円いくかな。
f:id:Owatank:20170925120546p:plain
一人当たり約200円期待できるとのこと。やっす。。。

次は利益曲線やROC曲線などモデルの性能の可視化を試す。