線形回帰とは?単回帰・重回帰で解けるビジネス課題とPython実装例

はじめに

売上が増えた理由、問い合わせ数が減った理由、広告費を増やした効果。

こうした問いは、多くの企業で日常的に発生します。

一方で、実務では「なんとなく広告が効いている気がする」「営業活動量が増えたから売上が伸びたのではないか」「Webアクセスが増えたのに問い合わせが増えていない」といった感覚的な議論で終わってしまうこともあります。

そこで役立つ初期分析の一つが、線形回帰です。

線形回帰は、売上や問い合わせ数などの結果と、広告費、Webアクセス数、営業活動量などの要因との関係を、直線的なモデルで整理する分析手法です。

本記事では、線形回帰を「高度なAIによる自動予測」ではなく、ビジネス上の要因と結果の関係を整理するための初期分析として解説します。

また、架空の広告・販促・売上データを使い、Pythonで単回帰・重回帰を実装する例も紹介します。

なお、本記事で扱うデータは架空データです。実在の企業・顧客・広告配信結果とは関係ありません。

線形回帰とは何か

線形回帰とは、目的変数と説明変数の関係を、直線的な式で表す分析手法です。

ここでいう目的変数とは、分析したい結果のことです。

ビジネスでは、たとえば以下が目的変数になります。

  • 売上
  • 問い合わせ数
  • 商談数
  • 来店数
  • 受注金額
  • 販売数量

一方、説明変数とは、その結果に関係していそうな要因です。

たとえば、売上を目的変数にする場合、以下のような項目が説明変数になります。

  • 広告費
  • Webサイト訪問数
  • 割引率
  • 営業訪問数
  • メール配信数
  • キャンペーン有無
  • 季節性
  • 競合施策の有無

線形回帰では、これらの関係を次のような形で表します。

Markdown
売上 = 切片 + 係数 × 広告費

説明変数が複数ある場合は、次のようになります。

Markdown
売上 = 切片 + 係数1 × 広告費 + 係数2 × Webアクセス数 + 係数3 × 営業活動量 + ...

Pythonで実装する場合、scikit-learnのLinearRegressionを使うと、通常最小二乗法による線形回帰を扱えます。scikit-learn公式ドキュメントでも、LinearRegressionはOrdinary Least Squares Linear Regressionとして説明されています。

単回帰と重回帰の違い

線形回帰には、大きく分けて単回帰重回帰があります。

種類説明ビジネス例
単回帰1つの説明変数で目的変数を説明するWeb広告費と売上の関係を見る
重回帰複数の説明変数で目的変数を説明する広告費、Webアクセス数、営業活動量から売上を見る

単回帰は、関係を直感的に理解しやすい点が特徴です。

たとえば、「Web広告費が増えると売上も増えているのか」を散布図と回帰直線で確認できます。

一方、ビジネスでは、売上が1つの要因だけで決まることは多くありません。

広告費だけでなく、Webサイト訪問数、営業活動量、割引率、季節性、競合施策など、複数の要因が関係します。

そのため、実務では重回帰を使って、複数要因を同時に見た方がよい場面があります。

ただし、重回帰を使えば原因がわかるわけではありません。

回帰分析は、変数同士の関係を整理する手法であり、因果関係を証明するものではありません。

線形回帰で考えやすいビジネス課題

線形回帰は、以下のようなビジネス課題の初期分析に向いています。

ビジネス課題目的変数説明変数の例
広告費と売上の関係売上Web広告費、チラシ費、キャンペーン有無
Web集客と問い合わせ問い合わせ数Webアクセス数、資料請求数、広告費
営業活動と商談数商談数訪問件数、架電数、メール送信数
店舗来店と売上店舗売上来店数、天候、曜日、販促有無
割引と販売数量販売数量割引率、価格、在庫、季節性
需要変動の説明出荷数過去需要、営業活動、季節性、イベント

線形回帰の良さは、結果を説明しやすいことです。

たとえば、回帰係数を見ることで、「この変数が増えたとき、目的変数がどの方向に変化していそうか」を確認できます。

ただし、説明しやすいことと、正確に予測できることは別です。

ビジネスで使う場合は、線形回帰を「施策を自動で決める手法」ではなく、「関係性を整理し、議論の材料を作る手法」として扱うのが現実的です。今回の例:広告・販促・Webアクセスと売上の関係を見る

本記事では、架空の月次マーケティングデータを使います。

目的変数は売上です。

説明変数として、以下を用意します。

変数名意味
web_ad_spendWeb広告費
flyer_spendチラシ・紙媒体の販促費
website_visitsWebサイト訪問数
discount_rate割引率
sales_calls営業接点数
competitor_campaign競合キャンペーン有無
seasonality季節性
sales売上

架空データのイメージは以下です。

monthweb_ad_spendflyer_spendwebsite_visitsdiscount_ratesales_callscompetitor_campaignsales
2024-011200005000082000.053501450000
2024-021500004000091000.083801630000
2024-0318000060000104000.104211720000
2024-041300007000087000.033101510000

このデータを使って、まず単回帰で「Web広告費と売上の関係」を確認します。

次に、重回帰で「広告費、販促費、Webアクセス数、割引率、営業接点数、競合キャンペーン、季節性」と売上の関係を確認します。

Pythonで単回帰を実装する

単回帰では、説明変数を1つだけ使います。

今回の例では、web_ad_spendを説明変数、salesを目的変数にします。

記事用のNotebookでは、まず散布図を作成し、広告費と売上の関係を可視化します。

Python
X_simple = df[["web_ad_spend"]]y = df["sales"]simple_model = LinearRegression()simple_model.fit(X_simple, y)print("切片:", simple_model.intercept_)print("回帰係数:", simple_model.coef_[0])print("決定係数 R2:", simple_model.score(X_simple, y))

単回帰では、散布図上に回帰直線を引くと、関係性を直感的に確認できます。

ただし、Web広告費と売上に関係が見えたとしても、それだけで「広告費が売上を増やした」とは言えません。

売上には、季節性、営業活動、キャンペーン、競合状況、商品構成、価格変更なども影響するためです。

Pythonで重回帰を実装する

重回帰では、複数の説明変数を使って目的変数を説明します。

今回の例では、以下の変数を使います。

Python
features = [ "web_ad_spend", "flyer_spend", "website_visits", "discount_rate", "sales_calls", "competitor_campaign", "seasonality"]

学習データとテストデータに分け、重回帰モデルを作成します。

Python
X = df[features]y = df["sales"]X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.25, random_state=42)multiple_model = LinearRegression()multiple_model.fit(X_train, y_train)

train_test_splitは、配列やpandas DataFrameなどを学習用・テスト用に分割するために使えます。scikit-learn公式ドキュメントでも、入力としてlists、numpy arrays、scipy-sparse matrices、pandas dataframesなどが使えると説明されています。

テストデータで評価することで、手元のデータに対してどの程度当てはまっているかを確認できます。

ただし、データ件数が少ない場合、学習データとテストデータの分け方によって評価値が不安定になることがあります。

モデルの当てはまりをどう評価するか

線形回帰では、モデルの当てはまりを見るために、以下のような指標を使います。

指標意味
R2目的変数の変動をどの程度説明できているかを見る指標
RMSE予測誤差の大きさを見る指標。大きな誤差の影響を受けやすい
MAE予測誤差の平均的な大きさを見る指標

scikit-learnでは、r2_scoremean_squared_errormean_absolute_errorなどの評価指標が提供されています。公式ドキュメントでも、回帰モデルの評価に使える指標として、mean_squared_error、mean_absolute_error、r2_scoreなどが挙げられています。

ただし、R2が高ければ実務上よいモデルとは限りません。

たとえば、過去データにはよく当てはまっていても、将来の施策判断には使いにくい場合があります。

また、説明変数の定義が曖昧だったり、外れ値が含まれていたり、季節性を考慮していなかったりすると、評価値だけでは判断できません。

回帰係数と変数の重要度をどう見るか

重回帰では、各説明変数に回帰係数が付きます。

回帰係数は、他の変数が一定であると仮定したとき、説明変数が1単位増えた場合に、目的変数がどの程度変化するかを表します。

たとえば、Web広告費の係数が正であれば、Web広告費が増えるほど売上も増える方向の関係があると解釈できます。

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

説明変数ごとに単位が異なるため、回帰係数の大きさをそのまま比較すると誤解しやすくなります。

たとえば、以下は単位が異なります。

変数単位
web_ad_spend
website_visits訪問数
discount_rate0〜1の割合
sales_calls件数
competitor_campaign0または1

このような場合は、説明変数を標準化してから回帰分析を行い、標準化係数を見ると比較しやすくなります。

標準化とは、各変数の平均を0、標準偏差を1にそろえる処理です。

Notebookでは、StandardScalerを使って説明変数を標準化し、標準化係数を棒グラフで可視化します。

ただし、標準化係数が大きいからといって、その変数が売上を直接増やしているとは限りません。

変数の重要度は、業務知識、施策タイミング、データ定義、現場の状況と合わせて解釈する必要があります。

残差を見る理由

残差とは、実測値と予測値の差です。

Markdown
残差 = 実測値 - 予測値

残差を見ることで、モデルがどのように外れているかを確認できます。

たとえば、以下のような場合は注意が必要です。

  • 特定の月だけ大きく外れている
  • 売上が高い月ほど過小予測している
  • 売上が低い月ほど過大予測している
  • 残差に季節的な偏りがある
  • キャンペーン月だけ誤差が大きい

残差に明らかな偏りがある場合、線形回帰だけでは説明しにくい構造があるかもしれません。

その場合は、説明変数を見直したり、季節性を加えたり、データ期間を分けたりする必要があります。

実務で使う際の注意点

線形回帰をビジネスデータに使う場合、いくつかの注意点があります。

回帰分析は因果関係を証明しない

広告費と売上に関係が見えても、広告費が売上を増やしたとは限りません。

売上が伸びる時期に広告費を増やしているだけかもしれません。

営業活動、季節性、商品力、価格変更、競合状況など、他の要因が影響している可能性があります。

変数定義を確認する

売上とは、税込売上なのか、税抜売上なのか、返品後の売上なのか。

問い合わせ数とは、フォーム送信数なのか、電話問い合わせも含むのか。

広告費とは、出稿費だけなのか、制作費も含むのか。

こうした定義が曖昧なまま分析すると、結果の解釈が難しくなります。

外れ値・欠損値を確認する

特別なキャンペーン月、休業月、システム障害、計測漏れなどがあると、回帰分析の結果に影響します。

外れ値を削除すべきか、別の変数として扱うべきか、注釈として残すべきかは、業務文脈に応じて判断します。

多重共線性に注意する

重回帰では、説明変数同士が強く相関していると、係数の解釈が不安定になることがあります。

たとえば、Web広告費が増えるとWebアクセス数も増える場合、どちらの変数が売上と関係しているのかを係数だけで判断しにくくなります。

このような状態を多重共線性と呼びます。

データ件数が少ない場合は慎重に扱う

月次データが12か月分しかない場合、重回帰で多くの説明変数を入れると、結果が不安定になりやすくなります。

実務では、データ件数、説明変数の数、分析期間を確認しながら進める必要があります。

Jupyter Notebookで確認できること

本記事用に、架空の広告・販促・売上データを使ったJupyter Notebookを用意しています。

Notebookでは、以下を確認できます。

  1. 架空の月次マーケティングデータ生成
  2. データ概要確認
  3. 売上と広告費の散布図
  4. 単回帰:広告費から売上を説明する
  5. 単回帰の回帰直線の可視化
  6. 重回帰:複数変数から売上を説明する
  7. 学習データ・テストデータに分割
  8. R2、RMSE、MAEで評価
  9. 実測値と予測値の比較
  10. 回帰係数の確認
  11. 標準化係数による変数重要度の確認
  12. 残差プロット
  13. 相関行列の確認
  14. 実務での注意点

Notebookはこちらです。

KAMUSHIRUBEで相談できること

SCI総合研究所株式会社では、技術・DX相談サービスとして、KAMUSHIRUBE を提供しています。

線形回帰は、売上、問い合わせ数、広告費、Webアクセス数などの関係を整理するための初期分析として使いやすい手法です。

一方で、自社データに適用するには、目的変数、説明変数、データ期間、外れ値、季節性、施策タイミングを整理する必要があります。

KAMUSHIRUBEでは、たとえば以下のような相談が可能です。

  • 自社データで回帰分析ができるか確認したい
  • 売上や問い合わせ数を目的変数にしてよいか相談したい
  • 広告費、Webアクセス、営業活動量など、どの項目を使うべきか整理したい
  • Excelで管理しているデータを分析に使える形にしたい
  • まず小さくPythonで分析を試したい
  • 回帰係数や変数重要度の見方を確認したい

回帰分析を始める前に、現在の課題と利用可能なデータを棚卸しすることが重要です。

RASHINRAで支援できること

SCI総合研究所株式会社では、戦略的データ活用・意思決定支援コンサルティングサービスとして、RASHINRA を提供しています。

RASHINRAでは、売上データ、広告費、問い合わせ履歴、営業活動データなどを活用し、どの要因が結果と関係しているのかを整理する支援を行います。

たとえば、以下のような支援が可能です。

  • データの棚卸し
  • 目的変数・説明変数の整理
  • 欠損値・外れ値の確認
  • 単回帰・重回帰分析
  • 標準化係数による変数比較
  • 可視化
  • レポート化
  • 意思決定に使える材料の整理

線形回帰は、単体で施策を決めるものではありません。

しかし、売上や問い合わせ数に関係していそうな要因を整理し、次に見るべきデータや検証すべき仮説を考える入口として有用です。

まとめ:線形回帰はビジネス要因を整理する初期分析になる

線形回帰は、売上、問い合わせ数、広告費、Webアクセス数、営業活動量などの関係を整理するための分析手法です。

単回帰では、1つの説明変数と目的変数の関係を確認します。

重回帰では、複数の説明変数と目的変数の関係を同時に確認します。

回帰係数を見ることで、変数が目的変数とどの方向に関係していそうかを確認できます。

また、標準化係数を使うことで、単位の異なる変数同士を比較しやすくなります。

ただし、回帰分析は因果関係を証明するものではありません。

変数重要度も、施策の優先順位を自動的に決めるものではありません。

重要なのは、データ定義、外れ値、欠損値、季節性、施策タイミング、業務知識を合わせて解釈することです。

自社データで線形回帰が有効か、どの業務テーマから始めるべきか相談したい場合は、SCI総合研究所の KAMUSHIRUBE をご活用ください。

売上データ、広告費、問い合わせ履歴、営業活動データなどを活用して、どの要因が結果と関係しているのかを整理したい場合は、RASHINRA もご検討ください。

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

参考文献