欠測・重複・変換の判断
このトピックを終えると
欠測値、重複行、単位変換をそれぞれ異なるデータ品質の問題として区別できるようになります。観測された表だけからMCAR・MAR・MNARを断定せず、どの処理の仮定を用いたのかを記録する方法を身につけます。
出発点: 一つの空欄は何を意味するのか
表の空欄は、測定失敗、まだ測定していない、該当なし、入力漏れのいずれも表しうります。数値の 0 も、測定された 0 である場合もあれば、測定できなかった値を任意に 0 で埋めたものである場合もあります。したがって欠測処理とは、空欄をなくす作業ではなく、値がない理由と分析における役割を確認する作業です。
欠測・重複・単位エラーを切り分ける
欠測
欠測とは、期待した値が記録されていない状態です。欠測が生じた理由がわからないまま単純に補完すると、研究上の問いそのものを変えてしまうことがあります。観測されたデータだけで欠測メカニズムを断定せず、測定ログと収集手順を確認します。
重複
重複は、同じ行が繰り返されたという意味の場合もありますが、同じIDに複数時点の正当な観測が入っている場合もあります。unit_idが重複しているという事実だけで行を削除しません。想定される観測単位・時点・反復キーを基準に、重複かどうかを定義します。
変換
変換とは、単位変更、対数変換、正規化、カテゴリ化のように、値の表現やスケールを変える作業です。変換前後の意味と適用時点を記録しておかないと、結果を元の単位に戻したり、他の分析と比較したりすることが難しくなります。
Pythonでまず状態を数える
import pandas as pd
missing = data.isna().sum()duplicate_key = data.duplicated( subset=["condition", "outcome"], keep=False)profile = pd.DataFrame({ "missing": missing, "dtype": data.dtypes.astype(str),})print(profile)print("candidate duplicate rows:", int(duplicate_key.sum()))isna() は欠測として表現された値を数えますが、なぜ欠測が発生したのかは教えてくれません。duplicated() も指定した列の組み合わせが繰り返される候補を示すだけで、その行が誤った複製なのか正当な繰り返しなのかを判定しません。分析単位と繰り返しキーをまず定義してから subset を選ぶ必要があります。
欠測の仮定を記録する
欠測を扱うときは次を区別します。
- 欠測割合: どの列と単位でどれだけ欠けているか
- 発生過程: 測定・転送・フィルタリングのどこで生じたか
- 分析仮定: どの値の欠如が結果とどう結び付き得るか
- 処理規則: 除外、補完、別カテゴリ、モデルベース処理のうち何を行ったか
- 感度: 他の妥当な処理で結論がどれだけ変わるか
MCAR、MAR、MNARという名前を付けるだけでは仮定は証明されません。データに見えるパターンと収集過程の知識を区別し、確認できなかった部分は不確実性として残します。
処理前後を比較する記録
欠測や重複を処理した後は、元データの行数を黙って変えるのではなく、次のような要約を残します。
| 項目 | 処理前 | 処理後 | 判断根拠 |
|---|---|---|---|
| 全体の行数 | schemaの分析単位 | ||
| 欠測outcome | 測定ログ確認の有無 | ||
| 重複候補 | 重複キーの定義 | ||
| 除外行 | 事前規則またはエラー記録 | ||
| 変換列 | 変換式・単位・バージョン |
処理後の行数が減った場合、どの単位が消えたのかを確認します。特定の条件やbatchで欠測がより多く減っていた場合、除外が結果の比較構造を変えてしまう可能性があります。このとき「欠測を除去したのできれいになった」とは表現せず、どの観測がどの理由で分析から外れたのかを報告します。
一つの処理法を正解にしない
欠測を除外するか補完するか、重複候補を残すか除去するかは、データ生成過程と問いによって変わります。処理ルールを決定する前に、少なくとも次の二つを区別します。
- データの誤りを修正するルール: 入力・単位・IDの誤りを正す作業
- 分析上の仮定を追加するルール: 観測されなかった値を特定の方法で扱う作業
一つ目も根拠と原本の保存が必要であり、二つ目は結果の不確実性に影響を与えうるため、より明示的な仮定の記録が必要です。同じデータに互いに異なる合理的な処理ルールを適用したときに解釈が変わるなら、その差を隠さず感度分析の結果として残します。
変換はprovenanceの一部だ
例えばミリメートルをマイクロメートルに変換したなら、変換式、元の単位、新しい単位、適用した列とバージョンを記録します。対数変換のように値の解釈と分布を変える作業は、 0 の処理ルールと逆変換の可能性も併せて残す必要があります。
原本の列を上書きせずに value_raw、value_transformed のように分離すれば、計算の誤りを追跡し、変換前後を比較できます。ある変換を選んだという事実自体が研究の問いとデータ生成過程についての判断であるため、結果だけを残すことはしません。
処理ルールをコードとともに固定する
判断を文章だけで残すと、後から同じルールを再び適用することが難しくなります。コードでは、処理前の行数と処理後の行数、列ごとの欠測数、重複候補の基準を明示的に出力します。処理結果を元のファイルに上書きせず新しい成果物として保存すれば、誤りが生じたときにどの段階で値が変わったのかを比較できます。
たとえば outcome の欠測を除外するとしても、次の2つの文はそれぞれ異なる作業です。
drop rows where outcome is missing
drop rows where any field is missing一つ目は outcome を計算できない行だけを除外しますが、二つ目は分析に必要な文脈列が空になっている行まで削除します。どの規則を適用したかを書かなければ、結果表の行数だけから処理内容を再構成することはできません。
変換前後の単位と解釈
単位変換は数値だけを変えるのではなく、結果が読まれる単位を変えます。対数変換は、値の差を元の単位の差と同じように読ませなくすることがあります。したがって変換後の平均やばらつきを報告する際は、「どの尺度で計算した値か?」も併せて記します。
カテゴリ化も変換です。連続的な測定値を閾値で2つの群に変えると境界付近の情報が失われ、閾値の選択が結果に影響を与えることがあります。本編ではどの変換をすべきかという処方は示さず、変換の目的・規則・影響を記録すべきだという原則を適用します。
検証可能なデータ品質の記録
品質点検の結果は次の三層に分けると読みやすくなります。
- 観察:
outcomeに 3 件の欠測候補があった。 - 判断: 測定ログを確認できなかったため、原因を確定しなかった。
- 処理: 本分析では除外し、除外前後の行数を manifest に記録した。
観察と判断を混ぜなければ、「欠測はランダムだった」のような根拠の乏しい文を避けられます。後続の分析で別の処理規則を選んだとしても、元の観察と処理履歴を比較できます。
研究課題に立ち返って解釈する
欠測・重複・変換を点検したあとでも、データが完全になるわけではありません。ただし、どの値が実際の測定でどの値が処理結果なのか、どの行が分析単位なのかがより明確になります。この情報がなければ、平均やモデル結果がどの入力に依存しているのかを説明することが難しくなります。
欠測処理の選択は、結果の不確実性に影響を与えることがあります。したがって、処理方法を隠さず、研究課題に必要な観測単位とともに報告します。
データ品質作業の目標は、分析に不都合な値をすべて取り除くことではありません。値の生成経路と観測単位を保存しながら、どの資料が問いに実際に使われたのかを説明することです。処理後の表がより整って見えても、特定の条件の観測が体系的に欠けていれば、比較の意味が変わることがあります。
よく生じる失敗と点検法
- 欠測をすべて 0 に置き換えません。
- ID の重複をただちに行の重複と見なしません。
- 変換された値だけを残して元の単位を捨てません。
- 欠測パターンを見て MCAR・MAR・MNAR を確定しません。
- 処理ルールを結果表にのみ記載し、provenance から漏らさないようにします。
要点整理
- 欠測は値が存在しないという状態であり、その原因を示す標識ではありません。
- 重複は解析単位と反復キーを定義したうえで判定する必要があります。
- 変換は値の表現だけでなく、解釈と provenance も変えます。
- MCAR・MAR・MNAR は仮定であり、観測表ひとつで自動的に確定するものではありません。
- 処理の前後、ルール、バージョンを併せて記録してこそ、結果を再検討できます。
次のトピックへ
データの形と品質を確認したので、次のモジュールでは確率モデルとデータ生成過程を扱います。観測値がどのような構造から生じうるのかへと問いを広げます。
参考資料
- pandas User Guide: https://pandas.pydata.org/docs/user_guide/index.html
- ASA GAISE Reports: https://www.amstat.org/education/guidelines-for-assessment-and-instruction-in-statistics-education-%28gaise%29-reports
本編の表、コード、処理に関する問いは、BioStatPy が独自に作成した教育用の構成です。