データに数字が入っていないとき、その空欄は「ゼロ」ではない。
アプリの体重記録で、入力をサボった日を全部「0kg」にして平均を出したら、僕の体重は20kg台前半になって、とっくに気体として大気中に蒸発している。空欄にあるのはゼロではなく、「前夜にピザのLサイズを平らげて体重計から逃げた」という沈黙の記録だ。
数字がないこと自体が、ひとつの強烈なメッセージになっている。なのに、表計算ソフトや分析ツールは、空っぽのマスを見つけると「とりあえずゼロで埋めとく? それとも行ごと消しとく?」と気軽な顔で聞いてくる。
どっちを選んでも地獄が待っている。今日は、データの中にぽっかり空いた「欠測値」を見つけたとき、僕がどうやってその沈黙の声を聴いているか、手の内を書いてみる。
まず、10人のチームで何が起きるか
実在のどこかの会社を出すと角が立つので、僕が作った架空の10人チームの数字を置いた。金曜日の夕方に、「今週の残業時間(時間)」をアンケートで集めたという設定だ。
10人のうち、5人から回答が返ってきた。残りの5人は空欄(未回答)だ。
| メンバー | 残業時間(時間) | 状態 |
|---|---|---|
| Aさん | 2 | 回答 |
| Bさん | 3 | 回答 |
| Cさん | 4 | 回答 |
| Dさん | 5 | 回答 |
| Eさん | 6 | 回答 |
| Fさん | (空欄) | 未回答 |
| Gさん | (空欄) | 未回答 |
| Hさん | (空欄) | 未回答 |
| Iさん | (空欄) | 未回答 |
| Jさん | (空欄) | 未回答 |
回答した5人の残業時間を足すと、2 + 3 + 4 + 5 + 6 = 20時間。 5人で割ると、平均4.0時間になる。
ここで、空欄の5人をどう扱うかで、2つの罠が待ち構えている。
罠①:空欄を「ゼロ」で埋めてしまう
表計算ソフトの関数やプログラムで、未回答のセルを「とりあえず0」として扱うやつだ。 20時間にゼロを5人ぶん足しても合計は20時間のまま。それを10人で割る。
- 20時間 ÷ 10人 = 平均2.0時間
「今週のチーム平均残業時間はたったの2時間でした! 超ホワイトです!」という報告書が一丁上がりだ。深夜まで必死にキーボードを叩いていた5人の残業が「ゼロ」として処理され、存在ごと消し去られている。
罠②:空欄を「除外」して、答えた人だけで平均を出す
「未回答の人はデータがないんだから、回答者だけで計算しよう」と考える。一見、すごく真っ当に思える。
- 20時間 ÷ 5人 = 平均4.0時間
「回答者の平均は4時間でした。定時+ちょい残業で健全ですね」と胸をなでおろす。
……でも、この空欄の5人は、なぜアンケートに答えなかったんだろう。
沈黙している理由そのものが、数字になっている
アンケートに答えなかった5人の現場を見に行ってみる。 そこには、障害対応と顧客からの緊急連絡に追われて、金曜夕方の「残業アンケートに回答してください」というメールを開く余裕すらなかった5人の姿がある。
もし彼らの本当の残業時間を測れたとしたら、こんな数字だったとする。
- Fさん:25時間
- Gさん:28時間
- Hさん:30時間
- Iさん:32時間
- Jさん:35時間
この5人だけで合計150時間。 チーム10人全員の本当の合計は、20時間 + 150時間 = 170時間。 本当の全員平均は、170 ÷ 10 = 17.0時間だ。
| 扱い方 | 見える平均 | 現実との差 |
|---|---|---|
| ① 空欄を0時間にした場合 | 2.0時間 | 現実の8分の1以下 |
| ② 答えた5人だけで平均した場合 | 4.0時間 | 現実の4分の1以下 |
| 本物の全員平均(真実) | 17.0時間 | 基準 |
答えた5人の平均(4.0時間)は、計算としては間違っていない。電卓を叩いても4.0と出る。 でも、その5人はチームの代表ではなく、**「金曜の夕方にアンケートに回答できるくらい、仕事に余裕があった人たちの選抜チーム」**だったのだ。
残業が多い人ほど、忙しくてアンケートに答える確率が下がる。 つまり、数字が大きくなればなるほど、空欄になりやすくなる。 その空欄を「ないもの」として捨てて残った数字だけで平均を作れば、現実より圧倒的に平和な数字が出てくるのは当たり前だ。
なんでこうなるか(ここだけ真面目)
統計の世界では、データが欠けてしまう仕組みをいくつかの種類に分けて呼んでいる。
例えば、アンケート用紙を運んでいる途中で風に飛ばされて偶然3枚なくなったとか、サーバーの通信が一瞬だけランダムに途切れて1行抜けた、みたいな「データの値とは何の関係もなく、完全に偶然抜けた」場合。こういう幸運なケースなら、空欄を除外して計算しても、全体の傾向は大きく歪まない。
でも、僕らが実務で出会う欠測の大半は、真逆だ。 **「その数字の大きさそのものが原因で、口をつぐんでしまった」**ケースだ。
- 残業時間が長すぎるから、忙しくてアンケートを閉じる
- 体重が急増したから、現実を見たくなくて体重計に乗らない
- サービスに激怒して解約したユーザーは、「退会理由アンケート」に回答する義理すら感じずにタブを閉じる
- 年収が極端に低い(あるいは極端に高い)人は、アンケートの年収欄を空欄で出す
数字が大きすぎる、あるいは小さすぎるという事実そのものが、マスを空欄に変えている。 だから、空欄をゴミ箱に捨てた瞬間に、一番尖っていて一番重要な現実がデータからこぼれ落ちる。
「回答率50%でした! 5人ぶんの平均を出しておきました!」と元気にSlackに貼る。
……その50%の未回答の向こう側に、今まさに炎上しているプロジェクトが埋まっているとも知らずに。
僕なら、空欄をこう扱う
実務でデータの表に空欄を見つけたとき、僕がどうしているか。手の内を明かすと、だいたい次の3つをやっている。
-
まず欠測率(何割抜けているか)を数える 10人中5人が未回答なら、欠測率は50%だ。この水準で抜けていたら、どんなに高度な統計手法を使っても「答えた人たち」だけで全体を語ることはできない。「n=5 / 全体10(回答率50%)」と母数を必ずデカデカと併記して、片手落ちの数字であることを隠さない。
-
「なぜ抜けたのか」を現場に聞きに行く 画面の前で悩む前に、未回答の行を眺める。抜けている人に共通点はないか。特定の部署だけ全員未回答になっていないか。ログインが途絶えている日付と重なっていないか。空欄の理由が分かれば、「これは忙しくて答えられなかったのか、それとも単に忘れただけなのか」の当たりがつく。
-
都合よくゼロで埋めない、消した顔で報告しない 報告するときは、「回答があった5名の平均は4時間だが、未回答の5名は全員リリース直前の開発担当者であるため、実際には全体平均を大きく引き上げている可能性が高い」と言葉を添える。 1個の綺麗な数字にまとめて安心させるのではなく、「分からない部分が半分ある」という不確実性をそのままテーブルに乗せる。
で、これの何が怖いか
数字は嘘をつかない。でも、「手元に集まった数字」だけを集計して、返事をしてこなかった沈黙の数字を無視する人間は、いくらでも嘘をつく。
1954年に Darrell Huff が書いた『統計でウソをつく法』にも、これとまったく同じ話が出てくる。ある名門大学の卒業生たちに年収アンケートを送ったら、華々しい高収入の平均値が出た。なぜなら、出世して自慢したい卒業生や住所が定まっている成功者だけが返信用封筒をポストに投函し、職を失ったり行方不明になったりした人は返事すら出さなかったからだ。
70年前から、人間は「返事のない人たち」を都合よく透明人間にして、美しい平均値を作って喜んできたのだ。
今日の結論
データに空欄を見つけたら、埋める前に、消す前に、一度だけ立ち止まる。
数字が書かれていないマスは、何も言っていないのではない。「喋りたくない」「喋る余裕がない」と全身で訴えているのだ。
僕が体重記録アプリの空欄を見つめるとき、そこを0kgで埋めたり、なかったことにして澄まし顔をしたりはしない。空欄が3日続いた理由が、部屋のゴミ箱に重なったピザの箱(Lサイズ2枚とコーラ1本)にあることを、僕自身が一番よく知っているからだ。
次にデータの表でぽっかり空いたマスを見つけたら、デリートキーを押す前に、その沈黙の裏で山積みになっているピザの箱の数を、一度だけ想像してみてほしい。