モデルの評価と精度指標

scikit-learn の基礎

日付:2025年3月2日

cikit-learnを使ったモデル評価の基礎を解説。ホールドアウト法、交差検証、回帰モデル(MSE・R²)や分類モデル(Accuracy・F1スコア)の評価指標を実装例付きで詳しく説明。機械学習モデルの精度を正しく測定しよう。

目 次

はじめに

機械学習モデルを構築した後、モデルの性能評価を正しく行うことが重要です。
適切な評価を行わなければ、モデルが実際にどの程度の精度で予測できるのかを把握できません。

本記事では、scikit-learn を使ったモデルの評価方法と、代表的な精度指標について詳しく解説します。

1. モデル評価の重要性

機械学習の目的は、未知のデータに対して正確な予測を行うことです。
しかし、学習データだけで評価すると 過学習(overfitting) が発生し、本番環境での性能が低下する可能性があります。

そのため、以下のような方法を用いてモデルを評価します。

  • ホールドアウト法(train-test split)
  • 交差検証(cross-validation)
  • 回帰モデルの評価指標(MSE, RMSE, R²)
  • 分類モデルの評価指標(精度、適合率、再現率、F1 スコア)

次のセクションで、それぞれの評価方法について詳しく解説していきます。

2. ホールドアウト法(train-test split)

最も基本的なモデル評価の方法は、データを学習用(train)とテスト用(test)に分割する方法です。

PYTHON
from sklearn.model_selection import train_test_split import numpy as np # サンプルデータの作成 X = np.random.rand(100, 1) * 10 y = 2.5 * X + np.random.randn(100, 1) * 2 # データを80%:20%に分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) print(f"訓練データ: {X_train.shape}, テストデータ: {X_test.shape}")

出力結果:

訓練データ: (80, 1), テストデータ: (20, 1)

これにより、モデルの学習に 80%のデータを使い、20%のデータで評価を行うことができます。

3. 交差検証(Cross-Validation)

ホールドアウト法では、分割したデータによって評価結果が変わることがあります。この問題を解決するために、交差検証(Cross-Validation) を用います。

(1) K 分割交差検証(K-Fold Cross-Validation)

K-Fold 交差検証は、データをK 個に分割し、それぞれを学習データとテストデータとして使いながら評価を行います。

PYTHON
from sklearn.model_selection import cross_val_score from sklearn.linear_model import LinearRegression # 線形回帰モデルの作成 model = LinearRegression() # 交差検証(K=5) scores = cross_val_score(model, X, y, cv=5, scoring='r2') print(f"R²スコア(各分割): {scores}") print(f"平均R²スコア: {scores.mean():.2f}")

出力結果:

R²スコア(各分割): [0.84 0.79 0.82 0.85 0.80] 平均R²スコア: 0.82

K-Fold 交差検証を用いることで、データ分割の影響を減らし、モデルの汎化性能を適切に評価できます。

4. 回帰モデルの評価指標

回帰モデルでは、予測値と実際の値の誤差を測る指標を使用します。

(1) 平均二乗誤差(MSE: Mean Squared Error)

PYTHON
from sklearn.metrics import mean_squared_error # 予測値の計算 y_pred = model.fit(X_train, y_train).predict(X_test) # MSEの計算 mse = mean_squared_error(y_test, y_pred) print(f"Mean Squared Error (MSE): {mse:.2f}")

出力結果:

Mean Squared Error (MSE): 3.25

MSE が小さいほど、モデルの誤差が少なく、精度が高いことを意味します。

(2) 決定係数(R² スコア)

PYTHON
from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred) print(f"決定係数 (R²): {r2:.2f}")

出力結果:

決定係数 (R²): 0.85

R² スコアは、1 に近いほどモデルの精度が高いことを示します。

5. 分類モデルの評価指標

分類モデルでは、以下のような指標を用います。

(1) 精度(Accuracy)

PYTHON
from sklearn.metrics import accuracy_score # 仮のラベルデータ y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 1] y_pred = [1, 0, 1, 0, 0, 1, 0, 0, 1, 1] # 精度の計算 accuracy = accuracy_score(y_true, y_pred) print(f"Accuracy: {accuracy:.2f}")

出力結果:

Accuracy: 0.90

(2) F1 スコア

PYTHON
from sklearn.metrics import f1_score f1 = f1_score(y_true, y_pred) print(f"F1 Score: {f1:.2f}")

出力結果:

F1 Score: 0.89

F1 スコアは適合率と再現率のバランスを考慮した指標で、不均衡データに対しても有効です。

6. まとめ

本記事では、モデル評価の方法と指標について解説しました。

  • ホールドアウト法と交差検証(K-Fold) を使ってモデルを評価する
  • 回帰モデルでは MSE や R² スコアを使用
  • 分類モデルでは Accuracy や F1 スコアを使用

適切な評価指標を選び、機械学習モデルの性能を正しく測ることが重要です。