先日、大きな選挙が有りましたね。
何故にすぐ当確が出るのでしょう?
その仕組みを解説してみました。
解説動画はこちら
各局がどのような仕組みで
当確を出しているかは不明ですが
少なくとも投票所の出口調査や
事前アンケートなどの結果などを用いて統計的なサンプリング調査を元に
最終的な判断をしていると思います。
これはお味噌汁の味見に似ていますね。
ここで用いられるのが
母比率の信頼区間です。
母比率の信頼区間を求める式
なんだかややこしいと思いますが
さて、ここで問題を考えてみましょう。
これによると母比率の信頼区間は
最低でも56.9%、最高で63%
他に候補者がどれだけいても
過半数以上を獲得できる見込みになります。
計算式上ではサンプリングした標本数の数で
信頼区間の幅は大きく変わります。
10万票ほどの選挙区ではおよそ1%
1000票もあれば誤差は3%程度で
最終結果を導くことができます。
標本数を増やせば、区間はグッと縮まります。
開票率が上がっていけば
どんどん精度は上がりますね。
候補者同士の結果に差のない場合は
開票率100%に近付かないと
結果が出ないこともありますが
元々大差がついている選挙区では
開票率が低くても当確が出るようですね。
さてここからは
選挙区のシミュレーションをしてみましょう。
神奈川11区でシミュレーション
元セクシー担当大臣のいる選挙区の結果を用いて
シミュレーションしてみましょう。
結果は
データ化してみます。
147634
38843
これで票のデータを用意できました。
ランダムサンプリングして結果を見てみましょう。
1%でランダムサンプリング
1469
395
1%時の票数は1864
小泉氏は1469票獲得
林氏は395票獲得で
小泉氏の圧勝・・・・・・
一回やっただけでは分からないですよね・・・
頑張って100回対決してみましょう。
結果から言えば
林氏はどんなに頑張っても
437票しかとれず小泉氏が圧勝です。
箱髭図にして差し上げました。
1%の時点でこれなんで
まあ、諦めろって事ですwwwwwww
政策や人柄、人気などで
相手を上回るしかないでしょうね
まあほぼ無理ゲーでしょうけど。
得票率1%の時点で
大きく差がついていたら諦めろ
ただしデータに偏りが無いことが大前提!
あくまでもこの推定はデータに偏りがない所で
サンプリングされたデータを用いての推定です。
恣意的に歪められた結果を用いれば
作為的に誘導することも出来てしまいます。
使う側も見る側も
注意が必要なポイントです。
今回は選挙にまつわる
統計のお話でした。
それでは。
何故にすぐ当確が出るのでしょう?
その仕組みを解説してみました。
解説動画はこちら
なぜ開票率1%で当確が出るのか?
今回は選挙のお話です。
各局がどのような仕組みで
当確を出しているかは不明ですが
少なくとも投票所の出口調査や
事前アンケートなどの結果などを用いて
最終的な判断をしていると思います。
当確が分かる仕組み
無作為な1%分の投票結果が分かれば
票全体の動向が推計できます。
票全体の動向が推計できます。
これはお味噌汁の味見に似ていますね。
ちゃんと掻き回したものを
お玉に一掬い程度味見すれば
味噌汁全体の味はおおよその検討はつくでしょう。お玉に一掬い程度味見すれば
ここで用いられるのが
母比率の信頼区間です。
区間推定「母比率」の信頼区間の求め方
母比率の信頼区間を求める式
なんだかややこしいと思いますが
R:標本比率(得票率)
z:標準化変数(Z-score)
n:標本数(サンプル)
となっています。また信頼係数というモノがあります。
これは母集団から標本を取って
その平均からXX%信頼区間を
求めるという作業を100回やったとき
これは母集団から標本を取って
その平均からXX%信頼区間を
求めるという作業を100回やったとき
XX回はその区間の中に母平均が含まれる
というものです。
通常は95%を用いることが多いですが
信頼係数におけるzの値は
90%で1.64
95%で1.96
99%で2.58
90%で1.64
95%で1.96
99%で2.58
という値になります。
さて、ここで問題を考えてみましょう。
有効投票数10万票の選挙で開票率1%(1000票)時点の
A候補者の得票率は60%でした。
このとき信頼係数95%で
母比率の信頼区間を計算してみよう。
Pythonを使って計算してみました。
母比率の信頼区間を計算してみよう。
Pythonを使って計算してみました。
#標本比率: R=0.6 # 標準化変数 z=1.96 # 標本数 n=1000 lower = (R - z*((R*(1-R))/n)**0.5)*100 upper = (R + z*((R*(1-R))/n)**0.5)*100 print('{0:.3f} - {1:.3f}'.format(lower,upper))56.964 - 63.036
これによると母比率の信頼区間は
最低でも56.9%、最高で63%
他に候補者がどれだけいても
過半数以上を獲得できる見込みになります。
計算式上ではサンプリングした標本数の数で
信頼区間の幅は大きく変わります。
10万票ほどの選挙区ではおよそ1%
1000票もあれば誤差は3%程度で
最終結果を導くことができます。
標本数を増やせば、区間はグッと縮まります。
開票率が上がっていけば
どんどん精度は上がりますね。
候補者同士の結果に差のない場合は
開票率100%に近付かないと
結果が出ないこともありますが
元々大差がついている選挙区では
開票率が低くても当確が出るようですね。
さてここからは
選挙区のシミュレーションをしてみましょう。
神奈川11区でシミュレーション
元セクシー担当大臣のいる選挙区の結果を用いて
シミュレーションしてみましょう。
結果は
小泉 進次郎氏 14万7634票
林 伸明氏 3万8843票
となっていました。データ化してみます。
# 小泉票 k = ['K']*147634 # 林票 h = ['H']*38843 # 全体の票 v = k+h print(len(v)) print(v.count('K')) print(v.count('H'))186477
147634
38843
これで票のデータを用意できました。
ランダムサンプリングして結果を見てみましょう。
1%でランダムサンプリング
import random n = len(v)//100 d = random.sample(v , n) print(len(d)) print(d.count('K')) print(d.count('H'))1864
1469
395
1%時の票数は1864
小泉氏は1469票獲得
林氏は395票獲得で
小泉氏の圧勝・・・・・・
一回やっただけでは分からないですよね・・・
頑張って100回対決してみましょう。
import random import pandas as pd n = len(v)//100 df = pd.DataFrame(columns=['小泉票','林票']) for i in range(100): d = random.sample(v , n) k_count = d.count('K') h_count = d.count('H') tmp = pd.DataFrame([[k_count,h_count]],columns=['小泉票','林票']) df = df.append(tmp) df = df.astype('int') df.describe()
結果から言えば
林氏はどんなに頑張っても
437票しかとれず小泉氏が圧勝です。
箱髭図にして差し上げました。
1%の時点でこれなんで
まあ、諦めろって事ですwwwwwww
政策や人柄、人気などで
相手を上回るしかないでしょうね
まあほぼ無理ゲーでしょうけど。
まとめ
1000票ほどを集めれば
おおよその結果が予想できてしまう
おおよその結果が予想できてしまう
得票率1%の時点で
大きく差がついていたら諦めろ
ただしデータに偏りが無いことが大前提!
あくまでもこの推定はデータに偏りがない所で
サンプリングされたデータを用いての推定です。
恣意的に歪められた結果を用いれば
作為的に誘導することも出来てしまいます。
使う側も見る側も
注意が必要なポイントです。
今回は選挙にまつわる
統計のお話でした。
それでは。