python scikit-learn。それらは非常に不均衡なデータ(約14300:1)にあります。ほぼ100%の精度とROC-を使用して2つのクラスを分類するようにMLロジスティック分類器をトレーニングしています。 AUCですが、精度、再現率、f1スコアは0%です。精度は通常、非常に不均衡なデータでは役に立たないことを理解していますが、ROC-AUC測定も完全に近いのはなぜですか。
from sklearn.metrics import roc_curve, auc
# Get ROC
y_score = classifierUsed2.decision_function(X_test)
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(false_positive_rate, true_positive_rate)
print 'AUC-'+'=',roc_auc
1= class1
0= class2
Class count:
0 199979
1 21
Accuracy: 0.99992
Classification report:
precision recall f1-score support
0 1.00 1.00 1.00 99993
1 0.00 0.00 0.00 7
avg / total 1.00 1.00 1.00 100000
Confusion matrix:
[[99992 1]
[ 7 0]]
AUC= 0.977116255281
上記はロジスティック回帰を使用しており、以下は決定木を使用しています。決定行列はほぼ同じように見えますが、AUCは大きく異なります。
1= class1
0= class2
Class count:
0 199979
1 21
Accuracy: 0.99987
Classification report:
precision recall f1-score support
0 1.00 1.00 1.00 99989
1 0.00 0.00 0.00 11
avg / total 1.00 1.00 1.00 100000
Confusion matrix:
[[99987 2]
[ 11 0]]
AUC= 0.4999899989
AUC ROCと、精度/精度などの「ポイントごとの」メトリックとの決定的な違いを理解する必要があります。ROCは、しきい値の関数です。各クラスに属する確率を出力するモデル(分類器)が与えられると、最も高い確率(サポート)を持つクラスを予測します。ただし、このルールを変更し、特定のクラスとして実際に分類するには、一方のサポートをもう一方のサポートの2倍にすることで、より良いスコアを取得できる場合があります。 これは不均衡なデータセットによく当てはまります。このようにして、実際にクラスの学習済みの事前情報を変更して、データにさらに適合させます。 ROCは、「このしきい値をすべての可能な値に変更するとどうなるか」を調べ、AUCROCはそのような曲線の積分を計算します。
その結果: