利用开放数据和预测算法跟踪经济发展

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。


我们世界运行无时无刻不运行在大量的“数据”之上,然而获取新数据,分析和部署实时分析或模型往往是很大的挑战。 我们在Algorithmia这个博客上花了大部分时间去思考如何帮助各位应对这个挑战,我们在Socrata网站的朋友则花时间思考如何使数据更容易获得。 所以,我们联合起来分析市政建筑许可数据(使用多种时间序列算法 ),作为经济发展的一个合理反映。感谢Socrata,这些信息现在可以在许多城市获得(并且自动更新),而无需任何官方渠道。 因此,我们提取了一系列城市的数据,包括:

• Santa Rosa,CA

• Fort Worth,TX

• Boston,MA

• Edmonton,Alberta,Canada

• Los Angeles,CA

• New York,NY

我们将,将建筑许可证数据与当地(季节性)天气模式和经济条件联系起来相当容易。 当评估一个给定的区域时,知道正在进行的地产开发有多少是有用的,同时也要知道有多少是可以通过其他因素,如季节变化,宏观经济指标,商品价格等来解释。这可以帮助我们回答下类问题:“这个城市受到经济衰退影响的程度有多大?”还是“如果石油价格下跌,房地产开发经营会如何?


使用到的工具

• Socrata开放数据查询 -从Socrata提取许可证数据

• 简单移动平均线 -采用局部平均来平滑数据

• 线性去趋势项 -移除时间序列的上升或减少趋势

• 自回归-用于分析时间序列的季节性

• 移除季节性 -删除时间序列已知的季节性影响

• 异常检测 -标志出不寻常的数据点

• 预测 -预测一个给定的时间序列的未来

 

数据源:Edmonton(埃德蒙顿, 加拿大)

过滤器1: 无

过滤器2: 无

分析工具:algo://timeseries/Forecast

blob.png


数据源

我们使用一种算法来直接访问Socrata的API, (请点https://algorithmia.com/algorithms/marksskram/SocrataOpenDataQuery)。

一旦我们检索到数据,我们将其与每月发放的许可证总数进行合计,并绘制此数据。 为了使图表更清晰,有时会采用平滑或去噪数据。 有很多方法可以做到这一点,移动平均线是最受欢迎的。 最直观的就是是简单移动平均线 ,其中每个数据点由其之前的若干个数据点求平均来更新(默认值:3)。

2.png

对数据的简单第一次检查揭示了趋势和大的峰/谷。  它显示了从记录开始到次级危机之前的一个高峰的稳定增长,然后相当迅速地下降到了一个较低的平稳带。


季节性

尽管我们可以从对绘图的简单检查中学习数据,但是有一些因素使得这一点变得困难,特别是在推断经济活动时。 例如,室外建筑活动往往发生在较好的天气,特别是在远离赤道的寒冷地方。 这通常使得数据难以解释 - 季节性峰值不像非季节性经济活动那样说明基础经济活动,因此我们需要某种方法来考虑这一点。

Alberta省的Edmonton市,是一个特别明显的例子。

blob.png


为了解决季节性,我们首先需要除去通过线性趋势项 ,即拟合一条直线沿着数据,然后减去这条直线本身,从而得到一个去趋势的时间序列。 不进行去趋势,以下季节性分析无法完成。 

埃德蒙顿的许可证发放显然是季节性的(即使是从肉眼观察该图),当通过自相关分析, 也能从含大量噪声数据中检测到这一季节性。 粗略地讲,可以通过考察自相关图里的相对强度和峰的定义来辨识这种季节性,它可以使用我们的自相关算法(https://algorithmia.com/algorithms/TimeSeries/Autocorrelate)。时间序列的自相关是一种粗略衡量其余自身的某个滞后版本相似性工具。 如果一个时间序列是高度季节性的(长度k的周期),该时间序列的峰谷特征将大致隔每个k步就重现。

我们预计季节性最强的地区离赤道最远。 果然,季节性在更多的北方城市如纽约市和埃德蒙顿最明显,在像洛杉矶这样的城市最不清楚 - 你可以用上面的交互式面板检查这个。

它可以帮助抑制这种季节性的影响,所以其他因素的影响将观察的更清楚。 在Algorithmia这个网站,这可以使用一种算法所谓的“去季节性“算法来完成 ,其中,在默认情况下,检测并删除最强的季节性周期。 当我们这样做,它平滑了季节变化,保留下来的, 是那些某种意义上数据中”意想不到的成分“。

 blob.png


异常检测

一旦我们去除了线性趋势和季节性,就剩下最神秘的数据部分,在那里有更多隐藏的信息留待挖掘。 在许多情况下,目视检查和一些初步检验在这里将是有用的,但在其他情况下,自动检测数据的细微行为的过程是有用的。 例如,如果您有一个自动化流程,可以读入,分析和报告传来的数据,那么您可能希望在发生重大变化时收到提醒,并根据该信息采取相应措施。 定义什么构成“异常”可能是一个困难的问题,但通过消除更大的趋势,我们留下这些异常的更清晰的图片。

加利福尼亚州Santa Rosa市提供了一个有趣的例子。 人们可以从检查中看到,2013年签发的许可证的突然飙升,但它也可以通过我们的异常检测算法被自动检查出来。 该算法通过将所有非离群值设置为零并且将离群值保持不变来工作,其中离群值被定义为与系列平均值相差超过两个标准偏差的任何数据点。 我们没有解释这个特定的异常值,它可能只是随机的或报告方式的变化,但表明它可能值得更仔细研究。

blob.png


预测

现在,很高兴告诉你我们的“水晶球“(译者注:比喻),可以预测未来(并通过API调用返回它)! 不幸的是,我们还差一点点工作,但我们可以帮助您看到如何将观察到的趋势外推到未来。 具体来说, 预测算法需要你的时间序列,然后将观察到的线性和季节性趋势,外推到到的指定的预测步数上。它通过根据检测到的线性趋势的外推计算每个未来点的值,然后加上对应于每个季节性分量对该点的贡献的差值。 在演示中,预测设置为使用3个最强季节性成分的数据进行预测。

从预测算法的结果来看,我们预计Edmonton,Los Angeles,Boston和New York市的建筑活动将稳步增长。Santa Rosa市希望保持现状,Forth Worth市看起来有一个微小的下降趋势

blob.png


现在,总结一下!

本文中的这些技术中的大多数可用于不同领域。 这里的秘密是,它是简单,可组合和完全自动化。 一旦一个人在Algorithmia中写了一个数据连接器(如Socrata提供的数据连接器),你不用更多浪费宝贵的时间。 另一方面,如果现有的东西做得更好,Algorithmia的组合性质将允许你无缝地交换算法的细节部分。 当有人提出了一个更好的异常检测器,然后升级加入到像上面的程序中只是简单敲几个键的事情。

最后,我们在这里展示的分析基于实时数据,也即随着新数据从Socrata接口流入每个城市的建筑许可证系统而一直更新; Algorithmia提供了一种简单的方法来部署和托管实时分析,以便底层数据和分析结论始终是最新的。


作者:Matt Kiser

译者:zylpascal

英文原文: http://blog.algorithmia.com/tracking-economic-development-with-open-data-and/



英文原文:http://blog.algorithmia.com/tracking-economic-development-with-open-data-and/
译者:zylpascal123
 

2月15日11:00到13:00网站停机维护,13:00前恢复