見えていないデータを疑う:生き残りバイアスと選択バイアスの具体例
AIを使いこなすClaudeで執筆し、GPTで自動校閲・修正しています。

データが手元にあると、そこに映っているものが全体だと思いたくなります。けれども、分析の前に問うべきなのは「このデータに入れなかったものは何か」です。 答えを先に書きます。 • 生き残りバイアスは、途中で脱落したもの(退会者、廃業した店、故障して返品された製品など)が消え、残ったものだけを見て判断してしまう偏りです。 • 選択バイアスは、データが集まる条件そのものが偏っていて、集まった分が全体を代表しなくなる偏りです。任意回答のアンケートが典型です。 両者に共通する点検法は、「入口」と「出口」を分けて問うことです。入口は、誰・何が対象としてデータに入る資格を得たか。出口は、入った後に誰・何が途中で抜けたかです。この記事では、説明用の架空の事例3つでこの問いを練習し、使い回せる質問表を渡します。
この記事の目次
2つのバイアスの違いを一枚で整理する
- 偏りが生じる場所、生き残りバイアス:出口(途中の脱落)、選択バイアス:入口(集め方・回答の仕方)
- 典型例、生き残りバイアス:継続ユーザーだけの満足度、選択バイアス:任意回答のアンケート
- 欠けているもの、生き残りバイアス:脱落した対象、選択バイアス:回答しなかった・選ばれなかった対象
- 最初に確認すること、生き残りバイアス:開始時点の全員の数、選択バイアス:配った数と回収できた数
実務では両方が混ざります。「回答者は継続ユーザーだけ」なら、二重に偏っています。厳密な分類より、「どこで落ちたか」を言葉にできるかどうかが大事です。
公的統計の考え方も参考になります。総務省統計局は、標本調査では標本に偏りが生じないように選び、母集団を代表するよう抽出する必要があると説明しています(統計局「全数調査・標本調査」)。また、調査設計の解説は、回収率を6〜7割と想定した標本サイズの目安を示す一方、未回収による誤差は標本理論が成り立たず、通常は未回収標本の分布に大きな偏りが見られると注意しています(統計局「調査の企画や設計」)。この注意が示すように、単に配布数を増やすだけでは、未回収による偏りは解消できません。
説明用の例1:継続ユーザーだけの満足度(生き残りバイアス)
以下の数字はすべて、説明のために作った架空の値です。実測ではありません。
ある学習アプリが、1年前に登録した1,000人のうち現在も使っている300人にアンケートを取り、「満足度は5点満点の平均4.2点」と報告したとします。
この「4.2点」が語れるのは、1年間やめなかった300人の満足度です。満足できずに去った700人は、分析の入口に最初からいません。「利用者は高い満足度」と言い切ると、出口で落ちた人を無視することになります。
点検の手順は次のとおりです。
- 分母を登録時点の1,000人に戻し、継続率(この例なら30%)を併記する。
- 離脱した人がいつ辞めたかを確認する(登録直後か、数か月後か)。
- 言い方を直す。「継続している人の満足度は4.2点。継続率は30%で、離脱者の声は未把握」。
説明用の例2:店頭の任意アンケート(選択バイアス)
これも架空の例です。ある店が2,000枚のアンケート用紙を配り、回収できたのは400枚(回収率20%)でした。回答者の85%が「満足」と答えました。
ここで見えていないのは、回収されなかった1,600枚の向こうにいる人たちです。強い不満や強い好意を持つ人は書きやすく、どちらでもない人は書かずに帰りがちです。どちらに偏るかはデータだけでは分かりません。大事なのは、方向が分からない偏りがあると認めて、結論の強さを調整することです。
点検の手順は次のとおりです。
- 配布数、回収数、回収率を必ず並べて書く。
- 回収の仕方を確認する(レジ横の回収箱か、スタッフが声をかけたか)。
- 可能なら、無回答だった層の一部(例:無作為に選んだ来店者)に短い追加調査をする。
- 結論は「回答者の85%が満足」までにとどめ、「顧客の85%」とは書かない。
説明用の例3:欠損行を落とした配送日数(出口の脱落+集計の落とし穴)
これも架空の例です。発送100件のうち、到着が記録されたのは80件で、平均2.1日でした。残り20件は到着日が空欄です。
空欄の20件が「記録漏れ」なのか「まだ届いていない」のかで、意味がまったく違います。後者なら、いちばん遅い荷物が集計から消え、平均が実態より短く見えている可能性があります。
pandasの公式ドキュメントによると、dropna()は欠損を含む行や列を取り除き、mean()などの集計は既定で欠損をスキップします(pandas「Working with missing data」)。つまり、何も書かなくても欠損は静かに計算から外れます。次のように、落ちた件数を先に表示する習慣が役立ちます。以下は考え方を示す例で、実際には実行していません。列名は仮のものです。
import pandas as pd
df = pd.read_csv("shipments.csv", parse_dates=["shipped_at", "delivered_at"])
df["days"] = (df["delivered_at"] - df["shipped_at"]).dt.days
total = len(df)
missing = df["days"].isna().sum()
print(f"全体 {total} 件 / 到着日が空欄 {missing} 件 ({missing / total:.0%})")
print(f"空欄を除いた平均 {df['days'].mean():.1f} 日")
# 空欄の中身を確認する(未着か、記録漏れか)
print(df[df["days"].isna()]["shipped_at"].describe())空欄の発送日が古いものばかりなら、長期の未着が混ざっている疑いが強まります。その場合は「到着済み80件の平均は2.1日。未着20件は含まれていない」と書き、未着分は別枠で報告します。
「何が欠けているか」質問表
データを受け取ったとき、あるいは自分で集めたときに、上から順に確認してください。
- 1、質問:分母(開始時点の全体)は何件か、確認する場所:元データの件数、配布数、登録数、「はい」なら疑うこと:割合の母数が残存者になっていないか
- 2、質問:対象に入る条件はあったか、確認する場所:抽出条件、フィルタ、審査・選考の基準、「はい」なら疑うこと:条件を満たさなかった対象が欠けていないか
- 3、質問:途中でいなくなった対象はいるか、確認する場所:退会、解約、廃業、返品、削除の記録、「はい」なら疑うこと:脱落者が分析から消えていないか
- 4、質問:回答や記録は任意だったか、確認する場所:収集方法、回収率、「はい」なら疑うこと:書きたい人だけが残っていないか
- 5、質問:欠損はどの列・どの行に集中しているか、確認する場所:isna()の件数、欠損の発生時期、「はい」なら疑うこと:欠損が結果の悪い側に偏っていないか
- 6、質問:集計の前後で件数は変わったか、確認する場所:dropna、結合、フィルタの前後の件数、「はい」なら疑うこと:知らないうちに行が減っていないか
- 7、質問:記録が残る仕組みに偏りはないか、確認する場所:システム導入時期、記録担当、計測機器、「はい」なら疑うこと:記録されやすい種類だけが見えていないか
- 8、質問:見えていない側の代表を少しでも確認できるか、確認する場所:追加調査、別データ、現場への聞き取り、「はい」なら疑うこと:結論の向きが変わる可能性はないか
判断の目安は次のとおりです。
- 分母が分かり、脱落も記録がある、結論の書き方:分母つきで報告し、脱落者も別枠で示す
- 分母は分かるが、脱落の理由が不明、結論の書き方:「残った対象についての結果」と範囲を限定する
- 分母自体が不明、結論の書き方:傾向の仮説にとどめ、一般化は避ける
AIに点検を手伝わせる依頼文
AIに向いているのは、「データの集まり方の説明を読んで、見落としていそうな欠け方の仮説を並べる」作業です。AIは実際のデータを見ていないので、欠けているかどうかを断定できません。仮説を実際のデータや担当者への確認で検証するのは人の役目です。
渡すのは、データの中身ではなく集め方の説明で十分です。社名や個人情報を含む実データは貼らず、説明用の言い方に置き換えてください。なお、AIサービスの学習利用の設定と、情報の秘密保持は別の話です。設定をオフにしても、貼ってよい情報が増えるわけではありません。社内の規則に従ってください。
次のデータの集まり方を読み、「見えていないデータ」の仮説を挙げてください。
- 生き残りバイアス(途中で脱落した対象)
- 選択バイアス(入口や回答の仕方の偏り)
に分けて、各仮説につき「どんな対象が欠けていそうか」「確認に必要なデータや質問」を書いてください。
結論の断定はせず、私が確認すべき順に並べてください。
【データの集まり方】
- 対象:(例)1年前に登録した利用者のうち、現在も利用中の人
- 収集方法:(例)アプリ内の任意アンケート
- 件数:(例)登録1,000人、回答300人
- 使いたい結論:(例)「利用者は満足している」と報告したい
- 分かっていないこと:(例)退会者の人数と時期返ってきた仮説は、上の質問表の#1〜#8に当てはめて、「確認できた/できない」を記録します。確認できなかった項目は、報告書に「未確認の欠け方」として残すと、読み手が結論の強さを判断できます。

