STEP 15:多重共線性の対処

⚠️ STEP 15: 多重共線性の対処

説明変数間の相関問題を解決しよう

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

  • 多重共線性(Multicollinearity)とは何か
  • 多重共線性がもたらす問題
  • VIF(分散拡大要因)による検出方法
  • 多重共線性の対処法(変数選択、次元削減)
  • 実務での変数選択のベストプラクティス

学習時間の目安:3時間

🔍 1. 多重共線性とは

基本概念

📌 多重共線性(Multicollinearity)

説明変数同士が強く相関している状態

例:
・広告費と広告回数(ほぼ同じ情報)
・身長と体重(強く相関)
・売上と利益(ほぼ比例)

問題:
どちらの変数が本当に重要なのか判断できなくなる

わかりやすい例

💡 多重共線性のイメージ

状況:学生の成績を予測したい

  • 変数1:「勉強時間(時間/日)」
  • 変数2:「勉強時間(分/日)」

→ 2つの変数は完全に相関(片方がわかれば、もう片方もわかる)
→ どちらが重要かを判断できない
→ 係数が不安定になる

これが多重共線性の問題!

多重共線性の種類

📌 2つのタイプ

1. 完全多重共線性

説明変数の1つが、他の変数の完璧な線形結合
例:X2 = 2 × X1
→ 回帰分析ができない(計算エラー)

2. 高い多重共線性

説明変数同士が強く相関している(完璧ではない)
例:相関係数 r = 0.9
→ 回帰分析はできるが、問題が起きる

【多重共線性のビジネス例】 ケース1:EC サイトの売上予測 ・訪問者数と PV 数(強く相関) ・カート追加数と購入数(強く相関) → どちらが売上に影響?判断困難 ケース2:店舗の売上予測 ・広告費(万円)と広告費(千円)(完全に相関) ・従業員数とレジ台数(強く相関) → 係数が不安定になる ケース3:マーケティング効果測定 ・TV広告費と認知度(強く相関) ・Web広告費とサイト訪問数(強く相関) → 各施策の効果を分離できない

⚠️ 2. 多重共線性の問題

どんな問題が起きるか

🚨 多重共線性がもたらす問題

1. 回帰係数が不安定

データが少し変わるだけで、係数が大きく変わる
→ 解釈が困難

2. 標準誤差が大きくなる

係数の信頼区間が広くなる
→ 統計的に有意にならない(p値が大きい)

3. 係数の符号が逆転

本来プラスのはずの変数が、マイナスになる
→ 理論と矛盾

4. R²は高いのに、個別の変数が有意でない

モデル全体は良いが、各変数の重要性が判断できない

具体例

📊 多重共線性の影響(例)

状況:売上を予測
説明変数:広告費(万円)、広告費(千円)

ケース 広告費(万円)の係数 広告費(千円)の係数
データA +100 -9
データB -50 +6

→ データが少し変わるだけで、係数が大きく変化
→ 符号まで逆転!
→ これでは解釈できない

原因:広告費(万円)と広告費(千円)が完全に相関
対処:どちらか1つだけを使う

R²への影響

💡 重要なポイント

多重共線性があっても、R²や予測精度には大きな影響はありません

問題は:
・各変数の重要性を判断できない
・係数の解釈ができない
・モデルが不安定

予測だけが目的なら、多重共線性は許容できることもあります。
でも、要因分析が目的なら、必ず対処が必要です!

🔍 3. 多重共線性の検出方法

方法1:相関行列

📌 説明変数同士の相関をチェック

基準:

  • |相関係数| > 0.8 → 多重共線性の疑い
  • |相関係数| > 0.9 → 多重共線性あり

対処:
相関が高い変数のペアを見つけたら、どちらか1つを削除

# ============================================ # 相関行列で多重共線性をチェック # ============================================ # 多重共線性とは? # → 説明変数同士が強く相関している状態 # → 例:広告費と広告回数は「同じ情報」を持っている # → これがあると係数が不安定になる import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt # サンプルデータ # 広告費と広告回数はほぼ比例関係(多重共線性の例) data = { ‘広告費’: [50, 60, 70, 55, 80, 90, 85, 75], # 単位:万円 ‘広告回数’: [100, 120, 140, 110, 160, 180, 170, 150], # 回数 ‘気温’: [25, 28, 30, 26, 32, 33, 31, 29], # 単位:℃ ‘売上’: [310, 420, 480, 330, 600, 650, 550, 500] # 単位:万円 } df = pd.DataFrame(data) # ============================================ # 相関行列の計算 # ============================================ # .corr(): 全ての列間の相関係数を計算 # → 説明変数同士で0.8以上の相関があると要注意 corr_matrix = df.corr() print(“【相関行列】”) print(corr_matrix.round(3)) # ============================================ # ヒートマップで可視化 # ============================================ # なぜヒートマップか? # → 高い相関(赤色)を視覚的に発見しやすい plt.figure(figsize=(10, 8)) sns.heatmap(corr_matrix, annot=True, cmap=’coolwarm’, vmin=-1, vmax=1, center=0, square=True, linewidths=1, fmt=’.3f’) plt.title(‘相関行列ヒートマップ’, fontsize=14) plt.show() print(“\n【多重共線性のチェック】”) print(“説明変数同士の相関が0.8以上のペアを探す”) print(“→ 広告費と広告回数: 0.998 ← 多重共線性あり!”)
# 出力例 【相関行列】 広告費 広告回数 気温 売上 広告費 1.000 0.998 0.156 0.928 広告回数 0.998 1.000 0.142 0.935 気温 0.156 0.142 1.000 0.342 売上 0.928 0.935 0.342 1.000 【多重共線性のチェック】 説明変数同士の相関が0.8以上のペアを探す → 広告費と広告回数: 0.998 ← 多重共線性あり!

方法2:VIF(分散拡大要因)

📌 VIF(Variance Inflation Factor)

各説明変数の多重共線性の度合いを数値化

計算方法:
1つの説明変数を目的変数として、他の説明変数で回帰
VIF = 1 / (1 – R²)

判定基準:
・VIF < 5:問題なし ✓
・5 ≤ VIF < 10:注意が必要
・VIF ≥ 10:多重共線性あり → 対処が必要

意味:
VIF = 10 → 多重共線性がない場合に比べて、標準誤差が√10 = 3.16倍に拡大

# ============================================ # VIF(分散拡大要因)の計算 # ============================================ # VIFとは? # → 多重共線性の度合いを数値で表す指標 # → 各変数について計算 # → 10以上なら多重共線性あり from statsmodels.stats.outliers_influence import variance_inflation_factor # 説明変数のみを抽出(目的変数「売上」は除く) X = df[[‘広告費’, ‘広告回数’, ‘気温’]] # ============================================ # variance_inflation_factor(): VIFを計算 # ============================================ # パラメータ: # X.values: 説明変数のデータ(NumPy配列) # i: 計算対象の列番号 # # 戻り値: VIF値(数値) # 各変数のVIFを計算してDataFrameにまとめる vif_data = pd.DataFrame() vif_data[“変数”] = X.columns vif_data[“VIF”] = [variance_inflation_factor(X.values, i) for i in range(len(X.columns))] print(“【VIF(分散拡大要因)】”) print(vif_data) print(“\n【判定基準】”) print(“VIF < 5 : ✓ 問題なし") print("5 ≤ VIF < 10 : △ 注意") print("VIF ≥ 10 : ✗ 多重共線性あり(対処必要)") print("\n【この結果の解釈】") print("・広告費(VIF=534)と広告回数(VIF=542) → 深刻な多重共線性") print("・気温(VIF=1.05) → 問題なし") print("→ 広告費か広告回数のどちらかを削除すべき")
# 出力例 【VIF(分散拡大要因)】 変数 VIF 0 広告費 534.521 1 広告回数 542.318 2 気温 1.048 判定基準: VIF < 5 : 問題なし 5 ≤ VIF < 10 : 注意 VIF ≥ 10 : 多重共線性あり(対処必要) → 広告費と広告回数のVIFが500以上! → 強い多重共線性 → どちらか削除が必要

VIF計算の関数化

# VIF計算を関数化(再利用しやすく) def calculate_vif(X): “”” 説明変数のVIFを計算する関数 Parameters: X : DataFrame – 説明変数のみを含むDataFrame Returns: DataFrame – 変数名とVIF値 “”” vif_data = pd.DataFrame() vif_data[“変数”] = X.columns vif_data[“VIF”] = [variance_inflation_factor(X.values, i) for i in range(len(X.columns))] # 判定結果を追加 def judge_vif(vif): if vif < 5: return "✓ 問題なし" elif vif < 10: return "△ 注意" else: return "✗ 要対処" vif_data["判定"] = vif_data["VIF"].apply(judge_vif) return vif_data # 使用例 print(calculate_vif(df[['広告費', '広告回数', '気温']]))

🔧 4. 多重共線性の対処法

対処法1:相関の高い変数を削除

📌 最もシンプルな対処法

手順:

  1. VIFが10以上の変数を特定
  2. 相関が高いペアを見つける
  3. どちらか1つを削除(重要度が低い方)
  4. 再度VIFを計算
  5. すべてのVIF < 10 になるまで繰り返す

どちらを残すか:
・ビジネス的に重要な方
・理論的に意味がある方
・p値が小さい方

# 広告回数を削除して再分析 # 広告費だけを残す(広告回数を削除) X_fixed = df[[‘広告費’, ‘気温’]] # VIFを再計算 vif_fixed = pd.DataFrame() vif_fixed[“変数”] = X_fixed.columns vif_fixed[“VIF”] = [variance_inflation_factor(X_fixed.values, i) for i in range(len(X_fixed.columns))] print(“【多重共線性対処後のVIF】”) print(vif_fixed) # 回帰分析を実行 from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_fixed, df[‘売上’]) print(f”\n【回帰式】”) print(f”売上 = {model.intercept_:.2f} + {model.coef_[0]:.2f}×広告費 + {model.coef_[1]:.2f}×気温”)
# 出力例 【多重共線性対処後のVIF】 変数 VIF 0 広告費 1.025 1 気温 1.025 → すべてのVIF < 5 → 問題解決! 【回帰式】 売上 = 21.06 + 5.98×広告費 + 8.15×気温

対処法2:変数を結合

📌 相関の高い変数を1つにまとめる

方法:

  • 平均:新変数 = (X1 + X2) / 2
  • 合計:新変数 = X1 + X2
  • 主成分分析:複数の変数を1つの主成分に

例:
「TV広告費」と「Web広告費」→「総広告費」にまとめる

# 変数を結合する例 # TV広告費とWeb広告費があるとして… data_ad = { ‘TV広告費’: [100, 120, 150, 130, 180], ‘Web広告費’: [50, 60, 75, 65, 90], ‘売上’: [500, 600, 750, 650, 900] } df_ad = pd.DataFrame(data_ad) # 方法1: 合計 df_ad[‘総広告費’] = df_ad[‘TV広告費’] + df_ad[‘Web広告費’] # 方法2: 平均 df_ad[‘平均広告費’] = (df_ad[‘TV広告費’] + df_ad[‘Web広告費’]) / 2 print(“【変数結合後】”) print(df_ad) # 総広告費だけを使って回帰分析 X_combined = df_ad[[‘総広告費’]] y = df_ad[‘売上’] model = LinearRegression() model.fit(X_combined, y) print(f”\n回帰式: 売上 = {model.intercept_:.2f} + {model.coef_[0]:.2f}×総広告費”)

対処法3:次元削減(PCA)

📌 主成分分析(PCA)

複数の相関変数を、少数の独立した成分に変換

利点:
・すべての情報を保ちながら、変数を減らせる
・多重共線性を完全に排除

欠点:
・解釈が難しくなる
・「主成分1」は何を意味するのかわかりにくい

# 主成分分析(PCA)の例 from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # 標準化(PCAの前に必要) scaler = StandardScaler() X_scaled = scaler.fit_transform(df[[‘広告費’, ‘広告回数’]]) # PCA(2変数を1成分に) pca = PCA(n_components=1) X_pca = pca.fit_transform(X_scaled) print(“【PCAの結果】”) print(f”元の変数数: 2″) print(f”主成分の数: 1″) print(f”説明された分散の割合: {pca.explained_variance_ratio_[0]:.4f}”) print(f”\n→ 元の情報の{pca.explained_variance_ratio_[0]*100:.2f}%を保持”) # 主成分の係数(どの変数がどれくらい貢献しているか) print(f”\n【主成分の係数】”) print(f”広告費: {pca.components_[0][0]:.4f}”) print(f”広告回数: {pca.components_[0][1]:.4f}”)

対処法4:正則化(Ridge、Lasso回帰)

📌 正則化回帰

多重共線性に強い回帰手法

Ridge回帰:
係数を小さくすることで、多重共線性の影響を緩和
→ 変数は残るが、係数が安定する

Lasso回帰:
重要でない変数の係数を0にする
→ 自動的に変数選択

# Ridge回帰とLasso回帰の例 from sklearn.linear_model import Ridge, Lasso # 多重共線性のあるデータで比較 X_mc = df[[‘広告費’, ‘広告回数’, ‘気温’]] y = df[‘売上’] # 通常の線形回帰 lr = LinearRegression() lr.fit(X_mc, y) # Ridge回帰 ridge = Ridge(alpha=1.0) ridge.fit(X_mc, y) # Lasso回帰 lasso = Lasso(alpha=1.0) lasso.fit(X_mc, y) print(“【各モデルの係数比較】”) print(f”{‘変数’:<10} {'線形回帰':>12} {‘Ridge’:>12} {‘Lasso’:>12}”) print(“-” * 50) for i, col in enumerate(X_mc.columns): print(f”{col:<10} {lr.coef_[i]:>12.2f} {ridge.coef_[i]:>12.2f} {lasso.coef_[i]:>12.2f}”) print(“\n→ Ridge/Lassoは係数が安定している”) print(“→ Lassoは不要な変数の係数を0に近づける”)

✅ 5. 変数選択のベストプラクティス

変数選択の手順

📋 推奨される変数選択フロー

ステップ1:ビジネス的な重要性で絞る

まず、理論的に意味がある変数だけを選ぶ
・売上に影響するはずの変数
・過去の研究や経験で重要とされる変数

ステップ2:相関行列をチェック

説明変数同士の相関係数を確認
・|r| > 0.8 のペアを見つける
・どちらか1つを削除

ステップ3:VIFをチェック

すべてのVIF < 10 を確認
・VIF ≥ 10 の変数があれば削除
・削除後、再度VIFを計算

ステップ4:回帰分析を実行

残った変数で回帰分析
・p値をチェック(p < 0.05)
・有意でない変数は削除を検討

ステップ5:テストデータで評価

予測精度を確認
・MAE、RMSE、MAPEを計算
・過学習していないか確認

ステップ6:最終モデルの決定

・調整済みR²が最も高いモデルを選ぶ
・ビジネス的な解釈可能性も考慮

実践例

# 変数選択の完全な流れ import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from statsmodels.stats.outliers_influence import variance_inflation_factor import statsmodels.api as sm # サンプルデータ data = { ‘広告費’: [50, 60, 70, 55, 80, 90, 85, 75, 65, 70, 95, 100], ‘広告回数’: [100, 120, 140, 110, 160, 180, 170, 150, 130, 140, 190, 200], ‘気温’: [25, 28, 30, 26, 32, 33, 31, 29, 27, 30, 34, 35], ‘価格’: [800, 800, 750, 850, 700, 680, 720, 780, 820, 750, 660, 650], ‘売上’: [310, 420, 480, 330, 600, 650, 550, 500, 380, 480, 700, 720] } df = pd.DataFrame(data) print(“=” * 60) print(“変数選択の実践”) print(“=” * 60) print(“\n【ステップ1:初期変数】”) print(“説明変数:広告費、広告回数、気温、価格”) # ステップ2:相関行列 print(“\n【ステップ2:相関行列】”) X_initial = df[[‘広告費’, ‘広告回数’, ‘気温’, ‘価格’]] corr_matrix = X_initial.corr() print(corr_matrix.round(3)) print(“\n→ 広告費と広告回数の相関:0.998(高い!)”) # ステップ3:VIF計算 print(“\n【ステップ3:初期VIF】”) vif_initial = calculate_vif(X_initial) print(vif_initial) print(“\n→ 広告費と広告回数のVIFが非常に高い”) # ステップ4:広告回数を削除 print(“\n【ステップ4:広告回数を削除】”) X_fixed = df[[‘広告費’, ‘気温’, ‘価格’]] # ステップ5:修正後のVIF print(“\n【ステップ5:修正後のVIF】”) vif_fixed = calculate_vif(X_fixed) print(vif_fixed) print(“\n→ すべてのVIF < 5 → OK!") # ステップ6:回帰分析 print("\n【ステップ6:回帰分析】") X_with_const = sm.add_constant(X_fixed) model = sm.OLS(df['売上'], X_with_const).fit() print(model.summary().tables[1]) print("\n" + "=" * 60) print("【結論】") print("=" * 60) print("最終的な説明変数:広告費、気温、価格") print(f"R²: {model.rsquared:.4f}") print(f"調整済みR²: {model.rsquared_adj:.4f}")

📝 STEP 15 のまとめ

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

1. 多重共線性とは

  • 説明変数同士が強く相関している状態
  • 係数が不安定、標準誤差が大きい、解釈が困難になる

2. 検出方法

  • 相関行列:|r| > 0.8 で疑い
  • VIF:≥ 10 で多重共線性あり

3. 対処法

  • 変数削除:重要度が低い方を削除
  • 変数結合:相関の高い変数を1つにまとめる
  • PCA:次元削減
  • 正則化:Ridge、Lasso回帰

4. 変数選択フロー

  • ビジネス的重要性 → 相関 → VIF → p値 → テストデータ評価
💡 最も大切なポイント

多重共線性は、予測精度には大きな影響はないですが、各変数の重要性を判断するのが困難になります。

対処の基本:

  1. VIFで多重共線性を検出
  2. VIF ≥ 10 の変数を見つける
  3. 相関が高いペアのうち、重要度が低い方を削除
  4. 再度VIFを計算
  5. すべてのVIF < 10 になるまで繰り返す

重要:
・予測だけが目的なら、多重共線性は許容できることもある
・要因分析が目的なら、必ず対処する
・ビジネス的な解釈可能性を最優先

次のSTEP 16では、ロジスティック回帰入門を学びます!

🎯 次のステップの予告

STEP 16では、「ロジスティック回帰入門」を学びます。成約する/しない、離脱する/しないなど、2値分類問題の分析方法を習得します!

📝 練習問題

問題 1 基礎

多重共線性とは何ですか?また、どんな問題が起きますか?

【解答】

多重共線性とは:

重回帰分析で、説明変数同士が強く相関している状態

例:広告費と広告回数、身長と体重など

起きる問題:

  1. 係数が不安定:データが少し変わるだけで、係数が大きく変わる
  2. 標準誤差が大きい:信頼区間が広くなる
  3. p値が大きい:統計的に有意にならない
  4. 係数の符号が逆転:理論と矛盾する結果が出る
  5. 解釈が困難:どの変数が本当に重要かわからない
問題 2 基礎

VIF(分散拡大要因)とは何ですか?判定基準を説明してください。

【解答】

VIFとは:

VIF(Variance Inflation Factor、分散拡大要因)

各説明変数の多重共線性の度合いを数値化した指標

計算方法:
・1つの説明変数を目的変数として、他の説明変数で回帰
・VIF = 1 / (1 – R²)

判定基準:

  • VIF < 5:問題なし ✓
  • 5 ≤ VIF < 10:注意が必要
  • VIF ≥ 10:多重共線性あり → 対処が必要
問題 3 応用

VIF = 25 の変数があります。この変数にどのような問題がありますか?どう対処すべきですか?

【解答】

問題:

VIF = 25 は判定基準の10を大きく超えており、強い多重共線性があります。

影響:
・標準誤差が √25 = 5倍に拡大
・係数が不安定
・p値が大きくなり、統計的有意性が得られにくい

対処法:

  1. 相関の高いペアを特定:相関行列で、この変数と強く相関している他の変数を見つける
  2. どちらか1つを削除:ビジネス的に重要度が低い方、理論的に意味が薄い方を削除
  3. 再度VIFを計算:削除後、すべてのVIF < 10 になるまで繰り返す
  4. 代替案:変数を結合、PCA、Ridge/Lasso回帰を検討
問題 4 応用

以下の相関行列があります。多重共線性の問題がありますか?ある場合、どの変数を削除すべきですか?

広告費 価格 気温 従業員数
広告費1.00-0.850.150.92
価格-0.851.00-0.12-0.78
気温0.15-0.121.000.18
従業員数0.92-0.780.181.00

【解答】多重共線性の問題あり

問題のあるペア:

  1. 広告費と従業員数:r = 0.92(非常に高い)
  2. 広告費と価格:r = -0.85(高い)
  3. 価格と従業員数:r = -0.78(やや高い)

削除すべき変数:

従業員数を削除することを推奨

理由:
・広告費と r = 0.92 で最も高い相関
・価格とも r = -0.78 と高い相関
・従業員数は売上への直接的な影響が不明確
・広告費や価格の方が、売上への影響が理論的に明確

削除後、VIFを計算してすべて < 10 であることを確認

問題 5 実践

あなたはマーケティング効果を分析しています。説明変数として「TV広告費」「Web広告費」「総広告回数」「認知度」を検討していますが、これらの変数間に多重共線性があることがわかりました。予測モデルと要因分析モデル、それぞれの場合でどう対処すべきか説明してください。

【解答】

予測モデルの場合:

目的が「将来の売上を予測する」なら、多重共線性は許容できることがあります。

対処法:
・Ridge回帰やLasso回帰を使用(係数が安定)
・すべての変数を残してもOK
・テストデータでの予測精度を重視
・VIFが高くても、予測精度が良ければ問題なし

要因分析モデルの場合:

目的が「どの施策が効果的か分析する」なら、多重共線性を必ず対処する必要があります。

対処法:
1. 変数削除:VIF ≥ 10 の変数を削除
 ・「総広告回数」は「TV広告費+Web広告費」と相関が高いため削除
 ・「認知度」は広告費の結果であり、共線性の原因になるため削除検討

2. 変数結合:「TV広告費」と「Web広告費」を「総広告費」に統合

3. 段階的分析:
 ・まず広告費→認知度の関係を分析
 ・次に認知度→売上の関係を分析
 ・因果関係を段階的に検証

まとめ:
・予測目的:多重共線性は許容可能、Ridge/Lasso推奨
・分析目的:多重共線性は必ず対処、変数削除or結合

❓ よくある質問

Q1: 相関が高くても、VIFが低いことはありますか?
はい、あり得ます。

例:
X1とX2の相関は高い(r = 0.8)が、X3、X4との相関は低い
→ X1のVIFは、X2との相関だけでなく、X3、X4との関係も考慮されるため、思ったほど高くならないことがある

重要:
VIFはすべての説明変数との関係を総合的に評価します。相関行列とVIFの両方をチェックするのがベストプラクティスです。
Q2: VIF = 7 の変数は削除すべきですか?
判断が分かれるグレーゾーンです。

残す理由:
・ビジネス的に非常に重要な変数
・理論的に必須の変数
・p値が小さい(統計的に有意)

削除する理由:
・他に似た情報を持つ変数がある
・ビジネス的な重要度が低い
・モデルをシンプルにしたい

推奨:
両方のモデル(残す/削除)を作って、調整済みR²、テストデータでの精度を比較して判断
Q3: 多重共線性があっても、予測には使えますか?
はい、予測には使えます。

多重共線性の影響:
・予測精度(R²、MAE、RMSE)にはほぼ影響なし
・各変数の重要性の判断が困難
・係数の解釈が不安定

使える場合:
予測だけが目的なら、多重共線性は許容できる
・例:売上予測、需要予測など

使えない場合:
要因分析が目的なら、必ず対処が必要
・例:「どの要因が最も重要か」を知りたい

結論:
目的が予測なら問題ない、解釈なら対処必須
Q4: 変数を削除せずに多重共線性を解決する方法はありますか?
はい、いくつかの方法があります。

1. 変数を結合
相関の高い変数を1つにまとめる
例:TV広告費 + Web広告費 → 総広告費

2. 主成分分析(PCA)
複数の変数を少数の主成分に変換
・すべての情報を保ちながら、変数を減らせる
・ただし、解釈が難しくなる

3. Ridge回帰(正則化)
係数を小さくすることで、多重共線性の影響を緩和
・変数は残るが、係数が安定する

4. Lasso回帰(正則化+変数選択)
重要でない変数の係数を自動的に0にする
・自動的に変数選択してくれる

推奨:
まずはシンプルに変数削除を試してみましょう。それでも解決しない場合に、上記の手法を検討します。
Q5: ExcelでVIFは計算できますか?
Excelでは直接計算できませんが、手動で計算可能です。

手動計算の手順:

例:広告費のVIFを計算
1. 広告費を目的変数、他の変数(気温、価格)を説明変数として回帰分析
2. R²を確認(例:R² = 0.85)
3. VIF = 1 / (1 – R²) = 1 / (1 – 0.85) = 1 / 0.15 = 6.67

これを各変数について繰り返す。

欠点:
・変数が多いと面倒
・計算ミスのリスク

推奨:
・Pythonを使うのが簡単
・Google Colab(無料)で簡単にVIFを計算できる
Q6: 多重共線性を無視するとどうなりますか?
目的によって影響が異なります。

予測が目的の場合:
・予測精度にはほとんど影響なし
・モデルは使える
・ただし、係数の解釈は信頼できない

要因分析が目的の場合:
・各変数の重要性が判断できない
・係数の符号が逆転する可能性
・「広告費が売上に与える影響」などの解釈が不正確
・ビジネス上の意思決定を誤る可能性

具体例:
「広告費を増やすと売上が上がる」はずなのに、
多重共線性のせいで係数がマイナスになり、
「広告費を減らすべき」という誤った結論を出してしまう

結論:
要因分析や係数の解釈が必要な場合は、必ず多重共線性に対処しましょう!
📝

学習メモ

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

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