どうもニコイチです。前回AUCについて学びました。今回はデータ分析の一環として、モデルの性能を評価する際に「ROC曲線(Receiver Operating Characteristic Curve)」がよく使われます。この曲線は、モデルの予測精度を視覚的に確認するためのグラフで、特に分類問題において役立ちます。この記事では、Pythonを使ってROC曲線を描く手順を、デモデータ(CSVファイル)を用いて解説します。
目次
前提条件
以下の準備を整えましょう:
- Pythonがインストールされていること
- 必要なライブラリがインストールされていること
pip install numpy pandas scikit-learn matplotlib
手順
1. データの読み込みと確認
まず、CSVファイルを読み込みます。
import pandas as pd
# CSVファイルを読み込み
data = pd.read_csv('/mnt/data/data.csv')
# データの先頭5行を確認
print(data.head())
アップロードされたデータの内容を確認して、どの列が「実測値」と「予測値」に該当するかを把握してください。
2. 必要なライブラリをインポート
次に、ROC曲線を描画するためのライブラリをインポートします。
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
3. データの準備
実測値(正解ラベル)と予測値を指定します。
# 実測値と予測値の列名を設定
true_labels = data['actual'] # 実測値の列
predictions = data['predicted'] # 予測値の列
初心者向けポイント:
- 実測値とは、実際の正解ラベル(例: 0 または 1)。
- 予測値とは、モデルが出力した予測の確率や値。
4. ROC曲線の計算と描画
roc_curve
関数を使って、偽陽性率(FPR)と真陽性率(TPR)を計算します。
# ROC曲線を計算
fpr, tpr, thresholds = roc_curve(true_labels, predictions)
# AUCスコアの計算
auc = roc_auc_score(true_labels, predictions)
# ROC曲線の描画
plt.plot(fpr, tpr, label='ROC Curve (AUC={:.2f})'.format(auc))
plt.plot([0, 1], [0, 1], color='black', linestyle='dashed', label='Random Guess')
# グラフの装飾
plt.title('ROC Curve')
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.legend()
plt.grid()
plt.show()
実行結果の解釈
- ROC曲線の形状:曲線が左上に近いほど、モデルの予測精度が高いことを示します。
- AUC(Area Under Curve)値:0.5がランダム予測、1.0に近いほど良い性能を意味します。
初心者がつまづきやすいポイント
- データ形式の確認:実測値と予測値が数値(0と1や確率値)である必要があります。
- 実測値がカテゴリ(例: “Yes” や “No”)の場合、0と1に変換します。
data['actual'] = data['actual'].map({'No': 0, 'Yes': 1})
- 予測値が確率でない場合:モデルの出力がクラス(例: 0 または 1)なら、確率に変換する必要があります。
predictions = model.predict_proba(X_test)[:, 1]
コメント