多重共線性とVIFとは?「広告費を増やすと売上が下がる」係数が出たときに疑うこと
売上を目的変数にして、広告費・営業人数・店舗数などを説明変数に入れた回帰分析を回した。結果を見ると、広告費の係数がマイナスになっている。広告費を増やすと売上が下がる、と読めてしまう。
ここで多くの人が立ち止まります。モデルの組み方を間違えたのか、それとも自社では本当に広告が効いていないのか。切り分けがつかないまま、分析そのものが止まります。
このとき最初に疑うべき候補のひとつが、説明変数どうしの相関です。
この記事では、statsmodelsとscikit-learnの公式ドキュメントの記述をもとに、多重共線性とVIFが何を意味していて、係数の符号が反転する仕組みがどうなっているのかを整理します。
出典はstatsmodels の variance_inflation_factorと、scikit-learn の「Common pitfalls in the interpretation of coefficients of linear models」です(いずれも2026年8月29日に取得)。
30秒で要点
- VIFは「ある変数を回帰に追加したときのパラメータ推定量の分散の増加を測る指標」であり、多重共線性の指標だと定義されている
- 閾値については「VIFが5より大きければ他の説明変数と強く共線的で、パラメータ推定量の標準誤差が大きくなる」というひとつの推奨が示されている
- 相関する2変数では、交差検証の分割ごとに一方の係数が正なら他方が負、という2領域が現れる。符号は反転しうる
- 相関する一方の変数を除くと、残った変数の係数推定の変動は大幅に減る
- 線形モデルは統計的関連を測る道具であり、因果について述べるときは慎重であるべきだと明記されている
| 用語 | 意味 |
|---|---|
| 説明変数 | 結果を説明するために使う入力側の変数(広告費、営業人数など) |
| 係数 | 説明変数が1単位増えたときに、目的変数がどれだけ変わるかを表す推定値 |
| 多重共線性 | 説明変数どうしが強く相関している状態 |
| VIF(分散拡大要因) | 多重共線性の程度を表す指標。値が大きいほど推定のばらつきが大きい |
| 標準誤差 | 推定値そのもののばらつきの大きさ。大きいほど、その推定値は当てにならない |
| 交差検証 | データを複数に分割し、分割ごとにモデルを訓練して結果の安定性を見る手続き |
VIFが測っているのは、係数ではなく「係数のばらつき」
まず定義から確認します。statsmodels のドキュメントは、VIFをこう説明しています。「ある変数を線形回帰に追加したときのパラメータ推定量の分散の増加を測る指標であり、計画行列の多重共線性の指標である」。
ここで押さえておきたいのは、VIFが見ているのは係数の値そのものではないという点です。見ているのは、係数の推定がどれだけばらつくかのほうです。
この区別が効いてきます。多重共線性があっても、係数の値は計算されます。数字は出るのです。出た数字が、たまたまその一回のデータでそうなっただけなのか、それとも安定して再現するものなのか——VIFはそこに関わる指標です。画面に出た数字を見ているだけでは、この違いは見えません。
閾値の「5」は、合否ラインではない
閾値について、同ドキュメントはこう記しています。「ひとつの推奨は、VIFが5より大きければ、その説明変数は他の説明変数と強く共線的であり、そのためにパラメータ推定量の標準誤差が大きくなる、というものである」。
この文の書き出しが「ひとつの推奨は(One recommendation is)」であることに注意してください。絶対的な基準として提示されているわけではありません。 実務では「VIF 10以上が問題」という基準も広く使われていますが、この記事が確認した範囲でドキュメントに書かれているのは5という数字だけなので、それ以外の値はここでは扱いません。
そして、標準誤差が大きくなるという記述が、この閾値の意味そのものです。VIFが高いとは、係数が「間違っている」ということではなく、係数の当てにならなさが増しているということです。当てにならない数字を根拠に施策を決めれば、次の四半期に同じ分析をしたとき、違う答えが出ます。
符号が反転する仕組み
では、なぜ符号まで変わってしまうのか。scikit-learn のドキュメントが、具体例で示しています。
同ページは、年齢(AGE)と経験年数(EXPERIENCE)という相関する2変数を扱い、こう述べています。「AGEとEXPERIENCEの係数は強い変動の影響を受けている。これは2つの特徴量の共線性によるものかもしれない。AGEとEXPERIENCEはデータの中で一緒に動くため、その効果を切り分けることが難しい」。
さらに、交差検証の各分割で係数を可視化した結果について、こう記述しています。「2つの領域が現れる。EXPERIENCEの係数が正のときAGEの係数は負であり、その逆もまた然り」。
つまり、同じデータの別の分割を使っただけで、どちらの変数がプラスでどちらがマイナスかが入れ替わるということです。年齢と経験年数は一緒に増えるので、モデルから見れば「どちらか一方に効果を割り当てて、もう一方で調整する」という組み合わせが何通りも成立します。データが少し変わるだけで、選ばれる組み合わせが変わります。
冒頭の「広告費を増やすと売上が下がる」という係数も、この形で説明がつくことがあります。広告費と、たとえば店舗数や営業人数が一緒に増えているなら、モデルはその効果をどこかに割り当てなければなりません。割り当ての結果として、広告費にマイナスが回ってくることは起こりえます。
なぜ「符号が逆=そういう事実だ」と読んでしまうのか
この誤読には、構造的な理由があります。
ひとつは、出力が断定の形をしているからです。分析結果の表には、係数の値が小数点以下まで並びます。「-0.34」という数字は、それ自体が確かさを演出します。標準誤差の列が隣にあっても、意思決定の場で読み上げられるのは係数のほうです。
もうひとつは、意外な結果ほど「発見」に見えることです。想定通りの結果は報告しても面白くありませんが、「実は広告は逆効果でした」は会議で注目を集めます。注目を集める結果ほど、検算されずに通ってしまう傾向があります。
そして三つ目に、相関のチェックが分析の前段にあることがあります。多重共線性の確認は、モデルを回す前の準備作業として教わることが多く、結果が出たあとに立ち返る対象として扱われていません。結果に驚いたとき、前段の準備に戻る発想が出てきにくい構造になっています。
一方を消すと、残ったほうは安定する
対処についても、scikit-learn のドキュメントは具体的に示しています。相関する2変数の一方(AGE)を除いたところ、「EXPERIENCEの係数推定は変動が大幅に減少した。EXPERIENCEは交差検証で訓練したすべてのモデルで重要なままだった」とされています。
ただし、ここには判断が必要です。変数を消すのは統計上の処理ですが、消してよいかどうかは業務上の問いです。
年齢と経験年数の例で言えば、「経験年数の効果を知りたい」のか「年齢の効果を知りたい」のかによって、消してよい変数が変わります。両方を同時に、それぞれ独立の効果として知りたいのであれば、そもそもこのデータでは答えが出ない、という結論になることもあります。
分析が止まったときに必要なのは、多くの場合もっと高度な手法ではなく、何を知りたかったのかに戻ることです。
係数を因果として読まない
もう一点、同ドキュメントが明示していることがあります。「線形モデルは統計的関連を測る優れた道具だが、因果について述べるときは慎重であるべきだ。結局のところ、相関は必ずしも因果を意味しない。(中略)係数は注意して解釈されるべきである」。
これは多重共線性がない場合にも当てはまる注意です。係数が安定していて、標準誤差も小さく、符号も想定通りだったとしても、それは「その変数を動かせば結果が動く」という意味にはなりません。
実務でこの区別が要るのは、係数を施策の期待効果として使う場面です。「広告費の係数が0.8だから、100万円増やせば80万円の売上増」という読み方は、統計的関連を因果の見積もりに変換しています。その変換が妥当かどうかは、係数の数値からは判断できません。
確かなことと、まだ確かではないこと
確かなこと:statsmodels がVIFを「変数を追加したときのパラメータ推定量の分散の増加を測る指標」「多重共線性の指標」と定義していること。「VIFが5より大きければ強く共線的で標準誤差が大きくなる」という推奨が示されていること。scikit-learn が相関する2変数の係数が強い変動を受けるとし、交差検証の分割ごとに符号が入れ替わる2領域が現れると記述していること。一方の変数を除くと残った変数の変動が大幅に減ると示していること。因果について述べる際は慎重であるべきとしていること。
まだ確かではないこと:VIFの閾値について、この記事が確認できたのは「5より大きい」という推奨のみです。他の基準値については扱っていません。また、多重共線性が予測精度そのものにどう影響するかは、今回参照した2ページの範囲では確認していないため書いていません。scikit-learn の符号反転の例は、同ページが使用している特定のデータセットにおける観測であり、あらゆるデータで同じ形になるという主張ではありません。
なお、参考として挙げられることのあるNIST Engineering Statistics Handbookの該当ページ候補を確認しましたが、取得したページは残差の独立性(ラグプロット)を扱ったもので、多重共線性の記述はありませんでした。本記事では出典として使用していません。
判断軸の提示
係数の符号に驚いたら、係数を解釈する前に、説明変数どうしの関係を見に戻ること。
想定と違う結果が出たとき、私たちはその結果を説明する物語を探しに行きます。「広告のクリエイティブが悪かったのではないか」「計測期間に季節要因があったのではないか」。どれもありうる話ですが、その前に確認できることがあります。
順序としては、次のようになります。
- 説明変数どうしの相関を見る — 一緒に動いている変数の組がないか
- VIFを計算する — 分散がどれだけ膨らんでいるか。5より大きい変数があれば、その係数の標準誤差は大きい
- データの分割を変えて回し直す — 係数の符号や大きさが安定しているか。分割で変わるなら、その係数は施策の根拠にできない
- 何を知りたかったのかに戻る — 相関する変数のどちらの効果を知りたいのかが決まれば、残す変数も決まる
3番目が実務では最も効きます。追加のライブラリも理論も要らず、期間を分けて2回回すだけで、その係数が使える数字かどうかが分かります。
自分でも試せる、最小の検証
いま持っている回帰分析の結果で、施策の根拠として使っている係数を1つ選んでください。 そのうえで、データを前半と後半に分けて、同じモデルを2回回します。
2つの係数を並べたとき、符号が同じで、大きさも近ければ、その数字は少なくとも安定しています。符号が変わる、あるいは大きさが倍以上違うなら、その係数を根拠に金額を動かすのは早すぎます。次に見るのは、その変数と一緒に動いている別の変数がないかどうかです。
この記事で扱ったような分析の判断を、自社の状況に照らして整理したい場合は、無料診断ツールで状況を言語化するところから始めることができます。
状況を整理する(15分)