9.6 欠損データと計算量 — データの「穴」をどう埋めるか

現実のデータには必ず「欠損値」がある。患者の体重が記録されていない、 アンケートの一部が未回答、センサーの故障で値が取れなかった——これらは日常茶飯事だ。

「欠損しているから、その行を捨てよう」と安易に削除することは、時に深刻な偏りを生む。 欠損データをどう正しく扱うか、そして第9章で登場した手法(加法モデル・決定木・MARS・HME)が 実際に動くまでどれくらい時間がかかるかを一緒に見ていこう。

欠損のパターンを見分ける — 「なぜ欠けているか」が重要

「データの一部が欠けている」と一口に言っても、欠け方には種類がある。 この違いを見逃すと、分析結果が大きく歪む可能性がある。 まず3つのシナリオで、その違いを感じてみよう。

3種類の欠損パターン(MCAR、MAR、非MAR)を行列の色で視覚的に区別するアニメーション
上: MCAR(ランダムな欠損)、中: MAR(他変数に依存)、下: 非MAR(欠損値自体に依存)

3つのシナリオを想像してほしい。

シナリオA — コイン投げで消す: データが集まった後、コインを投げて「表が出た行の体重を消す」。 この場合、欠損はランダムで、体重の実際の値とは無関係だ。

シナリオB — 女性は体重を答えにくい: 患者の性別(記録済み)に応じて、 女性は体重を答えない傾向がある。欠損が「性別」という他の観測値に依存しているが、 体重の実際の値には関係ない。

シナリオC — 血圧が高くて測定中断: 血圧が200mmHgを超えると機器が止まる。 欠損していること自体が「高い値だった」という情報を含んでいる。これが最も危険だ。

シナリオAは MCAR(Missing Completely At Random) と呼ばれ、最も扱いやすい。 シナリオBは MAR(Missing At Random) で、他の観測値には依存するが欠損値そのものには依存しない。 シナリオCはどちらでもなく、単純な補完をすると結果が偏る。

なぜ「なぜ欠けているか」が重要なのか? もしシナリオCで「血圧の欠損は平均値で補完しよう」とすると、 高血圧の患者たちに普通の血圧値を割り当ててしまう。分析結果が根本から間違う。

MAR(他の観測値に依存するが欠損値自体には依存しない)を数式で書くと:

$$\Pr(\mathbf{R}|\mathbf{Z}, \boldsymbol{\theta}) = \Pr(\mathbf{R}|\mathbf{Z}_{\text{obs}}, \boldsymbol{\theta})$$

MCAR(何にも依存しない完全ランダム欠損):

$$\Pr(\mathbf{R}|\mathbf{Z}, \boldsymbol{\theta}) = \Pr(\mathbf{R}|\boldsymbol{\theta})$$

ここで $\mathbf{R}$ は欠損を示す行列($R_{ij}=1$ なら $x_{ij}$ が欠損)、$\mathbf{Z}_{\text{obs}}$ は観測されたデータ全体を表す。 MCARはMARの特殊ケースで、欠損確率が観測データにすら依存しない。

欠損データへの3つの戦略

欠損パターンを理解したら、次は「どう対処するか」だ。 主な戦略は3つ。どれを選ぶかは「欠損の量」「欠損のメカニズム」「使う手法」で変わる。

欠損データを3種類の方法で補完する過程を順番に見せるアニメーション
左から: 削除(赤い×で行を消す)、代理分割(隣列からの矢印で補完)、補完(緑で穴を埋める)

戦略1: 削除(Deletion)

欠損のある行をまるごと削除する。最もシンプルで、欠損がランダム(MARやMCAR)なら統計的に問題ない。 経験則として「全体の5%未満の欠損なら削除で十分」とよく言われる。欠損が多いと情報が失われすぎる。

戦略2: アルゴリズムに欠損対応を組み込む

一部の手法は欠損を自力で処理できる。

決定木(CART)が代表的だ。 決定木はデータを「特定の変数がある値以上か以下か」で分岐する。 ある変数が欠損していたとき、決定木は「代わりに最も似た役割を果たせる別の変数」で代替分岐する。 これを 代理分割(surrogate splits)と呼ぶ。 本来の分岐ができなくても、「隣の変数で代替する」ことでデータを捨てずに済む。

加法モデル(複数の平滑関数の和でデータを近似する手法)では、 バックフィッティングという繰り返し計算の中で欠損変数のターンを飛ばし、 フィッティング値をゼロに設定するという形で対応する。

戦略3: 補完(Imputation)— 事前に穴を埋める

学習の前に欠損値を「埋めて」しまう方法。

注意: どんな補完をしても「埋めた値は仮定だ」という不確実性が加わる。 多重補完はその不確実性を明示的に扱う点で優れている。

カテゴリカル変数(性別、職業など離散的なカテゴリを取る変数)では、 「欠損」を新たなカテゴリとして追加するアプローチもある。 欠損カテゴリが予測に貢献するなら、欠損パターン自体が情報を持つことになる。

計算コストで手法を選ぶ

「第9章の手法はどれでも使える」としたとき、データが大きくなると計算時間が問題になる。 ここでは、第9章に登場した4つの手法がどれくらい「重い」かを比べる。

手法の詳細を知らなくても大丈夫。「傾きが急な曲線ほど、データが増えると急激に遅くなる」という感覚で見てほしい。

4手法の計算量の増加速度を曲線グラフで比較するアニメーション
青: 加法モデル(緩やか)、黄: CART(緩やか)、緑: MARS(中程度)、赤: HME(急峻)

$N$ を観測数(行数)、$p$ を変数数(列数)とする。

加法モデル(Smoothing Splineを使う場合)

データを変数の数だけ別々に当てはめ、それを足し合わせて全体のモデルを作る。 この繰り返し計算を「バックフィッティング」と呼び、$m$ 回繰り返す。

$$pN\log N + mpN$$

実用的には反復回数 $m$ は通常10〜20回で十分。 変数間の相関が高いほど少ない反復で収束するため、実際はさらに速い。

決定木(CART)

データを「ある変数がある値以上か以下か」で順次分岐させて予測する。 最初にデータをソートするのが $pN\log N$、 その後の分割探索が通常 $pN\log N$ で済む (端の分割では最悪 $N^2p$ になる)。 全体的に計算は軽く、実用的な速さがある。

MARS(多変量適応回帰スプライン)

データの局所的なパターンに合わせた「折れ線の組み合わせ」でモデルを作る手法。 モデルに $M$ 個の基底関数(折れ線のピース)を追加していくとき、$M$ 項のモデル全体では:

$$NM^3 + pM^2N$$

$M$$N$ に近づくほど急激に重くなる。 大規模データでは $M$ を小さく抑える必要がある。 注目すべきは「$M^3$」という項——$M$ が2倍になると計算量が8倍になる。

HME(階層的専門家混合モデル)

「複数の専門家モデルが担当領域ごとに予測し、その重み付き平均を出力する」という構造の手法。EMアルゴリズム(期待値と最大化を繰り返す最適化手法)を使うが、 大規模なモデルでは収束まで非常に時間がかかる。 EMアルゴリズムの各ステップで $NF^2$$F$ はモデルパラメータ数)の計算が必要だ。

結論として: 加法モデルとCARTが速く、MARSは中程度、HMEは重い。

実践ガイド — 状況に応じた選択

ここまでの内容を実践的な判断基準にまとめよう。 2軸のマトリクスで考えると見通しがよくなる。

データ規模×欠損率の2軸マトリクスで適切な手法を色と形で示すアニメーション
青: どれでも可(小欠損・小データ)、黄: 補完が有効(大欠損・小データ)、緑: CARTと削除(小欠損・大データ)、赤: 多重補完が必須(大欠損・大データ)

欠損データへの対処法を選ぶ手順

計算量を踏まえた手法選択

データ規模目安推奨手法
小規模$N < 1000$どの手法でも問題なし
中規模$N \sim 10000$加法モデル・CARTが快適
大規模$N > 100000$MARSは項数を制限、HMEは要注意

バックフィッティングの反復回数 $m$ は通常10〜20回で収束する。 変数間の相関が高いほど少ない反復で済む。

欠損データの処理は「分析の前工程」として見落とされがちだが、 ここで間違えると後の分析がすべて歪む。欠損メカニズムを考えることが出発点だ。

第9章で見てきた各手法も、それぞれ「速さ」「表現力」「欠損への耐性」において得意・不得意がある。 どれが最良かは問題次第——この柔軟な視点こそが、統計的学習を実践する上で最も重要なスタンスだ。