ODM和OLAP实现时序预测(二)
2007-12-05 21:00
387 查看
Part 2 时序预测之单步预测
在这部分中,涵盖了如何使用part1中所述的数据挖掘方法做单步或开循环预测。通过例子来讲解每一步,最后与传统时序预测方法做一个比较。
单步预测不能使用预测值作为预测的输入值,只能做下一时间间隔的预测,因此叫做单步。单步预测可以直接使用Oracle Data Miner的应用和测试挖掘活动或是SQL PREDICTION函数。
方法
正如在part1中讨论的,当建模时序时,要做如下的决策:
1. 差异稳定和趋势移动Variance stabilization and trend removal
2. 目标常态化Target normalization
3. 迟滞属性选择Lagged attribute selection
在完成这些步骤之后,可能创建出预测模型来用于预测序列的未来数据。为了说明这个过程,让我们看一个例子,非固定季节性时序。数据在书中提供:Time Series Analysis: Forecasting and Control 由Box和Jenkins编著(1976)。数据反映了从1949年1月到1960年12月每月国际航班乘客数(以千为单位)。见下图:
'>1
准备序列
在建模时间序列之前,我们需要稳定(stabilize)序列。从差异variance和意指Mean中移除趋势。如果意指有趋势,序列的平均值在一段时间内或者增加或者降低,如果差异有趋势,则差异在一段时间内会稳定上升或下降。
首先,我们稳定差异,这能通过应用Box-Cox power transform来实现。这种转换形式如下:如果h<>0时,y(h)=(y^h-1)/h,如果h=0,y(h) = log(h)。一般来说,LOG转换(当h=0时)对于消除增加差异是一种好选择。图2显示了经过log()转换后的序列。
'(lag_num NUMBER, correlation NUMBER)';
EXECUTE IMMEDIATE v_stmt;
FOR i IN 1..p_max_lag LOOP
v_stmt:=
'SELECT CORR(' || p_base_col || ', lag_val) ' ||
'FROM (SELECT ' || p_base_col || ',' ||
'LAG(' || p_lag_col || ',' || i || ') ' ||
'OVER(ORDER BY ' || p_seq_col || ') lag_val ' ||
'FROM ' || p_in_table || ')';
EXECUTE IMMEDIATE v_stmt INTO v_corr;
v_stmt:='INSERT INTO ' || p_out_table ||
' (lag_num, correlation) VALUES(:v1, :v2)';
EXECUTE IMMEDIATE v_stmt using i, v_corr;
END LOOP;
END;
/
SHOW ERRORS;
建模
准备完序列,选择lagged变量后,我们准备创建预测未来值得模型。起始点是在上面的airline_norm视图中准备序列计算。Month列是顺序的范围从1到144随时间增长。第一行是空作为我们原始序列的差异。
首先,我们创建带12个lagged变量的视图:
CREATE VIEW airline_lag AS SELECT a.* FROM (SELECT month, passengers, tp, LAG(tp, 1) OVER (ORDER BY month) L1, LAG(tp, 2) OVER (ORDER BY month) L2, LAG(tp, 3) OVER (ORDER BY month) L3, LAG(tp, 4) OVER (ORDER BY month) L4, LAG(tp, 5) OVER (ORDER BY month) L5, LAG(tp, 6) OVER (ORDER BY month) L6, LAG(tp, 7) OVER (ORDER BY month) L7, LAG(tp, 8) OVER (ORDER BY month) L8, LAG(tp, 9) OVER (ORDER BY month) L9, LAG(tp, 10) OVER (ORDER BY month) L10, LAG(tp, 11) OVER (ORDER BY month) L11, LAG(tp, 12) OVER (ORDER BY month) L12 FROM airline_norm) a; |
接下来,我们将airline_lag视图中的子集作为训练集。因为我们想测试一下模型的预测能力,我们可以在旧的数据抽样基础上做训练,对于测试,使用序列中最近的抽样。抽样132-144作为测试集,我们也需要过滤最开始的13行,因为他们中有lag变量是null。下面的视图创建了训练集:
CREATE VIEW airline_train AS SELECT month, tp, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12 FROM airline_lag a WHERE month > 13 AND month < 132; |
BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name => 'airline_SVM', mining_function => dbms_data_mining.regression, data_table_name => 'airline_train', case_id_column_name => 'month', target_column_name => 'tp'); END; |
预测
要创建预测,我们仅需要应用模型到新数据上,例如,应用模型到airline_lag视图上生成包含训练数据(1-131)的单步预测。下面的查询完成此工作:
SELECT month, passengers, PREDICTION(airline_svm USING a.*) pred FROM airline_lag a; |
1. 常态化(Normalization):乘标准方差(0.046276747)并且增加mean(0.00409976)
2. 差分化(Differencing):将序列中早先的值加到早先步骤的结果上。
3. 对数(Log):log(10)早先步骤结果。
下面的查询转换预测结果,并且创建一个表保存预测值和原始值。
CREATE TABLE airline_pred AS SELECT month, passengers, power(10, pred) pred FROM (SELECT month, passengers, pred + LAG(lp,1) OVER (ORDER BY month) pred FROM (SELECT month, passengers, LOG(10, passengers) lp, (PREDICTION(airline_SVM USING a.*) * 0.046271162 + 0.003919158) pred FROM airline_lag a)); |
与其他技术比较
[align=left]下表提供了 Root Mean Squared Error (RMSE) 和 Mean Absolute Error (MAE) 在训练和预测数据集上的对比,模型为数据挖掘方法(SVM)和linear autoregressive model (AR). [/align]
[align=left]Model [/align] | [align=left]RMSE Training[/align] | [align=left]MAE Training[/align] | [align=left]RMSE Test[/align] | [align=left]MAE Test[/align] |
[align=left]SVM[/align] | [align=left]3.7[/align] | [align=left]3.2[/align] | [align=left]18.9[/align] | [align=left]13.4 [/align] |
[align=left]AR[/align] | [align=left]10.1[/align] | [align=left]7.7[/align] | [align=left]19.3[/align] | [align=left]15.9[/align] |
数据挖掘方法执行的更好,在训练和测试时,具有更小的RMSE和MAE。
相关文章推荐
- ODM和OLAP实现时序预测(一)
- ODM和OLAP实现时序预测(一)
- ODM和OLAP实现时序预测(三)
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- 86、使用Tensorflow实现,LSTM的时间序列预测,预测正弦函数
- 如何实现复杂FPGA设计的时序收敛
- 在微软caffe上实现yolov1的训练和预测(windows cpu)
- 《大话处理器》连载——微架构(10) 分支预测实现与条件执行
- 设计和实现OLAP解决方案 [转]
- DTW算法时序应用与实现
- 小波分析 + 支持向量机(SVM)预测股票涨跌幅的实现
- OLAP三种基本实现结构
- 看深度学习框架排名第一的TensorFlow如何进行时序预测!
- 线性回归(linear-regression)预测算法基本概念&C++实现
- 设计和实现OLAP解决方案
- NSL:SOFM神经网络实现预测哪个样本与哪个样本处在同一层,从而科学规避我国煤矿突水灾难—Jason niu
- 从零开始用人工智能预测股票(三、初步实现)
- TF之RNN:TensorBoard可视化之基于顺序的RNN回归案例实现蓝色正弦虚线预测红色余弦实线—Jason niu
- 【编译原理】非递归的预测分析法 JAVA实现