ROC曲線(Receiver Operating Characteristic曲線)は、機械学習・統計解析・医学研究・疫学など多くの分野において分類モデルの性能を視覚的に評価するための重要なツールです。
しかし、実際にROC曲線を自分で書こうとすると、横軸と縦軸に何を設定すべきか、データをどのようにプロットすればよいか、具体的なグラフ作成手順がわからないという方も多いでしょう。
ROC曲線の書き方を正確に理解するためには、感度・特異度・偽陽性率・真陽性率といった基本指標の意味と計算方法をしっかりと把握することが第一歩となります。
この記事では、ROC曲線の書き方について基礎的な概念の確認から始め、データの準備・各指標の計算・プロットの手順・Excelを使った実践的な作成方法まで、体系的にわかりやすく解説していきます。
ROC曲線を正確に描けるようになりたい方は、ぜひ最後までお読みください。
roc曲線の書き方の基本は「偽陽性率を横軸、真陽性率を縦軸にプロット」すること!
それではまず、ROC曲線の書き方における最も根本的な概念と基本ルールについて解説していきます。
ROC曲線とは何か(基本の確認)
ROC曲線(Receiver Operating Characteristic曲線)とは、二値分類モデル(陽性・陰性の2クラスを判別するモデル)の性能を評価するためのグラフです。
もともとは第二次世界大戦中にレーダーの信号検出性能を評価するために開発された手法であり、その後医学・統計学・機械学習などの分野に広く普及しました。
ROC曲線は分類モデルの判定閾値(カットオフ値)を連続的に変化させた際の「真陽性率(感度)」と「偽陽性率(1-特異度)」の関係を一本の曲線として表現したグラフです。
この曲線を見ることで、閾値をどのように設定しても変わらないモデル本来の識別能力を一目で把握できるという大きな特長があります。
ROC曲線はAUC(Area Under the Curve、曲線下面積)という単一の数値とセットで評価されることが多く、AUCが1.0に近いほど優れた分類性能を持つモデルといえます。
横軸・縦軸の定義と意味
ROC曲線を正確に書くためには、横軸と縦軸に何を置くかを正確に理解することが不可欠です。
ROC曲線の横軸は「偽陽性率(False Positive Rate、FPR)」であり、縦軸は「真陽性率(True Positive Rate、TPR)」です。
真陽性率(TPR)は「感度(Sensitivity)」とも呼ばれ、実際に陽性である症例のうちモデルが正しく陽性と判定できた割合を表します。
偽陽性率(FPR)は「1-特異度」とも表記され、実際には陰性である症例のうちモデルが誤って陽性と判定してしまった割合を表します。
ROC曲線の軸に使われる指標の計算式
混同行列の4つの要素
TP(真陽性):実際に陽性で、モデルも陽性と判定
FN(偽陰性):実際に陽性で、モデルが誤って陰性と判定
FP(偽陽性):実際に陰性で、モデルが誤って陽性と判定
TN(真陰性):実際に陰性で、モデルも陰性と判定
縦軸「真陽性率(感度)」= TP ÷ (TP + FN)
横軸「偽陽性率」= FP ÷ (FP + TN)= 1 − 特異度
特異度 = TN ÷ (TN + FP)
この定義から、縦軸の真陽性率(感度)は「陽性をどれだけ見逃さずに検出できるか」を表し、横軸の偽陽性率は「陰性をどれだけ誤って陽性判定してしまうか」を表しています。
理想的なモデルでは真陽性率が高く偽陽性率が低い状態が実現されるため、ROC曲線は左上の角(点(0,1))に近いほど優秀なモデルといえます。
ROC曲線の基本的な形状と解釈
ROC曲線には大きく分けて3種類の典型的な形状があります。
まず「完全なランダム分類器」に対応する形状は、左下(0,0)から右上(1,1)を結ぶ対角線(45度の直線)になります。
これはモデルがランダムに陽性・陰性を予測するのと同じ性能であることを意味しており、「偶然水準」と呼ばれます。
次に「優れた分類器」に対応する形状は、対角線の左上方向に大きく膨らんだ曲線となります。
この曲線は偽陽性率が低い段階から真陽性率が急速に上昇することを示しており、少ない誤検知で多くの陽性を正しく検出できる優れた性能を意味しています。
そして「完全な分類器」の場合は、左下から左上の点(0,1)を通って右上(1,1)へと向かうL字型の曲線となり、すべての陽性を誤検知なしに完全に識別できることを意味します。
ROC曲線を書くためのデータ準備と基本指標の計算
続いては、ROC曲線を実際に描くために必要なデータの準備と基本指標の計算方法について確認していきます。
ROC曲線作成に必要なデータの種類
ROC曲線を書くためには、以下の2種類のデータが必要です。
第一に「実際のクラスラベル(正解データ)」が必要です。
これは各サンプルが実際に陽性(1)か陰性(0)かを示すラベルであり、医学研究では確定診断の結果、機械学習では正解ラベルに相当します。
第二に「モデルの予測スコアまたは確率値」が必要です。
これは各サンプルに対してモデルが出力する「陽性である確率」や「スコア値」であり、0〜1の連続値として表現されることが多いです。
たとえばロジスティック回帰では各サンプルの陽性確率(0〜1の実数値)が出力され、この値を元にROC曲線を描きます。
重要なのは「単純な陽性・陰性の二値判定」ではなく「連続的なスコア値や確率値」が必要という点です。
なぜなら、ROC曲線はさまざまな閾値のもとでの性能変化を表現するものであり、閾値を変化させることができる連続値があって初めて意味を持ちます。
感度・特異度・偽陽性率の計算方法
ROC曲線を描くための各指標の計算は、混同行列(Confusion Matrix)から行います。
混同行列とは、モデルの予測結果と実際のクラスラベルの組み合わせをまとめた表であり、TP・FN・FP・TNの4つの要素から構成されます。
| 予測:陽性 | 予測:陰性 | |
|---|---|---|
| 実際:陽性 | TP(真陽性) | FN(偽陰性) |
| 実際:陰性 | FP(偽陽性) | TN(真陰性) |
感度(真陽性率)はTP ÷ (TP + FN)で計算され、実際の陽性サンプルの中で正しく陽性と検出できた割合を示します。
特異度はTN ÷ (TN + FP)で計算され、実際の陰性サンプルの中で正しく陰性と判定できた割合です。
偽陽性率はFP ÷ (FP + TN)、すなわち「1 − 特異度」で計算されます。
ROC曲線ではこれらの指標を閾値ごとに計算し直すことが核心的な作業となります。
閾値を変化させたときのデータの変化
ROC曲線を描く上で最も重要な概念が「閾値(カットオフ値)を変化させる」という操作です。
たとえばモデルの予測スコアが0〜1の値を取る場合、閾値を0.9に設定すると「スコアが0.9以上のサンプルを陽性と判定」します。
この高い閾値では陽性と判定されるサンプルが少なくなるため、感度(真陽性率)は低くなる一方で特異度は高く(偽陽性率は低く)なります。
逆に閾値を0.1に下げると「スコアが0.1以上を陽性と判定」となり、ほとんどのサンプルが陽性判定されます。
この低い閾値では感度は高くなりますが特異度は下がり(偽陽性率が高くなり)ます。
ROC曲線はこの閾値を高い値から低い値へ(または低い値から高い値へ)連続的に変化させた際の「偽陽性率」と「真陽性率」の組み合わせをすべてプロットして結んだ曲線です。
ROC曲線の具体的な作成手順(ステップバイステップ)
続いては、ROC曲線を実際に描くための具体的な手順をステップ形式で確認していきます。
ステップ1:データの並べ替えと閾値の列挙
ROC曲線を手動で作成する場合の第一ステップは「予測スコアによるデータの並べ替え」です。
各サンプルの予測スコアを降順(高い順)に並べ替え、その並び順に実際のラベル(陽性・陰性)を対応させます。
次に、各サンプルの予測スコアを閾値として順番に採用していきます。
最初の閾値は最高スコアより少し高い値(すべてのサンプルを陰性と判定する状態)から始め、閾値を徐々に下げながら各段階でのTP・FP・TN・FNを更新していきます。
具体例として、10サンプル(陽性5件・陰性5件)のデータで考えてみましょう。
| サンプル番号 | 予測スコア | 実際のラベル |
|---|---|---|
| 1 | 0.95 | 陽性 |
| 2 | 0.88 | 陽性 |
| 3 | 0.72 | 陰性 |
| 4 | 0.65 | 陽性 |
| 5 | 0.58 | 陰性 |
| 6 | 0.49 | 陽性 |
| 7 | 0.43 | 陰性 |
| 8 | 0.35 | 陰性 |
| 9 | 0.27 | 陽性 |
| 10 | 0.18 | 陰性 |
このようにスコアの高い順に並べたデータを使って、次のステップで閾値ごとの感度と偽陽性率を計算していきます。
ステップ2:各閾値での感度・偽陽性率の計算
ステップ2では閾値を各サンプルのスコア値に設定しながら、段階的にTPR(真陽性率)とFPR(偽陽性率)を計算していきます。
先ほどの10サンプルの例で、スコア上位から閾値を順次下げた場合の計算例を見てみましょう。
閾値ごとのTPR・FPR計算例
全陽性数 = 5、全陰性数 = 5
閾値 = 1.0(すべて陰性と判定):TPR = 0/5 = 0.00、FPR = 0/5 = 0.00
閾値 = 0.95(サンプル1のみ陽性):TP=1, FP=0 → TPR = 1/5 = 0.20、FPR = 0/5 = 0.00
閾値 = 0.88(1〜2を陽性):TP=2, FP=0 → TPR = 2/5 = 0.40、FPR = 0/5 = 0.00
閾値 = 0.72(1〜3を陽性):TP=2, FP=1 → TPR = 2/5 = 0.40、FPR = 1/5 = 0.20
閾値 = 0.65(1〜4を陽性):TP=3, FP=1 → TPR = 3/5 = 0.60、FPR = 1/5 = 0.20
閾値 = 0.10(全員陽性):TP=5, FP=5 → TPR = 5/5 = 1.00、FPR = 5/5 = 1.00
このように各閾値でのTPRとFPRを計算し、(FPR, TPR)の座標点を列挙することでROC曲線の点群データが得られます。
閾値の数が多いほど(データ点が多いほど)滑らかなROC曲線が描けます。
ステップ3:座標点のプロットと曲線の描画
ステップ3は算出した(FPR, TPR)の座標点を横軸を偽陽性率(FPR)、縦軸を真陽性率(TPR)としたグラフ上にプロットし、線で結んで曲線を描く作業です。
グラフの軸範囲は横軸・縦軸ともに0から1の範囲で設定します。
まず出発点として左下の原点(0, 0)にプロットします(閾値が最高値の状態:すべて陰性と判定)。
次に計算した各座標点を順にプロットしていき、最後は右上の点(1, 1)に到達します(閾値が最低値の状態:すべて陽性と判定)。
プロットした点を線で結ぶとROC曲線が完成します。
比較基準として「ランダム分類」に相当する対角線(左下(0,0)から右上(1,1)への直線)も合わせて描くことで、モデルが偶然水準を上回っているかどうかを視覚的に確認できます。
グラフには「縦軸ラベル:感度(真陽性率)」「横軸ラベル:偽陽性率(1-特異度)」「タイトル:ROC曲線」「AUC値」を記載することが標準的な書き方です。
Excelを使ったROC曲線の実践的な作成方法
続いては、多くの方が日常的に使用しているExcelを活用してROC曲線を作成する具体的な手順について確認していきます。
Excelでのデータ整理と各指標の計算
ExcelでROC曲線を作成する際は、以下のような列構成でデータを整理すると作業が進めやすくなります。
A列に「サンプルID」、B列に「実際のラベル(1または0)」、C列に「予測スコア(0〜1の連続値)」を入力します。
C列の予測スコアを基準に降順で並べ替えを行い(データ→並べ替え→C列を降順)、スコアの高いサンプルから順に並べます。
次にD列を「閾値(各行のスコア値を閾値として使用)」、E列を「TP累計」、F列を「FP累計」、G列を「TPR(E列 ÷ 全陽性数)」、H列を「FPR(F列 ÷ 全陰性数)」として計算式を入力します。
E列のTP累計は「この行のスコア以上を陽性と判定した場合の真陽性数の累計」を表し、B列のラベルが1(陽性)であれば前の行のTP累計に1を加算、0(陰性)であればそのままとなります。
全陽性数と全陰性数はCOUNTIF関数を使って事前に算出しておきましょう。
ExcelでのROC曲線グラフの作成手順
データ計算が完了したら、H列(FPR)とG列(TPR)を使ってグラフを作成します。
G列とH列の計算結果((0,0)の原点から始まる点列)を選択し、「挿入」タブの「散布図(直線とマーカー)」を選択します。
このとき横軸にFPR(H列)、縦軸にTPR(G列)が対応するよう「データ選択」でX値・Y値を正しく設定することが重要です。
グラフが生成されたら、グラフタイトルを「ROC曲線」に変更し、縦軸ラベルを「感度(真陽性率)」、横軸ラベルを「偽陽性率(1-特異度)」に設定します。
軸の範囲を0〜1に調整し、比較基準となる対角線(ランダム分類直線)を別系列として追加することで、標準的なROC曲線グラフが完成します。
ExcelでのAUCの計算方法
ROC曲線のAUC(曲線下面積)はExcelで台形公式を使って近似計算することができます。
台形公式によるAUCの近似計算
AUC ≒ Σ(隣り合う2点のFPR差 × TPRの平均)
AUC = Σ [(FPR_i − FPR_(i−1)) × (TPR_i + TPR_(i−1)) / 2]
各点間の微小な台形面積を積み上げることで曲線下面積を近似する
Excelでの計算例:I列に「= (H(i) – H(i-1)) × (G(i) + G(i-1)) / 2」を入力し、SUM関数で合計
この台形公式による計算は厳密な積分ではありませんが、データ点数が十分にある場合は高い精度でAUCを近似できます。
データ点数が少ない場合は近似精度が下がるため、より多くの閾値で計算することが望ましいでしょう。
ROC曲線の読み方・解釈と評価のポイント
続いては、完成したROC曲線の正しい読み方と評価のポイントについて確認していきます。
ROC曲線の形状から読み取れる情報
ROC曲線の形状はモデルの識別能力を直接的に表現しており、その形状から多くの情報を読み取ることができます。
曲線が対角線(ランダム分類線)から左上に向かって大きく膨らんでいるほど、モデルの識別性能が高いことを意味します。
曲線の立ち上がりの急さも重要な情報です。
FPR(偽陽性率)が0付近の低い段階でTPR(真陽性率)が急速に上昇する曲線は、少ない誤検知で多くの陽性を検出できるモデルであることを示します。
これはスクリーニング検査など「見逃しを最小限にしながら特異度もある程度保ちたい」用途において理想的な性能プロファイルです。
また、複数のモデルや手法のROC曲線を同一グラフ上に描くことで、どのモデルが全体的に優れた性能を持つかを視覚的に比較することができます。
AUCによる評価基準と判断の目安
ROC曲線の総合的な評価指標であるAUC(曲線下面積)は、モデルの識別能力を0〜1の単一の数値で表します。
| AUCの値 | モデル性能の評価 | 解釈 |
|---|---|---|
| 1.0 | 完全な識別 | すべてのサンプルを完璧に分類できる理想的な状態 |
| 0.9〜1.0 | 優秀 | 非常に高い識別能力を持つ |
| 0.8〜0.9 | 良好 | 実用上十分な識別能力がある |
| 0.7〜0.8 | 許容範囲 | 一定の識別能力はあるが改善の余地がある |
| 0.6〜0.7 | 不十分 | 識別能力が低く実用上の課題がある |
| 0.5 | 無識別能力 | ランダム分類と同等で予測能力がない |
| 0.5未満 | 逆識別 | ランダムより悪い(陽性・陰性の定義を逆にすれば改善できる) |
医学分野ではAUC 0.8以上が実用的に有意な識別能力の目安とされることが多く、新規バイオマーカーの評価などで広く使われる基準です。
カットオフ値の決め方とROC曲線の活用
ROC曲線から最適なカットオフ値(判定閾値)を決める方法はいくつかあります。
最も広く使われるのが「ユーデン指数(Youden’s Index)」を最大化する点を最適閾値とする方法です。
ユーデン指数は「感度 + 特異度 − 1」で計算されるため、ROC曲線上でユーデン指数が最大となる点(対角線からの垂直距離が最も大きい点)を最適カットオフとして採用します。
別のアプローチとして「ROC曲線上で左上の角(0,1)に最も近い点」を最適カットオフとする方法もあります。
これはFPRとTPRの両方を同等に重視する場合に適した方法です。
実際の医学的・ビジネス的文脈では、感度と特異度のどちらを重視するかによって最適なカットオフは変わります。
たとえば重篤な疾患のスクリーニングでは「見逃し(偽陰性)を最小化」を優先するため高感度のカットオフを選び、逆に偽陽性コストが高い場合は高特異度のカットオフを採用するという判断が行われます。
ROC曲線を書く際の重要なポイントをまとめます。
・横軸は偽陽性率(FPR = 1 − 特異度)、縦軸は真陽性率(TPR = 感度)に設定する
・予測スコアを降順に並べ、閾値を連続的に変化させながらTPRとFPRを計算する
・点(0,0)から始まり点(1,1)まで連続してプロットし線で結ぶ
・ランダム分類の対角線と合わせて表示することで性能の比較が明確になる
・AUCを計算してモデル性能の総合評価を行い、必要に応じてカットオフ値を決定する
まとめ
ROC曲線の書き方の基本は、横軸に偽陽性率(FPR)、縦軸に真陽性率(TPR)を設定し、予測スコアの閾値を変化させながら計算した座標点をプロットして曲線を描くことです。
ROC曲線を描くためには、実際のクラスラベルと連続的な予測スコアの2種類のデータが必要であり、混同行列からTP・FP・TN・FNを集計して各指標を算出します。
具体的な作成手順は、予測スコアの降順並べ替え、各閾値でのTPR・FPR計算、座標点のプロット、曲線の描画という4ステップで進めます。
ExcelではSCATTERプロット機能と台形公式によるAUC計算を組み合わせることで、統計ソフトを使わずともROC曲線を作成することが可能です。
完成したROC曲線の評価ではAUCの値とユーデン指数を使ったカットオフ値の決定が重要であり、これらを正確に解釈することでモデルの実用性を正しく判断できるでしょう。