洞察|美国大选倒计时:R 语言和蒙特卡洛算法预测希拉里赢面高达89%

距总统大选不到一周,来预测一下竞选结果还是很有挺有趣的。虽然关于选举,有的是博客和网站的预测,但确切告诉你他们究竟用了什么模型,或者告诉你怎么做这个预测的却寥寥无几。但是,作者接下来就会这么做!

在本文中,作者将以州为单位拆分竞选数据,展示如何使用投票结果模拟和预测哪位候选人可能会胜出。

作者用统计编程语言 R 来实现这一切。R 能让你快速高效地分析数据。要是你不关心 R 也没有问,跳过代码部分,只看文字也行。

第一步:采集数据

预测大选我们需要的数据来源:

选举人团(electoral college)

近期投票数据

你可以在很多地方找到上述相关信息。我用谷歌搜索快速查询了一下,在 Github 找到了一份很好的 SCV 文件。接下来就开始啦~

好,我们已经弄清楚选举人团,接下来就是投票数据了!同样,要找到投票数据,地方也有很多,我选择的是 electionprojection.com。除了名字押韵,这个网站结构简单,便于分析数据。我从这个网站上抓去了每个州的数据,得到了一份漂亮的表单。

你可以在这里看见全面的代码(code snippet),但重要的是我使用的是 XML 包里的 readHTML Taable 函数。对于抓取网页上的表格来说,这种方法再好不过。例如,抓取佛罗里达州的投票数据方法如下:

你首先注意到的是,有些州比其他州投票更加频繁。这并没有什么好奇怪的。你要知道像阿拉巴马州(3 次)这种投票积累对 Trump 有利,但影响非常小。相比之下,竞争激烈的佛罗里达州(27 次)或宾夕法尼亚州(21 次),这里的新信息才会对我们的预测造成巨大的影响。

第二步:决定每个投票的影响

关键的一点是我们需要为每次投票设置权重。一般而言,时间靠前的投票相比之下价值会不那么高。我们将用使用一种非常简单但却十分有效的方法来实现这一点。

我们给每次投票都分配一直指数衰减权重(exponentially decaying weights)。听上去很厉害的样子,实际做起来很简单。总之就是,时间离大选越近的投票,在预测中占的权重就越高。你可以把权重衰减看成这个样子:

由上可知,当到了倒数第 7 次时,那次投票基本上就可以忽略不计了。权重衰减真正起的作用的是个平滑函数(smoothing function),考虑最新的数据。当然,要实现这一点方法很多,这次采用的只是最简单快速高效的一种而已。

第三步:模拟选举

好戏开始了。我们接下来要模拟我们自己的选举。我不是要搞时间穿越,只是利用随机性罢了。

我使用的是最简单的蒙特卡洛模拟生成合成的竞选数据。再次声明,我用的这个方法十分简单。预测大选结果最大的未知数,就是这些投票结果实际上有多准确。要是有了精确的投票数据,大选那天我们只需要坐在家里看书就行了。但好在上哪儿也找不着这种数据(可以说是一种幸运吧)!

因此,我们要做的是将找到的投票数据结果随机化,生成“what if”结果。

这算不上是绝对科学,但却为我们描绘出一幅饱含可能性的绚丽结果。

下面,从模拟选举 1 开始吧。

我们将首先按州来拆分数据。这显然是重要的,因为美国的选举不是由每个公民投票决定的,而是由每个州的结果决定的。

一旦我们获得了州级的数据,我们将对每个州的投票加上权重,然后对每个州的候选人的总加权投票进行求和。最后,我们将对每个候选人投票使用随机变量以创建蒙特卡洛模拟。

使用一个平均值为 1、方差为 0.15 的正态分布来改变每个候选人的投票总数。当然,还有更好的方法来做到这一点(特别是当你有投票错误数据的报告时,但不幸的是我没有),但我想保持简单。

我们将每个候选人的总数乘以这个数字,然后重新计算每个候选人在该州接收的加权的民众投票的百分比。虽然只是在模拟,但我们还是做得跟真的一样,为每一方都使用官方代表颜色。分割出单个模拟的结果,你可以看到都是谁赢得了哪些州。

第四步:把上述步骤重复 10000 次

模拟一次选举是很酷,然而并没有什么用。更酷的是把这个模拟重复 1000 乃至 1 万次。重复 1 万次增加了罕见事件浮现的可能性——例如,加里·约翰逊赢得了大选。

让我们看看模拟 1 万次的结果:

希拉里赢:89&

希拉里大获全胜(高出对方 400 票及以上):0.11%

特朗普大获全胜:0%

当然,我们还可以继续下去,不过这样已经让你有一个直观的了解了。

还可以查看输出分布,从而更好地了解发生了什么。例如接受的 # 票数,你会看到以下分布:

由上图可知,我们非常确定约翰逊将有 0 个选票(我很遗憾,加里)。再来看特朗普和希拉里。这是一个很好的方法来可视化灵敏度分析。你可以看到每个候选人获得的理论上的最低、最高和可能的选举人票数。

好啦,接下来答案揭晓!谁会胜出?毫无意外,我们的模型预测希拉里将获胜,还不止一点点。不过,将这个结果与其他一些预测对比,结果也很有趣:

这是平均或者说最有可能的情况,但我们的模拟结果怎么说呢?模拟认为,希拉里有 89% 几率赢(但是注意,我从上周第一次写这篇文章时希拉里的几率可是 95%,有所降低)。

每个州的情况

对我来说最有趣的是,美国总统大选是根据每个州的结果来评判的。如果看一个候选人赢得模拟特定状态时间的百分比,我们得到这样的结果:

想要了解更多,代码在这里:

https://gist.github.com/glamp/223ee1b5665b8ab8d90fc2786f4b6b44

看到这些模式浮现出来十分有趣。这也没什么令人震惊的。本质上,在美国(和几乎在任何地方)政治都是分区域性的。

按照地图将情况分成子区域可以把事情看得更清晰:

最后几句

模拟到这里就结束了!让我们拭目以待几天后的结果——当然,预测什么的总是有趣。如果你也对模拟、投票或就是对分析有兴趣,可以查看以下更多资料:

The code behind this post

NY Times Forecasts

The Polls of the Future Are Reproducible and Open Source

A User’s Guide To FiveThirtyEight’s 2016 General Election Forecast

FiveThirtyEight Election Forecast

内容来源:新智元

原文发布于微信公众号 - 灯塔大数据(DTbigdata)

原文发表时间:2016-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

手机输入法不好用?谷歌要用AI让你打字更快

陈桦 编译整理 量子位 报道 | 公众号 QbitAI 现在,大部分人的日常生活,都离不开手机上的虚拟键盘,而这其中的大部分人都会觉得虚拟键盘不好用。数据显示,...

38370
来自专栏技术翻译

10个用于人工智能的开源工具/框架

TensorFlow™是一个开源软件库,最初由研究Google Brain Team的研究人员和工程师开发。TensorFlow用于使用数据流图进行数值计算。图...

1.6K20
来自专栏AI科技大本营的专栏

在TensorFlow2.0发布前,帮你掌握TensorFlow的必备内容

【导读】AI科技大本营曾报道过,TensorFlow 2.0 已经在开发计划中了,相信在不久的将来就会和我们见面。那么现在的 TensorFlow 都有哪些功能...

35530
来自专栏AI研习社

用机器学习搞艺术,谷歌 Megenta 项目集锦(附 Github)

雷锋网 AI 研习社按:本文为雷锋字幕组编译的技术博客,原文 Make Music and Art Using Machine Learning,作者 mage...

17220
来自专栏月色的自留地

NMF学习练习:做电影推荐

25330
来自专栏PPV课数据科学社区

文本挖掘小探索:避孕药内容主题分析

作者:冯大福 舆情监测一直是众多品牌关注的地方,尤其品牌想知道在品牌推广,品牌策略,品牌广告中出现的问题,从而能进行策略上的改进,但是现在很多人都是读帖子,笔者...

37760
来自专栏人人都是极客

基于树莓派和Tensowflow的物体识别-brain

近来这篇文章很火:How to build a robot that “sees” with $100 and TensorFlow (作者是Lukas,Cro...

885100
来自专栏新智元

让神经网络替你编程:如何用深度学习实现程序自动合成

【新智元导读】本文介绍了训练神经网络学习用复杂的函数式语言(FlashFill DSL)进行编程取得的成功,标志着神经程序合成方面一个令人兴奋的突破。 ● 作...

43280
来自专栏我是攻城师

网页去重思路浅析(一)

46380
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/3/11

换了个新职位非常忙,我还会每周更新,但是估计是没时间仔细读论文了,所以评论可能就没什么深度了,精力有限,哎。 1. DeepMind新RL学习方式SAC-X,尝...

32460

扫码关注云+社区

领取腾讯云代金券