Ridge回帰とLasso回帰とは?正則化の基礎・ビジネス活用例・Python実装を解説

はじめに

売上予測、需要予測、問い合わせ数予測、マーケティング分析などで、まず使われる代表的な手法の一つが線形回帰です。

線形回帰は、目的変数と説明変数の関係を直線的に表すシンプルなモデルです。

たとえば、広告費、Webサイト訪問数、営業件数、キャンペーン有無、季節性などを使って、売上を説明・予測する場面で使えます。

一方で、実務データでは、説明変数が増えたり、説明変数同士が強く相関したりすることがあります。

そのような場合、通常の線形回帰では、係数が不安定になったり、学習データにはよく合うものの未知データでは予測が外れたりすることがあります。

そこで使われる代表的な手法が、Ridge回帰とLasso回帰です。

どちらも、通常の線形回帰に「正則化」という考え方を加えた回帰分析手法です。

Ridge回帰は、係数が大きくなりすぎることを抑え、推定を安定させやすい手法です。

Lasso回帰は、一部の係数を0にしやすく、変数選択に近い使い方ができる手法です。

本記事では、Ridge回帰とLasso回帰の基礎、通常の線形回帰との違い、ビジネスでの活用例、Pythonによる簡易実装を解説します。

Ridge回帰とLasso回帰とは何か

Ridge回帰とLasso回帰は、どちらも正則化回帰と呼ばれる手法です。

正則化回帰とは、通常の回帰分析に対して、係数の大きさにペナルティを加える方法です。

簡単に言えば、モデルが学習データに合わせすぎないように、係数を大きくしすぎない工夫を入れるという考え方です。

手法正則化の種類主な特徴
通常の線形回帰なし誤差が小さくなるように係数を推定する
Ridge回帰L2正則化係数を全体的に小さくし、推定を安定させやすい
Lasso回帰L1正則化一部の係数を0にしやすく、変数選択に近い使い方ができる

Ridge回帰は、説明変数同士が相関している場合や、変数を完全には捨てずに多くの変数を少しずつ使いたい場合に向きやすい手法です。

Lasso回帰は、説明変数が多く、その中から一部の変数を絞り込みたい場合に向きやすい手法です。

ただし、どちらが常に優れているわけではありません。

データの性質、説明変数の相関、予測目的、説明目的、評価方法によって使い分ける必要があります。

通常の線形回帰で起きやすい問題

通常の線形回帰は、分かりやすく、解釈しやすい手法です。

しかし、実務データでは次のような問題が起きることがあります。

説明変数が多い

売上予測を考える場合、説明変数として次のようなものが候補になります。

  • 広告費
  • Webサイト訪問数
  • 問い合わせ数
  • 営業件数
  • キャンペーン有無
  • 割引率
  • 季節性
  • 競合施策
  • 店舗数
  • 在庫量

変数が増えるほど、モデルは学習データに細かく合わせやすくなります。

その結果、学習データではよく当たっているように見えても、未知データでは予測が外れやすくなることがあります。

これを過学習と呼びます。

説明変数同士が相関している

実務では、説明変数同士が強く相関していることがあります。

たとえば、広告費が増えるとWebサイト訪問数も増えるかもしれません。

営業件数が多い月は、キャンペーンも実施されているかもしれません。

このように説明変数同士が似た動きをしている状態では、通常の線形回帰で係数が不安定になることがあります。

この問題は、多重共線性と呼ばれます。

HoerlとKennardは、説明変数が直交していない、つまり互いに相関している場合に、通常の最小二乗推定が不安定になり得る問題を扱い、その対策としてRidge回帰を提案しました(Hoerl and Kennard, 1970)。

正則化とは何か

正則化とは、モデルが複雑になりすぎないように制約を加える考え方です。

線形回帰では、通常、予測値と実測値の誤差が小さくなるように係数を推定します。

正則化回帰では、そこに係数の大きさに対するペナルティを加えます。

イメージとしては、次のようになります。

手法最小化するもののイメージ
通常の線形回帰誤差
Ridge回帰誤差 + L2ペナルティ
Lasso回帰誤差 + L1ペナルティ

ここで重要なのが、alphaというパラメータです。

alphaは、正則化の強さを調整する値です。

alphaが大きいほど、係数を小さくする力が強くなります。

ただし、正則化を強くすれば必ずよいわけではありません。

強くしすぎると、モデルが単純になりすぎて、必要な関係まで表現できなくなることがあります。

そのため、実務では、複数のalphaを比較し、検証データや交差検証で適切な値を選びます。

scikit-learnのRidgeは、線形最小二乗の損失関数にL2ノルムによる正則化を加えるモデルとして説明されています。LassoはL1項によって正則化の強さを制御するモデルとして説明されています。

Ridge回帰:L2正則化で係数を安定させる

Ridge回帰は、L2正則化を使う回帰分析手法です。

L2正則化では、係数の二乗和に対してペナルティを加えます。

その結果、係数が大きくなりすぎることを抑えます。

Ridge回帰の特徴は、一部の変数を完全に捨てるというよりも、全体の係数をなだらかに小さくすることです。

そのため、説明変数が多く、それぞれが少しずつ目的変数に関係していそうな場合に使いやすい手法です。

たとえば、売上に対して、広告費、Web訪問数、営業件数、キャンペーン、季節性がそれぞれ少しずつ効いていると考えられる場合、Ridge回帰は候補になります。

特に、説明変数同士に相関がある場合、通常の線形回帰では係数が大きく振れやすくなることがあります。

Ridge回帰は、そのような係数の不安定さを抑えるために使われます。

ただし、Ridge回帰を使えば多重共線性が完全に解決するわけではありません。

あくまで係数推定を安定させやすくする手法として理解する必要があります。

Lasso回帰:L1正則化で変数を絞る

Lasso回帰は、L1正則化を使う回帰分析手法です。

L1正則化では、係数の絶対値の和に対してペナルティを加えます。

Lasso回帰の大きな特徴は、一部の係数が0になりやすいことです。

Tibshiraniは、Lassoを、係数の縮小と選択を同時に行う方法として提案しました(Tibshirani, 1996)。

係数が0になるということは、そのモデルの中では、その変数を使わないという意味になります。

そのため、Lasso回帰は、説明変数が多い場合に、変数選択に近い使い方ができます。

たとえば、売上予測で、広告費、Web訪問数、営業件数、キャンペーン、割引率、季節性、競合施策など、多くの候補変数があるとします。

Lasso回帰を使うと、その中で一部の係数が0になり、モデル上は使われない変数が出てくることがあります。

ただし、ここで注意が必要です。

Lasso回帰で係数が0になったからといって、その変数がビジネス上不要である、あるいは因果的に無関係であるとは言えません。

特に、説明変数同士の相関が強い場合、Lassoがどの変数を残すかは、データやalphaの設定に依存します。

したがって、Lasso回帰は便利な変数整理の手がかりになりますが、最終的な業務判断には、現場知見や追加分析が必要です。

Ridge回帰とLasso回帰の違い

Ridge回帰とLasso回帰の違いを整理すると、次のようになります。

観点Ridge回帰Lasso回帰
正則化L2正則化L1正則化
係数の動き全体的に小さくなる一部が0になりやすい
変数選択しにくいしやすい
向いている場面多くの変数を少しずつ使いたい変数を絞りたい
多重共線性係数を安定させやすい相関が強い変数群では選択が不安定になる場合がある
実務上の注意係数は0になりにくい0になった変数を「不要」と断定しない

ざっくり言えば、Ridge回帰は「係数を安定させる」手法、Lasso回帰は「変数を絞る」手法として理解すると分かりやすいです。

ただし、実務では、予測精度だけでなく、説明のしやすさ、運用可能性、使えるデータの制約も含めて判断する必要があります。

ビジネスでの活用例

Ridge回帰とLasso回帰は、ビジネスデータの初期分析で使いやすい手法です。

たとえば、次のような場面で活用できます。

業務課題活用イメージ
売上予測広告費、訪問数、営業件数、季節性から売上を予測する
需要予測過去販売数、価格、販促、曜日、天候などから需要を予測する
問い合わせ数予測Web流入、広告出稿、資料DL数などから問い合わせ数を予測する
顧客単価分析顧客属性、購買履歴、利用頻度から単価を分析する
マーケティング分析複数施策と成果指標の関係を整理する

特に、説明変数が多い場合や、似たような変数が多い場合に、Ridge回帰やLasso回帰は有用です。

ただし、これらの手法は、因果関係を自動的に示すものではありません。

たとえば、Lasso回帰で広告費の係数が残ったとしても、それだけで「広告費を増やせば売上が上がる」と断定することはできません。

ビジネスで使う場合は、予測のためのモデルなのか、施策判断のための仮説整理なのかを分けて考える必要があります。

PythonでRidge回帰・Lasso回帰を実装する

ここでは、架空の月次売上データを使って、通常の線形回帰、Ridge回帰、Lasso回帰を比較します。

このコードは公開可能な汎用サンプルであり、実案件データではありません。

scikit-learnでは、RidgeCVやLassoCVを使うことで、複数のalphaを比較しながらモデルを学習できます。RidgeCVは複数のalpha候補から交差検証により正則化強度を選ぶ用途で使われ、LassoCVも交差検証によってLassoのalphaを選択するクラスとして提供されています。

Python
import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

np.random.seed(42)

# 架空の月次売上データを作成
n = 120

df = pd.DataFrame({
    "ad_spend": np.random.normal(120, 25, n),
    "website_visits": np.random.normal(6000, 900, n),
    "sales_calls": np.random.normal(40, 8, n),
    "campaign": np.random.binomial(1, 0.3, n),
    "discount_rate": np.random.uniform(0.02, 0.15, n),
    "competitor_campaign": np.random.binomial(1, 0.25, n),
})

df["seasonality"] = np.sin(np.arange(n) * 2 * np.pi / 12)

df["sales"] = (
    300
    + 2.5 * df["ad_spend"]
    + 0.04 * df["website_visits"]
    + 5.0 * df["sales_calls"]
    + 80 * df["campaign"]
    + 500 * df["discount_rate"]
    - 60 * df["competitor_campaign"]
    + 50 * df["seasonality"]
    + np.random.normal(0, 80, n)
)

X = df.drop(columns=["sales"])
y = df["sales"]

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42
)

models = {
    "Linear Regression": Pipeline([
        ("scaler", StandardScaler()),
        ("model", LinearRegression())
    ]),
    "Ridge": Pipeline([
        ("scaler", StandardScaler()),
        ("model", RidgeCV(alphas=[0.1, 1.0, 10.0, 100.0]))
    ]),
    "Lasso": Pipeline([
        ("scaler", StandardScaler()),
        ("model", LassoCV(alphas=[0.01, 0.1, 1.0, 10.0], cv=5, max_iter=10000))
    ])
}

results = []

for name, model in models.items():
    model.fit(X_train, y_train)
    pred = model.predict(X_test)

    mse = mean_squared_error(y_test, pred)
    rmse = np.sqrt(mse)
    mae = mean_absolute_error(y_test, pred)
    r2 = r2_score(y_test, pred)

    results.append({
        "model": name,
        "RMSE": rmse,
        "MAE": mae,
        "R2": r2
    })

results_df = pd.DataFrame(results)
print(results_df)

coef_table = pd.DataFrame({"feature": X.columns})

for name, model in models.items():
    coef_table[name] = model.named_steps["model"].coef_

print(coef_table)

このコードでは、StandardScalerで説明変数を標準化しています。

標準化とは、変数の平均やばらつきをそろえる前処理です。

Ridge回帰やLasso回帰では、係数の大きさにペナルティを加えるため、変数の単位が大きく異なると、正則化の効き方が変わりやすくなります。

そのため、実装では標準化を行うことが一般的です。

また、RMSE、MAE、R²を使ってモデルを比較しています。

scikit-learnの最新ドキュメントでは、RMSEはroot_mean_squared_errorとして提供されていますが、上記コードでは互換性を考慮し、mean_squared_errorの平方根として計算しています。

指標意味
RMSE誤差を二乗して平均し、平方根を取った指標。大きな誤差を重く見る
MAE誤差の絶対値の平均。直感的に解釈しやすい
R²モデルが目的変数のばらつきをどの程度説明できているかを示す

係数比較表を見ると、通常の線形回帰、Ridge回帰、Lasso回帰で係数の大きさが変わることがあります。

Lasso回帰では、一部の係数が0になることもあります。

ただし、係数の大きさや0になったかどうかを、そのままビジネス上の重要性や因果関係として解釈しないよう注意が必要です。

実務で使う際の注意点

Ridge回帰とLasso回帰を実務で使う際は、いくつか注意点があります。

係数の解釈と因果関係を混同しない

回帰係数は、他の条件を一定としたときの関係を表します。

しかし、観測データから得られた係数は、必ずしも因果効果を意味しません。

たとえば、広告費と売上が同時に増えていたとしても、広告費が売上を増やしたとは限りません。

季節性、キャンペーン、営業活動、商品力など、別の要因が関係している可能性があります。

Lassoで残った変数を過信しない

Lasso回帰は、一部の係数を0にしやすい手法です。

そのため、変数選択に近い使い方ができます。

しかし、相関が強い変数が複数ある場合、どの変数が残るかはデータや設定に依存します。

Lassoで残った変数だけを見て、重要変数が確定したと考えるのは避けた方がよいです。

時系列データでは分割方法に注意する

売上や需要のデータは、時系列データであることが多いです。

この場合、ランダムにtrain/test splitを行うと、未来の情報が過去の学習に混ざるような評価になることがあります。

実務では、過去データで学習し、未来データで検証するような時系列分割が必要になる場合があります。

モデル選定よりもデータ設計が重要

Ridge回帰とLasso回帰のどちらを使うかは重要です。

しかし、それ以上に重要なのは、何を目的変数にするか、どの説明変数を使えるか、データの粒度はそろっているか、評価指標は業務目的に合っているかです。

手法名だけでなく、分析設計全体を整理する必要があります。

まとめ:手法名よりもデータ・目的・検証設計が重要

Ridge回帰とLasso回帰は、通常の線形回帰に正則化を加えた回帰分析手法です。

Ridge回帰はL2正則化を用い、係数が大きくなりすぎることを抑え、推定を安定させやすい手法です。

Lasso回帰はL1正則化を用い、一部の係数を0にしやすく、変数選択に近い使い方ができます。

ビジネスでは、売上予測、需要予測、問い合わせ数予測、マーケティング分析などに応用できます。

ただし、Ridge回帰やLasso回帰は万能ではありません。

正則化を入れれば必ず予測精度が上がるわけではなく、Lassoで選ばれた変数が必ず重要であるとも限りません。

実務では、手法名よりも、目的変数、説明変数、データ品質、評価方法、業務判断へのつなげ方を整理することが重要です。

自社データに回帰分析や正則化回帰が向いているか相談したい場合は、SCI総合研究所の KAMUSHIRUBE をご活用ください。

データの棚卸し、分析設計、モデル比較、可視化、レポート化まで進めたい場合は、RASHINRA もご検討ください。

お問い合わせは、お問い合わせフォーム よりご連絡ください。

参考文献