線形回帰の概要と目的
線形回帰は、説明変数(独立変数)から目的変数(従属変数)を予測するための基本的な統計手法です。例えば、広告費と売上高の関係性を直線で表現することで、将来的な売上を推定したり、影響要因の優先順位を把握したりすることが可能です。Pythonにおける機械学習ライブラリscikit-learnは、この手法を簡単に実装できることから、データ分析初心者でも導入しやすいツールとして注目されています。
線形回帰の基本仮定
線形回帰は正確な予測を保証するための前提条件(仮定)があります。この仮定が破れるとモデルの信頼性に影響を与えるため、確認する必要があります。
説明変数と目的変数の線形関係
線形回帰では説明変数と目的変数の関係を直線で表現します。この仮定が成り立たない場合(例:非線形な曲線的な関係)は、データの前処理や多項式回帰などで対応する必要があります。
例: 実際のデータと予測値の比較
| 実測値 | 予測値 | 違い |
|---|---|---|
| 100 | 95 | -5 |
| 200 | 198 | -2 |
| 300 | 295 | -5 |
上記のデータは、説明変数と目的変数がほぼ線形な関係にあることがわかります。
誤差項の正規性・同分散性
回帰モデルでは誤差(予測値と実測値の差)が正規分布に従い、分散が一定であることが前提です。誤差に偏りがある場合(例:データの広がりが左右非対称)、予測精度が低下する可能性があります。
仮定の破れによる影響
- 正規性の破れ → 統計的検定の信頼性に影響を与える可能性がある
- 同分散性の破れ(ホワイトノイズ) → 推定係数の標準誤差が増加する
データ前処理の実施手順
線形回帰モデルの精度は、データの品質に大きく依存します。以下の二点を意識して前処理を行うことで、信頼性のある分析結果を得られます。
欠損値対策
欠損データがある場合、以下のような方法で補完します。
- 削除: 無関係な列・行の場合は削除
- 補間: 数値型データは平均や中央値で補う
- 予測: 機械学習を用いて推定(例: KNN imputer)
実装コード例
|
1 2 3 4 5 |
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='mean') X_imputed = imputer.fit_transform(X) |
スケーリングの必要性
説明変数のスケールが大きく異なる場合、重み付けに偏りが生じる可能性があります。標準化(平均0・分散1)を行うことでこれを防ぎます。
線形回帰モデル構築の手順と注意点
線形回帰はシンプルなモデルであるが、正則化を施さない場合は過学習のリスクがあるとは限らない。データ量や特徴量の選び方によっては適切に動作するため、実装時には以下のような配慮が必要です。
データ分割とトレーニング
データを学習用(train)と評価用(test)に分割してからモデルを構築します。
実装コード例 (train_test_split)
|
1 2 3 4 |
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) |
モデルの実装と評価指標の解釈
LinearRegressionクラスは、単純な線形モデルを構築するためのクラスです。以下の手順で使用します。
- モデルインスタンスを作成
- 学習データを使ってfitメソッドで学習
- 評価データを使って予測
評価指標の解釈と比較
モデルの精度を評価する際、R²値とRMSEが代表的な指標です。それぞれの意味と使い分け方を確認しましょう。
R² vs RMSEの比較
| 指標 | 特徴 |
|---|---|
| R² | 予測の説明力(0〜1) |
| RMSE | 実際の誤差の大小 |
過学習への対策とその実装例
線形回帰は過学習に強くないが、正則化を施さないシンプルなモデルでは特定状況下で過学習の可能性がある。以下のような対策で回避できます。
正則化導入の検討
正則化とは、重みパラメータの大きさを抑えることで過学習を抑制する手法です。主に以下の2種類が利用されます。
- Ridge(リッジ回帰): 重みパラメータにL2正則化を適用
- Lasso(ラッソ回帰): 重みパラメータにL1正則化を適用(変数選択可能)
正則化の導入方法と特徴
| 手法 | 特徴 |
|---|---|
| Ridge | L2ノルムで重みをペナルティする(収縮させながら全ての係数を使う) |
| Lasso | L1ノルムで重みをペナルティし、不要な変数を0に近づける(特徴選択可能) |
データ量不足時の工夫
- クロスバリデーション: 学習データを複数分割して評価
- 合成データ生成: SMOTEなどの手法で補完
実装コード例 (交差検証)
|
1 2 3 4 5 |
from sklearn.model_selection import cross_val_score scores = cross_val_score(model, X, y, cv=5) print(f"交差検証スコア: {scores.mean()}") |
まとめと今後の展望
線形回帰は、シンプルで解釈性の高いモデルでありながらも、過学習に強くないという特性を持つ。しかし、適切な前処理や正則化技術を組み合わせることで、実用的な精度を得ることが可能です。将来的には非線形回帰やニューラルネットワークとの比較検討が重要です。
記事内のサンプルコードを実際に動かしてみてください。わからない点があればコメント欄でお気軽に質問ください