使用Ray和Analytics Zoo将自动机器学习(AutoML)应用于时间序列预测

摘要

Analytics Zoo 近期提供了对 RayOnSpark的支持,允许用户基于 Ray 构建新的 AI 应用,并可以在现有大数据集群中直接运行,进而将其无缝集成到大数据处理和分析流水线中。本文主要介绍如何利用 Ray Tune 和 RayOnSpark 实施可扩展 的AutoML 框架和自动时间序列预测。

背景

时间序列简单来讲是指一系列在时间轴上有序的数据,而时序预测是根据过去时间点的数值来预测将来时间点上的数值。现实中,时间序列预测除了在电信运营商中的网络质量分析、面向数据中心运营的日志分析、面向高价值设备的预测性维护等多有应用之外,还可用作异常检测的第一步,以帮助在实际值偏离预测值过多时触发警报(请参见此处的示例)。

传统的时序预测方法通常使用描述性的(统计)模型,来根据过去的数据对未来进行预测。这类方法通常需要对底层分布做一定的假设,并需要将时间序列分解为多个部分,如周期、趋势、噪声等。而新的机器学习方法对数据的假设更少、更灵活,比如神经网络模型——它们通常将时间序列预测视作序列建模问题,最近已成功应用于时间序列分析相关的问题(如参考 [1] 和 [2] 所示)。

然而,为时间序列预测构建机器学习应用是一项费力且对专业知识要求较高的工作。为提供易于使用的时间序列预测工具套件,我们将自动化机器学习 (AutoML) 应用于时间序列预测,并对特征生成、模型选择和超参数调优等流程进行了自动化。该工具套件基于 Ray*(面向高级 AI 应用的开源分布式框架,由 UC Berkeley RISELab 提供)搭建,是 Analytic Zoo——由英特尔提供的统一数据分析和 AI 开源平台的一部分。

Ray 和 RayOnSpark                  

Ray 提供了一种通用的集群计算框架,可满足新兴 AI 技术对系统性能的苛刻要求。例如,Tune* 是一个基于 Ray 构建的分布式可扩展超参数优化库,支持用户使用高效搜索算法在大型集群上轻松运行许多实验。

Analytics Zoo 近期提供了对 RayOnSpark的支持,允许用户基于 Ray 构建新的 AI 应用,并可以在现有大数据集群中直接运行,进而将其无缝集成到大数据处理和分析流水线中。我们将在后文介绍如何利用 Ray Tune 和 RayOnSpark 实施可扩展 的AutoML 框架和自动时间序列预测。

Analytics Zoo 中的 AutoML 框架

下图描述了 Analytics Zoo 中的 AutoML 框架架构。

图一  Analytics Zoo 中的 AutoML 框架架构

AutoML 框架在特征工程和建模的组件中使用 Ray Tune 进行超参数搜索(运行在 RayOnSpark 上)。在特征工程部分,搜索引擎从各种特征生成工具(如 featuretools)自动生成的特征集中选择最佳特征子集;在建模部分,搜索引擎可搜索各种超参数,如每层的节点数量、学习率等。我们使用流行的深度学习框架(如 Tensorflow 和 Keras)来构建和训练模型,在必要时我们会将 Apache Spark* 和 Ray 用于分布式执行。

1、AutoML 框架目前包括四个基本组件,即 FeatureTransformer、Model、SearchEngine 和 Pipeline。
2、
FeatureTransformer 定义了特征工程流程,其通常包括一系列操作,如特征生成、特征缩放和特征选择。
4、Model 定义了模型(如神经网络)和使用的优化算法(如 SGD、Adam 等)。Model 还可能包括模型/算法选择。
5、SearchEngine 负责搜索 FeatureTransformer 和 Model 的最佳超参数组合,控制实际的模型训练过程。
6、Pipeline 是一个集成了 FeatureTransformer 和 Model 的端到端的数据分析流水线。Pipeline 可轻松保存到文件中,方便后续加载重新使用

AutoML 框架的一般训练工作流程如下所示: 

1、首先实例化FeatureTransformer 和 Model,SearchEngine 随后进行实例化,并由 FeatureTransformer 和 Model及一些搜索预设(指定超参数搜索空间、奖励指标等)进行配置。
2、SearchEngine 运行搜索程序。每次运行将生成多个试验,并使用 Ray Tune 将这些试验在集群中分布式运行。每个试验使用不同的超参数组合进行特征工程和模型训练流程,并返回目标指标。
3、在所有试验完成后,可根据目标指标检索出一组最佳的超参数,并得到训练好的模型。它们将用于创建最终的 FeatureTransformer 和 Model,并用于构成 Pipeline。Pipeline 可被保存至文件中,以便通过后续加载用于推理和/或增量训练。

为时间序列预测训练 TimeSequencePredictor

在训练 TimeSequencePredictor 之前,需要先初始化 RayOnSpark(在集群上使用 Spark 本地模式或 YARN 模式),训练结束后可以停止 RayOnSpark。详情请参阅 RayOnSpark 博文

在成功初始化 RayOnSpark 后,可以训练时间序列预测流水线,具体细节如以下示例所示。首先用必要的参数初始化一个 TimeSequencePredictor 对象,然后调用 TimeSequencePredictor.fit,以分布式的方式对历史数据自动地进行机器学习训练,在训练结束后得到一个 TimeSequencePipeline 对象。

from zoo.automl.regression.time_sequence_predictor import imeSequencePredictortsp = TimeSequencePredictor( dt_col="datetime",                                                                                                           target_col="value",                                                                                                         extra_features_col=None,                                                                                               future_seq_len=1)

pipeline = tsp.fit(train_df,                         
                           metric="mean_squared_error",                                               
                           recipe=RandomRecipe(num_samples=100),                         
                           distributed=True) 

1、TimeSequencePredictor 的输入数据 (train_df) 是包含一系列记录的 (Pandas*) Dataframe,每条记录包含一个时间戳 (dt_col) 及与时间戳关联的数据点数值 (target_col),每条记录还可包含额外的输入特征列表 (extra_feature_col);TimeSequencePredictor 训练完成之后得到 TimeSequencePipeline,用于预测未来时步的相应 target_col。
2、recipe 参数包含 TimeSequencePredictor 所需的参数,用于在训练时指定搜索空间、停止条件和样本数量(即搜索空间中生成的样本数量)。目前可用的 recipe 包括 SmokeRecipe、RandomRecipe、GridRandomRecipe 和 BayesRecipe。

可以将训练结束时获得的TimeSequencePipeline(已包含最佳超参数配置和 AutoML 框架返回的训练好的模型)保存至文件中,并在后续对其进行加载,用于评估、预测或增量训练,具体细节如下所示。 

pipeline.save("/tmp/saved_pipeline/my.ppl") #save
from zoo.automl.pipeline.time_sequence import load_ts_pipeline
pipeline = load_ts_pipeline("/tmp/saved_pipeline/my.ppl") #load
rs = pipeline.evaluate(test_df, metrics=["r_square"]) #evaluation
result_df = pipeline.predict(test_df) #inference
pipeline.fit(newtrain_df, epoch_num=5) #incremental training

如需查看更复杂的时间序列 AutoML 示例,可以参考 https://github.com/intel-analytics/analytics-zoo/blob/automl/apps/automl/nyc_taxi_dataset.ipynb 的用例,它使用了纽约市的历史出租车乘客量预测未来需求(类似于 [2] 中的案例)。下图使用 AutoML 展示了下一个时步的预计出租车乘客量。

图二  预测下一个时步的纽约市出租车乘客量

有关 Analytics Zoo 中 AutoML 和时间序列预测支持的更多详情,请访问 https://github.com/intel-analytics/analytics-zoo/tree/automl/pyzoo/zoo/automl

参考:

[1] Guokun Lai, Wei-Cheng Chang, Yiming Yang, Hanxiao Liu. “Modeling Long- and Short-Term Temporal Patterns with Deep Neural Networks” (link)
[2] Nikolay Laptev, Slawek Smyl, Santhosh Shanmugam. “Engineering Extreme Event Forecasting at Uber with Recurrent Neural Networks” (link)

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

推荐阅读更多精彩内容