STEP 10:単回帰分析の実践

💻 STEP 10: 単回帰分析の実践

ExcelとPythonで実際に回帰分析をやってみよう

📋 このステップで学ぶこと

  • Excelでの単回帰分析(散布図、近似曲線、LINEST関数)
  • Excelの「分析ツール」を使った詳細分析
  • Pythonでの単回帰分析(scikit-learn、statsmodels)
  • 回帰式の読み方と結果の解釈
  • 実データを使った予測の実践

学習時間の目安:3.5時間

準備するもの:Excel、Google Colab(無料)

📊 1. サンプルデータの準備

今回使用するデータ

ある小売店の広告費と売上のデータを使います。広告費(説明変数X)から売上(目的変数Y)を予測する単回帰分析を行います。

📋 サンプルデータ(12ヶ月分)
広告費(万円) 売上(万円)
1月50310
2月60370
3月70420
4月55330
5月80480
6月90530
7月85500
8月75450
9月65390
10月70430
11月95560
12月100590

Excelへのデータ入力

【Excelでのデータ入力方法】 1. 新しいExcelファイルを開く 2. 以下のようにデータを入力: A列:月(1月、2月、…) B列:広告費(50、60、70、…) C列:売上(310、370、420、…) 3. 見出し行を作成: A1:月 B1:広告費(万円) C1:売上(万円)

📈 2. Excelでの単回帰分析

方法1:散布図と近似曲線(最も簡単)

【散布図と近似曲線の作成手順】 ステップ1:散布図を作成 1. 広告費(B列)と売上(C列)のデータを選択(B1:C13) 2. 「挿入」タブ → 「グラフ」 → 「散布図」を選択 3. 散布図が表示される ステップ2:近似曲線を追加 1. グラフ上のデータ点をクリック 2. 右クリック → 「近似曲線の追加」を選択 3. 右側のパネルで以下を設定: ・種類:「線形」を選択 ☑ グラフに数式を表示する ☑ グラフにR二乗値を表示する 4. OK 結果:グラフ上に以下が表示される y = 5.9835x + 21.061 R² = 0.9542 これが回帰式です!

回帰式の読み方

📌 y = 5.9835x + 21.061 の意味

y(売上)= 5.9835 × x(広告費)+ 21.061

1. 切片(21.061):
広告費が0円の時、売上は約21万円
→ 広告なしでも基本的な売上がある

2. 傾き(5.9835):
広告費が1万円増えると、売上が約6万円増える
→ 広告のROI(投資対効果)は約6倍!

3. R²(0.9542):
売上の変動の95.4%が広告費で説明できる
→ とても精度の高いモデル!(STEP 12で詳しく学習)

予測の実践

💡 実際に予測してみよう

質問:来月、広告費を110万円使う予定です。売上はいくらになるでしょうか?

計算:

売上 = 5.9835 × 110 + 21.061
  = 658.185 + 21.061
  = 679.246万円

結論:広告費110万円の場合、売上は約679万円と予測されます。

方法2:LINEST関数(より詳細)

【LINEST関数の使い方】 LINEST関数は、回帰分析の詳細な統計情報を返します。 基本構文: =LINEST(既知のY, 既知のX, 定数, 統計) 実践: 1. セルE2に以下を入力: =LINEST(C2:C13, B2:B13, TRUE, TRUE) 2. E2:F6の範囲を選択 3. 数式バーで「Ctrl + Shift + Enter」を押す (配列数式として入力) 4. 結果が表示される: E2:傾き(5.9835) F2:切片(21.061) E3:傾きの標準誤差 F3:切片の標準誤差 E4:R²(0.9542) …など

方法3:分析ツール(最も詳細)

【Excelの分析ツールを使う方法】 ステップ1:分析ツールを有効化 1. 「ファイル」→「オプション」→「アドイン」 2. 「管理:Excelアドイン」→「設定」 3. ☑ 分析ツールにチェック → OK ステップ2:回帰分析を実行 1. 「データ」タブ → 「データ分析」 2. 「回帰」を選択 → OK 3. 以下を設定: ・入力Y範囲:C1:C13(売上のデータ、見出し含む) ・入力X範囲:B1:B13(広告費のデータ、見出し含む) ☑ ラベル(見出しを含む場合) ☑ 残差(後で使う) ☑ 残差プロット(後で使う) 4. OK 結果:新しいシートに詳細な分析結果が出力される

分析ツールの結果の読み方

📊 重要な数値の見方

1. 回帰統計

・重相関R:0.9768(相関係数)
・重決定R²:0.9542(決定係数) ← 精度の指標
・補正R²:0.9496(調整済みR²)

2. 係数

項目 係数 意味
切片 21.061 広告費0円の時の売上
広告費(万円) 5.9835 広告費1万円増で売上6万円増

3. P値(有意性)

・広告費のP値:0.0000(ほぼ0)
→ p < 0.05なので、統計的に有意!
→ 広告費と売上の関係は偶然ではない(STEP 17で詳しく学習)

🐍 3. Pythonでの単回帰分析

Google Colabの準備

【Google Colabの開き方】 1. ブラウザでGoogle Colabにアクセス https://colab.research.google.com/ 2. 「ファイル」→「ノートブックを新規作成」 3. 準備完了! ※Googleアカウントが必要(無料)

ライブラリのインポート

# ============================================ # ライブラリのインポート # ============================================ # pandas: データを表形式で扱うライブラリ import pandas as pd # numpy: 数値計算ライブラリ(配列操作、数学関数) import numpy as np # matplotlib: グラフ描画ライブラリ import matplotlib.pyplot as plt # seaborn: 美しいグラフを簡単に作成できるライブラリ import seaborn as sns # ============================================ # 回帰分析用のライブラリ # ============================================ # sklearn.linear_model.LinearRegression: # → シンプルに回帰分析を実行するクラス # → 初心者向け、予測に使いやすい from sklearn.linear_model import LinearRegression # sklearn.metrics: モデルの評価指標を計算 # r2_score: 決定係数R²を計算 # mean_squared_error: 平均二乗誤差を計算 from sklearn.metrics import r2_score, mean_squared_error # statsmodels: 統計分析用ライブラリ # → p値、信頼区間など詳細な統計情報を取得 # → 統計的な検定が必要な場合に使用 import statsmodels.api as sm # 日本語フォント設定(グラフで日本語を表示するため) plt.rcParams[‘font.sans-serif’] = [‘Arial Unicode MS’, ‘Yu Gothic’] plt.rcParams[‘axes.unicode_minus’] = False print(“ライブラリの読み込み完了!”)

データの作成

# ============================================ # サンプルデータの作成 # ============================================ # ビジネスシナリオ: # 「広告費を増やすと売上がどれくらい増えるか?」 # → 12ヶ月分のデータで分析 data = { ‘月’: [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’, ‘7月’, ‘8月’, ‘9月’, ’10月’, ’11月’, ’12月’], ‘広告費’: [50, 60, 70, 55, 80, 90, 85, 75, 65, 70, 95, 100], # 単位:万円 ‘売上’: [310, 370, 420, 330, 480, 530, 500, 450, 390, 430, 560, 590] # 単位:万円 } # pd.DataFrame(): 辞書からデータフレームを作成 df = pd.DataFrame(data) print(“【作成したデータ】”) print(df) print(f”\nデータ数: {len(df)}件”)
# 出力例 【作成したデータ】 月 広告費 売上 0 1月 50 310 1 2月 60 370 2 3月 70 420 3 4月 55 330 4 5月 80 480 5 6月 90 530 6 7月 85 500 7 8月 75 450 8 9月 65 390 9 10月 70 430 10 11月 95 560 11 12月 100 590 データ数: 12件

散布図の作成

# ============================================ # 散布図の作成 # ============================================ # なぜ最初に散布図を作るか? # → 回帰分析の前に、データの傾向を視覚的に確認 # → 「直線で近似できそうか」を判断 # → 外れ値(異常なデータ)がないかチェック plt.figure(figsize=(10, 6)) # plt.scatter(): 散布図を描画 # df[‘広告費’]: X軸(説明変数) # df[‘売上’]: Y軸(目的変数) # s=100: 点のサイズ # alpha=0.6: 透明度 plt.scatter(df[‘広告費’], df[‘売上’], s=100, alpha=0.6, color=’blue’, label=’実際のデータ’) plt.xlabel(‘広告費(万円)’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(‘広告費と売上の関係’, fontsize=14) plt.grid(True, alpha=0.3) plt.legend() plt.show() # ============================================ # 散布図から読み取れること # ============================================ # → 右上がりの傾向 = 正の関係がある # → 直線で近似できそう → 単回帰分析が適切

方法1:scikit-learn(シンプル)

# ============================================ # scikit-learnで回帰分析 # ============================================ # scikit-learnの特徴: # → コードがシンプル # → 予測に便利(predict()メソッド) # → 機械学習の入門として最適 # ============================================ # ステップ1: データの準備 # ============================================ # X: 説明変数(原因となる変数) # y: 目的変数(予測したい変数) # # 重要: scikit-learnでは、Xは2次元配列が必要 # df[[‘広告費’]]: 2次元(列名をリストで指定) # df[‘広告費’]: 1次元(NG) # # .values: DataFrameをNumPy配列に変換 X = df[[‘広告費’]].values # 2次元配列 [[50], [60], [70], …] y = df[‘売上’].values # 1次元配列 [310, 370, 420, …] print(f”Xの形状: {X.shape}”) # (12, 1) = 12行1列 print(f”yの形状: {y.shape}”) # (12,) = 12個の値 # ============================================ # ステップ2: モデルの作成 # ============================================ # LinearRegression(): 線形回帰モデルのインスタンスを作成 # → この時点ではまだ計算していない(空の箱を用意した状態) model = LinearRegression() # ============================================ # ステップ3: モデルの学習(フィッティング) # ============================================ # .fit(X, y): データからモデルを学習 # → 「最小二乗法」で最適な傾きと切片を計算 # → データに最もフィットする直線を見つける # # 最小二乗法とは? # → 実際の値と予測値の差(誤差)の2乗の合計が # 最小になるように直線を決める方法 model.fit(X, y) # ============================================ # ステップ4: 回帰式の係数を取得 # ============================================ # model.intercept_: 切片(y軸との交点) # → 広告費が0円の時の予測売上 # model.coef_: 傾き(回帰係数)の配列 # → model.coef_[0]で最初の係数を取得 切片 = model.intercept_ 傾き = model.coef_[0] print(“\n【回帰式】”) print(f”売上 = {傾き:.4f} × 広告費 + {切片:.4f}”) print(f”\n傾きの解釈: 広告費が1万円増えると、売上は約{傾き:.1f}万円増える”) print(f”切片の解釈: 広告費0円の時の売上は約{切片:.1f}万円(理論値)”) # ============================================ # ステップ5: R²(決定係数)を計算 # ============================================ # model.predict(X): 学習したモデルで予測 # → 各広告費に対する予測売上を計算 y_pred = model.predict(X) # r2_score(実際の値, 予測値): R²を計算 # → 0〜1の値(1に近いほど当てはまりが良い) # → 「売上の変動のうち、広告費で説明できる割合」 r2 = r2_score(y, y_pred) print(f”\nR²(決定係数): {r2:.4f}”) print(f”→ 売上の変動の{r2*100:.2f}%が広告費で説明できる”) print(f”→ 残りの{(1-r2)*100:.2f}%は他の要因(季節、競合など)”)
# 出力例 Xの形状: (12, 1) yの形状: (12,) 【回帰式】 売上 = 5.9835 × 広告費 + 21.0606 傾きの解釈: 広告費が1万円増えると、売上は約6.0万円増える 切片の解釈: 広告費0円の時の売上は約21.1万円(理論値) R²(決定係数): 0.9542 → 売上の変動の95.42%が広告費で説明できる → 残りの4.58%は他の要因(季節、競合など)

方法2:statsmodels(詳細)

# ============================================ # statsmodelsで詳細な分析 # ============================================ # statsmodelsの特徴: # → p値、信頼区間などの統計情報が得られる # → 係数が統計的に有意かどうか判定できる # → レポートや論文に使う場合に最適 # ============================================ # ステップ1: データの準備(定数項を追加) # ============================================ # sm.add_constant(): データに定数項(切片用の列)を追加 # # なぜ定数項が必要か? # → statsmodelsは切片を自動で計算しない # → 切片を計算するには「常に1」の列が必要 # → y = ax + b の b を計算するため X_with_const = sm.add_constant(df[‘広告費’]) y = df[‘売上’] print(“【定数項を追加したX】”) print(X_with_const.head()) # const列(全て1.0)が追加される # ============================================ # ステップ2: モデルの作成と学習 # ============================================ # sm.OLS(): 最小二乗法(Ordinary Least Squares)モデルを作成 # 第1引数: 目的変数(y) # 第2引数: 説明変数(X) model_sm = sm.OLS(y, X_with_const) # .fit(): モデルを学習(フィッティング) results = model_sm.fit() # ============================================ # ステップ3: 詳細な結果を表示 # ============================================ # .summary(): 回帰分析の詳細レポートを生成 print(results.summary())
# 出力例(一部抜粋) OLS Regression Results ============================================================================== Dep. Variable: 売上 R-squared: 0.954 Model: OLS Adj. R-squared: 0.950 Method: Least Squares F-statistic: 208.4 Date: Mon, 17 Nov 2025 Prob (F-statistic): 3.64e-08 ============================================================================== coef std err t P>|t| [0.025 0.975] —————————————————————————— const 21.0606 20.748 1.015 0.334 -24.837 66.958 広告費 5.9835 0.415 14.436 0.000 5.075 6.892 ============================================================================== 【結果の読み方】 ・R-squared: 0.954 → 決定係数(モデルの当てはまり) ・coef: 係数(constが切片、広告費が傾き) ・P>|t|: p値(0.05未満なら統計的に有意) → 広告費のp値は0.000 → 統計的に有意! ・[0.025, 0.975]: 95%信頼区間 → 傾きは5.075〜6.892の範囲にあると95%確信できる

散布図に回帰直線を追加

# ============================================ # 散布図と回帰直線を一緒に表示 # ============================================ # なぜ回帰直線を描くか? # → モデルがデータにどれくらいフィットしているか視覚的に確認 # → プレゼンや報告書で分かりやすく説明 plt.figure(figsize=(10, 6)) # 実際のデータ(散布図) plt.scatter(df[‘広告費’], df[‘売上’], s=100, alpha=0.6, color=’blue’, label=’実際のデータ’) # ============================================ # 回帰直線の描画 # ============================================ # np.linspace(start, end, num): 等間隔の数値を生成 # → X軸の最小値から最大値まで100点を生成 # → 滑らかな直線を描くため x_line = np.linspace(df[‘広告費’].min(), df[‘広告費’].max(), 100) # 回帰式 y = 傾き × x + 切片 で予測値を計算 y_line = 傾き * x_line + 切片 # plt.plot(): 線グラフを描画 # ‘r–‘: 赤色(r)の破線(–) plt.plot(x_line, y_line, ‘r–‘, linewidth=2, label=’回帰直線’) # グラフの設定 plt.xlabel(‘広告費(万円)’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(f’広告費と売上の回帰分析(R² = {r2:.4f})’, fontsize=14) plt.grid(True, alpha=0.3) plt.legend() # ============================================ # 回帰式をグラフ上に表示 # ============================================ # plt.text(): グラフ上にテキストを配置 # 第1,2引数: テキストの位置(x, y座標) # bbox: テキストの背景ボックスの設定 equation_text = f’y = {傾き:.4f}x + {切片:.4f}’ plt.text(55, 550, equation_text, fontsize=12, bbox=dict(boxstyle=’round’, facecolor=’wheat’, alpha=0.5)) plt.show()

予測の実践

# ============================================ # 新しい広告費に対する売上を予測 # ============================================ # 回帰分析の最大の目的:予測! # → 「広告費を110万円にしたら売上はいくら?」 # ============================================ # 予測の方法 # ============================================ # model.predict(): 学習済みモデルで予測 # 引数: 2次元配列([[値]]の形式) # 戻り値: 予測値の配列 # 広告費110万円で予測 新しい広告費 = np.array([[110]]) # 2次元配列で指定 # 予測実行 # [0]を付けるのは、配列から数値を取り出すため 予測売上 = model.predict(新しい広告費)[0] print(“【単一の予測】”) print(f”広告費が{新しい広告費[0][0]}万円の場合”) print(f”予測売上: {予測売上:.2f}万円”) # ============================================ # 複数の値で一度に予測 # ============================================ # 実務では複数のシナリオを比較することが多い 広告費リスト = np.array([[100], [110], [120], [130]]) 予測結果 = model.predict(広告費リスト) print(“\n【複数の予測(シミュレーション)】”) for ad, sales in zip(広告費リスト, 予測結果): print(f”広告費 {ad[0]:3d}万円 → 売上予測 {sales:.2f}万円”) # ============================================ # 予測の活用例 # ============================================ print(“\n【ビジネスへの示唆】”) print(f”・広告費を10万円増やすごとに、売上は約{傾き*10:.0f}万円増える見込み”) print(f”・ROI(投資対効果): 広告費1万円あたり売上{傾き:.1f}万円”) print(“・ただし、これは過去データに基づく予測であり、”) print(” 市場環境の変化により結果は異なる可能性があります”)
# 出力例 【単一の予測】 広告費が110万円の場合 予測売上: 679.25万円 【複数の予測(シミュレーション)】 広告費 100万円 → 売上予測 619.41万円 広告費 110万円 → 売上予測 679.25万円 広告費 120万円 → 売上予測 739.08万円 広告費 130万円 → 売上予測 798.91万円 【ビジネスへの示唆】 ・広告費を10万円増やすごとに、売上は約60万円増える見込み ・ROI(投資対効果): 広告費1万円あたり売上6.0万円 ・ただし、これは過去データに基づく予測であり、 市場環境の変化により結果は異なる可能性があります
📌 scikit-learn vs statsmodels
  • scikit-learn:シンプルで使いやすい、予測に特化
  • statsmodels:詳細な統計情報(p値、信頼区間など)を出力
  • 使い分け:予測メインならscikit-learn、統計的検定が必要ならstatsmodels

📊 4. 結果の解釈

回帰式の意味

売上 = 5.9835 × 広告費 + 21.0606

解釈1:広告の効果

広告費を1万円増やすと、売上が約6万円増える
広告のROI(投資対効果)は約6倍!
→ 広告は非常に効果的

解釈2:基本売上

広告費が0円でも、売上は約21万円
→ リピーター、口コミ、店舗の立地などによる基本的な売上

解釈3:予測精度

R² = 0.9542 = 95.42%
→ 売上の変動の95%以上が広告費で説明できる
非常に高い精度のモデル!

ビジネスへの活用

💡 この分析結果をどう使うか

1. 来月の予算計画

目標売上が650万円の場合、必要な広告費は?
650 = 5.9835 × X + 21.0606
X = (650 – 21.0606) / 5.9835 = 105.1万円
広告費105万円が必要

2. ROIの評価

広告費1万円で売上6万円増加
利益率が30%なら、利益は1.8万円増加
→ ROI = (1.8 – 1) / 1 = 80%
広告は十分に利益を生む

3. 経営判断

広告費と売上の関係が明確
→ 自信を持って広告予算を増やせる
→ データに基づいた経営判断が可能

注意すべき点

⚠️ 解釈時の注意
  • 相関と因果:広告費と売上に相関があるが、因果関係の証明にはA/Bテストが必要
  • 外挿の危険:広告費が200万円の時の予測は信頼できない(データの範囲外)
  • 他の要因:季節、競合、経済状況なども売上に影響する可能性
  • 飽和効果:広告費を無限に増やしても、売上は無限に増えない(限界がある)

📝 STEP 10 のまとめ

✅ このステップで学んだこと

1. Excelでの回帰分析

  • 散布図+近似曲線:最も簡単な方法
  • LINEST関数:配列数式で詳細な統計情報
  • 分析ツール:最も詳細な出力(p値、残差など)

2. Pythonでの回帰分析

  • scikit-learn:シンプルで予測に特化
  • statsmodels:詳細な統計情報(p値、信頼区間)

3. 回帰式の読み方

  • 切片:Xが0の時のYの値(基本値)
  • 傾き:Xが1増えた時のYの増加量
  • R²:モデルの説明力(0〜1、高いほど良い)

4. ビジネス活用

  • 予測:新しいXの値からYを計算
  • 目標達成:目標Yから必要なXを逆算
  • ROI評価:投資対効果を数値で把握
💡 最も大切なポイント

単回帰分析は、1つの説明変数で予測する最もシンプルな回帰分析です。Excelでもすぐに実行でき、ビジネスの現場で非常によく使われます。

今回のようにR²が0.95と高い場合、予測精度が非常に高いと言えます。ただし、現実のビジネスでは、売上に影響する要因は複数あることがほとんどです。

次のSTEP 11では、重回帰分析で複数の要因を考慮した予測を学びます!

🎯 次のステップの予告

STEP 11では、「重回帰分析の実践」を学びます。広告費だけでなく、価格、季節、競合の影響なども考慮したより正確な予測モデルを作ります!

📝 理解度チェック

学んだ内容を確認しましょう。解答を見る前に、まず自分で考えてみてください。

問題 1 基礎

以下の回帰式があります。
体重(kg)= 0.9 × 身長(cm)- 80

(1) 身長が170cmの人の体重を予測してください。
(2) 身長が10cm増えると、体重は何kg増えますか?

【解答】

(1) 身長170cmの人の体重

体重 = 0.9 × 170 – 80
  = 153 – 80
  = 73kg

(2) 身長が10cm増えた時の体重増加

傾き = 0.9
身長が1cm増えると、体重が0.9kg増える
したがって、身長が10cm増えると:
0.9 × 10 = 9kg増加

問題 2 基礎

R²(決定係数)= 0.85 は、どういう意味ですか?

【解答】

R²(決定係数)= 0.85 = 85%

これは、目的変数の変動の85%が説明変数で説明できるという意味です。

残りの15%は、他の要因(モデルに含まれていない変数)や、偶然のばらつきで説明されます。R² = 0.85は、かなり高い精度のモデルと言えます。

問題 3 応用

あるカフェの来客数と売上のデータから、以下の回帰式を得ました。
売上(万円)= 0.8 × 来客数(人)+ 5
R² = 0.88

(1) 来客数が100人の日の売上を予測してください。
(2) 目標売上が100万円の場合、必要な来客数は何人ですか?

【解答】

(1) 来客数100人の日の売上予測

売上 = 0.8 × 100 + 5
  = 80 + 5
  = 85万円

(2) 売上100万円に必要な来客数

100 = 0.8 × X + 5
0.8 × X = 100 – 5
0.8 × X = 95
X = 95 / 0.8
X = 118.75人
→ 約119人の来客が必要

問題 4 応用

単回帰分析を行う際の注意点を3つ挙げてください。

【解答例】
  1. 相関と因果の混同:回帰分析で予測できても、因果関係があるとは限らない
  2. 外挿の危険性:データの範囲外での予測は信頼できない
  3. 外れ値の影響:極端な値が回帰式を大きく歪める可能性がある
  4. 他の要因:単回帰では1つの要因しか考慮できない(重回帰が必要な場合も)
  5. 飽和効果:現実には線形関係が永遠に続くわけではない
問題 5 発展

【実践課題】以下のデータを使って、Excelで単回帰分析を行ってください。

テーマ:勉強時間とテストの点数

生徒 勉強時間(時間) テスト点数(点)
A150
B255
C365
D470
E580
F685
G790
H895

(1) 散布図と近似曲線を作成し、回帰式とR²を求めてください。
(2) 勉強時間が10時間の場合のテスト点数を予測してください。
(3) 結果を解釈してください。

【解答例】

(1) 回帰分析の結果

回帰式:点数 = 6.43 × 勉強時間 + 44.29
R² = 0.96

(2) 勉強時間10時間の場合の予測

点数 = 6.43 × 10 + 44.29 = 108.59点
→ 約109点(ただし、満点が100点なら100点が上限)

(3) 結果の解釈

  • 傾き(6.43):勉強時間が1時間増えると、テスト点数が約6.4点上がる
  • 切片(44.29):勉強時間0時間でも、約44点取れる(基礎学力)
  • R²(0.96):点数の96%が勉強時間で説明できる(非常に高い精度)
  • 結論:勉強時間を増やせば、テスト点数も確実に上がる!

❓ よくある質問

Q1: ExcelとPythonで結果が少し違うことがあるのはなぜですか?

計算方法の違いや、丸め誤差によるものです。

ExcelとPythonでは、内部の計算アルゴリズムが微妙に異なることがあります。また、小数点以下の桁数の丸め方が違うこともあります。

ただし、実務上は問題ないレベルの違いです。例:Excelで5.9835、Pythonで5.9837など

どちらを使っても、結論や解釈は変わりません

Q2: R²が0.5くらいだと、モデルとして使えませんか?

使えますが、予測精度は低めです。

R² = 0.5 = 50%
→ 目的変数の変動の50%しか説明できない
→ 残りの50%は、他の要因で説明される

目安:

  • R² > 0.7:良好(実務で十分使える)
  • 0.5 < R² < 0.7:まあまあ(改善の余地あり)
  • R² < 0.5:低い(他の変数を追加するか、別の手法を検討)

ただし、分野によって基準は異なります。例:社会科学ではR²=0.3でも「良い」とされることもあります。

Q3: 散布図を見ると、点が直線上にないのですが、大丈夫ですか?

完璧に直線上に並ぶことは、ほぼありません。

現実のデータには、必ずバラつきがあります。それが正常です。

重要なのは:

  • 全体として右上がり(または右下がり)の傾向があるか
  • 極端に外れた点(外れ値)がないか

回帰分析は、バラつきがあっても、「平均的な関係」を見つけるための手法です。R²が高ければ、十分に使えるモデルです。

Q4: 切片がマイナスになりました。これは間違いですか?

間違いではありません。

切片がマイナスになることは、よくあります

例:体重 = 0.9 × 身長 – 80
→ 身長0cmの時、体重は-80kg(現実にはありえない)

これは、データの範囲外(身長0cm)での予測なので、意味がありません。重要なのは、データの範囲内での予測です。

切片の値そのものより、傾き(回帰係数)の方が重要です。

Q5: 単回帰分析と重回帰分析、どちらを使うべきですか?

影響する要因が1つなら単回帰、複数なら重回帰です。

単回帰分析を使う場合:

  • 影響する要因が明らかに1つだけ
  • まず簡単な分析で傾向を掴みたい
  • 結果をわかりやすく説明したい

重回帰分析を使う場合:

  • 影響する要因が複数ある(現実はほとんどこれ)
  • より正確な予測が必要
  • どの要因が最も重要かを知りたい

推奨:まず単回帰で基本を理解 → 重回帰で精度を高める
STEP 11で重回帰を学びます!

Q6: Pythonのscikit-learnとstatsmodelsはどう使い分けますか?

目的によって使い分けます。

scikit-learn:

  • シンプルで使いやすい
  • 予測に特化(係数、R²、予測値を取得)
  • 機械学習の他のモデルと組み合わせやすい

statsmodels:

  • 詳細な統計情報を出力(p値、信頼区間、F検定など)
  • 統計的な検定が必要な場合に最適
  • 学術論文やレポートで使う詳細な分析に向いている

実務での使い分け:
・予測がメイン → scikit-learn
・統計的検定が必要 → statsmodels
・両方使って結果を比較するのもおすすめ

📝

学習メモ

ビジネスデータ分析・意思決定 - Step 10

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE