線形回帰は、目的変数と説明変数の関係を直線モデルで近似し、説明変数から目的変数を予測するための代表的な手法です。モデルがシンプルで解釈しやすい一方、関係が非線形な場合は当てはまりが悪くなりやすく、外れ値の影響も受けやすいという性質があります。本記事では、線形回帰の基本的な考え方と仕組み、Pythonでの実装、モデル改善(正則化や検証を含む)の進め方、さらに販売予測・不動産価格推定・製造業の品質管理・マーケティング分析などの活用例までを整理します。
線形回帰とは、目的変数と説明変数の関係を直線モデルで表すデータ分析手法です。目的変数は「予測したい値(結果)」、説明変数は「目的変数に影響しうる要因(入力)」を指します。線形回帰では、説明変数の値に基づいて目的変数の値を推定できます。
線形回帰の考え方は、次の3点に整理できます。
線形回帰は幅広い分野で利用されています。代表例は次のとおりです。
| 分野 | 応用例 |
|---|---|
| 経済学 | 価格と需要の関係の分析 |
| 医学 | 投与量と効果の関係の分析 |
| 工学 | 材料特性と性能の関係の分析 |
| マーケティング | 広告費と売上の関係の分析 |
このように、線形回帰はデータ分析の基礎として頻繁に登場する手法です。
線形回帰には、次のような利点と欠点があります。
利点:
欠点:
線形回帰を使う際は、データの特性に合うかどうかを、利点と注意点の両方から確認することが重要です。必要に応じて前処理や変数選択、正則化などを組み合わせることで、モデルの安定性や予測精度を改善できます。
線形回帰は、説明変数の数により単回帰分析と重回帰分析に分かれます。単回帰分析は、1つの説明変数と1つの目的変数の関係を扱う手法です。重回帰分析は、複数の説明変数と1つの目的変数の関係を扱う手法で、複数要因の影響を同時に評価できます。
線形回帰では、一般に最小二乗法で係数(切片と傾き/重回帰では各係数)を推定します。最小二乗法は、実測値と予測値の差(残差)の二乗和が最小になるように係数を決める方法です。これにより、与えられたデータに最も当てはまる直線(または超平面)を求めます。
重回帰では行列計算で係数を推定するのが一般的で、実装はライブラリを使う方が安全です。
線形回帰モデルの当てはまりは、決定係数(R2)などで評価できます。決定係数は、モデルが目的変数のばらつきをどの程度説明できているかを表す指標で、一般に1に近いほど当てはまりが良いと解釈されます。
相関係数は、説明変数と目的変数の線形な関係の強さを表す指標で、-1〜1の範囲を取ります。ただし、相関が高いからといって因果関係があるとは限りません。
線形回帰の妥当性は、残差分析で確認できます。残差とは、実測値と予測値の差です。残差の振る舞いを確認することで、モデルの仮定が大きく崩れていないかを判断できます。
条件が満たされない場合は、変数変換、外れ値の扱いの見直し、モデルの変更(非線形モデルや正則化など)を検討します。適切な評価を行うことで、信頼性と予測精度を上げやすくなります。
Pythonで線形回帰を実装する場合は、NumPyなどの数値計算ライブラリや、scikit-learnのような機械学習ライブラリを使う方法が一般的です。NumPyで計算の仕組みを確認することもできますが、実務では前処理・検証・評価まで含めて扱いやすいライブラリを使う方が安全です。
以下は、単回帰の「係数と切片」の感覚をつかむための簡略例です(仕組みの理解用)。重回帰の厳密な推定や評価まで含める場合は、後述のscikit-learnを利用してください。
import numpy as np
# データの準備(説明用の簡略データ)
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])
# 係数(単回帰)
coef = np.cov(x, y, bias=True)[0, 1] / np.var(x)
intercept = y.mean() - coef * x.mean()
# 予測
new_x = 6
predicted_y = coef * new_x + intercept
scikit-learnは、線形回帰を含む機械学習アルゴリズムを幅広く提供するPythonライブラリです。学習・評価・予測を一通りの流れで扱いやすく、最初の選択肢になりやすいでしょう。
from sklearn.linear_model import LinearRegression
# データの準備
X = [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]]
y = [2, 4, 6, 8, 10]
# モデルの学習
model = LinearRegression()
model.fit(X, y)
# 評価(決定係数)
score = model.score(X, y)
print("決定係数: ", score)
# 予測
new_X = [[6, 12]]
predicted_y = model.predict(new_X)
TensorFlowは深層学習向けのフレームワークですが、線形回帰もモデルとして表現できます。線形回帰だけであればscikit-learnの方が簡潔ですが、同じ枠組みで回帰・分類・深層学習へ拡張したい場合は選択肢になります。
import tensorflow as tf
# データの準備
X = [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]]
y = [2, 4, 6, 8, 10]
# モデルの構築
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(2,))
])
model.compile(optimizer='sgd', loss='mean_squared_error')
# 学習
model.fit(X, y, epochs=100)
# 予測
new_X = [[6, 12]]
predicted_y = model.predict(new_X)
一般的な最小二乗の線形回帰(scikit-learnのLinearRegression)は、調整すべきハイパーパラメータが多いモデルではありません。一方、実務では過学習や係数の不安定さに対応するため、正則化付き回帰(Ridge/Lassoなど)を使い、正則化の強さを調整する場面がよくあります。
例えばRidge回帰では、主に次のような要素が調整対象になります。
以下は、scikit-learnでグリッドサーチを行う例です。実運用では、データ件数に応じてcv(分割数)を調整してください。
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
X = [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]]
y = [2, 4, 6, 8, 10]
param_grid = {
'alpha': [0.1, 1.0, 10.0],
'max_iter': [100, 500, 1000]
}
model = Ridge()
grid_search = GridSearchCV(model, param_grid, cv=3) # データ量に応じて調整
grid_search.fit(X, y)
print("Best parameters: ", grid_search.best_params_)
チューニングの目的は「数値をいじること」ではなく、未知データでの性能(汎化性能)を落とさず、安定して使えるモデルにすることです。評価指標(RMSEなど)と、分割方法(クロスバリデーション)をセットで考えることが重要です。
販売予測では、過去の販売実績を目的変数とし、価格、広告費、販促施策、季節要因などを説明変数としてモデル化するケースがあります。線形回帰を用いると、各要因が販売数量に与える影響を係数として把握しやすいため、価格設定や広告配分の検討材料になります。
不動産価格は、立地、面積、築年数、周辺環境など複数要因に影響を受けます。これらを説明変数として回帰モデルを作ることで、価格に効きやすい要因の把握や、推定価格の目安づくりに活用できます。意思決定に使う場合は、データの偏りや説明変数の設計に注意が必要です。
品質管理では、センサーデータや工程パラメータを説明変数に、品質指標(強度、寸法誤差など)を目的変数にする形で回帰分析を行うことがあります。線形回帰により、品質に影響しやすい工程要因の見える化ができ、工程条件の見直しや異常検知の補助に役立ちます。
マーケティングでは、広告費・価格・キャンペーン有無などと売上の関係を定量化するために線形回帰が使われます。係数の解釈により、施策の影響の方向性や大きさを把握しやすい点がメリットです。ただし、相関と因果を混同しないこと、データ収集の条件(期間・季節性・外部要因)を揃えることが重要です。
線形回帰は、要因と結果の関係を「係数」という形で確認できるため、仮説の整理や次の打ち手の検討に向いています。分析結果を意思決定に使う場合は、評価・検証とあわせて、前提(データの偏りや取りこぼし)がないかも確認しておくと安心です。
線形回帰は、目的変数と説明変数の関係を直線モデルで表し、説明変数から目的変数を予測する手法です。シンプルで解釈しやすく、計算コストも低い一方で、非線形な関係を捉えにくく、外れ値や多重共線性の影響を受けやすい点には注意が必要です。PythonではNumPy、scikit-learn、TensorFlowなどで実装できますが、実務では学習・評価・検証をセットで回し、目的に合った形で運用することが重要になります。販売予測、不動産価格の推定、製造業の品質管理、マーケティング分析など、幅広い領域で活用されるため、まず押さえておきたい基本手法の一つです。
目的変数と説明変数の関係を直線で表し、説明変数から目的変数を予測する手法です。
説明変数が1つなら単回帰、複数なら重回帰で、重回帰は複数要因の影響を同時に扱います。
販売予測や価格推定、品質要因の分析、施策効果の把握など、要因と結果の関係を定量化したい場面で役立ちます。
他の条件が同じと仮定したとき、説明変数が1増えた場合に目的変数がどれだけ変わるかの目安を示します。
モデルが目的変数のばらつきをどれだけ説明できているかの指標で、一般に1に近いほど当てはまりが良いです。
最小二乗法は誤差を二乗して評価するため、外れ値の影響が大きくなり、係数が引っ張られやすいからです。
説明変数同士の相関が強いと係数推定が不安定になり、解釈や予測がぶれやすくなります。
R²などの指標に加え、残差の偏りや分散の崩れがないかを確認し、仮定が大きく崩れていないかを見ます。
正則化付き回帰(Ridge/Lassoなど)で正則化の強さを調整し、過学習や係数の不安定さを抑えることを指します。
まずはscikit-learnのLinearRegressionが一般的で、学習・評価・予測を一通り簡潔に実装できます。