基于MATLAB分析的数据驱动分析:能源负荷预测案例研究

赛斯·德兰(Seth DeLand)和亚当·菲利恩(Adam Filion)著,MathWorks


能源生产商、电网运营商和交易商必须根据对未来电网负荷的估计做出决策。因此,准确预测能源负荷既是一项必要条件,也是一项业务优势。

今天可用的大量数据使建立高度精确的预测模型成为可能。挑战在于开发数据分析工作流程,将原始数据转化为可操作的见解。典型的工作流包括四个步骤,每个步骤都有自己的挑战:

  1. 导入来自不同来源的数据,如web档案、数据库和电子表格
  2. 通过去除异常值、噪声和合并数据集来清理数据
  3. 利用机器学习技术开发基于聚合数据的精确预测模型
  4. 将模型作为生产环境中的应用程序部署

在本文中,我们将使用MATLAB®完成负载预测应用程序的整个数据分析工作流。使用这个应用程序,实用程序分析师可以选择任何地区在纽约州的一块过去能源负载和预测未来负荷(图1)。他们可以使用结果来了解天气能源负荷的影响,并确定多大的权力来生成或购买。考虑到纽约州每年消耗数十亿美元的电力,这一结果对发电公司来说意义重大。

图1所示。MATLAB在纽约能源需求预测中的应用。

导入和查看数据

本案例研究使用两个数据集:能源负荷数据纽约独立系统运营商(NYISO)网站,以及来自国家气候数据中心的天气数据——尤其是温度和露点。

NYISO以ZIP文件的形式发布每月的能源数据,该ZIP文件包含每天的独立逗号分隔值(CSV)文件。处理跨多个文件的数据的典型方法是下载一个示例文件,研究它以确定要分析的数据值,然后为完整的数据集导入这些值。

MATLAB中的导入工具允许我们在CSV文件中选择列,并将所选数据导入到各种MATLAB数据结构中,包括向量、矩阵、单元格数组和表。能量负载CSV包含时间戳、区域名称和区域负载。使用导入工具,我们选择CSV文件列和目标格式。我们可以直接从示例文件导入数据或生成一个进口的MATLAB函数相匹配的所有文件的格式示例文件(图2)。后来我们可以编写一个脚本,该脚本调用这个函数以编程方式导入所有数据从我们的来源。

图2。Top: CSV数据选择导入。底部:一个自动生成的MATLAB函数用于导入数据。

导入数据后,我们生成初步图来确定趋势,重新格式化时间和日期戳,并执行转换—例如,通过交换数据表中的行和列。

清理和聚合数据

大多数真实世界的数据都包含缺失或错误的值,在研究这些数据之前,必须识别并处理这些值。重新格式化和策划NYISO数据之后,我们发现在负载峰值超出正常需求的周期性起伏(图3)。我们必须决定是否这些峰值异常和可以忽略的数据模型,或者他们是否显示模型应该考虑的一个现象。目前,我们选择只研究正常的周期性行为;如果我们决定我们的模型需要考虑这种行为,我们可以稍后处理这些峰值。

图3。显示需求异常峰值的能量负荷图。

有几种方法可以自动识别峰值。例如,我们可以应用平滑样条,通过计算平滑曲线和原始曲线之间的差异来确定峰值(图4)。

图4。上图:实际负荷和带异常圈的平滑负荷图。下图:实际值和平滑值之间的差值。

在从数据中移除异常点之后,我们必须决定如何处理由于移除异常点而引入的缺失数据点。我们可以简单地忽略它们;这样做的好处是可以减少数据集的大小。或者,我们可以在MATLAB中通过插值或使用来自另一个样本的可比数据来代替缺失的值,注意不要偏移数据。为了估计负载,我们将忽略丢失的值。我们仍然有足够的“好”数据来创建精确的模型。

在使用类似的技术清理温度和露点数据之后,我们将这两个数据集聚合起来。这两个数据集都存储在MATLAB表数据类型中。在MATLAB中,我们通过调用outerjoin函数。结果是一个单表,让我们可以方便地访问每个时间戳的负载、温度和露点。

建立预测模型

MATLAB提供了许多建模数据的技术。如果我们知道不同的参数如何影响能源负荷,我们可能会使用统计或曲线拟合工具,以线性或非线性回归建模数据。如果有很多变量,底层系统特别复杂,或者控制方程是未知的,我们可以使用机器学习技术,如决策树或神经网络。

由于负荷预测涉及到需要考虑许多变量的复杂系统,我们将选择机器学习,特别是,监督式学习.在有监督学习中,基于历史输入数据(温度)和输出数据(能量负荷)建立模型。模型经过训练后,用来预测未来的行为。对于能源负荷预测,我们可以使用神经网络和神经网络工具箱来完成这些步骤。工作流程如下:

  1. 使用MATLAB中的神经拟合应用程序:

    1. 指定我们认为与预测负荷相关的变量,包括每天的小时、每周的日、温度和露点
    2. 选择滞后指标,如前24小时的负载
    3. 指定目标,或者我们想要预测的变量——在本例中是能量负载
  2. 选择我们想要用来训练模型的数据集,以及为测试保留的数据集。

对于本例,我们只选择了一个模型。对于大多数实际应用程序,您将尝试几种不同的机器学习模型,并在训练和测试数据上评估它们的性能。Statistics and Machine Learning Toolbox™提供了各种机器学习方法,都使用了类似的调用语法,从而很容易尝试不同的方法。工具箱还包括用于交互式训练监督学习模型的分类学习者应用程序。

当训练完成后,我们可以使用测试数据来查看模型在新数据上的执行情况(图5)。

图5。上图:实测负荷和神经网络预测负荷图。下图:测量值和预测值的对比图。

为了自动化设置、训练和测试神经网络的步骤,我们使用神经拟合应用程序生成可以从脚本调用的MATLAB代码。

为了测试训练后的模型,我们将其与保留的数据进行对比,并将其预测与实际测量数据进行比较。结果表明,该神经网络模型对测试数据的平均绝对百分比误差(MAPE)小于2%。

当我们第一次针对测试数据集运行模型时,我们注意到一些实例,其中模型的预测与实际负载显著不同。例如,在假期前后,我们会看到与预期行为的偏差。我们还注意到,该模型对2012年10月29日纽约市负荷的预测相差数千兆瓦(图6)。快速上网搜索显示,在这一天,飓风“桑迪”(Hurricane Sandy)扰乱了整个地区的电网。调整模型来处理假日是有意义的,假日是经常发生的,因此是可以预测的,但像桑迪这样的风暴是一次性事件,因此很难解释。

图6。2012年10月29日纽约市实测负荷和预测负荷图

开发、测试和精炼预测模型的过程通常需要大量的迭代。通过使用Parallel Computing Toolbox™在多个处理器核上同时运行多个步骤,可以减少培训和测试时间。对于非常大的数据集,您可以使用MATLAB Parallel Server™在多台计算机上运行这些步骤。

将模型部署为应用程序

一旦模型满足了我们的准确性要求,最后一步就是将其转移到生产系统中。我们有几个选择。使用MATLAB Compiler™,我们可以生成一个独立的应用程序或电子表格插件。使用MATLAB Compiler SDK™,我们可以生成。net和Java®组件。使用MATLAB Production Server™,我们可以将应用程序直接部署到一个能够同时为大量用户服务的生产环境中。

对于我们的负载预测工具,我们让在MATLAB中开发的数据分析可以通过RESTful API访问,该API返回数值预测和图表,这些数据可以包含在应用程序或报告中。在生产服务器编译器应用程序中,我们指定要部署的MATLAB函数。应用程序自动执行依赖分析,并将必要的文件打包到单个可部署组件中。使用MATLAB Production Server,我们将组件部署为处理引擎,使分析可用于网络上的任何软件或设备,包括web应用程序、其他服务器和移动设备(图7)。

图7。MATLAB中的数据分析在生产环境中部署,使用Apache Tomcat和MATLAB生产服务器。

下一个步骤

这里开发的能源负荷预测模型提供了高度准确的预测,可以通过web前端供决策者使用。由于该模型已经通过几个月的测试数据进行了验证,我们有信心它能够在实际负荷的2%范围内提供24小时的预测。

该模型可以扩展为包含其他数据源,如假日日历和恶劣天气警报。因为整个数据分析工作流是在MATLAB代码中捕获的,额外的数据源可以很容易地与现有数据合并,并对模型进行重新训练。一旦新模型部署到MATLAB Production Server,负载预测应用程序背后的算法就会自动更新,终端用户甚至不需要刷新网页。

发布于2015 - 92308v00

查看相关功能的文章

查看相关行业的文章