メインコンテンツ

auc

ROC 曲線または適合率-再現率曲線の下の領域

R2024b 以降

説明

a = auc(rocObj) は、ROC (受信者動作特性) 曲線の下の領域を返します。

a = auc(rocObj,type) は、type"roc" の場合は ROC 曲線の下の領域を返し、type"pr" の場合は適合率-再現率曲線の下の領域を返します。

[a,lower,upper] = auc(___) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、a の信頼限界の下限と上限を追加で返します。

すべて折りたたむ

ツリーとツリーのアンサンブルをクラスが不均衡なデータに当てはめます。適合率-再現率曲線には不均衡なデータが最も適しています。

標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データ セットの最初の数行をプレビューします。

creditrating = readtable("CreditRating_Historical.dat");
head(creditrating)
     ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
    _____    ______    ______    _______    ________    _____    ________    _______

    62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
    48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
    42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
    48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
    43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
    39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
    62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
    39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }

変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);

それぞれの格付けの観測値の数をカウントします。

classCounts = groupcounts(creditrating,"Rating")
classCounts=7×3 table
    Rating     GroupCount    Percent
    _______    __________    _______

    {'A'  }        575       14.624 
    {'AA' }        385       9.7915 
    {'AAA'}        580       14.751 
    {'B'  }        320       8.1384 
    {'BB' }        927       23.576 
    {'BBB'}       1015       25.814 
    {'CCC'}        130       3.3062 

このデータはクラスが不均衡になっています。

cvpartition を使用してデータを学習セットとテスト セットに分割します。

rng("default") % For reproducibility of the partition
c = cvpartition(creditrating.Rating,"Holdout",0.5);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
creditTrain = creditrating(trainingIndices,:);
creditTest = creditrating(testIndices,:);

学習データを使用してツリーとツリーのアンサンブルに学習させます。テスト データを使用して各クラスの陽性予測値 (PPV)、つまり適合率を計算します。

tree = fitctree(creditTrain,"Rating");
ens = fitcensemble(creditTrain,"Rating");
treeROC = rocmetrics(tree,creditTest,"Rating",AdditionalMetrics="prec");
ensROC = rocmetrics(ens,creditTest,"Rating",AdditionalMetrics="prec");

適合率-再現率の AUC の結果をツリーとアンサンブルで比較します。

treePRAUC = auc(treeROC,"pr")
treePRAUC = 1×7

    0.6539    0.6502    0.9304    0.3713    0.5920    0.6464    0.7015

ensPRAUC = auc(ensROC,"pr")
ensPRAUC = 1×7

    0.8074    0.8238    0.9886    0.6156    0.7453    0.8134    0.8647

適合率-再現率の AUC の値は、一連の値でアンサンブルの方が高くなっています。

fisheriris データの交差検証 2 次判別モデルの AUC を求め、統計量の範囲を返します。交差検証分類モデルでは既定で信頼区間が作成されるため、その下限と上限を areaUnderCurve で利用できます。

load fisheriris
rng default % For reproducibility
Mdl = fitcdiscr(meas,species,DiscrimType="quadratic",KFold=5);
rocObj = rocmetrics(Mdl);
[a,lower,upper] = auc(rocObj)
a = 1×3

    1.0000    0.9984    0.9984

lower = 1×3

    1.0000    0.9970    0.9970

upper = 1×3

    1.0000    0.9998    0.9998

フィッシャーのアヤメのデータについて、AUC の値はいずれも実質的に 1 と等しくなります。

入力引数

すべて折りたたむ

分類性能を評価するオブジェクト。rocmetrics オブジェクトとして指定します。

計算する AUC のタイプ。ROC 曲線の下の領域の場合は "roc"、適合率-再現率曲線の下の領域の場合は "pr" として指定します。

データ型: char | string

出力引数

すべて折りたたむ

曲線の下の領域。double または single のベクトルとして返されます。a の各要素が 1 つのクラスの領域を表します。

AUC の信頼限界の下限。double または single のベクトルとして返されます。lower の各要素が 1 つのクラスの信頼限界を表します。この出力を関数で返すには、オブジェクトが信頼区間を指定して作成されていなければなりません。

AUC の信頼限界の上限。double または single のベクトルとして返されます。upper の各要素が 1 つのクラスの信頼限界を表します。この出力を関数で返すには、オブジェクトが信頼区間を指定して作成されていなければなりません。

アルゴリズム

ROC 曲線の場合、auctrapz 関数を使用した台形積分によって曲線の下の領域を計算します。適合率-再現率曲線の場合、auctrapz 関数を使用して曲線の下の領域を計算した後、曲線の一番左の点と点 (0,0) で形成される矩形の領域 (存在する場合) を加えます。以下に例を示します。

load ionosphere
rng default % For reproducibility of the partition
c = cvpartition(Y,Holdout=0.25);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
XTrain = X(trainingIndices,:);
YTrain = Y(trainingIndices);
XTest = X(testIndices,:);
YTest = Y(testIndices);
Mdl = fitcsvm(XTrain,YTrain);
rocObj = rocmetrics(Mdl,XTest,YTest,AdditionalMetrics="ppv");
r = plot(rocObj,XAxisMetric="tpr",...
    YAxisMetric="ppv",ClassNames="b"); % Plots the normal PR curve.
legend(Location="southeast")

Performance curve showing a gap between x = 0 and the leftmost point on the curve.

曲線の一番左の点と真陽性率のゼロの点の間に隙間があります。この隙間を埋める矩形をプロットします。これは、返される AUC に auc が加える補正を表します。

hold on
rectangle(Position=[0 0 r.XData(2) r.YData(2)],FaceColor=r.Color)
hold off

A rectangle fills the gap between the leftmost point on the curve and 0.

厳密には、この矩形は適合率-再現率曲線の一部ではありません。ただし、auc では、(定義域が異なる場合がある) モデル間の比較を簡単にするため、曲線の下の領域をそのままゼロまで延長したものとして扱います。

信頼区間を指定して rocmetrics オブジェクトが作成されている場合 (説明についてはリファレンス ページを参照)、返される AUClower 引数と upper 引数の信頼区間の計算には、元の rocmetrics オブジェクトに対して実行されたものと同じ手法が使用されます。これは、ブートストラッピングまたは交差検証のいずれかです。

バージョン履歴

R2024b で導入