当前位置: 首页 > news >正文

ODM和OLAP实现时序预测(二)

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月每月国际航班乘客数(以千为单位)。见下图:

html><!--%20%0D%0A%5BArgumentException%5D:%20%E9%8D%99%E5%82%9B%E6%9A%9F%E9%8F%83%E7%8A%B3%E6%99%A5%E9%8A%86?%0D%0A%20%20%20%E9%8D%A6?System.Drawing.Image.FromStream(Stream%20stream,%20Boolean%20useEmbeddedColorManagement,%20Boolean%20validateImageData)%0D%0A%20%20%20%E9%8D%A6?System.Drawing.Image.FromStream(Stream%20stream)%0D%0A%20%20%20%E9%8D%A6?Dottext.Admin.UploadWord.SaveFile(HttpPostedFile%20File)%0D%0A%20%20%20%E9%8D%A6?Dottext.Admin.UploadWord.Page_Load(Object%20sender,%20EventArgs%20e)%0D%0A%20%20%20%E9%8D%A6?System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr%20fp,%20Object%20o,%20Object%20t,%20EventArgs%20e)%0D%0A%20%20%20%E9%8D%A6?System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object%20sender,%20EventArgs%20e)%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Control.OnLoad(EventArgs%20e)%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Control.LoadRecursive()%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.ProcessRequestMain(Boolean%20includeStagesBeforeAsyncPoint,%20Boolean%20includeStagesAfterAsyncPoint)%0D%0A%5BHttpUnhandledException%5D:%20%E5%AF%AE%E6%9B%9E%E5%BD%82%E7%BB%AB%E8%AF%B2%E7%80%B7%E6%B6%93%E8%A1%A1%E2%82%AC%E6%B7%AAystem.Web.HttpUnhandledException%E9%88%A5%E6%BF%88%E6%AE%91%E5%AF%AE%E5%82%9A%E7%88%B6%E9%8A%86?%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.HandleError(Exception%20e)%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.ProcessRequestMain(Boolean%20includeStagesBeforeAsyncPoint,%20Boolean%20includeStagesAfterAsyncPoint)%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.ProcessRequest(Boolean%20includeStagesBeforeAsyncPoint,%20Boolean%20includeStagesAfterAsyncPoint)%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.ProcessRequest()%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext%20context)%0D%0A%20%20%20%E9%8D%A6?System.Web.UI.Page.ProcessRequest(HttpContext%20context)%0D%0A%20%20%20%E9%8D%A6?ASP.uploadword_aspx.ProcessRequest(HttpContext%20context)%0D%0A%20%20%20%E9%8D%A6?System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()%0D%0A%20%20%20%E9%8D%A6?System.Web.HttpApplication.ExecuteStep(IExecutionStep%20step,%20Boolean&%20completedSynchronously)%0D%0A--><!--%20%0D%0A%E5%A7%9D%E3%82%89%E6%95%8A%E7%92%87%EE%88%9E%E3%80%89%E9%8D%99%EE%88%9D%E5%85%98%E9%8D%96%E5%91%AD%E6%83%88%E9%8F%81%E5%BF%94%E5%8A%85%E6%B7%87%E2%84%83%E4%BC%85%E9%94%9B%E5%B1%BD%E6%B4%9C%E6%B6%93?ASP.NET%20%E9%96%AB%E6%B0%B3%E7%B9%83%20<customErrors%20mode='>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()转换后的序列。

>%0D%0A%C2%A0%C2%A0%20v_stmt:=%20 '(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;
我们也可以使用ODMR的计算列向导创建这个视图。
接下来,我们将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
WHEREmonth > 13 AND month < 132;
最后,我们构建模型,可以使用ODMR或数据挖掘api。对于这个例子,我们使用PL/SQL API并且默认设置SVM回归算法。注意,这里的dbms_data_mining包只有在10g中才有。
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;
这个语句创建了SVM回归模型,模型名为airline_SVM,使用视图airline_train作为训练数据。
预测
要创建预测,我们仅需要应用模型到新数据上,例如,应用模型到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));
最内层的查询恢复常态化和原始序列的对数计算。带LAG函数的子查询恢复移动趋势的差分步骤,最外层查询恢复用于稳定差异的LOG转换。
与其他技术比较
下表提供了 Root Mean Squared Error (RMSE) 和 Mean Absolute Error (MAE) 在训练和预测数据集上的对比,模型为数据挖掘方法(SVM)和linear autoregressive model (AR).
Model
RMSE Training
MAE Training
RMSE Test
MAE Test
SVM
3.7
3.2
18.9
13.4

AR
10.1
7.7
19.3
15.9
数据挖掘方法执行的更好,在训练和测试时,具有更小的 RMSE MAE

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 软件产品研发方向调研内容_研发部职能分解:调研,产品、技术、工艺、软件研发,测试、验收...
  • 网页像素测量工具_寓教于乐!11 个提升网页设计和前端开发技能的趣味游戏
  • ODM和OLAP实现时序预测(三)
  • asp 执行 exe_asp.net core 系列 18 web服务器实现
  • 搜索引擎登录,网站分类目录登录地址
  • python删除列表元素_Python去除列表中对应数量的元素(一一对应)
  • 基于Java Socket的文件UpLoad代码
  • python网络爬虫_Python网络爬虫实战(二)数据解析
  • 应用Executors来建立Thread pool
  • 富士通台式电脑_什么是电脑显卡 电脑显卡分类介绍【详解】
  • U盘上安装Damn Small Linux(DSL),让Linux常驻U盘
  • nginx 伪静态404_宝塔LNMP环境 Nginx安装EduSoho教程说明
  • c语言c99标准_C语言第一章《认识C语言》
  • robots.txt
  • java doubke类型转换为String_Java第一周笔记
  • 【译】JS基础算法脚本:字符串结尾
  • [笔记] php常见简单功能及函数
  • [译] 怎样写一个基础的编译器
  • 0x05 Python数据分析,Anaconda八斩刀
  • Docker入门(二) - Dockerfile
  • ES6系统学习----从Apollo Client看解构赋值
  • Java新版本的开发已正式进入轨道,版本号18.3
  • KMP算法及优化
  • Next.js之基础概念(二)
  • Sass Day-01
  • Shell编程
  • Swift 中的尾递归和蹦床
  • 高度不固定时垂直居中
  • 悄悄地说一个bug
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用putty远程连接linux
  • 小而合理的前端理论:rscss和rsjs
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • elasticsearch-head插件安装
  • HanLP分词命名实体提取详解
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (11)MSP430F5529 定时器B
  • (42)STM32——LCD显示屏实验笔记
  • (8)STL算法之替换
  • (day6) 319. 灯泡开关
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • 、写入Shellcode到注册表上线
  • .chm格式文件如何阅读
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core 6 集成和使用 mongodb
  • .NET delegate 委托 、 Event 事件
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 按比例显示图片的缩略图
  • .NET 常见的偏门问题
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 设计一套高性能的弱事件机制
  • .Net 知识杂记
  • .NET简谈设计模式之(单件模式)