数模美赛赛后总结+感想(吐槽)

Feb 18, 2018


原创:岐山凤鸣

说明:好久没有更新了,该解决的问题基本都解决了,继续恢复更新,这算是一个迟到的感想分享。

更新:结果出来了,最后是M奖…

要是觉得不错的话不妨Star一下我的Git!!!!!!!!!!!

背景

大学以来没有参加什么比赛,一方面因为自己本身平时就很肝,其他的压力很大,不想再给自己平添很多的压力。另一方面也是在这个过程中会觉得很头疼吧。所以这个数模美赛说起来算是参加的第一个比较大型,正规的比赛。

之前知道数模很肝,只是没想到这么肝….9号早上6点放题,13号早上9点截止,时间看上去就很肝,对吧。然后那几天熬夜熬的都能看到太阳…写代码、作图、写论文、翻译论文、找错找bug。刚好这个比赛的时间还是在春节前夕,结束的时候就基本到大年三十了,这也算是一个槽点。于是我一直留在了学校,直到13号的下午。

所以我一直忍着没吐槽快有一个星期了。

最终论文开源了,地址在我的Github里:是觉得不错的话不妨Star一下我的Git!

要是觉得不错的话不妨Star一下我的Git!!!!!!!!!!!

解题过程

我们小队三个人,大三,选的题是C题,具体的题目翻译可以参考这个博客,翻译的还比较的全面,讲题目意思之前,讲讲它给的附件文件,是一个excel表,10万多行,可以去各种地方搜到,大体的结构:

代号 所属州 数字
A方面 加州 233

我们的对象有四个州,AZ(亚利桑那州),CA(加利福利亚州),NM(新墨西哥州),TX(德克萨斯州)。这四个州每一个州,【每年】有605个数据项,包括各种能源的消耗量,产出量,人口,经济总量等等数据,这些数据项每一个都对应着一个代号,就是表格里给的。相关代号的解释,都能在给的第二个工作表里找到。

所以,他们给的那个数据,就是每个州,从1960-2009年五十年来,每年605个(有的数据缺省,但缺省的规律也存在,具体看论文里的数据结构说明)数据项的集合,大体的数据量就是450605约等于12万行的数据,加上数据缺省就是十万多行了,也就是题目所给的数据量。

那么问题就来了:

  1. 给出每个州的能源概况。
  2. 给出他们能源发展的历程,清洁能源使用情况,哪个州在这方面表现最好,为什么?可能是哪些因素导致的?
  3. 给出2009年他们的情况,表述一下哪个州表现最好。
  4. 给出2025年和2050年的预测情况,预测一下情况怎么变化。
  5. 根据预测的结果,给他们点建议,然后做一个能源协定,也就是一个契约一样的东西,互助发展的协定。
  6. 给政府相关人员写封信,表达一下你的发现,你的预测,你的建议。

由于建模和编程的过程基本都是由我一人完成的,两位队友也很努力,作为项目经理并且撰写翻译论文~所以我能知道,这一道题里,究竟有多少个坑。不过这些坑基本都是大数据里我认为能碰到的大多数的坑了,所以这也算是一个很不错的大数据的入门题。

第一个坑、数据预处理

给的数据就一个excel表,那么必然面对对这些数据,进行【提取】、【分析】、【筛选】、【分类】、【归档】、【预处理】的这些工作。专业一点说法叫做特征工程,这算是所有机器学习相关的东西里最烦的一个东西了,我上个项目都被特征工程整疯了。而这个东西,十几万行的数据,怎么分类?怎么归档?

首要的思想就是一个州一个州来,把每个州的数据提取出来单独搞四个excel,每个excel大概两万多行数据。

然后【人工】对605个数据进行分析、筛选、分类,找出污染能源消耗产出,清洁能源消耗产出,花销开支等等的类别。最蛋疼的就是,能源类的,单位不统一。同样是某种能源的消耗,有用Billion btn的能源单元,有用Thousand barrel为单位的,它们是无法互相转换的。问了某位神交已久的dalao,dalao说去查查一桶的质量,然后燃烧产能量…再换算…所以我最开始并没有统一单位,只是作为一个特征去处理了。

然后就是写代码,把这些数据弄进程序里,然后出一些表,出一些图,第一问算是解决了,一个传统的数据分析题吧。我用的是Python,在处理十万级别的数据上速度还行,只是画图太慢。

虽然看上去都是常规操作,但还是坑,有多坑呢,你可以自己尝试一下对605个全英文的代号全称简单分个类,就明白有多坑了。这里花了大概四个多小时才把这个excel表搞清楚。

第二个坑、压缩矩阵

其实第一个坑,弄懂弄清楚之后,前两问差不多就解决了。因为解题的过程无非就是:选取新的代表性特征->描述出这些特征的规律。麻烦的地方就在于第一步上面,第一步弄清楚了,自然就弄清楚了。

那么第二问的最后,就是用一个指标去评测能源的使用情况了,说白了就是压缩矩阵,为什么是压缩矩阵呢,我们来分析一下输入和输出:

  • 输入: 特征数量x50年的矩阵,特征数量就是选取的有代表性能表现出能源使用情况的特征

  • 输出: 1x50年的矩阵,代表每个州,每一年的清洁能源使用情况的一个数字,数字大说明使用的好啊,数字小说明继续努力。

所以本质上就是一个怎么压缩矩阵的问题,再说小一点,就是怎么压缩一个向量,毕竟压缩这个矩阵,也就是从压缩向量开始。压缩每一年的特征形成的向量,重复五十次,就得到结果了。

这个过程,无数人做过,回想一下你学过的概率论和高中的时候学过的数理统计,是不是想到了什么又忽然忘记了?这里不就赘述具体的模型了。

坑在哪呢?

其实不是我坑…这个比赛是全开放式的比赛,所以大家都有交流,那么得到评测指标的结果大家都有讨论。根据我的发现(水群),四个州,得到的结果可能有24种…(大雾)

所以无法准确评价你的模型和结果对不对,只能看感觉和这四个州的你了解的实况。

第三个坑、2009年

第二问让你评价了,第三问单独一整个问题就是评价2009年…作为资深数据狗顿时就激灵了一下,明显有问题!这两个问题肯定不是一个问题,不然怎么单独问你2009呢。所以按照上面的思路来做这个肯定不对。

于是就发现了一个坑:美国每隔几年就经济危机,各种指标都不稳定,忽高忽低的。出题人想要的【接近2009】年的这个时代里的规律。换句话说,就是他想知道新世纪,我们谁最好,该怎么办,我们不看以前的成绩!

于是重新进行数据的筛选,分类等工作,从更接近2009年的时候开始,我们来找找新时代的规律~

当然我说的不一定对,仁者见仁智者见智吧。

第四个坑、差异性分析

有什么结果就有什么因素去导致,题目想从地理、人口、繁荣度等等因素来分析,但是…他给的数据里,除了人口,别的都没有…于是这个地方陷入了僵局。

怎么做差异性分析?换句话说怎么去找出导致结果的一些原因,以及他们的权重。

这个地方我的思路是分成州内、和州外两种差异性分析,州内就是和自己比较,州外就是互相比较,比较的特性也都完全不同。既然是大数据题,那我就大数据一个给他看看。

对州内:我把所有和能源无关的特征弄到了一起,做了一个回归,得到了权重,自然就得到了它自己的差异性分析结果。

对州外:糅合地理等不变的因素,加上人口等可变因素,从一二问的结果出发,看着结果和差异,进行【人为分析】,这个东西目测无法定量。这里肯定有朋友自制一个公式,带上地理参数、人口参数,做一个影响因子的公式,而我看来…这样明显是不行的。一方面你无法通过程序来得到这些因素的权重,你只能自己去定义权重,另一方面你无法得到权威的数据支持,结果和你之前分析的结果可能会有冲突。

第五个坑、无中生有, 预测数据

有了1960-2009的数据,无中生有我们来预测2025年和2050年的数据。

我看了一下各种地方的思路,一开始,大家都信誓旦旦:这个超简单!预测嘛~瞎做一个回归就能出来,预测嘛~随便套一个模型就好了。到了最后一两天,纷纷都怂了,看着大家一个个都开始使用灰色模型和时间序列预测来做,我就知道会这样…

无中生有是一个很难的东西,预测怎么说也要有一些东西才准确。比如回归吧,回归好歹也要有自变量集合,预测出因变量。那这个题自变量是什么?自然只有年份啊。拿年份来做回归和神经网络自然是不行的。

所以遇到这种题第一时间就是想办法预测出来一个单变量的拟合方程。例如灰色模型,时间序列,画出来都是单变量的拟合曲线。不过时间序列主要提出来的时候还是解决带有点周期性的问题的问题,灰色模型的准确率不一定能达到能用的地步。

这里想必难倒了很多人吧。就算没有难倒也对结果抱有质疑。

这里我就不说我的思路了(捂脸),直接逃走。

第六个坑、论文翻译整合

感谢两位优秀的队友,我们一起弄这个论文前前后后十几道。从最开始的积累,到后面的修修改改,划划圈圈。

论文是一部分一部分完成的,最后整合也是一步步整合的,第一个版本的整合包是错误非常非常多的。经过熬夜两天的第一次、第二次、第三次、…、第十几次的整合修改之后,最终终于成型。

还记得11号晚上九点就开始大家一起过一遍论文,然后一直修改,迭代版本,直到凌晨三点多…大家才松了一口气,基本没有什么问题了,提交完论文,太阳都快出来了,才安心的睡了一个好觉…。

通过这次美赛我知道了论文翻译整合是一个非常困难去做好的事情。一方面要对整个思路都了然于心,另一方面要尽量保证没有什么错误,双管齐下,说起来容易,做上去实在是难。

具体遇到了哪些困难大概也记不清了,总之这确实是一个很棒的体验。

顺便也让我熟练了LeTeX这样的工具

最后

这个题确实是一个很棒的大数据入门题,做完之后基本的几个过程和会遇到的问题都能遇到。从筛选特征开始,作图作表做模型作结论,最后作论文,再回头看,很有意思。

感谢两位队友,感谢MCM,感谢手机一直没断网,感谢知网以及学校,感谢我的小宝贝没有咬断我的键盘。

Github里的LaTeX模板可以拿去随便用,毕竟这里面很多也是搜到的整合到的。

Python代码写了几千行,主要是数据处理和计算上,有dalao资助就做一个库出来。我不会MATLAB。

相关的具体的信息可以查看我的论文,有什么想咨询的可以从右上角的关于中,找到我的联系方式,与我联系。

接下来再开始进行一个项目,本博客继续开始更新。

要是觉得不错的话不妨Star一下我的Git!!!!!!!!!!!