広告 統計学基礎

多重共線性とは?統計分析への影響と対策、Rでの検出方法を徹底解説!

2025年2月26日

統計分析や機械学習において、説明変数(独立変数)同士が強い相関を持つこと は、回帰モデルの推定精度を低下させる可能性があります。

このような状況を 「多重共線性(Multicollinearity)」 と呼びます。

多重共線性が起こると何が問題か?

✅ 回帰係数の推定値が不安定 になり、解釈が難しくなる
✅ 統計的な有意性(p値)が正しく評価できなくなる
✅ モデルの予測精度が低下 し、新しいデータに対して適用しにくくなる

例えば、以下のようなデータセットを考えます。

  • 売上(Y)広告費(X1)SNS広告の費用(X2) で予測
  • しかし、X1とX2の相関が高いため、回帰分析が不安定になる

このような問題を解決するために、本記事では 多重共線性の検出方法と対策 について詳しく解説していきます。

1. 多重共線性の基礎知識

多重共線性(Multicollinearity)は、回帰分析において説明変数同士が強く相関し、統計モデルの推定精度に悪影響を及ぼす現象 です。本章では、多重共線性の基本概念、発生する原因、統計分析への影響、簡単な検出方法について解説します。

1-1 多重共線性とは?

多重共線性とは、回帰分析で用いる説明変数の間に強い相関があり、それによって回帰係数の推定値が不安定になる問題 です。

例えば、以下のようなケースを考えてみましょう。

売上(Y) 広告費(X1) SNS広告費(X2)
100 50 20
120 60 25
130 65 27
200 100 50
  • X1(広告費)X2(SNS広告費) は高い相関を持つ(SNS広告を増やすと広告費も増える)
  • そのため、回帰分析を行うと X1とX2のどちらが本当に売上(Y)に影響を与えているのか判別しにくくなる

なぜ多重共線性が問題なのか?

✅ 回帰係数が不安定になり、解釈が困難になる
✅ 変数の影響を過大評価・過小評価してしまう
✅ 統計的に有意でない結果が出る可能性がある(p値が高くなる)

1-2 多重共線性が発生する原因

多重共線性は、以下のような要因によって発生します。

✅ ① 強い相関を持つ変数を同時に含めた場合

  • 例:身長(cm)と体重(kg)を用いてBMIを予測しようとする

✅ ② 変数の定義が類似している場合

  • 例:「売上高」と「利益額」を説明変数にする(どちらも企業の業績を示す変数)

✅ ③ 変数のスケールが大きく異なる場合

  • 例:売上(千円単位)と広告費(億円単位)を同じ回帰モデルに含める

✅ ④ ダミー変数の落とし忘れ

  • 例:「男性」と「女性」のダミー変数を両方入れると、完全な相関が生じる(片方を除く必要がある)

1-3 多重共線性が統計分析に与える影響

(1)回帰係数の不安定化
多重共線性が発生すると、回帰係数の符号が逆転したり、推定値が極端に変動する ことがあります。

例:

summary(lm(Y ~ X1 + X2, data = dataset))

X1の係数が正であるはずなのに負になるなど、不合理な結果が出ることがある。


(2)統計的な有意性の低下

  • t値やF値が低下 し、説明変数が統計的に有意であるかどうかを正しく判断できなくなる
  • p値が高くなり、重要な変数を誤って無視してしまう可能性がある

(3)予測精度の低下

  • 学習データでは良好な結果が得られても、新しいデータに対する予測精度が大幅に低下することがある
  • 過学習(overfitting)の原因となる

1-4 多重共線性の簡単な検出方法

✅ ① 相関係数(Correlation Coefficient)を確認する。

cor(dataset)

説明変数同士の相関が 0.8 以上なら多重共線性の疑い

✅ ② VIF(分散膨張係数)を計算する

library(car)
vif(lm(Y ~ X1 + X2, data = dataset))

VIF > 10 の変数がある場合、多重共線性の可能性が高い

✅ ③ 固有値と条件数を確認する

library(MASS)
eigen(cor(dataset))$values

条件数(condition number)が30以上なら多重共線性が疑われる

2. 多重共線性の具体的な検出方法

多重共線性が発生すると、回帰分析の結果が不安定になります。本章では、多重共線性を検出するための具体的な方法として、相関係数の確認、分散膨張係数(VIF)の計算、固有値と条件数の評価 について解説します。


2-1 相関係数を用いた確認

多重共線性の最も基本的な確認方法は、説明変数同士の相関係数を調べること です。

相関係数の計算方法(R)

# サンプルデータの作成
dataset <- data.frame(
  売上 = c(100, 120, 130, 200, 250, 300),
  広告費 = c(50, 60, 65, 100, 120, 150),
  SNS広告費 = c(20, 25, 27, 50, 70, 90)
)

# 相関行列の計算
cor(dataset)

結果の解釈

               売上   広告費  SNS広告費
売上         1.000  0.987   0.954
広告費       0.987  1.000   0.972
SNS広告費   0.954  0.972   1.000

✅ 広告費とSNS広告費の相関係数が0.972と非常に高い → 多重共線性の疑いがある

✅ 相関係数が 0.8 を超えている変数の組み合わせは注意が必要


2-2 分散膨張係数(VIF)による検出

VIF(Variance Inflation Factor:分散膨張係数)は、各説明変数が他の説明変数とどれだけ相関しているかを数値化する指標 です。

VIFの計算方法(R)

# 必要なライブラリ
install.packages("car")
library(car)

# 重回帰分析モデルの作成
model <- lm(売上 ~ 広告費 + SNS広告費, data = dataset)

# VIFの計算
vif(model)

VIFの基準

VIFの値 解釈
1~5 問題なし
5~10 注意が必要
10以上 多重共線性の可能性が高い

出力結果の例

広告費       15.2
SNS広告費   12.8

✅ VIFが10を超えているため、多重共線性の可能性が高い

✅ いずれかの変数を削除するか、次章で紹介する対策を検討する必要がある


2-3 固有値と条件数による評価

固有値と条件数を用いて、多重共線性の程度を評価する方法もあります。

固有値と条件数の計算(R)

# 必要なライブラリ
install.packages("MASS")
library(MASS)

# 相関行列の固有値を計算
eigen_vals <- eigen(cor(dataset))$values

# 条件数の計算
condition_number <- max(eigen_vals) / min(eigen_vals)

# 結果の表示
print(condition_number)

条件数の基準

条件数(Condition Number) 解釈
1~10 問題なし
10~30 注意が必要
30以上 多重共線性の可能性が高い

出力結果の例

条件数 = 35.7

✅ 条件数が30を超えているため、多重共線性の可能性が高い

✅ 次章の対策(変数の削減、PCA、リッジ回帰など)を適用する必要がある

3. 多重共線性の対策とRでの実装

多重共線性を検出した場合、その影響を抑えるための対策を講じる必要があります。本章では、多重共線性を解消するための具体的な方法と、それをRで実装する方法を紹介します。


3-1 変数の削減(高相関な変数を除外)

多重共線性が発生している場合、高相関な説明変数のうち、どちらか一方を削除することで問題を解決できる場合があります

変数削減の実装(R)

# VIFを確認
library(car)
vif(model)

# 多重共線性の高い変数を除外
model_reduced <- lm(売上 ~ 広告費, data = dataset)

# 再度VIFを計算
vif(model_reduced)

✅ 「SNS広告費」のVIFが高い場合、それを削除してモデルを再構築することで多重共線性を解消できる

✅ 「どちらを削除すべきか?」は、ドメイン知識(ビジネス上の意味)に基づいて判断することが重要

3-2 主成分分析(PCA)による次元削減

説明変数の数が多く、それらが高い相関を持つ場合、主成分分析(PCA)を用いて、相関のある変数を統合することが可能 です。

PCAの実装(R)

# 主成分分析の実行
pca_model <- prcomp(dataset[, c("広告費", "SNS広告費")], scale. = TRUE)

# 主成分得点をデータフレームに追加
dataset$PC1 <- pca_model$x[,1]

# 主成分を使って回帰分析
model_pca <- lm(売上 ~ PC1, data = dataset)

summary(model_pca)

✅ PCAを適用すると、多重共線性を含む変数を「主成分」として統合し、新しい変数で回帰分析を行うことができる

✅ これにより、多重共線性の影響を軽減しながら、データの情報を損なわずに分析を続けられる


3-3 リッジ回帰(Ridge Regression)を用いた対策

リッジ回帰(Ridge Regression)は、回帰分析の際に係数の大きさを制約することで、多重共線性の影響を抑える手法 です。

リッジ回帰の実装(R)

install.packages("glmnet")
library(glmnet)

# データの準備
X <- as.matrix(dataset[, c("広告費", "SNS広告費")])  # 説明変数
Y <- dataset$売上  # 目的変数

# リッジ回帰の実行(λ=0.1)
ridge_model <- glmnet(X, Y, alpha = 0)

# モデルの係数を表示
print(coef(ridge_model))

✅ リッジ回帰は、回帰係数の大きさを抑えることで、多重共線性の影響を軽減する

✅ 特に説明変数の数が多い場合や、PCAで適切な主成分が得られない場合に有効


3-4 変数の標準化と正則化手法

多重共線性の影響を抑えるために、変数を標準化(スケールを統一)する 方法もあります。

変数の標準化(R)

# 変数の標準化
dataset$広告費_std <- scale(dataset$広告費)
dataset$SNS広告費_std <- scale(dataset$SNS広告費)

# 標準化後の回帰分析
model_standardized <- lm(売上 ~ 広告費_std + SNS広告費_std, data = dataset)

summary(model_standardized)

✅ 変数の標準化により、スケールの違いによる影響を軽減し、多重共線性の影響を抑えられる

✅ リッジ回帰やLASSO回帰と組み合わせるとより効果的

4. Q&A(よくある質問)

ここでは、多重共線性に関するよくある質問とその回答をまとめました。


Q1. どの程度の相関があると多重共線性を疑うべきか?

A. 一般的には、説明変数同士の相関係数が 0.8 を超える場合、多重共線性の可能性が高い と判断されます。ただし、相関係数だけで判断せず、VIF(分散膨張係数)が 10 を超えるかどうか も重要な指標です。

✅ 目安となる指標

指標 影響の程度
相関係数 0.8以下 多重共線性の可能性は低い
相関係数 0.8~0.9 注意が必要
相関係数 0.9以上 多重共線性の可能性が高い
VIF < 5 問題なし
VIF 5~10 注意が必要
VIF > 10 多重共線性の可能性が高い

Q2. 多重共線性があっても、回帰分析を続けてもよいのか?

A. 状況によるが、基本的には対策を講じるべき です。多重共線性があっても、予測精度に影響が少ない場合は回帰分析を続けることが可能 ですが、以下の問題が発生しやすいため、適切な対策を行うことを推奨します。

✅ 問題となるケース

  • 回帰係数の符号が不自然(本来プラスになるはずがマイナスになるなど)
  • 変数の統計的有意性(p値)が異常に高くなる
  • 予測精度が低下し、新しいデータでモデルが適用できない

📌 VIF を計算し、10 を超える場合は変数の削減やリッジ回帰を検討すべき。


Q3. VIFの値が高いが、すべての変数が重要な場合はどうすればいい?

A. すべての変数が重要で削除できない場合は、主成分分析(PCA)やリッジ回帰を活用するのが有効 です。

✅ 主成分分析(PCA)の活用

  • 相関の強い変数を「主成分」として統合し、情報を保持したまま変数の数を減らす
  • Rでの実装:
pca_model <- prcomp(dataset[, c("広告費", "SNS広告費")], scale. = TRUE)
dataset$PC1 <- pca_model$x[,1]
  • PC1(主成分得点)を新しい説明変数として回帰モデルを作成する

✅ リッジ回帰の活用

  • 回帰係数の大きさを制約し、多重共線性の影響を抑える
  • Rでの実装:
library(glmnet)
ridge_model <- glmnet(as.matrix(dataset[, c("広告費", "SNS広告費")]), dataset$売上, alpha = 0)
  • すべての変数を維持しながら、統計モデルの精度を向上できる

Q4. 多重共線性は機械学習モデルにも影響するのか?

A. はい、多重共線性は機械学習モデルの学習精度や解釈性に影響を与えます。

✅ 影響を受けやすい手法

  • 線形回帰(Linear Regression)
  • ロジスティック回帰(Logistic Regression)
  • 決定木ベースでないアルゴリズム(SVM など)

✅ 影響を受けにくい手法

  • 決定木(Decision Tree)
  • ランダムフォレスト(Random Forest)
  • 勾配ブースティング(XGBoost, LightGBM)

📌 機械学習モデルで多重共線性が問題になる場合、変数選択や正則化を活用するのが有効。


5. まとめ

本記事では、多重共線性について基礎から応用、Rでの検出と対策まで詳しく解説しました。

✅ 多重共線性のポイント

  • 説明変数同士の相関が高いと、多重共線性が発生する
  • 回帰係数が不安定になり、統計的な解釈が困難になる
  • VIF(分散膨張係数)を計算し、多重共線性の程度を評価できる

✅ 多重共線性の対策

  • 高相関の変数を削除する(VIFが高いものを除去)
  • 主成分分析(PCA)を利用して次元削減を行う
  • リッジ回帰(Ridge Regression)を用いて回帰係数を制約する
  • 変数を標準化し、正則化手法(LASSO・リッジ回帰)を適用する

多重共線性が問題になりやすい場面

  • マーケティング:広告費とプロモーション費の影響分析
  • 医療データ:BMI・体重・身長の関係性の評価
  • 経済学:GDP・消費支出・可処分所得の関係分析

📌 多重共線性は統計解析において重要な問題ですが、適切な検出と対策を行うことで、信頼性の高い回帰モデルを構築できます。本記事を参考に、ぜひRを使って実際に分析を試してみてください!

-統計学基礎

S