混同行列とは
何かモデルに通した予測結果と実際の値との正しく判別できた数と誤って判別してしまった数とを表した行列
混同行列はどういった時に使用されるか?
一般的には、2値分類。
混同行列は何故、使用されるか?
例えば、与えられた画像から、癌であるかそうでないかを予測したい時に、
実際の値が
癌でない人(0)は98/100
癌である人(1)は2/100
であったとする。
この時に、予測を全て0とした場合、正答率は98%。
これは正答率で見ると、良い数値に見えるが、
果たしてこれは良い評価ができていると言えるだろうか?
見逃してしまった2人は致命的なミスではないだろうか?
このような事例でも上手く評価をするために使用されるのが混同行列。
混同行列を使ってみよう
一般的には、横軸をモデルの予測結果、縦軸を実際の値として、下表のような 2×2 = 4つの組み合わせでまとめる。
True : 正しく予測できた結果
False :間違って予測した結果
positive : 疾患あり(=1)と判定された結果
negative : 疾患なし(=0)と判定された結果
from sklearn.metrics import confusion_matrix
# 混同行列の作成
cm = confusion_matrix(y_true=y_test, y_pred=y_pred)
# y_trueに渡すのは、評価用の目的変数データ
# y_predに渡すのは、X_testでpredict()関数を使って予測した結果
# 混同行列をデータフレーム化
df_cm = pd.DataFrame(np.rot90(cm, 2), index=["actual_Positive", "actual_Negative"], columns=["predict_Positive", "predict_Negative"])
print(df_cm)
# heatmapによる混同行列の可視化
sns.heatmap(df_cm, annot=True, fmt="2g", cmap='Blues')
plt.yticks(va='center')
plt.show()
※上記のコードはデータが無いので、このコード単品では勿論、動きません。
ここからモデルの性能を測る評価指標について考慮
解率・正確さ(Accuracy)
まずは全体のデータの中でどれだけ正しく分類できたかを確認
$Accuracy = \dfrac{TP + TN}{TP + FP + FN + TN}$
精度・適合率(Precision)
ポジティブ(1)という結果が得られた上で、実際に正解しているかを確認
$Presision=\dfrac{TP}{TP + FP}$
再現率・真陽性率(Recall, True Positive Rate)
実際のデータはポジティブ(1)で、どれだけ
予測したデータが正しくポジティブと推測できているか。
この値が高いほど性能が良く、間違ったPositiveの判断が少ない。
$Recall=\dfrac{TP}{TP + FN}$
真陰性率(True Negative Rate)
実際のデータはネガティブ(0)で、どれだけ
予測したデータが正しくネガティブと推測できているか。
この値が高いほど性能がよく、間違ったNegativeの判断が少ない。
$Recall=\dfrac{TN}{FP + TN}$
偽陰性率(False Negative Rate)
実際のデータはポジティブ(1)で、どれだけ
予測したデータが間違えてネガティブと推測されたか。
この値は低いほど性能が良く、間違ったPositiveの判断が少ない。
$False\ Negative\ Rate=\dfrac{FN}{TP + FN}$
偽陽性率(False Positive Rate)
実際のデータはネガティブ(0)で、どれだけ
予測したデータが間違えてポジティブと推測されたか。
この値は低いほど性能が良く、間違ったNegativeの判断が少ない。
$False\ Positive\ Rate=\dfrac{FP}{FP + TN}$
「混同行列は何故、使用されるか?」の章で扱った例で真陽性率、真陰性率を計測
positiveな予測結果 | negativeな予測結果 | |
---|---|---|
実際のpositiveな結果 | 98 | 0 |
実際のnegativeな結果 | 2 | 0 |
$Accuracy = \dfrac{98 + 0}{98 + 2 + 0 + 0}=0.98$
98%の正答率
$Recall=\dfrac{98}{98 + 0}=1$
100%=>これはpositiveは全て正しく分類されたと判断している
$Recall=\dfrac{0}{2 + 0}=0$
0%=>これはnegativeは全て間違えて分類されたと判断している
まとめ
2 値分類の機械学習モデルをビジネスで利用するには性能を測る指標を算出し、
目的にあった指標値を理解して使用するのが重要