データクリーニングへようこそ!
こんにちは!Exam ATPA(予測分析上級トピック)の学習において、最も重要なチャプターの一つへようこそ。「ゴミを入れれば、ゴミが出てくる(Garbage in, garbage out)」という言葉を聞いたことがあるかもしれません。予測分析において、モデルの精度は入力するデータの質で決まります。現実世界のデータは往々にして厄介なものです。欠損値という「穴」があったり、外れ値という「奇妙な驚き」が潜んでいたりします。このチャプターでは、こうした問題を見つけ出し、さらに重要なこととして、モデルが本来の力を発揮できるように修正する方法を学んでいきましょう!
パート1:外れ値(Outliers)への対処
ある成人グループの身長データを調べていると想像してみてください。ほとんどの人は5〜6フィート(約150〜180cm)の間です。ところが突然、身長12フィート(約360cm)という記録が現れました!これが外れ値(Outlier)です。他の観測値から大きくかけ離れたデータポイントのことを指します。
外れ値とは具体的に何か?
外れ値とは、母集団からの無作為抽出において、他の値から異常なほど離れた位置にある観測値のことです。外れ値が生じる原因には以下のようなものがあります。
1. データ入力エラー:「12」と入力すべきところを「120」と打ち間違えた。
2. 測定エラー:センサーの故障。
3. 自然な変動:平均年収の調査における大富豪の年収のように、極端な値が真実である場合もある。
単変量外れ値 vs. 多変量外れ値
予測分析およびアクチュアリー実務において、外れ値には主に2つのタイプがあります。
• 単変量外れ値(Univariate outliers):単一の変数において極端または異常な値を持つ観測値(例:一般的な年収範囲が\$40,000〜\$150,000であるのに対し、年収\$10,000,000である場合など)。
• 多変量外れ値(Multivariate outliers):各変数を個別に調べると完全に正常に見えるものの、2つ以上の変数を同時に見ると異常、あり得ない、あるいは極端な組み合わせとなっている観測値。例えば、年齢が \(12\) 歳で運転歴が \(10\) 年の人や、ベッドルームが \(1\) 室なのにバスルームが \(8\) 室ある住宅などです。個々の値自体はデータセット内で妥当ですが、その組み合わせが極めて異常となります。
外れ値を見つける方法
スプレッドシートを眺めるだけで見つけられなくても大丈夫です。両方のタイプに対応するツールがあります!
単変量の検出:
• 箱ひげ図(Boxplots):「ひげ」の外側に個別の点としてプロットされているものは、潜在的な外れ値としてフラグが立てられます。
• IQRルール:数学的には、\(Q_1 - 1.5 \times IQR\) を下回る、または \(Q_3 + 1.5 \times IQR\) を上回る値は、しばしば外れ値と呼ばれます。
• Zスコア:観測値が \(|Z| > 3\) を満たす \(Z\) スコアを持つ場合、平均から3標準偏差以上離れており、潜在的な外れ値としてフラグが立てられます。
多変量の検出:
• 散布図および散布図行列(Scatterplot Matrices):2変量のプロットは変数のペアを可視化し、全体の相関パターンから逸脱している点を発見するのに役立ちます。
• マハラノビス距離(Mahalanobis Distance):すべての変数間の相関および共分散を考慮して、観測値と多変量平均(重心)との間の距離を測定する統計的尺度。マハラノビス距離が大きい点は、個々の座標値のいずれも単変量外れ値でなくても、多変量外れ値となります。
外れ値をどう扱うか?
外れ値を見つけた場合、主な選択肢は3つあります。
1. そのまま残す:データが正確で、稀ではあるが現実の現象を表していると確信できる場合。
2. 削除する:エラーであることが確実な場合、またはモデルに不当なバイアスを与えてしまう場合。
3. 変換・キャップをかける:これはしばしばウィンザー化(Winsorization)と呼ばれます。極端な値を、より穏当な値(99パーセンタイル値など)に置き換えます。
クイックレビュー:外れ値は平均を歪め、分散を大きくし、モデルの係数を歪めてしまいます。「削除」ボタンを押す前に、必ずその正体を調査しましょう!
重要なポイント:
外れ値は必ずしも「悪い」データではありません。「異なる」データに過ぎないのです。あなたの仕事は、単変量と多変量の両方の異常をチェックし、それが有益なシグナルなのか、それとも邪魔なノイズなのかを判断することです。
パート2:欠損データ — データセットの「穴」
欠損データとは、ある観測値において特定の変数に値が記録されていない状態を指します。アクチュアリー業務においては、保険契約者がアンケートに答えなかったり、システムが取引を記録し損ねたりと、よくある頭痛の種です。
なぜ欠損データが問題なのか?
ほとんどの予測モデル(標準的なGLMなど)は、欠損値を扱えません。行の中に欠損値があると、ソフトウェアはその行全体を破棄してしまうことがあり、他の列にある有益な情報まで無駄にしてしまいます!
欠損の3つのタイプ
問題を解決するには、まずなぜデータが欠損しているのかを理解する必要があります。
1. 完全にランダムな欠損(MCAR: Missing Completely at Random):パターンが全くありません。誰かが台帳のランダムな数ページに誤ってコーヒーをこぼしてしまったような状態です。
2. ランダムな欠損(MAR: Missing at Random):欠損が他の観測可能なデータと関連している場合。例えば、男性の方が女性よりも体重に関するアンケートへの回答率が低い、といったケースです。
3. ランダムではない欠損(MNAR: Missing Not at Random):欠損が、欠損している値そのものと関連している場合。例えば、所得が非常に高い人が、用紙への所得の記入を拒否するケースです。
知っていましたか? MNARへの対処が最も難しいのは、欠損の理由が「欠損データそのもの」の中に隠れているからです!
欠損データへの対応戦略
1. レコードの削除
• リストワイズ削除:いずれかの値が欠損している場合、その行全体を削除します。簡単ですが、大量のデータ損失につながる可能性があります。
• 使用すべき時:欠損データの量が非常に少なく、かつ欠損メカニズムがMCARである場合のみ。
2. 代入
代入(Imputation)とは、推定値で穴を埋めることです。
• 平均値・中央値・最頻値代入:その列の中心傾向(代表値)で穴を埋めます。警告:これはデータの分散を過小評価させ、自信過剰なモデルを作ってしまうリスクがあります!
• 予測代入:他の変数に基づき、ミニモデル(回帰や \(k\) 近傍法など)を使って欠損値を予測します。
3. 欠損フラグの追加
単に代入する代わりに、明示的なバイナリの欠損フラグ(missing-value flag)を作成します(例:欠損している場合は \(Is\_Missing = 1\) 、そうでない場合は \(0\) )。元の変数については、欠損箇所を定数(中央値や \(0\) など)で埋めます。これにより、モデルは「データが欠損しているという事実そのもの」が予測情報を持っているかどうかを学習できるようになります!
重要なポイント:
欠損データを決して放置してはいけません。「何もしない」という選択は、ソフトウェアにその行を削除させるという選択であり、結果にバイアスを生む可能性があるからです。
パート3:よくある落とし穴とヒント
避けるべきよくあるミス
• 盲目的な削除をしない:ある列でデータの40%が欠損している場合、その行を削除すればデータセットが崩壊します。行ではなく列を削除することを検討しましょう。
• 「隠れた」欠損値に注意:欠損データは空白のセルとは限りません。「999」「不明」「0」とコード化されている場合があります。要約統計量を確認し、不審な値がないか常にチェックしましょう。
• 目的変数の代入:通常、目的変数(予測しようとしている応答変数)を代入してはいけません。該当するレコードを削除してください。
簡単な例え
データクリーニングは食事の準備に似ています。外れ値は、他より100倍辛い唐辛子のようなものです。そのまま入れておくと、料理全体を台無しにしてしまいます。欠損データは、レシピで材料が足りないようなもの。その料理を諦める(削除)、似たような材料で代用する(代入)、あるいは材料がないという事実からシェフの買い忘れを察知する(欠損フラグ)といった対応が可能です。
試験に向けたまとめのチェックリスト
• 外れ値の特定:単変量外れ値(箱ひげ図、IQR、\(Z\) スコア)と多変量外れ値(散布図行列、マハラノビス距離)の両方をチェックする。
• 欠損メカニズムの診断:欠損メカニズムがMCAR、MAR、MNARのいずれであるかを判断する。
• 対応の選択:メカニズムとビジネスの文脈に基づいて、レコードの削除、代入、または欠損フラグの追加から適切なアクションを選択する。
• 記録(ドキュメント化):ATPAのアセスメントレポートでは、なぜその特定のクリーニングアクションを選んだのか、その理由を常に正当化し記録しましょう。
その調子です! とても順調ですよ。データクリーニングをマスターすることは、一流の予測アナリストになるための土台となります。データが綺麗になれば、予測モデリングのパートはずっと簡単になりますよ!