回帰分析って知ってる?―完全に理解した人へ贈る絶望の谷
はじめに
回帰分析って知ってますか?
こんな質問されたらゾッとしますよね。知らないというわけでもないですが、きっとかなり深いレベルで知っていないとボコボコにされるでしょう。
R言語の lm() や Python の sklearn.LinearRegression() を呼び出して、推定した回帰係数を眺めたことがある、紙とペンでOLSによる係数を求めたことがある、OLS推定量がBLUEであることを確かめた、因果効果を回帰分析で推定した。。。どこまでやれば回帰分析を「知っている」と言って良いのでしょうか。
そんなことは何でも良いのです。とにかく回帰分析はシンプルながら、最も奥深いテーマの一つであり、多層的に理解する必要があります。
この記事では、回帰分析の理解をLevel 0(道具として使うだけ)からLevel 5(高次元データにおけるDMLなど)まで、6段階に分けて解説します。各レベルで「何が見えるようになるか」「どこに崖があるか」を丁寧に追っていきます。
思いの外分量のある記事になってしまったので、対象ごとにお勧めの章を整理しておきます。
| 読者 | おすすめの読み方 |
|---|---|
| 回帰分析を使ったことがある程度の読者 | Level 1と Level 2 |
| 機械学習寄りの読者 | Level 3 と Level 5 |
| 因果推論に興味がある読者 | Level 4 と DML |
回帰分析への理解は、ダニングクルーガー効果の絶望の谷を味わい続けるのにもってこいです。さて、本記事を通じて一度「絶望の谷」に落ちて、そこから一緒に「啓発の坂」を登っていきましょう。

https://hrmos.co/trend/talent-management/5397/ より引用。
Level 0: 道具としての回帰
最初の段階は、回帰をブラックボックスのツールとして使う段階です。
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
print(model.coef_, model.score(X, y))
この程度の実装はAIで書けるレベルを通り越してもはやボイラープレート[1]で、書けること自体に価値はありません。
回帰分析をこんな感じで捉えている人は多いでしょう:
回帰係数の符号と大きさを見て「学歴は効いてる」「経験年数も正に効いてる」と語ります。R²が0.7なら「全体的にまあまあ説明できてる」と判断する感じです[2]。
この段階の限界は明らかで、以下の問いに答えられません。
- 係数が現実世界において何を意味するのか
- いつどんな時にその係数を信じていいのか
- 「効いてる」とはどういう意味か
ここから先のレベルで、これらの問いに段階的に答えられるようになっていきます。
Level 1: 古典的な統計的解釈
このレベルは簡単な統計学の教科書を一通り学び終えた水準です。回帰分析の理論は習得しているものの、深くは踏み込んでいない、統計検定でいうところの2級水準のイメージです。具体的には以下の事柄を理解している状態です。
最小二乗法の幾何学
線形回帰モデルを行列で書きます。
ここで
最小二乗推定量(OLS)は残差二乗和を最小化することで得られます(今後断りなしに推定したパラメータにはハット(^)をつけます)。
OLSの計算詳細
1. 目的関数の定義と展開
最小化したい目的関数(残差平方和)を
これを展開します。転置の性質
ここで、第2項と第3項はどちらもスカラー(
2. 行列による微分
この関数
以下の行列微分の公式を使用します。
行列微分の公式
\frac{\partial (\mathbf{a}^\top \mathbf{x})}{\partial \mathbf{x}} = \mathbf{a} ( \frac{\partial (\mathbf{x}^\top \mathbf{A} \mathbf{x})}{\partial \mathbf{x}} = (\mathbf{A} + \mathbf{A}^\top)\mathbf{x} が対称行列なら \mathbf{A} ) 2\mathbf{Ax}
これらを適用すると:
※
3. 正規方程式の解
勾配を
最後に、
このOLS計算では予測誤差の二乗和を最小にする係数を求めていますが、幾何学的に理解することも重要です。

回帰分析の幾何学的理解。
このアニメーションを説明していきます。
空間設定
このアニメーションの空間は
- 観測ベクトル
:y 個のサンプルの値を並べたベクトルです。これはn 次元空間n の中の「1点」を指します。\mathbb{R}^n - データ行列
:X 行列であり、各列ベクトルn \times p はすべてx_1, x_2, \dots, x_p のベクトルです。\mathbb{R}^n
まずは黒矢印に着目してください。これは基底ベクトルです(
念の為の補足ですが、これはあるデータ
データ生成プロセス
次にデータ生成プロセスを考えます。
-
真の平均
(緑色の矢印):\eta
自然界や社会における「真のルール」[4]による値です。通常分析者は知る術がありません。 -
モデル内成分
(青色の矢印):\eta_0
真の平均のうち、我々が用意した説明変数 で説明できる部分です。平面上に位置しています。x_1, x_2 -
バイアス
(オレンジ色の矢印):\eta_1
真の平均のうち、用意した変数では説明しきれない「モデルの不備」による成分です。平面に対して垂直(直交)な成分として描かれています。本来は の説明に必要だった説明変数y などを分析者が入手できなかったという状況です。この成分の分解をx_3, x_4 と記述します。いわゆるバイアスと呼ばれるものです。\eta = \eta_0 + \eta_1 -
観測値
(赤色の矢印):y
真の平均 に、さらにノイズ(誤差\eta )が加わった、私たちが実際に手にするデータです。データは観測誤差なども含めて、あらゆる原因で乗っかります。\epsilon
最小二乗法による推定(直交射影)
私たちがやりたいことは、手元にある赤色の矢印
- 推定値
(紫色の矢印):\hat{y}
観測値 を平面y に向かって「垂直に」落とした点です。これを直交射影と呼びます。赤矢印の観測値M(X) のノイズによって、この紫の矢印は振り回されることになり、それをバリアンスと呼びます。y - なぜ垂直なのか?:
平面上の点の中で との距離(残差の二乗和)を最小にする点は、幾何学的に「垂直に下ろした足」になるからです。y
幾何学的視点から見たバイアス・バリアンストレードオフ
説明変数が少なすぎると、モデルの表現力不足に陥ります。真の平均値と、モデルで表現できる平面との間の距離が開いてバイアスが大きくなります。一方、変数を増やしすぎてモデルが複雑になると、ノイズに反応しやすくなってしまいます。その分、平面自体が真の値に近付いてくれるはずなのでバイアスは小さくなります。
回帰分析の道具
この段階の理解をしている人は以下の事柄も理解していることでしょう。
検定と信頼区間
最小二乗法そのものは、誤差項の分布に特定の仮定を置かなくても計算可能です。しかし、推定された係数が「偶然得られたものではないか」を統計的に検定するためには、誤差項に関する強い仮定が必要になります。
ここで、誤差項ベクトル
この「正規性の仮定」を置くことで、推定量
この性質を起点に、回帰分析における代表的な2つの検定が構成されます。
1. 個別係数のt検定
「ある特定の説明変数が、目的変数に対して本当に影響を与えているか」を確認するための検定です。
通常、帰無仮説
真の誤差分散
この
2. モデル全体の有意性を評価する F検定
「構築した回帰モデル全体が、単なる定数モデル(平均値予測)よりも意味のある予測をしているか」を確認するための検定です。
帰無仮説として、定数項以外のすべての回帰係数がゼロである(
この統計量は、自由度
自由度調整済み決定係数
決定係数
ただし
多重共線性
説明変数同士が強く相関していると、
有名な診断指標は VIF(Variance Inflation Factor) です。
ここで
残差診断
最小二乗法(OLS)による推定が適切であるためには、誤差項に関して「線形性・等分散性・正規性・独立性」といった前提条件が満たされている必要があります[7]。これらを視覚的に確認する作業が回帰診断です。
主に以下の4つのグラフを確認します。
- Residuals vs Fitted(残差 vs 予測値):線形性と等分散性の確認。平均 0 の周りにランダムに分散していれば OK。データに順番やIDがあって、誤差に周期性があってもよろしくないです。
- Normal Q-Q:誤差項の正規性の確認。点が直線上に並んでいれば OK。
- Scale-Location:等分散性の確認。標準化残差の絶対値の平方根をプロットし、ばらつきに偏りがないかを見ます。
- Residuals vs Leverage:外れ値と影響力の確認。クックの距離(Cook's distance)が大きく、モデルに過度な影響を与えているデータ点がないかをチェックします。

回帰診断図。
Level 1 のまとめ
このレベルに達した分析者は、回帰分析を「ブラックボックスの関数呼び出し」ではなく、最小二乗法という最適化問題の解として、また
- OLS推定量を行列で導出し、その幾何学的意味(列空間への射影)を説明できるか?
- t検定・F検定が「何を仮定して」「何を主張している」のかを区別できるか?
-
と自由度調整済みR^2 の違い、多重共線性のVIF、残差診断の4プロットの意味を語れるか?R^2
こうした道具立てを使いこなし、実務で統計的な分析が一通り回せるようになれば、Level 1 です。多くの統計学の教科書ではこの辺りまで書かれており、ある程度簡単な実務で統計的な処理をする分には問題がない水準と思います。
ただし、ここまでの理解は、データに対する仮定が満たされている場合に過ぎず、その仮定自体を問う段階にはまだ訪れておらず、先は長いです。
Level 2: ガウス=マルコフ定理と仮定の体系
ガウス=マルコフ定理の理論的背景と、その仮定が満たされなかった場合の対処法(処世術)を身につけていると Level 2 です。
ガウス=マルコフ定理
OLSが「良い推定量」である根拠は何か?その答えがガウス=マルコフ定理です。
BLUEは平たくいうと、不偏(平均的に間違わない)であるシンプルな計算式(線形)の中で、一番ブレが少なく信用できる推定量ということです。手元のデータで線形回帰する場合、いつものOLSを使うのが最も精度が良いということを言っています。
仮定(A1〜A4):
-
線形性:
\mathbf{y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\varepsilon}
目的変数 が、説明変数\mathbf{y} とパラメータ\mathbf{X} の線形結合で表されるという仮定です。ここで重要なのは「パラメータ\boldsymbol{\beta} に対して線形である」ということであり、説明変数自体が\boldsymbol{\beta} やx^2 のように非線形であっても構いません。また、これは「真のデータ生成プロセスがこの数式通りである(必要な変数が過不足なく含まれている)」という、モデルの正しい定式化自体を要求する強い仮定でもあります。\log(x) -
外生性(厳密外生性):
\mathbb{E}[\boldsymbol{\varepsilon} \mid \mathbf{X}] = \mathbf{0}
説明変数 がどんな値をとったとしても、誤差項\mathbf{X} の期待値はゼロである、という仮定です。直感的には「観測できないノイズ\boldsymbol{\varepsilon} の中に、説明変数\boldsymbol{\varepsilon} と連動して動くような隠れた要因(情報)が残っていない」ことを意味します。\mathbf{X}
これが満たされない代表例が欠落変数バイアスです。例えば、賃金を予測するモデルで「個人の本来の能力」をデータ化できず誤差項に押し付けた場合、能力と学歴(説明変数)には相関があるため、この外生性の仮定が崩壊してしまいます。 -
等分散性・無相関:
\text{Var}(\boldsymbol{\varepsilon} \mid \mathbf{X}) = \sigma^2 \mathbf{I}
行列 (\sigma^2 \mathbf{I} は単位行列)という美しい形は、2つのことを同時に仮定しています。\mathbf{I} -
等分散性:対角成分がすべて
。つまり、説明変数の値によらず、誤差のばらつきの大きさが常に一定であること。例えば「企業の規模が大きくなるほど、利益の予測誤差も大きくなる」ようなデータではこの仮定に反します。\sigma^2 -
無相関:非対角成分がすべて
。あるサンプルの誤差が、別のサンプルの誤差に影響を与えないこと(自己相関がないこと)。時系列データ等ではしばしばこの仮定が破られます。0
-
等分散性:対角成分がすべて
-
の列フルランク\mathbf{X}
説明変数の中に「他の変数の完全な組み合わせで作れる変数」が存在しない、という数学的な仮定です(完全な多重共線性がないこと)。
もし、身長をcmで表した変数とmで表した変数を同時にモデルに入れたり、カテゴリカル変数のダミー変数を「すべて」入れてしまったり(ダミー変数の罠)すると、各列が線形従属になります。その結果、行列 の逆行列が存在しなくなり、計算式の上でOLS推定量\mathbf{X}^\top\mathbf{X} を求めること自体が不可能になります。\hat{\boldsymbol{\beta}}
BLUEであることの証明(導出)
なぜOLS推定量
任意の線形推定量を
ここで、
1. 不偏性の条件
これが任意の
したがって、
2. 分散の比較
次に、
ここで
不偏性の条件
したがって、
任意の行列
以上により、OLS推定量
仮定に対する違反とその影響
Level 2の分析者には、各仮定が満たされなかった場合に、「どの性質が失われるのか」を明確に区別できるようになっていることが求められます。
| 仮定 | 満たされない場合に失われる性質・生じる問題 |
|---|---|
| 線形性(A1) | モデル自体の誤特定となり、推定された係数の解釈が不適切になる |
| 外生性(A2) | 推定量の不偏性および一致性が失われる(内生性バイアス) |
| 等分散性(A3) | 不偏性は保たれるが、効率性が失われ、標準誤差の推定が不適切になる |
| 列フルランク(A4) | 逆行列 |
実務上、A2(外生性)の仮定に対する違反が多く、深刻化しやすいです。これは点推定自体が真のパラメータから乖離してしまうためです(欠落変数バイアスや同時決定などの問題)。
一方、A3(等分散性)の仮定が満たされない場合、点推定の不偏性・一致性は維持されます。この場合、OLS推定量自体を捨てるのではなく、不均一分散に頑健な標準誤差(ロバスト標準誤差)を用いて標準誤差の計算式を修正するアプローチが一般的です。
1. 線形性の仮定が崩れた場合(モデルの誤特定)
データの真の姿が非線形であるにもかかわらず、単純な直線を当てはめてしまうと、係数の解釈が歪み、予測精度も低下します。この場合、OLSの枠組み(パラメータについて線形)を維持しつつ、変数の表現を工夫するか、あるいは別のアルゴリズムに頼るかの選択になります。
変数変換と多項式の追加
実務で最も頻繁に行われるアプローチです。散布図や残差プロットを確認し、関係性が直線でない場合は説明変数を変換してモデルに投入します。
-
対数変換(
): 経済データ(賃金、売上、人口など)で頻出します。「\log(x) が1%変化したときにx が何%変化するか(弾力性)」という解釈が可能になり、極端に大きな外れ値の影響を抑える効果もあります。y -
多項式の追加(
): 「年齢と賃金(中年でピーク)」「気温と電力消費(夏と冬にピーク)」のように、U字型や逆U字型の関係が想定される場合、説明変数にx^2, x^3 だけでなくx を同時に投入します。パラメータx^2 に対しては依然として線形であるため、OLSがそのまま適用できます。\boldsymbol{\beta}
ラムゼイのRESET検定(Ramsey RESET Test)
「自分の作ったモデルが適切に線形性を捉えられているか(重要な非線形項を見落としていないか)」を統計的にチェックする処世術です。
- まず通常のモデルで回帰し、予測値
を求めます。\hat{\mathbf{y}} - 次に、その予測値の2乗や3乗(
)を新たな説明変数として元のモデルに追加し、再度回帰を行います。\hat{\mathbf{y}}^2, \hat{\mathbf{y}}^3 - もし追加した項の係数が統計的に有意であれば、「モデルにはまだ表現しきれていない非線形な構造が残っている(誤特定がある)」と判断し、変数変換などを再検討します。
機械学習手法への切り替え
分析の目的が「係数から因果関係を解釈すること」ではなく、「未知のデータを高精度で予測すること」である場合の手段です。
ランダムフォレストや勾配ブースティング(LightGBMなど)の決定木ベースのアルゴリズムは、特徴エンジニアリングを頑張らなくとも、データから非線形性や変数間の相互作用を自動的に学習してくれますし、解釈性を除けばニューラルネットワークは心強い味方です。
2. 外生性の仮定が崩れた場合(内生性問題)
説明変数と誤差項が相関してしまう内生性は、推定量の不偏性・一致性を破綻させる最も深刻な問題です。これを解決するには、相関の根源(交絡や逆因果)を断ち切るアプローチが求められます。
操作変数法(IV)と2段階最小二乗法(2SLS)
内生性を持つ説明変数(
これには、以下の2条件を満たす 操作変数(
-
関連性: 操作変数
は、問題の説明変数Z と強い相関を持つ。X -
除外制約: 操作変数
は、誤差項Z とは無相関であり、\boldsymbol{\varepsilon} を通じてのみ目的変数X に影響を与える。Y
【2SLSの手順】
-
第1段階:
をX で回帰し、Z の予測値X を求めます。この\hat{X} は\hat{X} によって作られているため、誤差項とは無相関になります。Z -
第2段階: 本来の目的変数
を、生のY の代わりにX で回帰します。これにより、内生性バイアスを取り除いた真の因果効果\hat{X} を推定できます。\boldsymbol{\beta}
パネルデータ分析(固定効果モデル)
同一の個人や企業を、複数期間にわたって観測したデータ(パネルデータ)がある場合に使える処世術です。
欠落変数バイアスの多くは、「個人の持って生まれた能力」や「企業の立地」など、観測できないが時間的に変化しない要因(個体固有効果)によって引き起こされます。
固定効果モデルでは、各個体専用のダミー変数を投入する(あるいは個体ごとの平均値を引き算して消去する)ことで、これらの「見えない要因」を丸ごと吸収・排除します。これにより、時間とともに変化する変数の純粋な効果だけを抽出できます。
3. 等分散性・無相関の仮定が崩れた場合への処世術
この仮定が崩れても、OLS推定量の係数
不均一分散下での効率性のロス
実際に、等分散性の仮定が崩れ、誤差項の分散共分散行列が
このとき、通常のOLS推定量
一方、この不均一分散の構造
エイトケンの定理(ガウス=マルコフ定理の一般化)により、任意の線形推定量の中でGLSが最小分散を持つため、両者の分散共分散行列の間には必ず以下の大小関係が成立します。
どれくらい効率が悪くなるのか?
この分散の差(=無駄にしてしまった効率性)の大きさは、説明変数
例として「企業の規模(
最適な推定量であるGLSは、分散の逆数行列
しかしOLSは、分散の大きさに限らず全てのデータを平等に扱うため、大企業データの巨大なノイズ(たまたまの大きな外れ値)に回帰直線が激しく引っ張られてしまいます。この連動が強いデータであるほど、OLSの分散はGLSよりも大きくなってしまいます(効率性の悪化)。
ロバスト標準誤差(不均一分散に頑健な標準誤差)
実務分析においてよく使う方法です。OLSのデフォルトの分散共分散行列の計算式 cov_type='HC3' などを指定するだけで計算してくれます。
クラスター化ロバスト標準誤差
データの中に「同じクラスの生徒」「同じ都道府県の企業」「同一人物の複数年のデータ(パネルデータ)」といったグループ(クラスター)構造がある場合、同一クラスター内のサンプル同士は似たような未観測のショックを共有するため、誤差項に相関(空間的・時間的な自己相関)が生じます。
これを無視して通常の標準誤差を計算すると、実質的な情報量を過大評価してしまいます。たとえば「同じクラスの生徒40人」のデータは、完全に独立した40人分の情報を持っているわけではありません。これを独立だと仮定して分析すると、標準誤差が不当に小さく(t値が不当に大きく)計算され、本当は有意でないのに有意と判定してしまう危険性が非常に高くなります。これをモウルトン・バイアス(Moulton bias)と呼びます。
クラスター構造とサンドイッチ推定量
全データ数を
モデルをクラスターごとに分割して書くと、以下のようになります。
通常のOLSはすべての誤差項が無相関だと仮定しますが、クラスター構造がある場合、異なるクラスター間の誤差は無相関(独立)ですが、同じクラスター内の誤差には相関があると考えます。つまり、(データをクラスターで固めて並び替えれば)誤差項の全体の分散共分散行列
この構造を許容した上で、正しい分散を推定するのがクラスター化ロバスト分散推定量(CRVE: Cluster-Robust Variance Estimator) です。通常のロバスト標準誤差(Huber-White推定量)の考え方を拡張し、個別の残差の2乗の代わりに、クラスターごとの残差ベクトル
この式が意味するのは、クラスター内の任意の相関(不均一分散を含む)を許容しつつ、漸近的に正しい標準誤差を計算できるということです。ただし、この大数の法則が機能するためにはクラスターの数
【実務での処世術・実装方法】
実務の分析では非常によく使います。数式は複雑ですが、実装はオプション一つで解決してしまいます。
Python(statsmodels)の場合
fit() メソッドの引数に cov_type='cluster' を指定し、どの変数がクラスターを示すのかを渡します。
import statsmodels.formula.api as smf
# 'cluster_id'という列がクラスター(県や学校など)を表すとします
model = smf.ols('y ~ x1 + x2', data=df)
# クラスター化ロバスト標準誤差を指定して推定
result = model.fit(cov_type='cluster', cov_kwds={'groups': df['cluster_id']})
print(result.summary())
Rの場合
estimatr パッケージの lm_robust() を使うのが最も簡単です。
library(estimatr)
# clusters引数にクラスターのIDを指定するだけ
result <- lm_robust(y ~ x1 + x2, data = df, clusters = cluster_id)
summary(result)
どちらの言語でも、出力される係数の推定値(coef)自体は通常のOLSと全く同じ値になります。しかし、標準誤差(std err)がクラスター構造を加味して適切に大きめに補正され、それに伴いt値とp値がより慎重な値に変化していることが確認できるはずです。
一般化最小二乗法(GLS / FGLS)
ロバスト標準誤差が「OLSの計算結果をそのまま残し、標準誤差の計算式だけを後から補正する」という対症療法であるのに対し、GLS(一般化最小二乗法)は「データを根本から変換することで、OLSが再びBLUE(最小分散)となる性質を取り戻す」というアプローチです。
なぜデータを変換するのか?
不均一分散や自己相関が存在する場合、誤差項の分散共分散行列は
ここで、行列の性質から
元の回帰モデル
これを新しい変数
分散共分散行列が単位行列
したがって、この変換されたデータに対して通常のOLSを適用すれば、ガウス=マルコフ定理が再び成立し、BLUE(最良線形不偏推定量)が得られます。
この推定量
この式の直観的な理解としては、
実行可能一般化最小二乗法(FGLS)による実務的アプローチ
理論上は完璧なGLSですが、実務においては真の分散共分散行列
そこで実務では、
【FGLSの一般的なステップ】
-
とりあえずOLSを実行: 通常のOLSで
を\mathbf{y} に回帰し、とりあえずの残差\mathbf{X} を求めます。\hat{\boldsymbol{\varepsilon}} -
分散の構造をモデリング: 残差の2乗
が「何によって大きくなるのか」をモデル化します。例えば、ある変数\hat{\varepsilon}_i^2 が大きくなるほど分散が広がると想定される場合、x_{1i} のような補助回帰を行います。\log(\hat{\varepsilon}_i^2) = \alpha_0 + \alpha_1 x_{1i} + v_i -
重みの作成: 補助回帰の予測値から、各サンプルの分散の推定値
を計算し、これを用いて推定された分散共分散行列\hat{\omega}_i^2 を構築します。\hat{\boldsymbol{\Omega}} -
FGLSの実行: 推定した
をGLSの公式に代入し、最終的な係数\hat{\boldsymbol{\Omega}} を計算します。\hat{\boldsymbol{\beta}}_{\text{FGLS}} = (\mathbf{X}^\top\hat{\boldsymbol{\Omega}}^{-1}\mathbf{X})^{-1}\mathbf{X}^\top\hat{\boldsymbol{\Omega}}^{-1}\mathbf{y}
大標本においては、分散構造のモデルが正しい場合、
def fgls_diagonal(y, X, z_vars=None, max_iter=1, tol=1e-6):
if z_vars is None:
z_vars = X
beta_prev = None
for it in range(max_iter):
# Step 1: とりあえずOLSを実行し、残差を得る
if it == 0:
resid = sm.OLS(y, X).fit().resid
else:
resid = y - X @ beta_prev
# Step 2: 分散の構造をモデリング
# log(残差²) を z_vars に補助回帰
log_e2 = np.log(resid**2 + 1e-12)
aux_res = sm.OLS(log_e2, z_vars).fit()
# Step 3: 重みの作成
# 補助回帰の予測値から ω̂_i² を計算 → Ω̂ を構築(対角なので重みベクトルで表現)
omega_hat = np.exp(aux_res.fittedvalues)
weights = 1.0 / omega_hat
# Step 4: FGLSの実行
# β̂_FGLS = (Xᵀ Ω̂⁻¹ X)⁻¹ Xᵀ Ω̂⁻¹ y を解く
W_sqrt = np.sqrt(weights)
X_w = X * W_sqrt[:, None]
y_w = y * W_sqrt
beta_new = np.linalg.lstsq(X_w, y_w, rcond=None)[0]
if beta_prev is not None and np.max(np.abs(beta_new - beta_prev)) < tol:
break
beta_prev = beta_new
return beta_new, omega_hat
4. 列フルランクの仮定が崩れた場合(多重共線性)への処世術
完全な多重共線性は、データに由来する避けられない問題というよりも、分析者によるミスです。
冗長なダミー変数
完全な多重共線性の代表例として、ダミー変数の種類の数だけダミー変数を用意してしまうものがあります。
例えば、「春・夏・秋・冬」という4つの季節カテゴリがあるとき、4つすべてのダミー変数をモデルに入れると、それらの和が常に「1(定数項と同じ)」になり、完全な線形従属が発生して逆行列が計算できなくなります。
これの対処は簡単で、カテゴリが
※補足:「完全ではないが、強い」多重共線性への処世術
実務でより頭を悩ませるのは、相関係数が0.9を超えるような「強いが完全ではない多重共線性」です。計算自体は実行できてしまうものの、推定量
- VIF(分散拡大係数)の確認: 各説明変数が他の説明変数からどれくらい説明されてしまうか(多重共線性の深刻度)を測る指標です。一般にVIFが10を超える変数は、多重共線性の原因として警戒されます。
- 変数の統合・削除: 「体重」と「BMI」のように、意味的に重複している変数はどちらか一方を削除するか、主成分分析(PCA)などで1つの指標に統合します。
- 正則化手法(Ridge回帰・Lasso回帰): 予測を目的とする場合、ペナルティ項を設けることで係数が極端な値をとることを防ぐリッジ回帰などが極めて有効です。あえて推定量にわずかな「バイアス(偏り)」を入れる代償として、分散を劇的に縮小させ、安定したモデルを構築する処世術です。
Level 2のまとめ
このレベルに達した分析者は、OLSがBLUEであることの恩恵と脆さを同時に理解しています。ガウス=マルコフの仮定は、回帰分析が成立するための土台ですが、どれが崩れたときに何が失われるのかを区別できることが重要です。
- 仮定A1〜A4のうち、どれが崩れると「不偏性」が失われ、どれが崩れると「効率性」だけが失われるのかを即答できるか?
- 内生性、不均一分散、自己相関、多重共線性に対して、それぞれ操作変数法・ロバスト標準誤差・クラスター化標準誤差・GLS/FGLSといった処世術を、状況に応じて選択できるか?
- 「ロバスト標準誤差をつけておけば安心」ではなく、なぜそれが必要なのかをサンドイッチ分散の式から説明できるか?
仮定の意味とその違反への対処を体系的に語れるようになれば、Level 2です。しかしここまでは「不偏推定量の中で最良を目指す」範疇であり、あえてバイアスを受け入れるという発想はまだ登場していません。
Level 3: 予測と汎化への拡張
Level 2までの議論は、不偏推定量(
Level 3では、回帰の本質を「条件付き期待値の推定」と再定義し、バイアスとバリアンスのトレードオフを能動的に制御する手法群を扱います。
回帰の上位概念
統計的学習の枠組みにおいて、回帰問題は「入力
この解は、理論的には条件付き期待値
第1項はデータの本質的なノイズであり、
正則化:Ridge、Lasso
高次元データ(
正則化(Regularization)は、目的関数に残差平方和(RSS)以外のペナルティ項を加えることで、この分散を抑制します。
Ridge回帰(L2正則化)
係数の二乗和をペナルティとして加えます。
正規方程式を解くと、以下の解が導かれます。
ここで
Lasso回帰(L1正則化)
係数の絶対値の和をペナルティとして加えます。
L1ノルムの幾何学的性質により、多くの係数が正確に 0 になる「スパース性」が生じます。これは予測精度の向上と同時に、自動的な変数選択としての機能を果たします。なお、Ridgeと異なり解析的に解けないので数値的に解くことになります。
正則化の解釈:ベイズ推定との関連
正則化はベイズ統計学における最大事後確率(MAP)推定として解釈できます。
-
Ridge: 係数
に平均 0 のガウス分布を事前分布として仮定した場合のMAP推定。\boldsymbol{\beta} -
Lasso: 係数
にラプラス分布(二重指数分布)を事前分布として仮定した場合のMAP推定。\boldsymbol{\beta}
線形回帰
MAP 推定は事後分布を最大化する点なので、対数をとって、
尤度項はガウス誤差の仮定から、
したがって MAP 推定は次の最小化問題と等価になります。
Ridge の場合:
となり、
と一致します。
Lasso の場合:
となり、
と一致します。
事前分布の裾の重さと原点での尖りが、推定量の性質を決めています。ガウス事前は原点で滑らかなので係数を 0 方向に「縮小」するだけですが、ラプラス事前は原点で微分不可能な尖りを持つため、解が厳密に
バイアス-バリアンス分解
正則化がなぜ有効かを理解するための概念が、バイアス-バリアンス分解です。特定の点
OLSは不偏推定量であるため、バイアスは 0 ですが、モデルが複雑であったりデータが少なかったりするとバリアンスが非常に大きくなります。
正則化は、
非線形への一般化
線形モデルの枠組みを保ちつつ、データの非線形な関係を捉えるための拡張手法です。
多項式回帰とスプライン回帰
説明変数を
これに対し、スプライン回帰は領域を複数の区間に分割し、接続点(ノット)で連続かつ滑らか(一般に2次微分まで連続)になるよう低次多項式を当てはめます。

多項式回帰と自然キュービックスプラインの比較。高次の多項式回帰(赤)は学習データの範囲外で予測が極端に暴れる(ルンゲ現象)のに対し、自然スプライン(緑)はノット間で滑らかに結合しつつ、境界外では線形に保たれるためバリアンスが抑えられています。
特にB-スプラインや自然スプラインは、計算の安定性と解釈性のバランスに優れており、非線形なトレンドを捉えるための標準的な手法です。
一般化加法モデル(GAM)
複数の説明変数がある場合、各変数ごとの非線形効果を足し合わせた形でモデル化します。
各

一般化加法モデル(GAM)による成分プロットの概念図。各変数の非線形な影響(U字型、対数型など)を個別の関数
カーネル回帰
特定の関数形を仮定せず、予測したい点
ここで
Level 3のまとめ
このレベルに達した分析者は、不偏性に捉われず、予測の高性能化を目指せます。回帰の目的が「未知のデータをうまく予測する」ことに力点を置き、あえてバイアスを導入してバリアンスを削るというトレードオフが視野に入ってきます。
- 回帰の上位概念が「条件付き期待値
の推定」であることを理解し、線形回帰がその一特殊ケースだと位置付けられるか?\mathbb{E}[Y \mid X] - Ridge・Lassoを単なる「過学習対策」ではなく、ベイズ的にはガウス事前・ラプラス事前を置いたMAP推定として説明できるか?
- バイアス-バリアンス分解の各項を式で書き下し、
を動かしたときの各項の挙動を語れるか?\lambda - スプライン・GAM・カーネル回帰など、線形性の枠を保ったまま非線形性を取り込む手法を、目的に応じて使い分けられるか?
(自由度調整済み)決定係数
さて、ここまでの議論は「相関」の話であり、
Level 4: 因果推論へ
Level 3までで、私たちは「手元のデータに対して、予測するための妥当な線を引く方法」を習得しました。次の壁は、「回帰係数が有意であること、予測性能が高いこと」と「変数
Level4では、予測モデルとしての回帰を、因果推論のためのツールとして見ていきます。
観測データの限界と内生性
私たちが手にするデータの多くは、ランダム化比較試験(RCT)によって得られたものではなく、単なる観測データです。観測データにおいて、Level2で学んだガウス=マルコフの仮定 A2(外生性:
この仮定が崩れた状態を 内生性(Endogeneity) があると言います。内生性があるとき、OLS推定量は不偏性も一致性も失い、因果推論が適切にできなくなります。
内生性を引き起こす3パターン
-
欠落変数バイアス(OVB):
とX の両方に影響を与える「共通の要因」をモデルに入れられていない。Y -
同時決定(逆の因果):
がX を決めるだけでなく、Y もY を決めている(例:価格と需要)。X -
測定誤差: 説明変数
自体に誤差が含まれており、それが誤差項と相関してしまう。X
欠落変数バイアス(OVB)
まずは説明変数が欠落した場合(必要な変数を入力できていない場合)、推定した回帰係数が信頼できなくなることを確認します。
真のモデルが以下の2変数モデルであるとします。
ここで、分析者が
このとき、推定される係数
ここで、手元のデータ
最後に、期待値はをとると以下のようになります(ここで「誤差項
右辺の第2項が欠落変数バイアスです。
-
(入れ忘れた変数\beta_2 \neq 0 がx_2 に影響を与える)y -
(入れ忘れた変数\text{Cov}(x_1, x_2) \neq 0 がx_2 と相関している)x_1
この2条件が揃ったとき、
Frisch-Waugh-Lovell (FWL) 定理
次に、回帰分析において変数を追加する(コントロールする)と、因果推論に近づくのかを見ていきます。FWL定理 です。
FWL定理
重回帰モデルにおける y = \mathbf{X}_1 \boldsymbol{\beta}_1 + \mathbf{X}_2 \boldsymbol{\beta}_2 + \varepsilon は、以下の3ステップで得られる推定値と厳密に一致する。 \hat{\boldsymbol{\beta}}_1
を y で回帰し、その残差 \mathbf{X}_2 を求める。 \tilde{y} を \mathbf{X}_1 で回帰し、その残差 \mathbf{X}_2 を求める。 \tilde{\mathbf{X}}_1 を \tilde{y} で回帰する。 \tilde{\mathbf{X}}_1
この定理の主張は、「コントロールする」とは、悪影響を及ぼす変数の影響を事前に削除することです。
このプロセスを、情報(分散)の重なりを示すベン図で視覚的に理解してみましょう。
- Step 1 & 2の意味(フィルター)
とy の中には、それぞれ交絡因子x_1 によって作られた「不純物(x_2 と相関している部分)」が含まれています。ここでx_2 で回帰して残差をとるという行為は、「x_2 の(線形射影)成分を除くフィルター」にかけることと同じです。これにより、x_2 の(線形成分の)影響を取り除いた部分(x_2 と\tilde{y} )が抽出されます。\tilde{x}_1 - Step 3の意味(純粋な相関)
重回帰分析における の係数とは、この「x_1 の影響を完全に削ぎ落とした純粋な部分」の相関を見ていることになります。x_2

FWL定理を知っていると、重回帰分析をすれば因果関係がわかるという安易な考えを持たなくなるでしょう。私たちが本当に知りたい因果を抽出するためには、「モデルに入れていない未観測の変数」の影響までも、残差から完璧に削ぎ落とさなければならないのですが、データが存在しない以上それは不可能です。
だからこそ因果推論では、単なる回帰分析を諦め、「自然実験」や「操作変数」といった特殊なアプローチ(次節の識別戦略)を用いて、この「純粋な部分」を頑張って抽出しようと試みるのです。
識別戦略(Identification Strategy)
ここで紹介する戦略はすべて、擬似的なランダム化を作り出すための工夫です。
1. 操作変数法(IV / 2SLS)
-
2段階最小二乗法 (2SLS): 第1段階で
を作り、第2段階で\hat{X} = \text{Proj}(X \mid Z) をy に回帰します。\hat{X}
2. 固定効果モデル(Fixed Effects)
パネルデータを用いて、個体固有の「変わらない特性(性格、企業の社風など)」を、個体ごとの平均からの差分をとることで取り除きます。
これにより、観測不可能な時不変の交絡因子によるバイアスを取り除きます。
3. 差分の差分法(DID)
「政策が行われたグループ」と「行われなかったグループ」の、前後の変化の「差」を比較します。
共通のトレンドさえ仮定(平行トレンド仮定)できれば、説得力のある方法です。
4. 回帰不連続デザイン(RDD)
「テストが60点以上なら合格」といった閾値(カットオフ)を利用します。59点の人と61点の人は「ほぼ同じ」であるという仮定に基づき、カットオフ付近での
Level 4のまとめ
このレベルに達した分析者は、出力された回帰係数を安易に「効果」と解釈しません。
- この係数は内生性によって過大評価されていないか?
- どの変数をコントロールすべきで、どの変数を入れてはいけないのか(合流点バイアスなど)?
- そもそもこの効果は識別可能なのか?
こうした因果的な問いを持ち、バイアスを適切に取り除けられれば(取り除けないことを理解できていれば)、Level 4です。
Level 5: 超高次元
Level 3 では、Lasso や Ridge を「予測精度を上げるための正則化」として見ました。
Level 5 では一歩進んで、
p > n での問題
線形回帰モデル
を考えます。ここで
です。したがって
は使えません。
使えないというのは、最小二乗問題の解が存在しないのではなく、解が一意に定まらないのです。 実際、
なので、
このとき必要になるのが、「その中でどの解をもっともらしいと見なすか」という追加の最適化問題です。そこで重要になってくるのがスパース性(sparsity) です。
以後、必ずしも
スパース性と Lasso
高次元では、説明変数の総数
であると仮定することが多いです。これを スパース性 と呼びます。
ここで、
この仮定のもとで代表的なのが Lasso です。
Level 3 ではこれを「予測のための正則化」と見ましたが、Level 5 ではさらに一歩進めて、どの条件のもとで、Lasso が真の
1. 変数推定と変数選択は別物
Lasso について議論するとき、最初に区別すべきは次の 2 つです。
- (A) 推定された係数
が真の係数\hat\beta に近いか?\beta^\ast - (B) 推定されたサポート
が真のサポート\hat S = \operatorname{supp}(\hat\beta) と一致するか?S = \operatorname{supp}(\beta^\ast)
(A) は予測・推定誤差の問題、(B) は変数選択の一貫性 (selection consistency) の問題で、要求される条件のレベルが全く違います。
1-1. 推定誤差が小さくなるための条件: Restricted Eigenvalue 条件[13]
Lasso の解
を解いて得られます。
Lasso の最適性条件 (KKT 条件)
Lasso の解
【KKT 条件とは】
凸最適化問題
の最適解 \min_x f(x) では、目的関数の勾配が 0 になります( \hat x )。これが滑らかな場合の最適性条件です。KKT 条件はこれを拡張したもので、(i) 制約付き最適化や (ii) 微分不可能な目的関数にも対応できる最適性の必要十分条件です。 \nabla f(\hat x) = 0
Lasso の目的関数
は、
が成り立ちます。ここで
この式の意味を考えます。
が成立します。
コーン制約の導出
次に、誤差ベクトル
が成り立ちます。
が得られます。チューニングパラメータ
という basic inequality が導けます。
左辺は
を得ます。これが、本記事で扱う コーン制約
コーン制約の意味
この不等式は、誤差ベクトル
を主張しており、「Lasso の誤差は、真サポート方向の大きさの 高々 3 倍までしか、非サポート方向に広がらない」ことを意味します。これは
この結果は Lasso の誤差解析にとって重要です。
Restricted Eigenvalue (RE) 条件
真のサポートを
上のすべての
が成り立ちます。コーンの広さを決める定数として、ここでは 3 を採用しています(よく使われる値で、5 を使う流儀もあります)。
1-2. RE 条件のもとでの誤差レート
RE 条件と、適切なチューニングパラメータ
のもとで、Lasso は典型的に
というレートで真の係数に近づくことが示されます。これはサンプル数の対数オーダーで次元
ここで強調すべきは、RE 条件は「Lasso の推定誤差を抑える条件」であり、変数選択の完全一致を保証する条件ではないということです。
1-3. 真の変数集合を当てるための条件: Irrepresentable Condition
を要求します。直感的な理解としては、「本当は不要な変数が、本当に必要な変数を強く模倣できないこと」を要求している感じです。
さらに、信号強度も十分大きくなければいけません。具体的には、
のような beta-min 条件 が必要です。これは「真に非ゼロな係数は、ノイズに紛れない程度に大きい」という条件です。
1-4. 強さの順序
二つの条件には強弱の関係があります。
つまり、相関が中程度まで強くなると、予測と推定はうまくいくが、変数選択は失敗するというレジームに入ります。これが「Lasso は予測には強いが、選ばれた変数の解釈には注意」という実務の鉄則の理論的背景です。
1-5. 数値実験で確認する
理屈だけだとピンとこないので、実際に確認してみましょう。equicorrelation 構造(全特徴量が一様に相関
import numpy as np
from sklearn.linear_model import Lasso
def simulate(rho, n=300, p=60, s=5, n_trials=80):
rng = np.random.default_rng(0)
# equicorrelation: 対角 1, それ以外 rho
cov = np.full((p, p), rho)
np.fill_diagonal(cov, 1.0)
L = np.linalg.cholesky(cov + 1e-8 * np.eye(p))
# 真の係数: 最初の s 個だけが 1.5
beta_star = np.zeros(p)
beta_star[:s] = 1.5
support_true = set(np.where(beta_star != 0)[0])
l2_errors, exact_match = [], []
for t in range(n_trials):
Z = rng.normal(size=(n, p))
X = Z @ L.T
X = (X - X.mean(axis=0)) / X.std(axis=0)
y = X @ beta_star + rng.normal(scale=1.0, size=n)
lam = 1.5 * np.sqrt(2 * np.log(p) / n)
model = Lasso(alpha=lam, max_iter=30000).fit(X, y)
l2_errors.append(np.linalg.norm(model.coef_ - beta_star))
support_hat = set(np.where(np.abs(model.coef_) > 1e-6)[0])
exact_match.append(int(support_hat == support_true))
return np.mean(l2_errors), np.mean(exact_match)
複数の

相関
この実験結果には 3 つのレジームがあり、それぞれ理論と対応しています。
(A) 低相関領域 (
両方の指標が良好です。サポートは100% 完全回復できています。推定誤差は中程度の値ですが、これは
(B) 中相関領域 (
ここが最も興味深いレジームです。サポート完全回復率は急落し、
(C) 強相関領域 (
ここでは推定誤差も増加に転じ、
1-6. 実務的教訓
この実験から学べることをまとめます。
- 「Lasso は変数選択をしてくれる」は誤解: 変数間に相関があると IC が成り立たず、サポート回復は信頼できなくなります。
- 予測・推定だけが目的なら Lasso はそこそこ頑健: 中程度の相関までは推定誤差は大きく崩れません。
-
極端な多重共線性は両方を壊す:
では RE まで成立しなくなるため、Elastic Net や次元削減など別の手段を検討すべきです。\rho \to 1
この区別を理解していないと、「Lasso で選ばれた変数は重要な変数」などと誤った主張をする恐れがあります。
2. Post-Selection Inference の罠
Lasso に関して、実務でついやってしまいがちな罠があります。
Lasso で変数選択して、選ばれた変数だけで OLS を回し、普通の標準誤差で有意性検定する
これはそのままではNGです。
2-1. なぜダメなのか
理由は単純で、同じデータを使って「選ぶ」ことと「検定する」ことを両方やっているからです。選択イベント自体が
直感的には、「たまたま大きく見えた係数だけを拾って、そのあとで“やっぱり大きいですね”と検定している」状態です。これはいわゆる winner's curse [19]であり、p 値は過小評価され、信頼区間の被覆率もいい加減になります。
数式で書くと、通常の信頼区間
です。つまり、「選ばれた後」の条件付きでは、通常の 95% 信頼区間は 95% を保たないのです。
2-2. どう対処するか
大きく次の 3 つの方法があります。
| 方法 | アイデア |
|---|---|
| データ分割 (sample splitting) | 片方のデータで変数選択、もう片方のデータで推論する |
| 選択的推論 (selective inference) | 「その変数が選ばれた」という事象に条件付けて推論する |
| デバイアスド Lasso | Lasso のバイアスを解析的に補正して、漸近正規性を回復する |
上2つはイメージしやすいと思うので、次節では3 つ目のデバイアスド Lasso を詳説します。
3. デバイアスド Lasso
Lasso は
3-1. 補正
デバイアスド Lasso の推定量は
と書けます。ここで
理解を深めるために展開すると:
第 1 項と第 2 項を合わせると
3-2. 漸近正規性
適切な正則条件のもとで、各係数
が成り立ちます。ここで
もちろん、これは無条件に成立する魔法ではありません。設計行列の条件、真の係数の疎性、さらには
3-3. 実装と被覆率の確認
scikit-learn は直接サポートしていませんが、nodewise Lasso を使って自前で実装できます。
import numpy as np
from sklearn.linear_model import Lasso
from scipy import stats
def debiased_lasso_ci(X, y, j, lam, alpha=0.05):
"""j 番目の係数についてデバイアスド Lasso の 95% 信頼区間を返す"""
n, p = X.shape
# 通常の Lasso
lasso = Lasso(alpha=lam, max_iter=30000).fit(X, y)
beta_hat = lasso.coef_
residual = y - X @ beta_hat
sigma_hat = np.sqrt(np.sum(residual**2) / max(n - np.sum(beta_hat != 0), 1))
# nodewise Lasso: X_j を他の列で回帰して "逆共分散の j 行" を作る
X_minus_j = np.delete(X, j, axis=1)
x_j = X[:, j]
lam_node = np.sqrt(2 * np.log(p) / n)
nodewise = Lasso(alpha=lam_node, max_iter=30000).fit(X_minus_j, x_j)
gamma = nodewise.coef_
z_j = x_j - X_minus_j @ gamma # X_j の "予測できない部分"
tau_sq = (x_j @ z_j) / n
# デバイアス補正項
correction_factor = z_j / (n * tau_sq)
correction = correction_factor @ residual
beta_db = beta_hat[j] + correction
# 漸近分散から CI
se = sigma_hat * np.sqrt(np.sum(z_j**2)) / (n * abs(tau_sq))
z_alpha = stats.norm.ppf(1 - alpha / 2)
return beta_db, beta_db - z_alpha * se, beta_db + z_alpha * se
Naive (Lasso → OLS → 通常の CI) と Debiased Lasso で、それぞれ 95% 信頼区間の被覆率と平均幅を比較した結果が次の図です。

左: 95% 信頼区間の被覆率。点線が公称値 95%、これに近いほど良い結果です。Naive (赤) はどの
メッセージを 3 つに整理すると:
- Naive は失敗: 95% を一貫して下回り、相関とともに悪化していることが確認できます。これが正に Post-Selection Inference の罠です。
- Debiased Lasso は理論に近い: 中相関までは95% に近い被覆を保ちます。
-
極端な相関には限界がある: 極端な高相関 (
) ではデバイアスドの仮定 (\rho = 0.8 の疎性など) も次第に弱くなり、被覆率は徐々に低下します。それでも Naive よりは常に良いという結果になっています。\Theta
4. Double / Debiased Machine Learning (DML)
最後に、デバイアスドの考え方を機械学習による因果効果推定にまで拡張した DML を紹介します。これは Chernozhukov et al. (2018) [20] で体系化された枠組みです。
4-1. 部分線形モデル
シンプルな部分線形モデルを考えます。
-
: アウトカムY -
: 処置変数 (treatment)D -
: 高次元の共変量 (confounders)X -
: 知りたい因果効果\theta_0 -
: 複雑な局外 (nuisance) パラメータg_0, m_0 -
: ノイズ (U, V ,E[U|X, D] = 0 )E[V|X] = 0
ここで
一方、DML の partialling-out 表現では、次の2つの条件付き期待値を局外関数として推定します。
このとき、
であり、一般には
したがって、
となります。
つまり、
4-2. なぜ素朴に ML を入れるだけではダメなのか
のように
-
の正則化バイアス (ML 推定器は予測精度を上げるため一般にバイアスを含む)\hat g - 同じデータで
を学習・適用することによる過学習バイアス\hat g
が
4-3. DML の核心: 直交化と cross-fitting
DML はこの問題を 2 つのアイデアで解決します。
(1) Neyman 直交化
局外パラメータ
を使います。重要な性質は、
となること(Neyman 直交性)です。つまり
(2) Cross-fitting
データを
このとき、部分線形モデルの DML 推定量は実質的に
となります。これは見方を変えると、
で説明できる部分を X と Y の両方から取り除き、残差どうしを回帰している D
ことに相当します。この意味で DML は、Frisch–Waugh–Lovell (FWL) 定理の機械学習版と見なせます。
4-4. 理論的保証
十分条件の一つとして、局外パラメータの推定誤差が
を満たせば、
4-5. 実装で確認する
実装は驚くほどシンプルで、本質は数十行で書けます。
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
def naive_plugin(X, D, Y):
"""素朴な plug-in: 同じデータで g_hat を学習して Y から引く"""
rf = RandomForestRegressor(n_estimators=50, max_depth=8, random_state=0).fit(X, Y)
g_hat = rf.predict(X) # ← 同じデータで予測 (過学習バイアス)
return np.sum(D * (Y - g_hat)) / np.sum(D**2)
def dml_estimate(X, D, Y, K=5, seed=0):
"""cross-fitting + Neyman 直交スコア"""
n = len(Y)
kf = KFold(n_splits=K, shuffle=True, random_state=seed)
Y_resid = np.zeros(n)
D_resid = np.zeros(n)
for train, test in kf.split(X):
ell = RandomForestRegressor(
n_estimators=50,
max_depth=8,
random_state=seed
).fit(X[train], Y[train])
m = RandomForestRegressor(
n_estimators=50,
max_depth=8,
random_state=seed
).fit(X[train], D[train])
Y_resid[test] = Y[test] - ell.predict(X[test])
D_resid[test] = D[test] - m.predict(X[test])
return np.sum(D_resid * Y_resid) / np.sum(D_resid ** 2)
データ生成過程として

Naive plug-in (赤) は
差は劇的です。Naive plug-in は真値から大きく外れた値に集中しており、いくらサンプル数を増やしてもこのバイアスは消えません。一方 DML は真値の周りに集中しており、
4-6. DML で何が嬉しいのか
DML は、
-
柔軟な機械学習で局外パラメータ
を扱える(線形性などの強い仮定が要らない)g_0, m_0 - 興味のあるパラメータ
については 厳密な統計推論 (漸近正規性、信頼区間)ができる\theta_0
というところがとても嬉しいです。これは因果推論を機械学習時代にアップデートする上で重要な枠組みです。R/Python ともに DoubleML というしっかりした実装パッケージがあるので、実務ではそちらの利用も検討してください。
Level 5のまとめ
このレベルに達した分析者は、
- 推定誤差を抑える条件(Restricted Eigenvalue)と、真の変数集合を当てる条件(Irrepresentable Condition + beta-min)の強弱関係を理解しているか?
- 「Lassoで変数を選んでからOLSで検定する」というナイーブな手続きがなぜダメなのか、Post-Selection Inferenceの罠を説明できるか?
- デバイアスドLassoが、
ペナルティによる縮小バイアスを解析的に補正することで、高次元でも漸近正規性を回復する仕組みを語れるか?L^1 - Double/Debiased Machine Learningが、Neyman直交化とcross-fittingという2つの仕掛けで、「機械学習の柔軟性」と「
一致な推論」を両立させていることを理解できているか?\sqrt{n}
「Lassoが選んだ変数だから重要だ」「選択後のp値だから信頼できる」といった主張に対して、それは推定誤差の話なのか変数選択の話なのか、相関構造のもとでICは成立しているのかと立ち止まれるようになれば、Level 5です。ここまで来ると、回帰分析はもはや単一の手法ではなく、予測・推論・因果という別々の目的に応じて使い分けるべき道具立ての集合体として見えてくるはずです。
Level 6: 哲学的問いへ
最後のレベルでは、これまでの「回帰」という概念そのものを問い直します。が、私がこのレベルには到底到達していないので書けません笑
こんなのがあるのかもしれませんし、ないのかもしれません。Level 5より上位の理解、または別観点の理解がある方は是非執筆していただけますと嬉しいです。
結び
本記事では、回帰分析の全体像を1つの地図として描くことを優先しました。そのため、各トピックの厳密な証明や実装上の細部は参考文献等に譲っています。もし途中で分からない箇所があれば、そこが次に深掘りすべきポイントです。
私はこの記事の執筆を通じて一層回帰分析への理解が深まりました。皆さんが回帰分析の奥深さを改めて知り、勉強のモチベーションが上がればこの記事としては大成功です。
参考文献
- 佐和 隆光, 回帰分析, 朝倉書店, 2020.
- 安井翔太, 効果検証入門, 技術評論社, 2020.
- 一般社団法人 日本統計学会, 日本統計学会公式認定 統計検定準1級対応 統計学実践ワークブック, 学術図書出版社, 2020.
- 久保川達也, 現代数理統計学の基礎, 共立出版株式会社, 2017.
- 鈴木 讓, 統計的機械学習の数理100問 with R, 共立出版株式会社, 2020.
- Peter J. Bickel, et. al., Simultaneous analysis of Lasso and Dantzig selector, 2008.
- Zhao, P., & Yu, B., On model selection consistency of Lasso, 2006.
- Chernozhukov, V., Chetverikov, D., Demirer, M., Duflo, E., Hansen, C., Newey, W., & Robins, J. "Double/debiased machine learning for treatment and structural parameters.", 2018.
-
殆ど、または全く変化することなく、複数の場所で繰り返される定型コードのセクションのこと。 ↩︎
-
営業や顧客など、非データサイエンス職の人に説明する際はこのLevelで話すことが多いですね。 ↩︎
-
ベクトルの線形和で作れる空間くらいの意味です。 ↩︎
-
神のみぞ知るやつです。 ↩︎
-
マルチコリニアリティ (Multicollinearity)を略してマルチコっていう人もいます。 ↩︎
-
『多重共線性のはなし』 渋谷駅前で働くデータサイエンティストのブログより。 ↩︎
-
検定しない場合は正規性の仮定は必要ないです。 ↩︎
-
これをサンドイッチ分散と呼びます。 ↩︎
-
の部分はパンですね。 ↩︎(\mathbf{X}^\top\mathbf{X}) -
は小標本向けの自由度調整項(有限標本補正)で、一般にc が用いられます。 ↩︎c = \frac{G}{G-1} \frac{N-1}{N-k} -
あるいは先に Level 4 から学んでいる人も多いでしょう。 ↩︎
-
を掛けるとゼロになるようなベクトルのことです。 ↩︎\mathbf{X} -
幾何学的に、この条件を満たす
の集合は原点から広がる円錐(コーン)状の形になるため、こう呼ばれます。 ↩︎\boldsymbol\delta -
Bickel, Ritov & Tsybakov (2009), "Simultaneous analysis of Lasso and Dantzig selector". ↩︎
-
0ではない係数の場所の集合のことです。
はそれの補集合です。 ↩︎S^c -
Zhao & Yu (2006), "On model selection consistency of Lasso". ↩︎
-
推定誤差が中相関で逆に減るのは、equicorrelation のもとで真の係数
が同じ符号・同じ大きさを持つため、相関のある変数同士が「協調して」信号を担えるからです。一般に、係数の符号や大きさが異なる場合は単調に増加するケースもあります。 ↩︎\beta^\ast = (1.5,\ldots,1.5,0,\ldots,0) -
勝者の呪い。 ↩︎
-
Chernozhukov, V., Chetverikov, D., Demirer, M., Duflo, E., Hansen, C., Newey, W., & Robins, J. (2018). "Double/debiased machine learning for treatment and structural parameters." ↩︎
Discussion