Contents
線形回帰とは?基礎から理解する数学的背景
線形回帰は、目的変数と説明変数の関係性を直線で表現する手法です。例えば、「家の価格=面積×単価+固定費」といったように、複雑なデータをシンプルな式に近似します。この「直線」を見つける過程が、最小二乗法と呼ばれるアルゴリズムにより実現されます。
最小二乗法の原理
最小二乗法は、予測値と実際の値の誤差(残差)を2乗した総和を最小化する方法です。数学的には、以下の式で表されます:
|
1 2 |
y = β0 + β1x + ε |
ここで、β0は切片、β1は傾き、εは誤差項です。この式の係数を求める際、誤差の2乗和が最小になる点を探します。
目的変数と説明変数の関係性
線形回帰では、「**予測したい値(目的変数)」と「その値に影響を与える特徴量(説明変数)」を明確にする必要があります。例として、以下のデータセットを考えます:
| 面積(m²) | 売価(百万円) |
|---|---|
| 50 | 120 |
| 60 | 140 |
| 70 | 160 |
この場合、「売価」が目的変数で、「面積」が説明変数です。線形回帰モデルは、これらのデータから「面積×単価+固定費」のような式を導き出します。
scikit-learnで始める簡単な回帰分析
scikit-learnは、機械学習の実装に特化したライブラリで、線形回帰モデルの構築が非常に容易です。以下に手順を示します。
データ準備の手順
- ライブラリのインポート:
import pandas as pd,from sklearn.model_selection import train_test_split - データ読み込み:CSVファイルやPandas DataFrameからデータを読み込みます。
- 特徴量と目的変数の指定:説明変数(X)と目的変数(y)に分割します。
モデル構築と予測の実装
以下は、scikit-learnでの線形回帰モデルの例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
from sklearn.linear_model import LinearRegression # データを訓練用とテスト用に分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # モデルの作成 model = LinearRegression() model.fit(X_train, y_train) # 予測を行う predictions = model.predict(X_test) |
このコードでは、トレーニングデータからモデルを学習させた後、テストデータに対して予測値を求めています。モデルの性能は、R²やMSEなどの指標で評価します。
statsmodelsで統計的な洞察を得る方法
statsmodelsは、線形回帰モデルの統計的側面を詳細に解析するためのライブラリです。scikit-learnとの最大の違いは、回帰係数やp値などの統計情報が自動的に出力されることです。
回帰係数の信頼区間確認
statsmodelsでは、以下のコードでモデルを構築できます:
|
1 2 3 4 5 6 7 8 9 |
import statsmodels.api as sm # 定数項(切片)を追加 X_with_const = sm.add_constant(X) # モデルの作成とフィット model_sm = sm.OLS(y, X_with_const).fit() print(model_sm.summary()) |
このコードにより、回帰係数の信頼区間やp値が表示されます。p値が0.05未満であれば、その説明変数は目的変数と統計的に有意な関係にあると判断できます。
p値とR²の解釈
以下に重要な指標についてまとめます:
|
1 2 3 4 5 |
| 指標 | 値 | 解釈 | |--------------|-------|--------------------------------------| | **p値** | 0.03 | 統計的に有意(95%信頼区間) | | **R²** | 0.87 | 説明変数が目的変数の87%を説明 | |
モデル評価指標の正しい使い方
線形回帰モデルを構築した後、その性能をR²やMSEなどの指標で評価する必要があります。
R²とMSEの比較
- R²(決定係数):1に近いほど、モデルがデータをよく説明していることを意味します。0未満だと、モデルは実際のデータよりもランダムな予測結果劣ることを示します。
- MSE(平均二乗誤差):予測値と実際の値の誤差の2乗の平均。数値が小さいほど精度が高いことを示します。
以下に例を示します:
|
1 2 3 4 5 |
| 指標 | 値 | 解釈 | |--------------|-----------|------------------------------| | **R²** | 0.89 | 説明変数が目的変数の89%を説明 | | **MSE** | 15.23 | 平均誤差は4.0(√15.23) | |
交差検証による信頼性確認
モデルの過学習を避けるために、K-fold交差検証を行うと良いです。以下に手順を示します:
- データをK個のグループに分割
- 各グループをテストデータとして使用し、残りを訓練データとしてモデルを構築
- すべてのグループで評価指標(R²やMSE)を算出し、平均値を比較
過学習と欠損値への対処法
線形回帰では、過学習やデータの欠損値がモデルの精度に大きく影響します。
正則化の基本
過学習は、モデルが訓練データに過剰にフィットしてしまう現象です。これを防ぐ方法として、L1(ラッソ)やL2(リッジ)正則化があります。
- L1正則化:回帰係数の絶対値をペナルティとして加算し、一部の係数を0にすることがあります。
- L2正則化:回帰係数の2乗をペナルティとして加算し、係数を全体的に小さくします。
シンプルな埋め合わせ手法
欠損値が存在する場合、以下のような方法で代替できます:
- 平均値/中央値による補完:数値データの場合、該当列の平均または中央値を代入します。
- 削除処理:欠損率が非常に高い場合は、該当行や列を削除する方法もあります。
実際に手を動かしてみよう
これまでに学んだ知識を活用し、自分のデータで実験してみましょう。以下に、提供するサンプルコードのダウンロード手順と適用例を紹介します。
サンプルコードのダウンロード方法
- GitHubや独自のリポジトリから、
linear_regression_sample.pyファイルを取得してください。 - 必要なライブラリ(scikit-learn, pandas)がインストールされていることを確認してください。
python linear_regression_sample.pyで実行し、結果を確認します。
自分のデータへの適用例
以下の手順で、自身のビジネスデータに適用できます:
- データをCSVファイル形式に変換
- scikit-learnで特徴量と目的変数に分割
- 線形回帰モデルを構築し、評価指標を確認
まとめ
- 線形回帰は、データの関係性を直線で表現する手法です。
- scikit-learnでは、簡単にモデル構築と予測が可能です。
- statsmodelsで統計情報(p値や信頼区間)を取得できる点が特徴です。
- R²やMSEなどの指標を使って、モデルの精度を評価しましょう。
- 過学習対策には正則化や交差検証が有効です。
CTA:サンプルコードをダウンロードして実際のデータで試してみましょう