2018华为软件精英挑战赛——预测篇

先自报家门吧,我是来自成渝赛区的一支队伍,勉强进了全国总决赛,见识了其他赛区的各路神仙,大开眼界,被按在地上摩擦,最后拿了20多名,还是自己太弱了,惭愧惭愧。
因为代码所属权的问题,暂时无法公布源码,就简单总结下这次比赛的收获。
今年赛题实际上包含了两个问题,第一部分是根据虚拟机申请历史数据预测未来一定时间的数据(根据预测准确度评分),第二部分是将虚拟机预测的结果放置在特定的物理机中,使资源利用率最优(利用率公式在初赛、复赛、决赛略有不同)。详细赛题链接如下:赛题介绍

复赛阶段的评分公式:
复赛阶段评分公式

前半部分是评估预测结果的准确度,后半部分是计算多维度资源利用率。

决赛阶段评分公式:
决赛阶段评分公式

前半部分相同,后半部分变成了利润率(考虑了虚拟机和物理机的价格)。

特征选择和预处理

特征选择

第一个问题就是特征选择,从预测结果的要求来看,预测未来几天(1到4周)不同虚拟机的申请数量,首先想到的是以天作为特征,方便将预测结果求和。接着考虑的问题是,不同虚拟机数据之间有没有相关性。先看看历史数据:

以天为单位的不同虚拟机的线下数据

实际上连趋势都看不出来,数据很离散,且有大量的零。那如果以周作为特征呢:
以周为单位的不同虚拟机的线下数据

似乎能看出一些虚拟机数量阶段性递增的趋势,但仍不明显,这也符合了实际情况中用户增多的现象。
从数据来看,和从实际问题考虑,可以认为不同虚拟机之间不具有很强相关性(因为一个客户不会频繁去更换购买虚拟机的种类),另一方面,可以认为平均工作日申请虚拟机的个数大于非工作日虚拟机的申请数(程序中进行了验证),因此可以将工作日的数据,和非工作日的数据区分开,这本质上还是以天为特征的。

预处理

首要的疑问是:到底需不需要预处理,其次是需要哪些预处理
在尝试了很多种预测模型之后,我的体会是,对于不同的预测模型需要不同的预处理或者不处理。
· 噪声处理
通过观察线下数据,确实存在着远远高于其他数据的点,那么考虑到先进行数据清洗。
首先是如何筛选出噪声点,我采用的第一种方法是3σ原则,有如下结论:假设历史数据是符合正太分布的,那么落在μ ± 3σ的概率为99.74%,那么落在这个范围之外的点,可以看作是噪声点。这本身就存在一个问题,实际数据未必符合正太分布,因为存在递增的趋势,因此,这是一种近似处理。
尝试的第二种方法是箱型图,之前没听过这种算法,学习了其他队伍的结果。大概的思路是先将数据排序,取出四分之一位置和四分之三位置的数据取差,再乘以一个系数(一般取3),在区间(Q3+3ΔQ, Q1-3ΔQ)之外的值被视为噪声,可以参考:WIKI-箱型图
还有其他的方法,比如聚类方法:K-Distance等,大概了解,没有深究。
· 更新异常值
首先直接删除异常值是不客观的,因为这是一个时间序列,删除异常值就等价于在这个时间点上的数据为零,这和实际情况不符。最直接的想法是取均值,这是一种简单粗暴的方法,我觉得这种处理太粗糙,不能完全表达出数据的特点。
其次我一直用的方法是取前两个数据的均值代替异常值,这也符合时间序列的特点,算是一种“加权平均法”的思想。
还有其他的方法,比如用一次指数平滑或移动平均法将数据从头到尾平滑一遍,这样处理后的数据”非常好看“,但是感觉涂抹太过严重,失去了太多的细节,但这也是一种思路。
以上只是一些大概的思路,其中还有很多实现的细节,我就不一一解释了。

预测模型

线性回归LR

线性回归很简单,很多人都很熟悉,是利用线性回归方程对自变量和因变量之间关系进行建模的一种回归分析,常用的求取线性回归方程的方法是最小二乘法,其中涉及到矩阵乘法、转置、求逆等运算,本来以为这部分会比较耗时,实际上计算量并不多。对于这种数据波动很大的情况,预测效果很一般。

线性回归方程

其次我还用了线性回归中的多项式回归,我的做法是将数据以周为特征,并累加前一个数据,这样就构成了一种数据明显的递增趋势,用三次多项式(三次多项式比较贴合构造的递增数据)拟合构造后的数据,将预测后的结果逆向处理即可。这是我早期尝试的比较有效的方法,进入过前十。此外去噪后的数据预测效果要比不去噪好很多。

平均法MA

平均法可以分为移动平均,加权平均等,移动平均的思路是取一段区间计算其均值,作为区间外下一个数据的预测值,然后依次加入一个新值(真实数据),移除区间里的第一个旧值,重新计算下一个预测值(预测数据)。

移动平均法

加权平均法是基于一个假设,认为每个历史数据对于未来数据的贡献不同。很容易理解,距离预测数据近的点对于预测结果的贡献度更大
加权平均法

对于加权函数可以有多种选择,比如线性递减函数(从距预测数据最近数据起,向前递减,以下相同),递减幂函数,递减指数函数,递减高斯核函数等。(后面我还用到了加权的思想)
考虑到数据的递增趋势,在预测结果上可以乘以一个大于1的系数会更好,至于这个系数是多少,就很玄学了(可能大于2),而且不去噪的效果会更好(因垂丝汀)。

指数平滑ES

赛前完全不了解指数平滑,参考了很多资料,算是对指数平滑有了基本的认识。
指数平滑可以分为一次指数平滑、二次指数平滑、三次指数平滑(等价模型:Holt-Winter)
一次指数平滑类似与加权平均法,一般应用于直线型的数据。
二次指数平滑是在一次指数平滑的基础上,再进行一次平滑。
三次指数平滑是再二次指数平滑的基础上,再进行一次平滑,适用于具有季节性趋势的数据。
指数平滑的公式就省略了,有非常多的文章都有很详细的说明。
从比赛来看,二次指数平滑和三次指数平滑比较适用于实际数据(季节性不明显),其次,数据去噪对于指数平滑的影响很大,甚至可以增加去噪的力度。
还有一点,自动寻参,在这方面我做了很多的尝试。二次指数和三次指数都只有一个参数α,而Holt-Winter有三个(后来觉得过于麻烦,被放弃),那么对于不同的用例,如何找到最优的α?假如对于不同用例找到各自最好的参数,那么自动寻参的意义就很大,最核心的问题是如何评价一个参数的好坏?
我的思路是在0和1之间遍历α,建立一个评价函数,选择最优的α。评价函数计算方法如下:

1、选定初值:α = 0.001,sum = 0;
2、用7天的历史数据 (data[i]) 预测”未来7天“ (pred[i]),计算预测值和真实数据差的平方:sum += (pred[i] - data[i+1])²,累加求和;
3、是否到达最后一位历史数据,否则转4,是则转5;
4、将历史数据向后移动一位,转2;
5、sum则为此α的评价度,α += 0.001,转2;
6、选择评价度最小的alpha作为最优α。
补充:对于步骤2中的平方和是累加的,实际上就是每个评价度权值全为1,还有可以进一步改进的地方,按照加权平均法的思想,认为越靠近预测值的数据的评价度越重要,可以使用递减的加权函数给每个平方和加权。

其他

很可惜,有些模型没有尝试,比如ARIMA,而LSTM也没有更多的耐心改进,被轻易放弃。实际上对于短期预测和长期预测可以分开处理,神经网络模型作长期预测也许更合适。
另外,对于不同类型的虚拟机,可以使用不同的预测模型,虽然调参的工作量会大很多,但预测准确率必然更高,这些都是后话了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容