1 欠損値の基礎

1.1 定義重要性

欠損値とは、データセットにおいて本来あるべき値が記録されていない状態を指す。これは調査票の未回答やセンサーの故障、データ転送中のエラーなど、様々な原因で発生する。欠損値をそのまま放置すると、統計解析や機械学習モデルの精度低下、推定量バイアス検出力の低下といった深刻な問題を引き起こす。そのため、データ分析前処理段階において、欠損値への適切な対応は極めて重要な工程となる。

1.2 欠損メカニズム

欠損値の処理法を選択する際、その欠損が生じたメカニズムを理解することが不可欠である。Rubin(1976)によって提唱された3つの分類は、現在も標準的な枠組みとして広く用いられている。

1.2.1 MCAR(完全に無作為な欠損)

Missing Completely At Randomとは、欠損の発生が観測値・非観測値のいずれにも依存しない状態を指す。例えば、実験中にランダムに機器が故障した場合などが該当する。MCARが成立する場合、リストワイズ削除によってもバイアスは生じず、データ数が減少するだけで情報損失のみが問題となる。

1.2.2 MAR(無作為な欠損)

Missing At Randomとは、欠損の発生が観測された変数に依存するが、欠損した変数自体の値には依存しない状態である。例えば、「収入」の欠損が「年齢」や「職業」などの観測変数に影響されるが、収入の値そのものには依存しないケースが該当する。多くの実用的な多重代入法はMARを前提として設計されている。

1.2.3 NMAR(非無作為な欠損)

Not Missing At Randomとは、欠損の発生が欠損した変数自体の値に依存する状態である。例えば、高所得者ほど収入の回答を拒否する場合が該当する。NMARは最も扱いが難しく、特殊なモデル(選択モデルやパターン・ミクスチャモデル)が必要となる。現実のデータではNMARの存在を完全に否定することは難しいが、MARの仮定近似として成立するよう、補助変数を追加することが推奨される。

2 欠損値の検出と可視化

2.1 欠損パターンの分析

欠損値処理を始める前に、データ全体における欠損の分布とパターンを把握する必要がある。欠損パターン分析では、各変数の欠損率、変数間の欠損の共起関係、欠損の時系列パターンなどを調べる。これにより、欠損メカニズムの仮定を立てるための手がかりが得られる。

2.2 可視化手法

欠損パターンの可視化は、直感的な理解を助ける。代表的な手法として以下がある。

2.2.1 ヒートマップ

変数間の欠損共起をグリッド状に表示する。各行が観測、各列が変数に対応し、欠損部分が色で塗り分けられる。これにより、特定の変数群が同時に欠損しやすい傾向などを一目で把握できる。

2.2.2 バープロット

各変数の欠損率を棒グラフで表示する。変数ごとの欠損の深刻さを比較するのに適しており、しきい値を超える変数については、削除または高度な代入法の適用を検討する根拠となる。

3 欠損値処理手法

3.1 削除に基づく手法

欠損を含む観測や変数を単純に取り除く方法。計算が容易で前提条件も少ないが、情報損失のリスクがある。

3.1.1 リストワイズ削除

欠損値を1つでも含む観測(行)をすべて削除する。MCARの条件下ではバイアスを生じないが、MARやNMARでは深刻な選択バイアスを引き起こす。また、多くの変数があるデータでは、完全なケースが極端に減少する可能性がある。

3.1.2 ペアワイズ削除

分析に用いる変数のペアごとに、欠損のない観測のみを使用する方法。相関行列の計算などで用いられる。リストワイズ削除よりも多くのデータを利用できるが、分析ごとにサンプルサイズが異なるため、結果の一貫性が損なわれる場合がある。

3.2 単一代入法

欠損値を単一の推定値で置き換える方法。実装が容易だが、代入後の不確実性を過小評価する傾向がある。

3.2.1 統計量による代入(平均中央値最頻値

欠損値をその変数の平均値、中央値、または最頻値で置き換える。最も単純な手法だが、分散を過小評価し、変数間の相関構造を歪める。MCARの場合でも、データの分布を平坦化する効果がある。

3.2.2 回帰代入

欠損値を他の変数を用いた回帰モデルで予測する。観測値から得た回帰係数を用いて、欠損値の予測値を計算する。MARの仮定のもとでは平均的に不偏な推定が可能だが、誤差項を無視するため標準誤差が過小評価される。

3.2.3 最近傍代入

欠損値を持つ観測と類似した完全な観測(最近傍)から値をコピーする。距離尺度はユークリッド距離やマハラノビス距離が用いられる。変数間の局所的な構造を保持できるが、近傍の定義やkの選択に依存する。

3.3 多重代入法

欠損値を複数回代入し、複数の完全データセットを生成して分析結果を統合する方法。代入の不確実性を適切に反映できるため、統計的に望ましい性質を持つ。

3.3.1 MICEアルゴリズム

Multivariate Imputation by Chained Equationsは、各変数ごとに条件付き分布から逐次的に代入を行う。連続変数には線形回帰、二値変数にはロジスティック回帰など、変数の型に応じたモデルを指定する。反復計算により、変数間の複雑な依存関係を捉えることができる。

3.3.2 ベイズ的代入

データの生成過程に事前分布を設定し、事後分布から欠損値をサンプリングする方法。データ拡大アルゴリズム(Data Augmentation)を用いることで、完全なベイズ推論の枠組みで欠損値処理を行う。計算コストは高いが、理論的に首尾一貫した手法である。

3.4 機械学習を利用した手法

近年では、機械学習モデルを欠損値代入に応用する手法が発展している。複雑な非線形関係を捉えることが可能だが、過学習や計算コストに注意が必要である。

3.4.1 k近傍法(KNN)

欠損値を持つ観測に最も近いk個の完全な観測を探索し、それらの平均(連続値)または最頻値(カテゴリ値)で代入する。距離の重み付けバリエーションも存在する。大規模データでは計算が遅くなる点が欠点である。

3.4.2 ランダムフォレスト

ランダムフォレスト回帰または分類器を用いて欠損値を予測する。変数間の相互作用や非線形性を自動的に学習でき、欠測値が多くてもロバストな性能を示す。代表的な実装にmissForestがある。

3.4.3 深層学習(GAN、VAE)

生成的敵対ネットワーク(GAN)や変分オートエンコーダ(VAE)を用いた欠損値代入は、高次元で複雑なデータ分布を学習できる。GAIN(Generative Adversarial Imputation Nets)などの手法が代表例である。ただし、大規模な計算資源が必要であり、解釈性が低いという課題がある。

4 評価指標と選択基準

4.1 バイアス評価

代入後のデータセットを用いて推定した統計量(平均、分散、回帰係数など)が、真の値からどれだけ乖離するかを評価する。MCARのシミュレーション設定のもとでバイアスを測定することが多い。実データでは真の値が不明なため、感度分析やホールドアウト法による検証が行われる。

4.2 計算コスト

代入手法の計算時間は、データサイズや変数数、手法の複雑さに大きく依存する。平均代入はほぼ瞬間的であるのに対し、MICEや深層学習には数分から数時間を要する。応用場面に応じて、精度と計算リソースのトレードオフを考慮する必要がある。

4.3 データ特性に応じた選択

データの欠損メカニズム、変数の型(連続・カテゴリ)、サンプルサイズ、欠損率などに基づいて手法を選択する。例えば、欠損率が5%未満かつMCARが疑われる場合はリストワイズ削除でも実用上問題ない。MARで欠損率が中程度(10-30%)ならMICEが推奨される。高次元データで非線形関係が予想される場合は、ランダムフォレストや深層学習が有利となる。

5 実装とツール

5.1 Pythonエコシステム

Pythonには欠損値処理のための豊富なライブラリが存在する。これらのツールを組み合わせることで、簡易な代入から高度な多重代入まで柔軟に実装できる。

5.1.1 pandasとscikit-learn

pandasはDataFrame.dropna()DataFrame.fillna()といった基本的な欠損値処理機能を提供する。scikit-learnのSimpleImputerクラスでは平均・中央値・最頻値代入が利用できる。またIterativeImputerクラス(MICEの簡易実装)も実験的に利用可能である。

5.1.2 fancyimputeとmissingpy

fancyimputeライブラリはKNN代入、行列因子分解(SoftImpute)、MICE(IterativeImputer)などの高度な手法を提供する。missingpyライブラリはmissForestのPython実装を含む。これらのライブラリはscikit-learn互換のAPIを持ち、パイプラインに組み込みやすい。

5.2 Rエコシステム

R言語は統計解析の伝統から、欠損値処理に特化したパッケージが多数整備されている。

5.2.1 miceパッケージ

Multivariate Imputation by Chained EquationsのR実装であり、欠損値代入のデファクトスタンダードである。mice()関数で代入を実行し、complete()で完成データセットを取得、pool()で分析結果を統合するまで一貫したワークフローを提供する。カスタム代入法の追加も可能である。

5.2.2 missForestパッケージ

ランダムフォレストを用いたノンパラメトリック代入法を実装する。missForest()関数一つで、混合型データ(連続+カテゴリ)の欠損値代入が可能。並列計算にも対応しており、大規模データでも実用的な速度で動作する。

5.3 注意点

欠損値処理を実装する際には、以下の点に特に留意する必要がある。

5.3.1 データリーケージの防止

代入モデルを学習する際に、テストデータの情報が学習データに漏れる「リーケージ」が発生しないように注意する。例えば、クロスバリデーションの外側で代入を行う、学習データのみで統計量を計算するなどの対策が必要である。時系列データの場合は、未来の情報を使用しないことも重要である。

5.3.2 ハイパーパラメータ調整

MICEの反復回数やランダムフォレストの木の数など、代入法にはハイパーパラメータが存在する。これらを不適切に設定すると、収束不良や過学習が発生する。実践的には、代入結果の収束診断(トレースプロットの確認)や、ホールドアウトデータでの性能評価が推奨される。また、代入値を固定するためのランダムシードの設定も重要である。