はじめに
こんにちは、事業会社で働いているデータサイエンティストです。
突然ですが、久しぶりに政治学っぽいシナリオです:誰がどの政党に投票したのか知りたいとします。
政治学では極めて自然な問いです。たとえば、
- 男性と女性ではどちらが自民党に投票しやすいのか
- 若年層はどの政党を支持しているのか
- 高学歴層ほど特定の政党に投票するのか
といったことが分かれば、選挙結果を理解するうえで非常に有用です。
ところが、ここにはかなり根本的な問題があります。
投票には秘密投票のルールがあります。
選挙区ごとの人口構成は国勢調査などから分かります。また、選挙区ごとに各政党が何票獲得したのかも分かります。
しかし、
30代の有権者のうち、何%がA党に投票したのか?
となると、突然分からなくなります。
データとして持っているのは、
選挙区ごとの年代別の有権者数は分かります。
| 年代 | 有権者数 |
|---|---|
| 20代 | 1,200人 |
| 30代 | 1,500人 |
| 40代 | 1,300人 |
| 合計 | 4,000人 |
そして、同じ選挙区における政党別の得票数も分かります。
| 投票先 | 得票数 |
|---|---|
| A党 | 1,800票 |
| B党 | 1,200票 |
| C党 | 1,000票 |
| 合計 | 4,000票 |
しかし、本当に知りたいのは次のような表です。
| 年代 | A党 | B党 | C党 | 合計 |
|---|---|---|---|---|
| 20代 | ? | ? | ? | 1,200人 |
| 30代 | ? | ? | ? | 1,500人 |
| 40代 | ? | ? | ? | 1,300人 |
| 合計 | 1,800票 | 1,200票 | 1,000票 | 4,000人 |
行の合計も列の合計も分かる。でも、中のセルが分からない。
しかも厄介なことに、この合計値と矛盾しないセルの埋め方は一つではありません。
たとえば、実際の投票行動が次のようになっていたとします。
パターンA
| 年代 | A党 | B党 | C党 | 合計 |
|---|---|---|---|---|
| 20代 | 1,000 | 100 | 100 | 1,200 |
| 30代 | 500 | 600 | 400 | 1,500 |
| 40代 | 300 | 500 | 500 | 1,300 |
| 合計 | 1,800 | 1,200 | 1,000 | 4,000 |
この世界では、20代のA党への投票率は、
$$
\frac{1000}{1200} \approx 83.3\text{%}
$$
です。20代は圧倒的にA党へ投票しています。
しかし、次のような投票行動でも、先ほどとまったく同じ集計データが得られます。
パターンB
| 年代 | A党 | B党 | C党 | 合計 |
|---|---|---|---|---|
| 20代 | 100 | 600 | 500 | 1,200 |
| 30代 | 900 | 300 | 300 | 1,500 |
| 40代 | 800 | 300 | 200 | 1,300 |
| 合計 | 1,800 | 1,200 | 1,000 | 4,000 |
こちらの世界では、20代のA党への投票率は、
$$
\frac{100}{1200} \approx 8.3\text{%}
$$
しかありません。
それでも、どちらの世界でも観測されるデータは、
- 20代:1,200人、30代:1,500人、40代:1,300人
- A党:1,800票、B党:1,200票、C党:1,000票
で完全に同じです。
つまり、同じ集計データの裏側に、
$$
P(A党 \mid 20代) = 83.3\text{%}
$$
という世界と、
$$
P(A党 \mid 20代) = 8.3\text{%}
$$
という、まったく異なる個人の投票行動が隠れている可能性があります。
集計値を眺めているだけでは、この2つの世界を区別できません。
だからといって、
「じゃあ投票用紙に有権者IDを振って、国勢調査とJOINすればよくね?」
とは当然なりませんwそれをやったら秘密投票ではありません。
このように、集計データから個人レベルの行動をどこまで推論できるのかという問題は、政治学、特に政治学方法論(political methodology)では昔から研究されてきました。
その代表的な研究領域が ecological inference です。
本記事ではこれをエコロジー推論と呼ぶことにします。
この分野の有名な研究として、Gary Kingによる A Solution to the Ecological Inference Problem: Reconstructing Individual Behavior from Aggregate Data があります。
(PDFダウンロードできます)
タイトルからして、
Reconstructing Individual Behavior from Aggregate Data
個人の行動を集計レベルのデータから再現する、です。
めちゃくちゃ強そうです。
しかし、想像していただければ分かる通り、政治学者がみんな一般有権者の実際の投票行動ばかり研究しているわけではありません。また、個人の投票行動を知りたい場合でも、アンケート調査などを通じて直接尋ねるという選択肢もあります。
そのため、集計された選挙結果から個人の投票行動を復元することを主眼とするエコロジー推論は、政治学方法論の中でもかなりニッチな研究領域です。
しかも典型的な応用例が、
「選挙区ごとの人種構成と得票数から、(アメリカの文脈だと)各人種がどの候補に投票したのかを推定する」
のようなものなので、ビジネスで働いているデータサイエンティストからすると、
いや、それ選挙研究以外でいつ使うんだよwww
と思っても全く不思議ではありません。
私も、政治学方法論を勉強しているだけだったら、エコロジー推論をかなり特殊な選挙研究の手法として理解していたかもしれません。
しかし、事業会社でデータサイエンティストとして働いていると、少し違って見えてきました。
企業でも、
- 欲しい個票データを取得するにはお金がかかる
- 別々のシステムに存在するデータを個人単位でJOINできない
- プライバシー上、そもそもJOINしない方がよい
- 分析のためだけに新しい計測システムを構築してもROIが合わない
ということは普通に起こります。
政治では秘密投票という制度がJOINを阻止します。
ビジネスでは、コスト、システム、プライバシー、そしてROIがJOINを阻止することがあります。
理由は全く違います。
しかし、分析者の手元に残される問題は意外なほど似ています。
行の合計も列の合計も分かる。でも、中のセルが分からない。
そこで本記事では、政治方法論で長年研究されてきたこの問題を、選挙ではなくイベント会社のマーケティング分析に持ち込んでみます。
来場者の年代構成は分かる。
POSから商品の購入数も分かる。
でも、誰が買ったのかは分からない。
そんなデータを普通に回帰分析したとき、マーケティング担当者は何を間違える可能性があるのでしょうか。
そして、
「20代が多い時間帯ほどCVRが高い」
ことと、
「20代のCVRが高い」
ことは、本当に同じなのでしょうか。
政治学者が秘密投票を相手に何十年も格闘してきた問題が、なぜかイベント会社のマーケティング会議にも出現します。
今回はまず、イベント会社を題材に、エコロジー推論を考えずに集計データを解釈すると何が起きるのかをシミュレーションで見ていきます。
そして次回以降の記事では、舞台をいったん政治学に戻します。実際の政治学のデータを使いながら、集計データから個人の行動についてどこまで分かるのか、そしてエコロジー推論ではどのような方法が提案されてきたのかを紹介していく予定です。
今回の記事を最後まで読んでいただければ、そのときにはおそらく、
「選挙区ごとの人口構成から誰がどの政党に投票したのかを知りたい」という政治学者と、「来場者の年代構成とPOSから誰が商品を買ったのかを知りたい」というマーケターは、実はほとんど同じ統計的問題に困っている
ことが分かっているはずです。
まずは、その問題がどれくらい簡単に、そしてどれくらい危険な形でビジネスの現場に現れるのかを見てみましょう。
秘密投票の問題をイベント会社に持ってきてみる
ここまで選挙の話をしてきましたが、ここから突然、イベント会社のマーケティング担当者になったつもりで考えてみます。
ある会社が、3日間の大規模なフードイベントを開催したとします。
イベント終了後、マーケティング担当者は、
どの年代の来場者が、あまりフードを購入していなかったのか?
を知りたくなりました。
購入率の低かった年代が分かれば、次回はその年代にも魅力的な商品を増やしたり、会場設計を見直したりできそうです。
ここで幸いなことに、会場内の各フード店舗ではPOSを使っています。
したがって、たとえば30分ごとに、
| 時間帯 | 来場者数 | フード購入者数 |
|---|---|---|
| 10:00-10:30 | 1,000 | 91 |
| 10:30-11:00 | 1,000 | 162 |
| 11:00-11:30 | 1,000 | 213 |
| ... | ... | ... |
のようなデータを取得できます。
一方、来場者の年代構成も知りたいとします。
これは別に、とんでもないシステムを作らなくても取得できます。
たとえば入口にスタッフを配置して、来場者を見ながら、
10:00-10:30
20代くらい 100人
30代以上 900人
のようにカウントしてもらっても構いません。
もちろん実務では目視による年代判定には測定誤差がありますが、今回考えたい問題は測定誤差ではないので、以下ではスタッフが恐ろしいほど正確に年代を判定できるものとします。
AIカメラを使ってもよい
もう少し2026年らしくするなら、AIカメラを使っても構いません。
実際、私が日々六本木一丁目に通勤するときに利用する東京メトロ南北線に乗り入れる埼玉高速鉄道の車両では、カメラで取得した情報からAIを用いて混雑状況・性別・年代などを解析する仕組みが導入されています。
埼玉高速鉄道の説明によると、取得した画像はAIによってリアルタイムに解析された後に即座に破棄され、個人を特定できる解析は行わず、解析結果が統計データとして保存されます。
また、導入時の発表資料では、カメラ等から得られた情報をもとに、混雑状況だけでなく性別・年代などの乗客属性をAIで解析することも明記されています。
つまり、
$$
\text{人を観測する}
\rightarrow
\text{年代などを判定する}
\rightarrow
\text{集計値だけを残す}
$$
というデータ取得自体は、別にSFの話ではありません。すでに社会実装されています。
今回のイベントでも、スタッフによるカウントでもAIカメラでも何でもよいので、30分ごとに次のようなデータが取得できたとします。
| 時間帯 | 20代 | 30代以上 | 来場者数 |
|---|---|---|---|
| 10:00-10:30 | 100 | 900 | 1,000 |
| 10:30-11:00 | 200 | 800 | 1,000 |
| 11:00-11:30 | 300 | 700 | 1,000 |
| ... | ... | ... | ... |
POSと来場者属性をJOINする
ここまで来れば、データサイエンティストの仕事は簡単そうです。
POSにはtimeごとの販売データがあり、
time,sales_number
10:00-10:30,91
10:30-11:00,162
11:00-11:30,213
...
入口の集計データには、
time,20s_ratio
10:00-10:30,0.1
10:30-11:00,0.2
11:00-11:30,0.3
...
があります。
Rなら、
dplyr::left_join(
readr::read_csv("pos.csv"),
readr::read_csv("demographic.csv"),
by = "time"
)
で終わりです。
Pythonでも、
import pandas as pd
pd.read_csv("pos.csv").merge(
pd.read_csv("demographic.csv"),
on="time",
how="left"
)
で終わりです。
めちゃくちゃ簡単です。
JOINできました。
でも、そのJOINしたデータで、果たして担当者が知りたい問題の解答にあたるデータなのか?
できたのは、
$$
\boxed{\text{時間帯単位のJOIN}}
$$
です。
私たちが本当に知りたかった、
$$
\boxed{\text{来場者単位のJOIN}}
$$
ではありません。
POSは「何人が買ったか」を知っています。
入口のスタッフは「何人くらい20代が来たか」を知っています。
しかし、
その20代のうち、誰が買ったのか?
は、どちらのデータにもありません。
それでも回帰分析してみる
そんな細かいことは気にせず、とりあえずデータを見てみましょう。
今回は説明のため、6つの時間帯だけを取り出します。
| 時間帯 | 20代比率 | フード購入者数 |
|---|---|---|
| 10:00-10:30 | 10% | 91 |
| 10:30-11:00 | 20% | 162 |
| 11:00-11:30 | 30% | 213 |
| 11:30-12:00 | 40% | 274 |
| 12:00-12:30 | 50% | 305 |
| 12:30-13:00 | 60% | 326 |
どうでしょうか。
20代比率が高くなるほど、めちゃくちゃ売れています。
Rで回帰するなら、
lm(
sales_number ~ `20s_ratio`,
data = dplyr::left_join(
readr::read_csv("pos.csv"),
readr::read_csv("demographic.csv"),
by = "time"
)
) |>
summary()
くらいで十分です。
このデータでは、
$$
\hat{\beta}_{20s} > 0
$$
となります。
マーケティング担当者からすると、かなり分かりやすい結果です。
「20代が多い時間帯ほどフードが売れている」
ここまでは、観測された集計データについて述べているだけなので問題ありません。
しかし、会議をしているうちに、いつの間にか話が変わってきます。
「なるほど、20代はかなりフードを買ってくれているんですね」
「逆に30代以上のCVRが低そうですね」
「30代は子育て世代も多いから、子どもを連れていると食べ歩きしづらいのでは?」
「次回は30代が好きそうな商品をもっと増やしましょう」
「ベビーカーでも回りやすい導線にした方がいいかもしれません」
ものすごくそれっぽいマーケティング会議になってきました。
しかし、ここで一度止まってみます。
そもそも、本当に20代の方が買っていたのでしょうか?
答え合わせをしてみる
今回はシミュレーションなので、現実なら観測できない「真実」を私たちは知っています。
先ほどのデータを、実際に誰が購入していたのかまで分解してみます。
| 時間帯 | 20代来場者 | 20代購入者 | 30代以上来場者 | 30代以上購入者 | 全購入者 |
|---|---|---|---|---|---|
| 10:00-10:30 | 100 | 1 | 900 | 90 | 91 |
| 10:30-11:00 | 200 | 2 | 800 | 160 | 162 |
| 11:00-11:30 | 300 | 3 | 700 | 210 | 213 |
| 11:30-12:00 | 400 | 4 | 600 | 270 | 274 |
| 12:00-12:30 | 500 | 5 | 500 | 300 | 305 |
| 12:30-13:00 | 600 | 6 | 400 | 320 | 326 |
20代の購入率を計算してみましょう。
$$
P(\mathrm{Buy}\mid 20s)=\frac{1}{100}
=\frac{2}{200}
=\cdots
=\frac{6}{600}
=1%
$$
20代、ほぼ誰も買っていません。
それどころか、すべての時間帯で30代以上の購入率の方が圧倒的に高くなっています。
それなのに、表面上のデータでは、
$$
\mathrm{20代}\uparrow
\quad\Longrightarrow\quad
\mathrm{売上}\uparrow
$$
という非常にきれいな関係が観測されています。
つまり、20代が多い時間帯ほど売れることと、20代ほどよく買うことは、まったく同じではありません。
CVRで書けばもっと分かりやすいでしょう。
$$
\boxed{
\text{20代が多い時間帯のCVRが高い}
\neq
\text{20代のCVRが高い}
}
$$
マーケティング担当者が説明しようとしていた、
「なぜ30代以上はあまり買わないのだろう?」
という現象は、そもそも存在していませんでした。
30代以上は普通に買っています。
ほとんど買っていないのは20代です。
にもかかわらず、集計データだけを見ると正反対のストーリーを作ることができます。
後ほど詳細を説明しますが、重要なのは、回帰分析そのものが間違っているわけではない、ということです。
回帰が捉えているのはあくまで「時間帯レベルで20代比率と購入者数がどう関連しているか」です。
それを「個人レベルで20代の購入率が高い」と解釈した瞬間に、話が変わります。
「じゃあ個票を取ればいいじゃん」
もちろんそうです。
来場者一人ひとりについて、
visitor_id,age_group,bought_food
001,20s,0
002,30plus,1
003,20s,0
...
というデータがあれば、こんな問題で悩む必要はありません。
では、どうやってそのデータを作りましょうか。
入口のスタッフが、
「あなたはvisitor_id = 001です」
(キモすぎw)
と全来場者にIDを付け、その人がどの店舗で買い物したのかPOSまで追跡するのでしょうか。
あるいは、会場中にAIカメラを設置して来場者を継続的に識別し、さらにその情報をPOSの取引と紐付けるシステムを作るのでしょうか。
技術的に何らかの方法が存在することと、3日間のイベントのためにそれを実装することが合理的であることは別問題です。
必要になるのはカメラ代だけではありません。
システム開発、POSとの連携、運用、データ管理、プライバシーへの対応なども必要になります。さらに、イベントでは来場者の体験そのものが商品なので、大量の計測機器を設置して会場の雰囲気を壊してまで取得する価値があるのか、という問題もあります。
入口でスタッフが人数を数えるだけなら安い。
POSはもともと存在する。
その2つを時間帯単位でJOINするのも簡単です。
しかし、その間にある「誰が買ったのか」を観測するためだけに必要なコストは、突然大きくなる可能性があります。
政治学では、
$$
\boxed{\text{秘密投票}}
$$
が個人単位のJOINを難しくします。
ビジネスでは、
$$
\boxed{\text{コスト・システム・プライバシー・ROI}}
$$
が個人単位のJOINを難しくすることがあります。
理由は全然違います。
しかし、最後に分析者の前に残る表は同じです。
| 年代 | 購入 | 非購入 | 合計 |
|---|---|---|---|
| 20代 | ? | ? | 600 |
| 30代以上 | ? | ? | 400 |
| 合計 | 326 | 674 | 1,000 |
行の合計も分かる。列の合計も分かる。でも、中のセルが分からない。
さっき選挙で見たやつです。
なお、「誰を狙うべきか」は今回は議論しません
最後に、一つだけ重要な前提を置いておきます。
今回のイベント会社では、マーケティング部門がすでに、
「購入率が最も低い年代を特定し、次回のイベントではその年代にとって魅力的な商品や会場を作る」
という方針を決めているものとします。
もちろん、
「本当に購入率の低い年代を狙えば売上が増えるのか?」
「20代向けの商品を増やせば20代の購入率は上がるのか?」
「ベビーカー対応を改善したら売上は増えるのか?」
という問いは、どれも非常に重要です。
しかし、それは施策効果やターゲティングを考える因果推論・キャンペーン設計の問題です。
今回の記事では扱いません。
なので、
「そもそも低CVR層を狙うという戦略がおかしくない?」
というツッコミは、今回はちょっとだけ我慢してください。
その前に解決しなければならない問題があります。
マーケティング部門は「購入率が最も低い年代を狙う」と決めました。
では、
$$
\boxed{
\text{そもそも、どの年代の購入率が低いのか?}
}
$$
この集計データから、本当に分かったのでしょうか。
政治学では、まったく同じ種類の問いを長い間考えてきました。
秘密投票の向こう側にいる有権者を考えていたはずが、いつの間にかイベント会社のCVRを考えています。
次に、この問題がなぜ単なる「変な回帰結果」ではなく、集計データから個人の行動を推論するときに生じるエコロジー推論の問題なのかを整理していきます。
これは「回帰分析が間違えた」問題ではない
先ほどの結果だけを見ると、
「回帰分析が変な結果を出した」
と思うかもしれません。
しかし、実は回帰分析は何も間違えていません。
私たちが推定したのは、
$$
\mathrm{sales_number}_i = \alpha + \beta \cdot \mathrm{20s_ratio}_i + \epsilon_i
$$
というモデルでした。
ここで$i$は来場者ではなく時間帯です。
そして実際に、
$$
\hat{\beta}>0
$$
でした。
つまり、
20代の来場者比率が高い時間帯ほど、フードの購入者数が多い
という関係は本当に存在しています。
問題は、その次です。
いつの間にか私たちは、
20代が多い時間帯ほど売れる
という時間帯についての関係を、
20代ほどフードを買う
という個人についての関係に読み替えていました。
$$
\boxed{
\text{20代が多い時間帯ほど売れる} \not\Rightarrow \text{20代ほどよく買う}
}
$$
観測単位は時間帯なのに、知りたい対象は来場者です。
つまり、
$$
\boxed{
\text{観測単位} \neq \text{推論単位}
}
$$
になっています。
これが今回の問題の核心です。
本当に欲しかった数字は観測されていない
もう少し具体的に考えてみましょう。
ある時間帯に1,000人が来場し、
- 20代:600人
- 30代以上:400人
- フード購入者:326人
だったとします。
入口の集計データから、
$$
N_{20s}=600
$$
は分かります。
POSから、
$$
N_{\mathrm{Buy}}=326
$$
も分かります。
しかし、マーケティング担当者が本当に知りたい20代の購入率は、
$$
P(\mathrm{Buy}\mid20s) = \frac{N(20s\cap\mathrm{Buy})}{N(20s)}
$$
です。
分母の600人は知っています。
問題は分子です。
$$
\boxed{
N(20s\cap\mathrm{Buy})=?
}
$$
「20代であり、かつ購入した人」が何人いるのかを観測していません。
先ほどの表をもう一度書けば、
| 年代 | 購入 | 非購入 | 合計 |
|---|---|---|---|
| 20代 | ? | ? | 600 |
| 30代以上 | ? | ? | 400 |
| 合計 | 326 | 674 | 1,000 |
となります。
見覚えがあります。
記事の最初に出てきた選挙の表と並べてみましょう。
| 年代 | A党 | B党 | C党 | 合計 |
|---|---|---|---|---|
| 20代 | ? | ? | ? | 1,200 |
| 30代 | ? | ? | ? | 1,500 |
| 40代 | ? | ? | ? | 1,300 |
| 合計 | 1,800 | 1,200 | 1,000 | 4,000 |
政治学では、
年代別の有権者数は分かる。
政党別の得票数も分かる。
でも、どの年代がどの政党に投票したのか分からない。
イベント会社では、
年代別の来場者数は分かる。
フードを購入した人数も分かる。
でも、どの年代がフードを購入したのか分からない。
やっていることはほとんど同じです。
$$
\boxed{
\begin{array}{ccc}
\text{年代別有権者数} & + & \text{政党別得票数}\
&\Rightarrow&\
&\text{誰がどこに投票した?}&
\end{array}
}
$$
と、
$$
\boxed{
\begin{array}{ccc}
\text{年代別来場者数} & + & \text{POS購入者数}\
&\Rightarrow&\
&\text{誰が買った?}&
\end{array}
}
$$
は、分野こそ違いますが、観測されている周辺分布から、観測されていない同時分布を知りたいという同じ構造を持っています。
同じ集計データから、まったく違う世界を作れる
さらに厄介なのは、先ほど選挙の例で見たように、集計値を満たす表が一つではないことです。
たとえば、
- 20代:600人
- 30代以上:400人
- 購入:326人
- 非購入:674人
という集計値しか観測していないとします。
実際の世界がこうだった可能性があります。
世界A:20代がめちゃくちゃ買う
| 年代 | 購入 | 非購入 | 合計 |
|---|---|---|---|
| 20代 | 300 | 300 | 600 |
| 30代以上 | 26 | 374 | 400 |
| 合計 | 326 | 674 | 1,000 |
この場合、
$$
P(\mathrm{Buy}\mid20s)=\frac{300}{600}=50\text{%}
$$
です。
20代はかなり買っています。
しかし、次の世界もまったく同じ集計値を作ります。
世界B:20代がほとんど買わない
| 年代 | 購入 | 非購入 | 合計 |
|---|---|---|---|
| 20代 | 6 | 594 | 600 |
| 30代以上 | 320 | 80 | 400 |
| 合計 | 326 | 674 | 1,000 |
こちらでは、
$$
P(\mathrm{Buy}\mid20s) = \frac{6}{600} = 1\text{%}
$$
です。
それでも分析者が観測できる周辺の数字は、
| 観測できるもの | 世界A | 世界B |
|---|---|---|
| 20代来場者数 | 600 | 600 |
| 30代以上来場者数 | 400 | 400 |
| 購入者数 | 326 | 326 |
| 非購入者数 | 674 | 674 |
で完全に同じです。
つまり、観測された集計値だけから見れば、
$$
P(\mathrm{Buy}\mid20s)=50\text{%}
$$
の世界と、
$$
P(\mathrm{Buy}\mid20s)=1\text{%}
$$
の世界を区別できません。
これは予測モデルの精度が悪いからでも、サンプルサイズが小さいからでもありません。
そもそも知りたいセルが観測されていないからです。
データを増やせば解決する?
ここで、
「でも時間帯をたくさん集めれば、回帰で分かるのでは?」
と思うかもしれません。
実際、時間帯を6個ではなく600個にすれば、
lm(
sales_number ~ `20s_ratio`,
data = data
)
の標準誤差はかなり小さくなるかもしれません。
$p$値が、
$$
p<0.001
$$
になるかもしれません。
決定係数も、
$$
R^2=0.95
$$
になるかもしれません。
LightGBMを使えば、売上を恐ろしく正確に予測できるかもしれません。
しかし、それらが答えているのは基本的に、
「20代が多い時間帯では、どれくらい売れるのか?」
です。
私たちが知りたい、
「20代の人は、どれくらい買うのか?」
とは違います。
極端に言えば、
$$
R^2\rightarrow1
$$
になっても、
$$
N(20s\cap\mathrm{Buy})
$$
が直接観測されたことにはなりません。
データが多いことと、欲しい情報がデータに入っていることは別問題です。
エコロジカル・フォールシーとエコロジー推論
このように、集団レベルで観測された関係から、そのまま個人レベルの関係を結論づけてしまう問題は、一般に生態学的誤謬(ecological fallacy)として知られています。
今回で言えば、
$$
\text{20代比率が高い時間帯ほど売れる}
$$
という集団レベルの関係から、
$$
\text{20代ほど買う}
$$
という個人レベルの関係を結論づけてしまうことです。
一方、そこで、
では、個人データが直接観測できないとき、集計データから個人の行動についてどこまで推論できるのか?
と正面から考えるのが、この記事で扱っているエコロジー推論(ecological inference)です。
重要なのは、
集計データで分析すること自体が悪い
という話ではありません。
時間帯別の売上を予測したいのであれば、時間帯別データを使えばよいでしょう。
店舗ごとの売上を予測したいのであれば、店舗別データを使えばよいでしょう。
問題になるのは、
集計によって捨てられた個人間の対応関係を、集計データに回帰をかければ復元できると思ってしまうこと
です。
今回、入口のスタッフとPOSは、それぞれ非常に正確に仕事をしていました。
入口では年代構成を正確に数えています。
POSも購入数を正確に記録しています。
JOINも正しく動いています。
lm()も正しく計算しています。
誰も間違っていません。
それでも、
$$
\boxed{
\text{誰が買ったのか}
}
$$
という情報だけは、データを集計した時点ですでに失われています。
だからこそ、この問題は単なる「変な回帰結果」ではありません。
何がデータから識別できて、何が識別できないのかという問題です。
そしてこれは、政治学者が秘密投票の選挙データを相手に長い間考えてきた問題そのものです。
今回の記事では、この現象がビジネスデータでも簡単に起こりうることを確認するところまでにします。
次回以降は舞台を政治学に戻し、実際の政治学のデータを使いながら、
- 集計データだけでも何が分かるのか
- 何も仮定しなければ、個人の行動をどこまで絞り込めるのか
- さらに推論するためには、どのような仮定が必要なのか
- エコロジー推論では、これらの問題にどのような方法が提案されてきたのか
を見ていきます。
イベント会社のPOSから、また選挙データに戻ります。
でも、ここまで読んでいただいた方にはもう、
「なぜ急に選挙の話をするの?」
とは見えないはずです。
扱っているデータは違っても、欠けている情報の構造は同じだからです。
次回以降:では、どうすればいいのか?
ここまで読むと、
「問題なのは分かった。じゃあ、どうすればいいの?」
と思うかもしれません。
もちろん、そこで終わりではありません。
集計データしかないからといって、個人の行動について何も分からないわけではありません。
次回以降の記事では舞台を政治学に戻し、実際の政治学のデータを使いながら、
- 集計データだけから、個人の行動についてどこまで絞り込めるのか
- 何も仮定しない場合でも、どのような範囲までは識別できるのか
- さらに踏み込んだ推論をするためには、どのような仮定が必要なのか
- 政治学方法論では、この問題に対してどのようなエコロジー推論の手法が提案されてきたのか
を順番に紹介していく予定です。
今回はイベント会社のPOSを使いましたが、次回から再び選挙データに戻ります。
ただし、今度は単なる「政治学の特殊な分析手法」には見えないはずです。
政治学のデータを使って方法を学び、その背後にある数学的な構造を理解すれば、同じ方法をまったく別の問題へ持っていくことができます。
おわりに
今回は、政治学で長く研究されてきたエコロジー推論の問題が、イベント会社のマーケティング分析でもかなり自然に現れうることを見てきました。
もちろん、私はイベント会社で働いたことはありません。
それでも今回、
入口では年代構成を集計している
POSでは購入数を記録している
でも、その2つを個人単位では紐付けられない
という状況を、それほど無理なく想像することができました。
では、なぜこのような例を思いついたのでしょうか。
自分でも完全な答えは分かりませんが、理由の一つは、事業会社でデータサイエンティストとして働いてきた経験にあるのではないかと思っています。
政治学方法論は、政治データ専用ではない
大学院にいたころの私は、方法論をどうしても、その手法が有名になった実証研究とセットで覚えていたように思います。
エコロジー推論なら選挙。
Ideal Pointなら議会。
Survey Experimentなら世論調査。
もちろん、実証研究と一緒に方法論を学ぶことには大きな意味があります。具体的な研究があるからこそ、
「なるほど、この問題を解くためにこのモデルが必要なのか」
と直感的に理解できます。
私自身、そのようにして多くの方法を覚えてきました。
ただ、事業会社で5年ほど働いてきた現在は、方法論を見るときに、以前よりも少し違うことを考えるようになりました。
この手法が有名になった研究は何か?
だけではなく、
この手法は、数学的にはどのような問題を解いているのか?
と考えるようになった気がします。
今回の例で言えば、
$$
\boxed{\text{秘密投票から有権者の投票行動を推論する}}
$$
と覚えてしまえば、エコロジー推論はかなり政治学っぽい手法です。
しかし、一段抽象化して、
$$
\boxed{
\text{周辺分布は観測できるが、知りたい同時分布が観測できない}
}
$$
と覚えていれば、突然景色が変わります。
選挙区と投票行動である必要はありません。
来場者属性とPOSかもしれない。
店舗属性と購買行動かもしれない。
組織構成と従業員行動かもしれない。
まだ私たちが見たこともないデータかもしれません。
だから、特に若き政治学徒のみなさんには、方法論を学ぶとき、有名な実証研究だけではなく、その背後にある数学的な構造も一緒に覚えておくことをおすすめしたいです。
実証研究は、方法論を理解するための素晴らしい入口です。
しかし、
まだ見たことのない問題にその方法論を持っていく
ために最後に頼りになるのは、数学なのではないかと思います。
具体例は私たちに「分からせて」くれます。
数学は、その理解をまだ知らない世界へ持っていくための乗り物になります。
企業で働くことも、方法論のトレーニングになるかもしれない
もう一つ、これはあくまで5年ほど事業会社で働いた一人のデータサイエンティストとしての感想ですが、企業で働くことは、意外と抽象化する能力を鍛える訓練になるのかもしれません。
企業では、教科書とまったく同じ問題はほとんど出てきません。
営業の問題、広告の問題、求人の問題、予算配分の問題、システムの問題など、毎回かなり違う姿をした問題がやってきます。
しかも、
「このデータはなぜ存在するのか?」
「逆に、なぜこのデータは存在しないのか?」
「取得できないのは技術的に不可能だからなのか、それとも単に高すぎるからなのか?」
「この分析結果を使って、最終的に誰が何を決めるのか?」
といったことまで考えなければ、なかなか分析が仕事になりません。
そのため、表面上はまったく違う問題を見ながら、
「あれ、これって数学的には、あの問題と同じでは?」
と考える癖が、少しずつ身についたように思います。
今回も、私がイベント業界に詳しいから例を作れたわけではありません。
むしろ、
$$
\text{入口の年代集計}
+
\text{POS}
+
\text{個人単位のJOINなし}
$$
というデータ生成過程を想像したとき、
「これ、秘密投票と同じ構造では?」
と比較的早く気づけたことの方が重要だったのだと思います。
そして、このように異なる問題の間の接続を見つける能力は、企業で分析するときだけではなく、研究をするときにも役に立つのではないかと思っています。
若き政治学徒のみなさんへ
なので、もしこの記事を政治学を勉強している学生や大学院生が読んでくださっているなら、企業で働くことも進路の一つとして考えてみてもよいのではないでしょうか。
もちろん、
「研究者になるより企業に行くべきだ」
と言いたいわけではまったくありません。
私自身も、企業で働くことがすべての人に合うとは思っていません。
ただ、
「企業に行ったら、せっかく勉強した政治学方法論から離れてしまう」
と最初から考える必要もないのではないかと思います。
少なくとも私の場合、企業でデータを扱ったことで、大学院で勉強した方法論について、
「この方法は、そもそも何のために存在しているのか?」
を以前より考えるようになりました。
そして意外なことに、政治学から離れたデータを扱えば扱うほど、政治学方法論の面白さを再発見することがあります。
企業に行ってみて、
「やっぱり研究の方が好きだった」
と思えば、研究に戻る道を考えてもよいでしょう。
企業で働きながら研究会や学会に参加したり、論文を読んだり、自分なりの形でアカデミアとの接点を持ち続けることもできます。私自身も、現在はそのような距離感で政治学方法論と付き合っています。
キャリアについて大きなことを言える立場ではありませんが、少なくとも、
$$
\boxed{
\text{アカデミア}
\longleftrightarrow
\text{企業}
}
$$
の間を、もう少し気軽に行き来する人が増えても面白いのではないかと思っています。
そして企業に行くにせよ、研究を続けるにせよ、方法論を覚えるときにはぜひ、
「この手法は○○という有名な研究で使われた」
だけで終わらず、
「この手法が解こうとしている数学的な問題は何なのか?」
まで持って帰ってください。
その構造を覚えていれば、数年後、まったく知らない業界の、まったく知らないデータを目の前にしたとき、
「あれ、これ大学院で見たやつでは?」
となる日が来るかもしれません。
少なくとも私は、秘密投票について勉強していたとき、それがいつかイベント会社のPOSの話につながるとは思っていませんでした。
政治学方法論は、政治学の中だけで使うには、少しもったいないのかもしれません。
では、次回以降の記事で実際のエコロジー推論に対処する分析手法を紹介します!
最後に、私たちと一緒に働きたい方はぜひ下記のリンクもご確認ください: