土耳其地方选举计票夜,我把三套出口民调并排跑了一遍

安卡拉时间3月31日22点40分,最高选举委员会(YSK)已录入约62%的票箱,伊斯坦布尔市长席位在两家电视台的屏幕上差出1.8个百分点。我手上同时开着三份数据:YSK官网的逐箱增量、两家民调机构按省加权后的出口民调、以及我自己从上一轮2019年同省同区结果里拉出来的基线。三份数据互相打架时,判断哪个更可信,是那一晚唯一值得做的事。

我的做法是先把三份数据统一到同一粒度。YSK页面按票箱推送,字段是省、区、已开箱数、各党得票;出口民调只给省级百分比。直接比会错位,所以我按省把YSK的增量票重算成百分比,再和出口民调的省级估计对齐,代码大致这样:

import pandas as pd
# ysk: province, box_opened, party, votes
# poll: province, party, pct_estimate
g = ysk.groupby(['province','party'])['votes'].sum().reset_index()
g['pct_live'] = g.groupby('province')['votes'].transform(lambda s: s/s.sum()*100)
m = g.merge(poll, on=['province','party'], how='left')
m['gap'] = m['pct_live'] - m['pct_estimate']
print(m[m['province'].isin(['Istanbul','Ankara','Izmir'])].sort_values('gap'))

关键在分母:已开箱比例低时,省级 live 百分比会系统性偏向开箱早的城区,伊斯坦布尔欧洲岸先开、安纳托利亚岸后开,前两小时的数字天然偏向某一方。所以我给每个省加了一个开箱进度权重,进度低于40%的省不参与差距排名,只做观察。

为什么这么做:出口民调是按登记选民结构加权的,YSK是实票,两者误差来源不同——前者怕抽样偏差,后者怕开箱顺序偏差。把两者放在同一进度刻度上比,才能看出哪一边的系统性偏差更大。代价是这套流程要求你手工维护省份映射表,YSK的省名和民调机构的拼写偶尔不一致(比如Afyonkarahisar的缩写),映射错一个省,排名就会失真。

会失效的地方:一是海外选票和边境票箱后到,计票末段会整体拉偏几个百分点,进度权重在90%以上时要停用;二是我自己踩过的坑——把2019年基线直接套到这次,忽略了两次之间行政区划和选区合并的调整,导致一个区的基线比实际高了近3个百分点,误判成异常。另外,出口民调机构在开箱过半后常会静默更新,脚本里必须记录抓取时间戳,否则同一份数据两次跑出不同结果。

你在土耳其跟踪选举或做本地数据整理时,遇到省级和票箱级数据对不上,是先信实票进度,还是先信加权民调?

0
赞同度 100% · 0 条评论 · 2 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。