テレビの選挙特番などで
「当確」って出てきますよね。
あれの推定方法などについてです。
解説動画はこちら
出口調査と区間推定の仕組み
実際には当確を決めるには
実際には候補者も多く、出口調査のみでは
正確には決まらないことが多いです。

という計算式で当確ラインがもとまります。
これを用いて開票率が進むにつれ
区間推定で当確を計算するコード
候補者が2人
開票が進んで、得票数と全体の数が分かったとします。
関数の引数に入力すると、当確結果がわかります。
最初は全体400 , 獲得210票とします。
信頼区間の下限は
当確ラインを上回らないので、まだ当確出ません。
2100 , 4000 でやってみると
少し、区間が狭まりましたが
信頼区間の下限は
当確ラインを上回らないので、まだ当確出ません。
21000 , 40000 でやってみると
推定得票率 : 52.50%
ようやく上回りました
これでようやく当確が出せるようになります。
出口調査で最初から大差がついている場合は
開票前にすでに決着がついている場合もあるようです。
今回は選挙の当確や
出口調査の仕組みについてでした。
こういった統計を用いた計算なんかも
Pythonを用いると簡単に計算できますね
選挙以外にも使えるので
覚えておくと仕事の幅が広がって便利です。
それでは。
「当確」って出てきますよね。
あれの推定方法などについてです。
解説動画はこちら
テレビ番組によっては開票が行われてすぐに
当確が出てしまったりするケースがあります。
当確が出てしまったりするケースがあります。
なぜこんなにも早く当確が出るのか
選挙の出口予想の仕組みについて解説します。
出口調査と区間推定の仕組み
選挙の当確を出すためには、それぞれの候補者の得票率を
「だいたい、ここからこの位までの区間に入ってるんじゃないか?」
という区間推定を行なっています。
出口調査で得られた、ある候補者の得票率を p とすると
得票率の下限が50%を上回っているため
このまま行けば勝ちが見えてきます。
これが400人中210人だった場合はどうでしょうか
推定得票率: 52.50%
95% 信頼区間: 47.61% ~ 57.39%
これだと得票率の下限が50%を下回っているので
まだ決着がつけられません
もう少しサンプル数が増えた場合はどうなるでしょうか
今度は出口調査で4000人中2100人としてみます。
推定得票率: 52.50%
95% 信頼区間: 50.95% ~ 54.05%
n 調査人数が増えるほど誤差が少なくなり
推定された区間は短くなります。
実際には当確を決めるには
実際には候補者も多く、出口調査のみでは
正確には決まらないことが多いです。

という計算式で当確ラインがもとまります。
これを用いて開票率が進むにつれ
区間推定の下限が当確ラインを超える得票率が獲得できている場合
当確が出せるということになります。
区間推定で当確を計算するコード
候補者が2人
開票が進んで、得票数と全体の数が分かったとします。
関数の引数に入力すると、当確結果がわかります。
最初は全体400 , 獲得210票とします。
import math
def check_win(candidate_votes, total_samples, confidence=0.99):
if total_samples == 0:
print("❌ 標本数が0のため、判定できません。")
return
# 推定得票率
phat = candidate_votes / total_samples
# z値の選択
z = 1.96 if confidence == 0.95 else 2.58 if confidence == 0.99 else 1.64
# 標準誤差と信頼区間
se = math.sqrt(phat * (1 - phat) / total_samples)
lower = phat - z * se
upper = phat + z * se
# 当確ラインの計算
win_threshold = (1 + math.sqrt(z**2 / (z**2 + total_samples))) / 2
# 表示
print(f"推定得票率 : {phat:.2%}")
print(f"{int(confidence * 100)}% 信頼区間 : {lower:.2%} ~ {upper:.2%}")
print(f"当確ライン(開票数={total_samples}) : {win_threshold:.2%}")
# 当確判定
if lower >= win_threshold:
print("OK : 候補者は『当確』と判断できます。")
else:
print("X : まだ『当確』とは言えません。")
# 使用例
check_win(candidate_votes=210, total_samples=400, confidence=0.95)
推定得票率 : 52.50%
95% 信頼区間 : 47.61% ~ 57.39%
当確ライン(開票数=400) : 54.88%
X : まだ『当確』とは言えません。
信頼区間の下限は
当確ラインを上回らないので、まだ当確出ません。
2100 , 4000 でやってみると
推定得票率 : 52.50%
95% 信頼区間 : 50.95% ~ 54.05%
当確ライン(開票数=4000) : 51.55%
X : まだ『当確』とは言えません。
少し、区間が狭まりましたが
信頼区間の下限は
当確ラインを上回らないので、まだ当確出ません。
推定得票率 : 52.50%
95% 信頼区間 : 52.01% ~ 52.99%
当確ライン(開票数=40000) : 50.49%
OK : 候補者は『当確』と判断できます。
ようやく上回りました
これでようやく当確が出せるようになります。
出口調査で最初から大差がついている場合は
開票前にすでに決着がついている場合もあるようです。
今回は選挙の当確や
出口調査の仕組みについてでした。
こういった統計を用いた計算なんかも
Pythonを用いると簡単に計算できますね
選挙以外にも使えるので
覚えておくと仕事の幅が広がって便利です。
それでは。


