Uber如何用循环神经网络(RNN)预测极端事件?

在Uber系统内,事件预测使我们能够根据预期用户需求来提高我们的服务质量。最终目标是准确地预测出在预定的时间内Uber将会在何处,何时以及收到多少次的乘车请求。

一般来说,极端事件——诸如假期、音乐会、恶劣天气和体育赛事等高峰旅行时间,只会提高工作规划预测的重要性。在极端事件期间计算需求时间序列预测(demand time series forecasting)是异常检测(anomaly detection),最优资源分配(optimal resource allocation)和预算的关键组成部分。

但不可忽略的一个事实是,虽然极端事件预测在Uber操作中占有举足轻重的作用,但数据稀疏性使得准确的预测具有很大的挑战性。比如元旦之夜(NYE),这是Uber最繁忙的日子之一。可是我们只有少数几次元旦之夜的数据可以借鉴参考,而且每个实例可能有不同的用户群组。除了历史数据,极端事件预测还取决于许多外部因素,包括天气、人口增长和诸如驾驶员激励措施这样的市场营销的变化。

在现实生活中,在标准R预测包中发现的经典时间序列模型,通常和机器学习方法组合在一起,从而用于特殊事件的预测,然而,这些方法对于Uber来说,既不灵活也不可扩展。

在本文中,我们介绍一种将历史数据和外部因素相结合的Uber预测模型,以便更精确地预测极端事件,突出其新架构,以及如何与先前的模型进行比较。

创建Uber的新的极端事件预测模型

随着时间的推移,我们意识到为了扩大发展规模,我们需要升级我们的预测模型,从而准确预测Uber市场的极端事件。

我们最终决定基于长短期记忆网络(LSTM)架构进行时间序列建模,LSTM架构是一种具有端到端建模特征,易于整合外部变量和自动特征提取能力的技术。通过在多个维度上提供大量数据,LSTM方法可以建造模拟复杂的非线性特征交互模型。

在选择好架构之后,我们评估了训练模型所需的数据储存,如下所示:

在城市中随时间推移而变化的规模性旅行次数是用于训练我们模型的历史数据储存的一部分。 请注意除夕夜期间数据的一个下跌,然后急剧上涨,表示人们在除夕夜期间乘用Uber回家。

其实,极端事件的预测是一件很困难的事情,主要原因是它们的不频繁性。为了克服这个数据缺陷,我们决定训练一个单一的、灵活的神经网络来一次性地对许多城市的数据进行建模,从而大大提高了我们的准确性。

用神经网络构建新的架构

我们的目标是设计一个通用的、端到端的时间序列预测模型,它要具有可扩展性,准确性并且适用于异构时间序列。为了实现这一点,我们使用了数千个时间序列来训练一个多模块神经网络。

我们测量和追踪了原始的外部数据,从而构建了如下图所示的神经网络:

我们的模型是使用外部变量,包括天气(例如降水、风速和温度预报)和城市级信息(例如在特定地理区域内的任何给定时间进行的旅行,已注册 Uber用户,本地假期或事件)的组合进行训练的。

这个原始数据用于我们的训练模型中,来进行包括日志转换,缩放和数据转换这样简单的预处理。

用滑动窗口进行训练

神经网络中的训练数据集需要滑动窗口X(输入)和Y(输出)来限定常规值(例如输入大小)以及预测范围。使用这两个窗口之后,我们便可以通过最小化损失函数(loss function),如均方差(Mean Squared Error)来训练神经网络。

X和Y窗口都是以单个增量滑动的,从而生成训练数据,如下所示:

X和Y滑动窗口是由批次,时间,特征(对于X而言)和预测特征(对于Y而言)组成的。

接下来,我们就解释如何使用我们的训练数据来设计自定义的LSTM模型。

调整我们的LSTM模型

在测试期间,我们确认,与基线模型(其中包括单变量预测和机器学习元素的组合)相比,vanilla LSTM操作并没有表现出优异的性能。vanilla模型在未被训练的领域内不能适应时间序列,这导致在使用单个神经网络时表现并不是很好。

使用每一个时间序列要处理百万级指标的方式来训练一个模型是不切实际的:根本没有足够的资源可用,更不用说时间的有限性了。此外,训练单一的vanilla LSTM不会产生竞争性的结果,因为模型不能区分不同的时间序列。虽然时间序列特征和输入可以手动加载到vanilla LSTM模型中,但这种方法是冗长乏味且容易出错的。

为了提高我们的准确度,我们在模型中引入了一个自动特征提取模块,如下所示:

我们的模型由手动派生的时间序列特征(左)和我们提出的具有自动特征提取模型(右)的LSTM架构组成。

我们决定构建一个通过自动特征提取模块提供单一模型、异质性预测的神经网络架构。正如上图所示,模型首先通过自动、基于集成的特征提取来初始化网络;在提取特征向量后,再使用标准集成技术对其进行平均。然后将最后一个向量与输入连接从而产生最终预测。

在测试期间,我们能够实现基于LSTM架构的14.09%的对称平均绝对百分比误差(SMAPE)改进,同时比Uber的实时监控和根本原因探索工具Argos中的经典时间序列模型提升25%。

随着我们的架构的成功开发、定制和测试,现在正是将该模型投入生产使用的时候了。

使用新的预测模型

一旦计算了神经网络的权重,它们就可以以任何编程语言形式进行导出和执行。我们当前的途径是首先使用Tensorflow和Keras进行离线训练,然后将生成的权重导出为本地Go代码,如下所示:

该描述模型首先进行离线训练,然后导出到目标语言进行本机执行。

为了本文最初所设定的目标,我们建立了一个模型,使用的数据主要来自于美国五年间使用Uber来完成假期旅行的时间段,比如,像在圣诞节和元旦来临的七天之前、之间和之后所产生的数据。

在一些城市进行预测的期间,我们收集了使用之前的和现在的两种模型所产生的平均SMAPE,如下所示:

我们的新预测模型的效果显著优于以前的预测模型。

例如,我们的新模式发现,预测最困难的假期之一是圣诞节,这与需求中的最大错误和不确定性相对应。

我们描绘了一个城市200天的预期和实际完成旅行的图表,如下所示:

一个城市200多天完成旅行次数的模拟,我们对同一数据的预测凸显了我们新模型的准确性

我们的测试结果表明,与我们的专有模型相比,现有的模型的预测精度提高了2-18%。

虽然神经网络对Uber来说益处颇多,但这种方法并不是“万金油”。根据以往的经验,我们定义了一个三维思维,以此来决定神经网络模型是否适用于你的情况:(a)时间序列数,(b)时间序列长度和(c)时间序列之间的相关性。相对于经典时间序列模型而言,这三个维度增加了神经网络方法进行更准确的预测的可能性。

未来预测

我们打算继续使用神经网络,为异构时间序列创建一个通用的预测模型,作为一个独立的、端到端模型或更大的自动化预测系统中的构建块。

本文作者:佚名

来源:51CTO

时间: 2024-09-27 21:45:28

Uber如何用循环神经网络(RNN)预测极端事件?的相关文章

循环神经网络(RNN, Recurrent Neural Networks)介绍

循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/,在这篇文章中,加入了一些新的内容与一些自己的理解.   循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Proce

简单入门循环神经网络RNN:时间序列数据的首选神经网络

更多深度文章,请关注:https://yq.aliyun.com/cloud 随着科学技术的发展以及硬件计算能力的大幅提升,人工智能已经从几十年的幕后工作一下子跃入人们眼帘.人工智能的背后源自于大数据.高性能的硬件与优秀的算法的支持.2016年,深度学习已成为Google搜索的热词,随着最近一两年的围棋人机大战中,阿法狗完胜世界冠军后,人们感觉到再也无法抵挡住AI的车轮的快速驶来.在2017年这一年中,AI已经突破天际,相关产品也出现在人们的生活中,比如智能机器人.无人驾驶以及语音搜索等.最近,

TensorFlow构建循环神经网络

前言 前面在<循环神经网络>文章中已经介绍了深度学习的循环神经网络模型及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个循环神经网络,该例子能通过训练给定的语料生成模型并实现对字符的预测.这里选择使用最原始的循环神经网络RNN模型. 语料库的准备 这里就简单用纪伯伦的<On Friendship>作为语料吧. RNN简要说明 用下面两张图简要说明下,RNN模型有多个时刻的输入,从第一个图中看到输入x.隐层s和输出o都与时刻t有关,可以看到上一时刻的隐含层会影响到当前时

如何实现模拟人类视觉注意力的循环神经网络?

我们观察PPT的时候,面对整个场景,不会一下子处理全部场景信息,而会有选择地分配注意力,每次关注不同的区域,然后将信息整合来得到整个的视觉印象,进而指导后面的眼球运动.将感兴趣的东西放在视野中心,每次只处理视野中的部分,忽略视野外区域,这样做最大的好处是降低了任务的复杂度. 深度学习领域中,处理一张大图的时候,使用卷积神经网络的计算量随着图片像素的增加而线性增加.如果参考人的视觉,有选择地分配注意力,就能选择性地从图片或视频中提取一系列的区域,每次只对提取的区域进行处理,再逐渐地把这些信息结合起

[译] RNN 循环神经网络系列 2:文本分类

本文讲的是[译] RNN 循环神经网络系列 2:文本分类, 原文地址:RECURRENT NEURAL NETWORKS (RNN) – PART 2: TEXT CLASSIFICATION 原文作者:GokuMohandas 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Changkun Ou 校对者:yanqiangmiffy, TobiasLee 本系列文章汇总 RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN RNN 循环神

[译] RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN

本文讲的是[译] RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN, 原文地址:RECURRENT NEURAL NETWORKS (RNN) – PART 1: BASIC RNN / CHAR-RNN 原文作者:GokuMohandas 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Changkun Ou 校对者:CACppuccino, TobiasLee 本系列文章汇总 RNN 循环神经网络系列 1:基本 RNN 与 CHAR

零基础入门深度学习(5) - 循环神经网络

  在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用.他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的.但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的.   比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列:当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列.这时,就需要用到深度学习领域中另一类非常重要神经网络:循

循环递归RNN,序列建模套路深(深度学习入门系列之十三)

系列文章一入侯门"深"似海,深度学习深几许(入门系列之一)人工"碳"索意犹尽,智能"硅"来未可知(深度学习入门系列之二)神经网络不胜语, M-P模型似可寻(深度学习入门系列之三)"机器学习"三重门,"中庸之道"趋若人(深度学习入门系列之四)Hello World感知机,懂你我心才安息(深度学习入门系列之五)损失函数减肥用,神经网络调权重(深度学习入门系列之六)山重水复疑无路,最快下降问梯度(深度学习入门系列

如何用Tensorflow实现RNN?本文将带你进一步研究

更多深度文章,请关注:https://yq.aliyun.com/cloud 在这篇文章中,我将介绍与构建循环神经网络最相关的tensorflow API. tensorflow文档很好地解释了如何构建标准的RNN,但是对于构建个性化的RNN而言,它还是有不足之处的. 我将使用Chung等人在Hierarchical Multiscale Recurrent Neural Networks中描述的网络,作为一个非递归神经网络的示例.在github上有一个开源的网络实现. 基础 在本节中,我将简要