Python で roc 曲線を描く方法 (ステップバイステップ)
ロジスティック回帰は、応答変数がバイナリの場合に回帰モデルを近似するために使用する統計手法です。ロジスティック回帰モデルがデータセットにどの程度適合しているかを評価するには、次の 2 つの指標を確認します。
- 感度:結果が実際に肯定的な場合に、モデルが観測値に対して肯定的な結果を予測する確率。これは「真陽性率」とも呼ばれます。
- 特異性:結果が実際には陰性である場合に、モデルが観測値に対して陰性の結果を予測する確率。これは「真のネガティブ率」とも呼ばれます。
これら 2 つの測定値を視覚化する 1 つの方法は、「受信機動作特性」曲線を表すROC 曲線を作成することです。これは、ロジスティック回帰モデルの感度と特異度を表示するグラフです。
次のステップバイステップの例は、Python で ROC 曲線を作成して解釈する方法を示しています。
ステップ 1: 必要なパッケージをインポートする
まず、Python でロジスティック回帰を実行するために必要なパッケージをインポートします。
import pandas as pd import numpy as np from sklearn. model_selection import train_test_split from sklearn. linear_model import LogisticRegression from sklearn import metrics import matplotlib. pyplot as plt
ステップ 2: ロジスティック回帰モデルを当てはめる
次に、データセットをインポートし、それにロジスティック回帰モデルを当てはめます。
#import dataset from CSV file on Github
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/default.csv"
data = pd. read_csv (url)
#define the predictor variables and the response variable
X = data[[' student ',' balance ',' income ']]
y = data[' default ']
#split the dataset into training (70%) and testing (30%) sets
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)
#instantiate the model
log_regression = LogisticRegression()
#fit the model using the training data
log_regression. fit (X_train,y_train)
ステップ 3: ROC 曲線を描く
次に、真陽性率と偽陽性率を計算し、Matplotlib データ視覚化パッケージを使用して ROC 曲線を作成します。
#define metrics
y_pred_proba = log_regression. predict_proba (X_test)[::,1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred_proba)
#create ROC curve
plt. plot (fpr,tpr)
plt. ylabel (' True Positive Rate ')
plt. xlabel (' False Positive Rate ')
plt. show ()
曲線がプロットの左上隅に近ければ近いほど、モデルはデータをより適切にカテゴリに分類できます。
上のグラフからわかるように、このロジスティック回帰モデルは、データをカテゴリーに分類するという点でかなり不十分です。
これを定量化するには、AUC (曲線の下の面積) を計算します。これにより、プロットのどの程度が曲線の下にあるかがわかります。
AUC が 1 に近づくほど、モデルは優れています。 AUC が 0.5 に等しいモデルは、ランダムな分類を行うモデルと同等です。
ステップ 4: AUC を計算する
次のコードを使用してモデルの AUC を計算し、ROC プロットの右下隅に表示できます。
#define metrics
y_pred_proba = log_regression. predict_proba (X_test)[::,1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred_proba)
auc = metrics. roc_auc_score (y_test, y_pred_proba)
#create ROC curve
plt. plot (fpr,tpr,label=" AUC= "+str(auc))
plt. ylabel (' True Positive Rate ')
plt. xlabel (' False Positive Rate ')
plt. legend (loc=4)
plt. show ()
このロジスティック回帰モデルの AUC は0.5602であることがわかります。この数値は 0.5 に近いため、モデルがデータを分類する際に適切に機能していないことがわかります。