前言
2018年参加了华为的软件挑战赛,当初我所在的学院参加了这个比赛拿到名次的同学也基本都拿到了华为的offer。最近在回顾时间序列算法模型,当时参加比赛使用了几种模型,于是在此进行回顾。赛题归根到底就是云平台预先定义了各种类型虚拟机的规格(flavor)供租户选择,而物理服务器的CPU和内存为固定规格。然后通过预测未来某个时间段内的虚拟机的请求情况,并寻找最佳的资源分配方案,即根据预测结果把虚拟机部署到物理服务器上,使得服务器的资源利用率最大化。
时间序列模型通常分为传统机器学习模型和神经网络模型,其中传统机器学习模型包括AR、MA、ARMA、ARIMA,神经网络模型采用LSTM进行时间序列预测。
时间序列基础
AR
AR(Auto Regressive,自回归模型)以前p个时期的序列值为自变量、随机变量
X
t
X_t
Xt的取值
x
t
x_t
xt为因变量建立线性回归模型,即对历史表现进行拟合。
x
t
=
ϕ
1
x
t
−
1
+
ϕ
2
x
t
−
2
+
.
.
.
+
ϕ
p
x
t
−
p
+
u
t
x_t = \phi _1x_{t-1} + \phi _2x_{t-2} +...+ \phi _px_{t-p} + u_t
xt=ϕ1xt−1+ϕ2xt−2+...+ϕpxt−p+ut
A
R
(
p
)
AR(p)
AR(p)表示p阶的自回归过程,
ϕ
\phi
ϕ为自回归系数,
u
t
u_t
ut表示白噪声,在时间序列中随机波动。
MA
MA(Moving Average,移动平均模型)中随机变量
X
t
X_t
Xt的取值
x
t
x_t
xt与以前各时期的序列值无关,建立
x
t
x_t
xt与前q时期的随机扰动的线性回归模型,即对噪音进行拟合。
x
t
=
u
t
+
ϕ
1
u
t
−
1
+
ϕ
2
u
t
−
2
+
.
.
.
+
ϕ
p
u
t
−
q
x_t = u_t + \phi _1u_{t-1} + \phi _2u_{t-2} +...+ \phi _pu_{t-q}
xt=ut+ϕ1ut−1+ϕ2ut−2+...+ϕput−q
M
A
(
q
)
MA(q)
MA(q)表示q阶移动平均过程,
ϕ
\phi
ϕ为移动回归系数,
u
u
u为不同时间点的白噪声。
ARMA
ARMA(Auto Regressive Moving Average,自回归移动平均模型)中随机变量
X
t
X_t
Xt的取值
x
t
x_t
xt不仅与前p个时期的序列值有关,还与前q个时期的随机扰动有关。
x
t
=
ϕ
1
x
t
−
1
+
ϕ
2
x
t
−
2
+
.
.
.
+
ϕ
p
x
t
−
p
+
u
t
+
ϕ
1
u
t
−
1
+
ϕ
2
u
t
−
2
+
.
.
.
+
ϕ
p
u
t
−
q
x_t = \phi _1x_{t-1} + \phi _2x_{t-2} +...+ \phi _px_{t-p} + u_t + \phi _1u_{t-1} + \phi _2u_{t-2} +...+ \phi _pu_{t-q}
xt=ϕ1xt−1+ϕ2xt−2+...+ϕpxt−p+ut+ϕ1ut−1+ϕ2ut−2+...+ϕput−q
ARIMA
ARMA可以有效地处理平稳序列,但是对于带干扰的非平稳序列显得较为乏力,因此采取ARIMA(Auto Regressive Integrated Moving Average,差分自回归移动平均模型)进行数据的拟合。ARIMA较ARMA多了一个差分的过程,目的是得到平稳序列,去掉前面数值的影响。对n次多项式进行n次差分可得到平稳序列,可使用diff函数得到差分并基于时序图初步观测其平稳性,当时序图围绕某个值上下波动时,我们初步认为它是稳定的。
plt.figure()
diff1=data.diff(1)
plt.plot(diff1,label='一阶')
diff2=data.diff(2)
plt.plot(diff2,label='二阶')
plt.legend()
然后采用ADF检验(单位根检验)验证其稳定性,当一个时间序列的滞后算子多项式方程存在单位根时,我们认为该时间序列是非平稳的;反之,当该方程不存在单位根时,我们认为该时间序列是平稳的。
基于差分后的平稳序列做ACF图和PACF 图,以确定p和q。平稳后的图形中,ACF或者PACF至少有一个会是拖尾的(就是以指数形式递减,有可能会正负交叉)。当ACF拖尾,PACFn阶截尾(p=n),是AR模型;ACFn阶截尾(q=n),PACF拖尾是MA模型;如果出现了两个都截尾的,是ARMA。
预测
首先使用最小二乘法得到baseline。然后使用ARIMA进行预测,刚开始使用ARIMA预测效果不好。经观测数据后发现大量零点数据,因此猜测可能数据漏损,可考虑使用最近N天的均值对零点数据进行填充,效果有所提升。最后将ARIM和LSTM进行模型融合,进行虚拟机的预测。
服务器部署
物理服务器只有一种规格大小,只需要考虑虚拟机的CPU和MEM能够最大程度利用每一台物理服务器,使所需物理服务器数量达到最小。简单有效的方法是使用贪心算法,不管三七二十先把CPU和MEM资源大的flavor往物理服务器里塞,装不下了依次装入CPU和MEM较小的flavor。另外一种是基于动态规划的思想,将其转化为二维背包问题,然后将其拆解为01背包问题的子问题进行求解。
参考资料
[1]如何评价2018年华为软件精英挑战赛赛题?
[2]时间序列预测–ARIMA、LSTM
[3]时间序列分析——自回归移动平均(ARMA)模型
[4]Python量化基础:时间序列的平稳性检验
[5]LSTM原理及实现(一)

本文回顾了2018年华为精英软件挑战赛,重点讨论了时间序列分析在资源分配问题中的应用。介绍了AR、MA、ARMA、ARIMA模型以及LSTM神经网络在时间序列预测中的作用。通过差分、平稳性检验等方法处理数据,并结合贪心算法和动态规划解决服务器部署问题。
8455

被折叠的 条评论
为什么被折叠?



