線形単回帰とは?初心者でもわかるシンプル解説!

1. 線形単回帰とは?

線形単回帰(Simple Linear Regression)は、1つのデータから1つの値を予測 する方法です。

例えば:

  • 水の量時間 から予測する
  • 売上広告費 から予測する
  • 気温標高 から予測する

このように 「X が変わると Y も変わる」 という関係を見つけて、未来の Y を予測するのが「線形単回帰」です。


2. 予測の式(y = ax + b)

線形単回帰の基本の形は 一次方程式 です:

y=ax+by = ax + b

  • x → 入力データ(例:広告費、時間)
  • y → 予測したいデータ(例:売上、水の量)
  • a(傾き)x が 1 増えたとき y がどれだけ増えるか
  • b(切片)x=0 のときの y の値(初期値)

たとえば:

yaml
売上 = 4 × 広告費 + 1000

この場合、広告費が 1 増えると売上が 4 増える ということになります。


3. ab を求める方法(最小二乗法)

データが与えられたとき、 a(傾き)と b(切片) を 最小二乗法 という方法で求めます。

💡 なぜ誤差を二乗するの?

  • 予測値と実際の値の差を足し合わせると プラスとマイナスが相殺される
  • 二乗すると どちらもプラスになり、誤差が正しく計算できる
  • 誤差の二乗の合計が最小 になる ab を求める

簡単に言うと、誤差をできるだけ小さくする直線を見つける ということです!


4. Pythonで線形単回帰を実装

scikit-learn を使えば、簡単に線形単回帰を実装できます!🚀

python
# 必要なライブラリをインポート
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

# ① データの作成(100個のデータ、特徴量1つ、ノイズあり)
X, y = make_regression(n_samples=100, n_features=1, noise=5.0, random_state=42)

# ② データを「学習用」と「テスト用」に分割
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

# ③ モデルを作成
model = LinearRegression()

# ④ 学習(train_X, train_y を使って直線を求める)
model.fit(train_X, train_y)

# ⑤ モデルの精度を確認(決定係数 R² を出力)
print(f"決定係数 R²: {model.score(test_X, test_y):.2f}")


5. コードの解説

make_regression() でデータを作成

通常、データはすでに持っていることが多いですが、今回は テスト用データを自動生成 しました。

python
X, y = make_regression(n_samples=100, n_features=1, noise=5.0, random_state=42)
  • n_samples=100 → 100個のデータを作成
  • n_features=1 → 1つの入力(X
  • noise=5.0 → 誤差(ランダムなズレ)を加える
  • random_state=42 → 乱数の固定(毎回同じデータを作るため)

train_test_split() でデータを分割

python
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
  • 訓練データ(train_X, train_y) → モデルを学習させるためのデータ
  • テストデータ(test_X, test_y) → モデルの精度を確認するためのデータ

通常、8:2 や 7:3 の割合 で分けます。


LinearRegression() で回帰モデルを作成

python
model = LinearRegression()

model という変数に 線形単回帰モデル を作ります。


fit() でモデルを学習

python
model.fit(train_X, train_y)

fit() メソッドで、train_X(入力)と train_y(出力)から a(傾き)と b(切片) を求めます。


score() でモデルの精度を確認

python
print(f"決定係数 R²: {model.score(test_X, test_y):.2f}")

💡 model.score() を使うと 決定係数 R² が出ます。

R2=1−∑(yi−yi^)2∑(yi−yˉ)2R^2 = 1 – \frac{\sum (y_i – \hat{y_i})^2}{\sum (y_i – \bar{y})^2}

📌 R² の意味

R² の値 予測の精度
1.0 完璧な予測
0.8 80%の精度で予測できる
0.5 50%の精度(微妙)
0.0 役に立たない
負の値 予測がひどすぎる

例えば R² = 0.85 なら「85%の精度で予測できている」ということです。


6. 実際に使える例

💡 売上と広告費の関係を予測する

python
import numpy as np

# 広告費(万円単位)
X = np.array([10, 20, 30, 40, 50]).reshape(-1, 1)

# 売上(万円)
y = np.array([100, 180, 260, 320, 400])

# モデルを作成・学習
model = LinearRegression()
model.fit(X, y)

# 売上の予測(広告費 35万円のとき)
広告費 = np.array([[35]])
予測売上 = model.predict(広告費)

print(f"広告費 35万円 のときの売上予測: {予測売上[0]:.2f} 万円")

実行結果

広告費 35万円 のときの売上予測: 290.00 万円

「広告費 35万円 のとき、売上は 290万円くらい になる」と予測できます!✨


7. まとめ

📌 線形単回帰のポイント

1つの変数 x から y を予測する方法
y = ax + b の式を求めて未来を予測
最小二乗法で誤差を最小化
Pythonの sklearn を使えば簡単に実装できる!

💡 売上や気温の予測、ビジネス分析など、あらゆる分野で使われる手法!
データ分析の第一歩として、ぜひ活用してみてください!🚀

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です