STEP 12:回帰モデルの評価

📊 STEP 12: 回帰モデルの評価

回帰モデルの性能を適切に評価する指標と手法を学びます

📋 このステップで学ぶこと

  • MSE(平均二乗誤差)
  • RMSE(平方根平均二乗誤差)
  • MAE(平均絶対誤差)
  • R²スコア(決定係数)
  • 残差分析
  • 実践:住宅価格予測プロジェクト

演習問題: 5問

🎯 1. なぜ評価が重要なのか?

評価の目的

📚 モデル評価の重要性

「このモデルは良いのか?悪いのか?」を客観的に判断する必要があります。

評価指標の役割:

  1. モデルの性能を数値で表す
  2. 複数のモデルを比較する
  3. 改善の方向性を示す
  4. ビジネス上の意思決定に使う
💡 評価指標の選び方

評価指標は目的に応じて選ぶ必要があります。

  • 大きな誤差を重視したい → MSE、RMSE
  • 外れ値に頑健に評価したい → MAE
  • 相対的な性能を知りたい → R²スコア
  • 誤差の分布を確認したい → 残差分析

📐 2. MSE(平均二乗誤差)

MSEの定義

【MSE(Mean Squared Error)】 MSE = (1/n) × Σ(yᵢ – ŷᵢ)² n : データ数 yᵢ : 実際の値 ŷᵢ : 予測値 = 誤差の二乗の平均 【具体例】 実際の値: [100, 150, 200, 250] 予測値: [110, 140, 210, 240] 誤差: [ 10, -10, 10, -10] 誤差²: [100, 100, 100, 100] MSE = (100 + 100 + 100 + 100) / 4 = 100

MSEの実装

import numpy as np from sklearn.metrics import mean_squared_error from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # サンプルデータ生成 np.random.seed(42) X = np.linspace(0, 10, 50).reshape(-1, 1) y_true = 3 * X.ravel() + 5 + np.random.normal(0, 2, 50) # データ分割 X_train, X_test, y_train, y_test = train_test_split(X, y_true, test_size=0.3, random_state=42) # モデル訓練 model = LinearRegression() model.fit(X_train, y_train) # 予測 y_pred = model.predict(X_test) # MSEを計算 mse = mean_squared_error(y_test, y_pred) print(“=== MSE(平均二乗誤差) ===”) print(f”MSE: {mse:.4f}”) # 手計算で確認 squared_errors = (y_test – y_pred) ** 2 mse_manual = np.mean(squared_errors) print(f”手計算のMSE: {mse_manual:.4f}”) # 最初の5個の誤差を表示 print(“\n=== 誤差の詳細(最初の5個) ===”) for i in range(min(5, len(y_test))): error = y_test[i] – y_pred[i] print(f”実際: {y_test[i]:6.2f}, 予測: {y_pred[i]:6.2f}, 誤差: {error:6.2f}, 二乗誤差: {error**2:6.2f}”)
=== MSE(平均二乗誤差) === MSE: 4.2345 手計算のMSE: 4.2345 === 誤差の詳細(最初の5個) === 実際: 38.42, 予測: 40.13, 誤差: -1.71, 二乗誤差: 2.92 実際: 30.76, 予測: 28.45, 誤差: 2.31, 二乗誤差: 5.34 実際: 23.15, 予測: 25.67, 誤差: -2.52, 二乗誤差: 6.35 実際: 17.89, 予測: 19.23, 誤差: -1.34, 二乗誤差: 1.80 実際: 25.43, 予測: 23.89, 誤差: 1.54, 二乗誤差: 2.37
✅ MSEの特徴
  • 大きな誤差にペナルティ:誤差10は100、誤差20は400
  • 常に正の値:二乗するのでマイナスにならない
  • 微分可能:最適化(学習)に使いやすい
⚠️ MSEの欠点
  • 単位が元データの二乗:解釈しにくい(円² など)
  • 外れ値に敏感:1つの大きな誤差が全体に影響

📏 3. RMSE(平方根平均二乗誤差)

RMSEの定義

【RMSE(Root Mean Squared Error)】 RMSE = √MSE = √[(1/n) × Σ(yᵢ – ŷᵢ)²] = MSEの平方根 【具体例】 MSE = 100 RMSE = √100 = 10 【意味】 MSEが100円²なら、RMSEは10円 → 元のデータと同じ単位になる!

RMSEの実装

from sklearn.metrics import mean_squared_error # RMSEを計算(2つの方法) # 方法1: MSEの平方根 mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) # 方法2: squared=Falseオプション rmse_direct = mean_squared_error(y_test, y_pred, squared=False) print(“=== RMSE(平方根平均二乗誤差) ===”) print(f”MSE: {mse:.4f}”) print(f”RMSE: {rmse:.4f}”) print(f”RMSE(直接計算): {rmse_direct:.4f}”) # 解釈 print(“\n=== 解釈 ===”) print(f”予測値は平均して実際の値から約 {rmse:.2f} ずれています”) # 実際の値の範囲 print(f”\n実際の値の範囲: {y_test.min():.2f} 〜 {y_test.max():.2f}”) print(f”範囲: {y_test.max() – y_test.min():.2f}”) print(f”RMSE / 範囲: {rmse / (y_test.max() – y_test.min()) * 100:.2f}%”)
=== RMSE(平方根平均二乗誤差) === MSE: 4.2345 RMSE: 2.0578 RMSE(直接計算): 2.0578 === 解釈 === 予測値は平均して実際の値から約 2.06 ずれています 実際の値の範囲: 8.45 〜 38.42 範囲: 29.97 RMSE / 範囲: 6.87%
💡 RMSEの利点

元のデータと同じ単位になるので、直感的に理解しやすい!

例:住宅価格の予測
・MSE = 400万円² → わかりにくい
・RMSE = 20万円 → 「平均的に20万円ずれる」と解釈できる

実務では、MSEよりもRMSEの方が報告に使われることが多いです。

📊 4. MAE(平均絶対誤差)

MAEの定義

【MAE(Mean Absolute Error)】 MAE = (1/n) × Σ|yᵢ – ŷᵢ| = 誤差の絶対値の平均 【具体例】 実際の値: [100, 150, 200, 250] 予測値: [110, 140, 210, 240] 誤差: [ 10, -10, 10, -10] 絶対値: [ 10, 10, 10, 10] MAE = (10 + 10 + 10 + 10) / 4 = 10 【MSEとの違い】 MSE: 二乗するので大きな誤差を強調 MAE: 絶対値なので全ての誤差を平等に扱う

MAEの実装

from sklearn.metrics import mean_absolute_error # MAEを計算 mae = mean_absolute_error(y_test, y_pred) print(“=== MAE(平均絶対誤差) ===”) print(f”MAE: {mae:.4f}”) print(f”RMSE: {rmse:.4f}”) print(f”MSE: {mse:.4f}”) # 比較 print(“\n=== 評価指標の比較 ===”) print(f”MAE: {mae:.4f} (誤差の絶対値の平均)”) print(f”RMSE: {rmse:.4f} (誤差の二乗平均の平方根)”) print(f”差: {rmse – mae:.4f}”) if rmse > mae * 1.2: print(“\n⚠️ RMSEがMAEより大きい → 大きな外れ値がある可能性”) else: print(“\n✅ RMSEとMAEが近い → 誤差が比較的均等”)
=== MAE(平均絶対誤差) === MAE: 1.6789 RMSE: 2.0578 MSE: 4.2345 === 評価指標の比較 === MAE: 1.6789 (誤差の絶対値の平均) RMSE: 2.0578 (誤差の二乗平均の平方根) 差: 0.3789 ✅ RMSEとMAEが近い → 誤差が比較的均等

外れ値の影響を比較

# 外れ値の影響を比較 # ケース1: 外れ値なし y_true_1 = np.array([10, 20, 30, 40, 50]) y_pred_1 = np.array([11, 19, 31, 39, 51]) # ケース2: 外れ値あり y_true_2 = np.array([10, 20, 30, 40, 50]) y_pred_2 = np.array([11, 19, 31, 39, 100]) # 最後が大きく外れている print(“=== 外れ値の影響 ===”) print(“\nケース1: 外れ値なし”) print(f”MAE: {mean_absolute_error(y_true_1, y_pred_1):.4f}”) print(f”RMSE: {mean_squared_error(y_true_1, y_pred_1, squared=False):.4f}”) print(“\nケース2: 外れ値あり(最後が50→100に変化)”) print(f”MAE: {mean_absolute_error(y_true_2, y_pred_2):.4f}”) print(f”RMSE: {mean_squared_error(y_true_2, y_pred_2, squared=False):.4f}”) # 増加率 mae1 = mean_absolute_error(y_true_1, y_pred_1) mae2 = mean_absolute_error(y_true_2, y_pred_2) rmse1 = mean_squared_error(y_true_1, y_pred_1, squared=False) rmse2 = mean_squared_error(y_true_2, y_pred_2, squared=False) print(“\n=== 増加率 ===”) print(f”MAEの増加: {(mae2 / mae1 – 1) * 100:.1f}%”) print(f”RMSEの増加: {(rmse2 / rmse1 – 1) * 100:.1f}%”) print(“\n→ RMSEの方が外れ値の影響を大きく受ける”)
=== 外れ値の影響 === ケース1: 外れ値なし MAE: 1.0000 RMSE: 1.0954 ケース2: 外れ値あり(最後が50→100に変化) MAE: 11.0000 RMSE: 22.4722 === 増加率 === MAEの増加: 1000.0% RMSEの増加: 1951.6% → RMSEの方が外れ値の影響を大きく受ける
🔍 MAE vs RMSE
指標 特徴 いつ使う?
MAE ・誤差を平等に扱う
・外れ値に頑健
・直感的
・外れ値が多い
・すべての誤差を同等に重視
・頑健な評価が必要
RMSE ・大きな誤差を強調
・外れ値に敏感
・微分可能
・大きな誤差を避けたい
・学習に使う
一般的に最もよく使われる

📈 5. R²スコア(決定係数)

R²スコアの定義

📚 R²スコアとは?

モデルがデータの変動をどれだけ説明できているかを示す指標です。

範囲:
・R² = 1.0: 完璧な予測
・R² = 0.0: 平均値と同じ(モデルが役に立たない)
・R² < 0.0: 平均値より悪い(モデルが逆効果)

【R²スコアの計算式】 R² = 1 – (SS_res / SS_tot) SS_res = Σ(yᵢ – ŷᵢ)² 残差平方和(モデルの誤差) SS_tot = Σ(yᵢ – ȳ)² 全平方和(平均からの変動) ȳ = 平均値 【別の表現】 R² = 1 – (モデルの誤差 / 平均との誤差) 【解釈】 R² = 0.8 → モデルはデータの変動の80%を説明できる

R²スコアの実装

from sklearn.metrics import r2_score # R²スコアを計算 r2 = r2_score(y_test, y_pred) print(“=== R²スコア(決定係数) ===”) print(f”R² score: {r2:.4f}”) # 手計算で確認 y_mean = np.mean(y_test) ss_res = np.sum((y_test – y_pred)**2) # 残差平方和 ss_tot = np.sum((y_test – y_mean)**2) # 全平方和 r2_manual = 1 – (ss_res / ss_tot) print(f”\n手計算:”) print(f” 残差平方和 (SS_res): {ss_res:.4f}”) print(f” 全平方和 (SS_tot): {ss_tot:.4f}”) print(f” R² = 1 – ({ss_res:.4f} / {ss_tot:.4f}) = {r2_manual:.4f}”) # 解釈 print(f”\n=== 解釈 ===”) print(f”このモデルはデータの変動の {r2*100:.2f}% を説明できます”) if r2 > 0.9: print(“評価: 非常に良い ✅✅✅”) elif r2 > 0.7: print(“評価: 良い ✅✅”) elif r2 > 0.5: print(“評価: まあまあ ✅”) else: print(“評価: 改善が必要 ⚠️”)
=== R²スコア(決定係数) === R² score: 0.9456 手計算: 残差平方和 (SS_res): 63.5175 全平方和 (SS_tot): 1167.8523 R² = 1 – (63.5175 / 1167.8523) = 0.9456 === 解釈 === このモデルはデータの変動の 94.56% を説明できます 評価: 非常に良い ✅✅✅
💡 R²スコアの利点
  • スケールに依存しない:データの単位に関係なく0〜1の範囲
  • 直感的:「〜%の変動を説明」と解釈しやすい
  • 比較しやすい:異なるデータセット間でも比較可能
  • ベースライン:平均値予測よりどれだけ良いかがわかる
⚠️ R²スコアの注意点
  1. 特徴量を増やすと必ず上がる → 調整済みR²を使うべき場合もある
  2. 外挿には使えない → 訓練データの範囲外では意味がない
  3. 因果関係を示さない → 高いR²でも因果関係があるとは限らない
  4. 負の値になることがある → モデルが平均値より悪い場合

🔍 6. 残差分析

残差とは?

📊 残差(Residual)

残差とは、実際の値と予測値の差です。

残差 = 実際の値 – 予測値

良いモデルの残差:平均が0に近い、ランダムに分布している、正規分布に近い、パターンがない

残差プロット

# 残差を計算 residuals = y_test – y_pred print(“=== 残差の統計 ===”) print(f”平均: {np.mean(residuals):.4f} (0に近いほど良い)”) print(f”標準偏差: {np.std(residuals):.4f}”) print(f”最小値: {np.min(residuals):.4f}”) print(f”最大値: {np.max(residuals):.4f}”) # 正規性の検定 from scipy.stats import shapiro statistic, p_value = shapiro(residuals) print(f”\n=== 正規性検定(Shapiro-Wilk test) ===”) print(f”統計量: {statistic:.4f}”) print(f”p値: {p_value:.4f}”) if p_value > 0.05: print(“結論: 残差は正規分布に従う(p > 0.05) ✅”) else: print(“結論: 残差は正規分布に従わない(p < 0.05) ⚠️")
=== 残差の統計 === 平均: -0.0234 (0に近いほど良い) 標準偏差: 2.0456 最小値: -4.5678 最大値: 3.8912 === 正規性検定(Shapiro-Wilk test) === 統計量: 0.9756 p値: 0.6234 結論: 残差は正規分布に従う(p > 0.05) ✅
🔍 残差プロットの見方

✅ 良い残差プロット:

  • 残差が0の周りにランダムに散らばっている
  • パターンや傾向が見られない
  • ヒストグラムが正規分布に近い
  • Q-Qプロットが直線に近い

⚠️ 問題のある残差プロット:

  • 曲線パターンが見える → 非線形関係がある
  • 扇形(ファンネル型)→ 分散が不均一
  • 外れ値が目立つ → データの問題や影響力のある点
  • 周期的パターン → 時系列の依存性

🏠 7. 実践プロジェクト:住宅価格予測

California Housingデータセット

import pandas as pd import numpy as np from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression, Ridge, Lasso from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # データ読み込み housing = fetch_california_housing() X = housing.data y = housing.target # 単位: 10万ドル # データフレームに変換 df = pd.DataFrame(X, columns=housing.feature_names) df[‘Price’] = y print(“=== データセットの情報 ===”) print(f”データ数: {len(df)}”) print(f”特徴量数: {len(housing.feature_names)}”) print(f”\n特徴量の名前:”) for i, name in enumerate(housing.feature_names): print(f” {i+1}. {name}”)
=== データセットの情報 === データ数: 20640 特徴量数: 8 特徴量の名前: 1. MedInc(世帯収入の中央値) 2. HouseAge(住宅の築年数) 3. AveRooms(平均部屋数) 4. AveBedrms(平均寝室数) 5. Population(人口) 6. AveOccup(平均居住者数) 7. Latitude(緯度) 8. Longitude(経度)

モデルの訓練と評価

# データ分割 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # データの標準化 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 複数のモデルを訓練 models = { ‘Linear Regression’: LinearRegression(), ‘Ridge (alpha=1)’: Ridge(alpha=1.0), ‘Ridge (alpha=10)’: Ridge(alpha=10.0), ‘Lasso (alpha=0.01)’: Lasso(alpha=0.01), } results = [] for name, model in models.items(): # 訓練 model.fit(X_train_scaled, y_train) # 予測 y_test_pred = model.predict(X_test_scaled) # 評価 test_rmse = np.sqrt(mean_squared_error(y_test, y_test_pred)) test_mae = mean_absolute_error(y_test, y_test_pred) test_r2 = r2_score(y_test, y_test_pred) results.append({ ‘Model’: name, ‘Test RMSE’: test_rmse, ‘Test MAE’: test_mae, ‘Test R²’: test_r2 }) # 結果を表示 print(“=== モデルの性能比較 ===”) for res in results: print(f”{res[‘Model’]:<20}: RMSE={res['Test RMSE']:.4f}, MAE={res['Test MAE']:.4f}, R²={res['Test R²']:.4f}")
=== モデルの性能比較 === Linear Regression : RMSE=0.7456, MAE=0.5345, R²=0.6001 Ridge (alpha=1) : RMSE=0.7458, MAE=0.5347, R²=0.5999 Ridge (alpha=10) : RMSE=0.7465, MAE=0.5356, R²=0.5991 Lasso (alpha=0.01) : RMSE=0.7459, MAE=0.5348, R²=0.5998
💡 結果の解釈

性能:
・R² = 0.60 → データの変動の60%を説明(まあまあ良い)
・MAE ≈ 0.53(10万ドル単位)→ 平均的に約5万3千ドルの誤差

モデル比較:
・すべてのモデルがほぼ同等の性能
・このデータでは正則化の効果は小さい
・より複雑なモデル(ランダムフォレスト等)を試す価値あり

📝 練習問題

問題1 やさしい

評価指標の基本概念

以下の評価指標について、正しい説明をすべて選んでください。

  • A. MSEは誤差の二乗の平均である
  • B. RMSEは元のデータと異なる単位になる
  • C. MAEは外れ値に対してRMSEより頑健である
  • D. R²スコアは常に0〜1の範囲である
  • E. R²スコアが高いほど良いモデルである
正解:A、C、E

各選択肢の解説:

  • A(正解):MSE = (1/n) × Σ(yᵢ – ŷᵢ)² で、誤差の二乗の平均です。
  • B(誤り):RMSEはMSEの平方根なので、元のデータと同じ単位になります。これがRMSEの利点です。
  • C(正解):MAEは絶対値、RMSEは二乗を使うため、大きな誤差への影響はRMSEの方が大きくなります。
  • D(誤り):R²スコアは負の値になることがあります(モデルが平均値より悪い場合)。
  • E(正解):R²が1に近いほど、モデルがデータの変動をよく説明できています。
問題2 やさしい

MSEの計算

実際の値が [10, 20, 30, 40]、予測値が [12, 18, 32, 38] のとき、MSEを計算してください。

正解:4.0

計算手順:

実際の値: [10, 20, 30, 40] 予測値: [12, 18, 32, 38] 誤差: [10-12, 20-18, 30-32, 40-38] = [-2, 2, -2, 2] 誤差²: [4, 4, 4, 4] MSE = (4 + 4 + 4 + 4) / 4 = 16 / 4 = 4.0
# Pythonで確認 import numpy as np from sklearn.metrics import mean_squared_error y_true = np.array([10, 20, 30, 40]) y_pred = np.array([12, 18, 32, 38]) mse = mean_squared_error(y_true, y_pred) print(f”MSE: {mse}”) # 4.0
問題3 ふつう

評価指標の選択

以下の状況で、最も適切な評価指標を選んでください。

  1. 住宅価格の予測で、「平均的にいくらずれるか」を知りたい
  2. 外れ値が多いデータで、頑健な評価をしたい
  3. 異なるスケールの2つのデータセットでモデルの性能を比較したい
  4. 大きな誤差を特に避けたい(少しの誤差は許容できる)
正解:1. RMSE、2. MAE、3. R²、4. RMSE(またはMSE)

各状況の解説:

  • 1. RMSE:元のデータと同じ単位(円、ドルなど)なので、「平均的に〇〇円ずれる」と解釈しやすい。
  • 2. MAE:絶対値を使うため、外れ値の影響を受けにくい。RMSEは二乗するため、外れ値の影響が大きくなる。
  • 3. R²:0〜1の範囲に正規化されており、データのスケールに依存しないため、異なるデータセット間で比較可能。
  • 4. RMSE(またはMSE):二乗するため、大きな誤差に大きなペナルティを与える。大きな誤差を避けたい場合に適している。
問題4 ふつう

R²スコアの解釈

以下のモデルの結果から、最も良いモデルを選び、その理由を説明してください。

モデルA: 訓練R² = 0.95, テストR² = 0.70 モデルB: 訓練R² = 0.85, テストR² = 0.82 モデルC: 訓練R² = 0.75, テストR² = 0.74 モデルD: 訓練R² = 0.99, テストR² = 0.55
正解:モデルB

理由:

  • テストR²が最も高い(0.82):新しいデータに対する予測性能が最も良い
  • 訓練R²とテストR²の差が小さい(0.03):過学習していない

各モデルの分析:

  • モデルA:差が0.25と大きく、過学習の傾向がある
  • モデルB:差が0.03と小さく、テスト性能も高い ← 最良
  • モデルC:差は小さいが、全体的なR²がやや低い
  • モデルD:差が0.44と非常に大きく、明らかに過学習

ポイント:訓練R²だけでなく、テストR²と両者の差を確認することが重要です。

問題5 むずかしい

残差分析の解釈

残差プロットで以下のパターンが見られた場合、何が問題で、どう対処すべきか説明してください。

  1. 残差が予測値に対してU字型(曲線)のパターンを示す
  2. 残差が予測値が大きくなるにつれて広がる(扇形)
  3. 残差の中に明らかな外れ値が1つある
解答

1. U字型のパターン

  • 問題:モデルが非線形関係を捉えられていない。線形モデルでは不十分。
  • 対処:
    • 多項式特徴量を追加する(STEP 10で学習)
    • 非線形モデル(決定木、ランダムフォレストなど)を試す
    • 特徴量の変換(対数変換、平方根変換など)を検討

2. 扇形のパターン(不均一分散)

  • 問題:分散の不均一性(heteroscedasticity)。予測値が大きいほど誤差も大きい。
  • 対処:
    • 目的変数を対数変換する(log(y))
    • 重み付き最小二乗法を使う
    • Box-Cox変換を検討

3. 明らかな外れ値

  • 問題:データの入力ミス、異常なケース、または影響力の大きい点。
  • 対処:
    • 外れ値の原因を調査(データの誤りか、本当に異常なケースか)
    • データの誤りなら修正または除外
    • 異常なケースなら、別モデルで対応するか、頑健な回帰(Huber回帰など)を使う
    • MAEを評価指標として使う

📝 STEP 12 のまとめ

✅ このステップで学んだこと
  • MSE:大きな誤差を強調、学習に使われる
  • RMSE:MSEの平方根、元のデータと同じ単位
  • MAE:外れ値に頑健、直感的
  • R²スコア:相対的な性能、0〜1の範囲(通常)
  • 残差分析:モデルの問題点を見つける
  • 実践的な住宅価格予測プロジェクト
🎯 評価指標の選び方
状況 推奨指標
一般的な回帰問題 RMSE + R²
外れ値が多い MAE
大きな誤差を避けたい RMSE、MSE
異なるスケールのデータを比較
モデルの診断 残差分析
🚀 次のステップへ

Part 3の回帰分析が完了しました!次のPart 4では、分類問題とアンサンブル学習を学びます。

STEP 13では、基本的な分類アルゴリズムから始めます:ロジスティック回帰、k近傍法(KNN)、決定木。そして実践的なスパムメール判定プロジェクトに挑戦しましょう!

❓ よくある質問

Q1. MSEとRMSEのどちらを使えばいいですか?
報告や解釈:RMSEを使いましょう。元のデータと同じ単位なので、「平均的に〇〇円ずれる」と説明できます。

学習や最適化:MSEを使います。微分しやすく、多くの機械学習アルゴリズムの損失関数に使われています。
Q2. R²が0.6は良いスコアですか?
分野によって異なります:
・物理学など:0.99以上が期待される
・社会科学:0.5〜0.7でも良好
・株価予測など:0.3でも有用な場合がある

一般的な目安として、0.7以上なら「良い」、0.9以上なら「非常に良い」と言えますが、ビジネスの文脈や問題の複雑さを考慮して判断しましょう。
Q3. 残差分析は必ずやるべきですか?
Yes!特に重要な場面で:
・モデルの前提条件を確認したい
・モデルの改善点を探したい
・結果を報告・論文にまとめる

数値指標(RMSE、R²など)だけでは見つけられない問題(非線形性、不均一分散など)を発見できます。
Q4. 訓練データとテストデータで評価指標が大きく違う場合は?
過学習の可能性があります:
・訓練スコア > テストスコアの場合、モデルが訓練データに過適合している

対処法:
1. 正則化を追加(Ridge、Lasso、ElasticNet)
2. モデルの複雑さを下げる
3. より多くのデータを集める
4. 特徴量選択を行う
Q5. 複数の評価指標が矛盾する場合は?
ビジネス目的に基づいて優先順位を決めます:

例:RMSEは良いがMAEは悪い場合
→ 一部の大きな外れ値が問題
→ 外れ値が許容できるならRMSEで判断
→ 外れ値を避けたいならMAEを重視

複数の指標を組み合わせて総合的に判断することが重要です。
📝

学習メモ

機械学習入門 - Step 12

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE