単回帰分析で売上を予測

データサイエンスの基礎

日付:2025年2月12日

広告費と売上の関係を分析し、線形回帰を用いて売上を予測する方法をPythonで解説します。データの可視化から未来予測までの流れを実践的に紹介。

目 次

1. はじめに

データサイエンスでは、データを収集し、可視化・分析して未来を予測することが重要です。特に、回帰分析(Regression Analysis) は、データの関係性を明らかにし、将来の値を予測する強力な手法です。

本記事では、広告費と売上の関係を例に、Python を使って データ収集 → 可視化 → 回帰分析 → 未来予測 のプロセスを実践的に解説します。

使用するライブラリ:

  • numpy(数値計算)
  • pandas(データ処理)
  • matplotlibseaborn(データの可視化)
  • sklearn(回帰分析)

2. データ収集

まず、100 件の広告費と売上データをシミュレーションし、データセットを作成します。

PYTHON
import pandas as pd import numpy as np # 再現性を確保 np.random.seed(42) # 広告費(10万円~200万円の範囲でランダムに生成) ad_costs = np.random.uniform(10, 200, 100) # 売上 = 50 + 3.5 * 広告費 + ノイズ sales = 50 + 3.5 * ad_costs + np.random.normal(0, 20, 100) # ノイズを追加 # DataFrame作成 data = pd.DataFrame({'Ad Cost (10K JPY)': ad_costs, 'Sales (10K JPY)': sales})
広告費 (1 万円)売上 (1 万円)
81.16335.81
190.64711.25
149.08573.61
123.75443.36
39.64184.36

3. データの可視化

まず、広告費と売上の関係を散布図で可視化します。

PYTHON
import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10, 6)) sns.scatterplot(x=data['Ad Cost (10K JPY)'], y=data['Sales (10K JPY)']) plt.xlabel("Ad Cost (10K JPY)") plt.ylabel("Sales (10K JPY)") plt.title("Relationship Between Ad Cost and Sales") plt.show()
広告費と売上の関係

図の説明

  • 横軸(Ad Cost)は広告費(10K JPY = 1 万円単位)
  • 縦軸(Sales)は売上(10K JPY = 1 万円単位)
  • 点が各データポイントを示しており、広告費が増えるほど売上も増える傾向が見られる。

4. 回帰分析(単回帰)

単回帰分析とは

単回帰分析(Simple Linear Regression)は、1 つの説明変数を使って、1 つの目的変数を予測する手法です。
今回は、広告費(Ad Cost)を説明変数とし、売上(Sales)を目的変数として、広告費が売上に与える影響をモデル化します。

回帰分析の数式は次のようになります。

PYTHON
Sales = beta_0 + beta_1 * Ad Cost + error
  • Sales:目的変数(売上)
  • Ad Cost:説明変数(広告費)
  • beta_0:切片(広告費が 0 のときの売上)
  • beta_1:回帰係数(広告費が 1 増えたときの売上の増加量)
  • error:誤差(データのばらつき)

scikit-learn を使った単回帰分析

Python の scikit-learn を使い、広告費と売上の関係をモデル化します。

PYTHON
from sklearn.linear_model import LinearRegression import numpy as np import matplotlib.pyplot as plt # 説明変数と目的変数を指定 X = data[['Ad Cost (10K JPY)']] y = data['Sales (10K JPY)'] # モデルの作成と学習 model = LinearRegression() model.fit(X, y) # 回帰係数と切片を取得 coef = model.coef_[0] intercept = model.intercept_ # 散布図と回帰直線の可視化 plt.figure(figsize=(10, 6)) plt.scatter(X, y, label="Actual Data") plt.plot(X, model.predict(X), color='red', label=f"Regression Line (y = {coef:.2f}x + {intercept:.2f})") plt.xlabel("Ad Cost (10K JPY)") plt.ylabel("Sales (10K JPY)") plt.title("Linear Regression Model Visualization") plt.legend() plt.show()
予測結果

図の説明

  • 横軸(Ad Cost)は広告費(10K JPY = 1 万円単位)
  • 縦軸(Sales)は売上(10K JPY = 1 万円単位)
  • 赤い直線が回帰直線で、広告費と売上の関係を示している。
  • データポイントの中心を通っており、モデルがデータの傾向を適切に捉えている。

scikit-learn を使って、単回帰分析を実行し、広告費と売上の関係を数式化します。

PYTHON
from sklearn.linear_model import LinearRegression # 説明変数と目的変数を指定 X = data[['Ad Cost (10K JPY)']] y = data['Sales (10K JPY)'] # モデルの作成と学習 model = LinearRegression() model.fit(X, y) # 回帰係数と切片を表示 print(f"回帰係数(傾き): {model.coef_[0]:.2f}") print(f"切片(y軸との交点): {model.intercept_:.2f}")

この回帰モデルの数式は次のようになります。

売上=β0+β1×広告費\text{売上} = \beta_0 + \beta_1 \times \text{広告費}

ここで、

  • β1\beta_1(傾き)は model.coef*[0]
  • β0\beta_0(切片)は model.intercept*

5. 未来予測

新しい広告費のデータに対して売上を予測します。

PYTHON
# 予測したい広告費のリスト(万円) new_ad_costs = np.array([[250], [300], [350], [400], [450], [500]]) # 売上の予測 predicted_sales = model.predict(new_ad_costs) # 結果を表示 for cost, sales in zip(new_ad_costs.flatten(), predicted_sales): print(f"広告費 {cost} 万円の場合、予測売上は {sales:.2f} 万円")

予測結果:

  • 広告費 250 万円 → 売上 約 918 万円
  • 広告費 300 万円 → 売上 約 1090 万円
  • 広告費 350 万円 → 売上 約 1263 万円
  • 広告費 400 万円 → 売上 約 1435 万円
  • 広告費 450 万円 → 売上 約 1608 万円
  • 広告費 500 万円 → 売上 約 1780 万円

6. まとめ

回帰分析の流れを学んだ

  • データ収集(広告費と売上のデータをシミュレーション)
  • 可視化(データの関係をグラフで確認)
  • 回帰分析(線形回帰を適用し、数式を導出)
  • 未来予測(新しい広告費データから売上を予測)
  • 可視化(回帰直線を描画)

ビジネスへの応用例

  • マーケティング → 広告費をどれくらい増やせば売上がどれくらい伸びるか?
  • 需要予測 → 顧客の購買傾向を分析し、最適な在庫数を決定
  • 売上予測 → 来月の売上をデータから推定
シリーズ一覧データサイエンスの基礎
4
タイトルリンク
第 1 回「データサイエンス」について詳 細
第 2 回単回帰分析で売上を予測この記事
第 3 回K-meansによるデータ分類詳 細
第 4 回対数関数とデータスケーリング詳 細