Python sklearn.metrics 機械学習での予想結果を評価する方法と種類

スポンサーリンク
スポンサーリンク

はじめに

機械学習で得た分類の予想結果を評価するのに、正解率 (Accuracy) を用いられることが多いようですが、投資の世界では、正解率 (Accuracy)だけではなく、精度 (Precision)を用いた方が良い場合があります。

そのほかの評価に、検出率 (Recall)F値がありますので、このあたりの違いをまとめました。

ライブラリ

scikit-learnを使用することで、予想結果を簡単に評価することができます。

accuracy_score(正解ラベル, 予想結果)

from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

a_score = accuracy_score(y_data, y_pred)
p_score = precision_score(y_data, y_pred)
r_score = recall_score(y_data, y_pred)
f_score = f1_score(y_data, y_pred)

評価の尺度

予想と結果により、以下の4つに区分されます。

結果
予測真陽性 : TP (True-Positive)偽陽性: FP (False-Positive)
偽陰性: FN (False-Negative)真陰性: TN (True-Negative)
  • 真陽性 : TP (True-Positive)
    • 正のものを正と判断した数。
  • 真陰性: TN (True-Negative)
    • 負のものを負と判断した数。
  • 偽陽性: FP (False-Positive)
    • 正のものを負と判断した数。
  • 偽陰性: FN (False-Negative)
    • 負のものを正と判断した数。

0か1か、表か裏か、丁か半かといった2つの分類の場合の結果は、上記の4つの組み合わせになります。
表現が小難しいですが、意味はシンプルです。

評価の指標

正解率 (Accuracy)

意味

正解率 (Accuracy) は、正を正に分類し、負を負に分類できた割合を示します。

全体(赤色)うち、正解した数(●)の割合ということになります。

結果
予測

計算式

正解率 (Accuracy)  = (TP + TN) / (TP + TN + FP + FN)

精度 (Precision)

意味

精度 (Precision) は、正と予想したもの(赤色)のうち、結果が正であったもの(●)の割合を示します。

結果
予測

計算式

精度 (Precision)  = TP / (TP + FP)

検出率 (Recall)

意味

検出率 (Recall) は、正と予想すべきもの(赤色)を、正しく正と予想した割合を示します。
検出率は、真陽性率 (TPR, True-Positive Rate) または、感度 (Sensitivity) とも呼ばれます。

結果
予測

計算式

検出率 (Recall) = TP / (TP + FN)

F 値 (F-measure, F-score, F1 Score)

意味

F 値は、精度 (Precision) と検出率 (Recall) をバランス良くなっているかを示す指標です。
精度は高くても、検出率が低くなっていないか、またその逆になっていないか、といったような評価を示します。

計算式

F1 = 2 × Precision × Recall / (Precision + Recall)

まとめ

正解率が高いのが一番良いように思えますが、それぞれ利用するシーンにおいて判断が変わります。

病院の検査結果や、空港の手荷物検査など命に関わるようなものは、検出率 (Recall) が高い方が安全です。

投資の世界で考えれば、トレードした結果の評価になりますから、精度 (Precision)が高い方が安全だと思います。
ただし、バイナリーオプションでは上下を当てることになりますので正解率が良いですね。

コメント

タイトルとURLをコピーしました