转自:http://blog.csdn.net/wonder4/article/details/1919141
Part 1 概要
前言
http://oracledmt.blogspot.com/2006/01/time-series-forecasting-part-1_23.html
Oracle数据库中的ODM组件支持时序预测。预测通过OLAP中的FORECAST命令支持。FORECAST命令能够通过三种方法预测数据:线性趋势(straight-line trend),指数增长(exponential growth),Holt-Winter指数平滑法(Holt-Winters extrapolation)。FORECAST根据选定的方法执行计算并且也可以选择将结果存储在analytic workspace中的变量中。头两个方法是比较简单的推断方法。Holt-Winters预测方法要更加复杂,它是指数平滑法或移动平均技术的一种。Holt-Winters方法构成三个统计上的相关序列,用于做实际预测。这些序列是:
1.
平滑数据序列,带有季节性结果的原始数据
2.
季节索引序列,每个时期的季节结果。
3.
趋势序列。
FORECAST命令所支持的方法叫做“单变量时间序列(univariate time series)”。他们仅能被用于建模一个时间序列,时间序列由跨越时间增加范围的可观测顺序单变量(scalar)数据组成。FORECAST命令方法也是线性的,并且不能捕捉输入和输出间的复杂关系。
ODM,通过其自身的支持向量机(SVM)回归函数,为复杂关系的和包含除自身外其他变量的时序预测提供了强大的非线性技术支持。这篇文章剩余部分包含了时序建模的数据挖掘方法。这篇文章是一个系列中的一部分,下一篇文章我会给出一个使用ODM做时序预测的例子和方法。
数据挖掘方法
ODM SVM回归支持通过时间延迟或lag空间爱你方法的时序建模。这种方法也被称为“状态-空间重建(在物理社区state-space reconstruction)”和“tapped delay line(在工程社区)”。在它最简单的形式,目标(即为时序想要预测的内容)过去的值被作为模型输入,这些输入被称为“迟滞变量(lagged variabled)”,并且能够通过SQL LAG分析函数很容易的计算出来。与预测序列相关的其他属性也能用相同的方式增加进来。例如,我们要预测每天的电力负载,基于电力负载值和每天平均温度。下表中说明了使用LAG函数计算的值。数据使用Y表示最大负载值使用X表示10天的平均温度。
DAY
|
Y
|
LAG(Y,1)
|
LAG(Y,2)
|
X
|
LAG(X,1)
|
LAG(X,2)
|
1
|
797
|
.
|
.
|
-7.6
|
.
|
.
|
2
|
777
|
797
|
.
|
-6.3
|
-7.6
|
.
|
3
|
797
|
777
|
797
|
-3.0
|
-6.3
|
-7.6
|
4
|
757
|
797
|
777
|
0.7
|
-3.0
|
-6.3
|
5
|
707
|
757
|
797
|
-1.9
|
0.7
|
-3.0
|
6
|
730
|
707
|
757
|
-6.0
|
-1.9
|
0.7
|
7
|
818
|
730
|
707
|
-6.2
|
-6.0
|
-1.9
|
8
|
818
|
818
|
730
|
-3.9
|
-6.2
|
-6.0
|
9
|
803
|
818
|
818
|
-6.3
|
-3.9
|
-6.2
|
10
|
804
|
803
|
818
|
-1.1
|
-6.3
|
-3.9
|
在一些情况下,辅助属性X,如上面例子中给出的平均温度,在我们试图预测目标Y时不能获得,因此不能包含在输入中,然而,我们仍然能使用X的LAG值。一旦属性被选中,我们能使用这些目标Y来训练SVM模型以及预测属性,在上面的例子中预测者是:LAG(Y,1),LAG(Y,2),X,LAG(X,1),LAG(X,2)。数据会被分为培训和测试数据集。通常在以前日期上做训练在以后的日期上做测试。对于单步(one-step)预测测试,训练和测试数据可以在所有可用数据中随机选定。仅输入lagged目标Y的SVM回归模型被叫做“自回归模型(autoregressive model)”。包括所有lagged变量的输入空间被叫做“嵌入间隔(embedding space)”。
如果在时序中的数据行没有相等间隔就有些麻烦了,要观测的时间间隔不同。一种方法是使用平滑技术来计算相等时间间隔属性的值,然后使用计算出来的替换值而不是原始值来训练。
方法
当建模时间序列时,依据上面的方法,必须要做如下决策:
1.
趋势移动(Trend removal)
2.
目标转换(Target transformation)
3.
迟滞属性选择(lagged attribute selection)
对于大多数时序预测技术都会需要做这些决策。
l
趋势移动 Trend removal
对于上述时间延迟方法的关键事实是假定时序是不变的。意味着在一系列时间间隔的时序值得统计分布式相同的。事实上,这意味着时序没有趋势,实际上许多时序表现出了趋势。例如,许多金融指数,股票价格一段时间经常上升。在时序中的趋势组成是指在一段时间序列值趋向于上升或下降。最简单的方法叫做差分化(differencing),它是处理非定长(stochastic)趋势的标准统计学方法。在上面的例子中,不是使用Y(时序值)作为目标,而是使用差分D=Y-LAG(Y,1)作为目标,应用到目标lagged值也一样。例如,不使用LAG(Y,1)做预测者,而使用LAG(Y,1)-LAG(Y,2)。有时计算差异的差别是必要的。目标的差分能反向获得对原始序列的预测。
l
目标转换Target transformation
常态SVM回归目标,有助于提高算法的收敛。对于时序问题,目标应该被事先常态化以便创建lagged变量。
l
迟滞属性选择 Lagged attribute selection
可以通过分析数据(计算相关图correlogram或交叉相关图cross-correlogram)或选择窗口大小来选择lag。例如,如果我们设置窗口大小为2,则要包括LAG(Y,1)和LAG(Y,2)作为预测者,Y是目标属性。选择窗口大小时要注意,窗口大小直接影响SVM算法的模式识别能力,它限制能被识别的模式大小。如果窗口太小,我们可能没有足够的信息来捕捉系统动态的时序数据。如果窗口太大,额外的lagged属性会增加噪音并且使问题难于解决。
计算预测
有几种不同的方法来计算预测,两种最常用的策略是:单步预测one-step-ahead (open-loop)和多步预测multi-step (closed-loop)。
l
单步预测或开循环预测
这种策略需要对模型的所有输入值可用。包含在模型中的早先目标值只能为下个时间间隔做预测。对于上例中的预测请求,我们只能预测请求中的一天(Day 11),为了计算Y_12,预测DAY12,需要等待真实的Day11发生。预测Day 11 = P(Y_10,Y_9),Day12 = P(Y_11,Y_10),等等。单步预测能够直接通过Oracle Data Miner的Apply和测试挖掘活动或者使用SQL预测函数来实现。这个系列的第二部分会讲到。
- forecast Y_11 as P(Y_10,Y_9)
- forecast Y_12 as P(Y_11,Y_10)
- and so on
l
多步预测或闭循环预测
这个策略当实际值可用时使用实际值,当实际值不可用时使用估计值或预测值作为输入。
- forecast Y_11 as P_11 = P(Y_10,Y_9)
- forecast Y_12 as P_12 = P(P_11,Y_10) P_11是预测值
- and so on
在这个例子中,即使没有Y_11的实际值也能生成Y_12的预测值。这个策略是使用了预测值来估计。多步预测使用简单的PL/SQL过程来计算。在本文的第三部分会讲到。
与传统的时序技术比较
SVM回归像大多数的神经网络一样,提供了时序预测功能,但是训练更简化。使用这种模型的优势有:
l
建模非常复杂函数的能力
l
在模型中使用大量变量并且在额外的迟滞时序数据中包括其他数据的能力
通过这里描述的方法创建非线性的自回归模型。这些模型非常有用并且被广泛应用于很多领域,金融预测、电力负载预测、混沌
chaos
模型以及太阳黑子预测。相比,
ARIMA
,一种流行的时序预测技术既支持自回归也支持移动平均。然而
ARIMA
建模时线性的,但
SVM
回归模型能捕捉非线性关系。