能源生产商、电网运营商和交易商必须根据对电网未来负荷的估计来做出决定。因此,对能源负荷的准确预测既是必要的,也是商业优势。
今天大量的可用数据使得建立高度准确的预测模型成为可能。挑战在于开发数据分析工作流,将这些原始数据转化为可操作的见解。一个典型的工作流程包括四个步骤,每个步骤都有自己的挑战:
- 从不同的来源导入数据,例如web档案、数据库和电子表格
- 通过去除异常值、噪声和组合数据集来清洗数据
- 利用机器学习技术,在聚合数据的基础上开发准确的预测模型
- 将模型部署为生产环境中的应用程序
在本文中,我们将使用MATLAB®完成负载预测应用程序的整个数据分析工作流程。使用此应用程序,公用事业分析师可以选择纽约州的任何地区,以查看过去的能源负荷和预测的未来负荷(图1)。他们可以使用结果来了解天气对能源负荷的影响,并确定生产或购买多少电力。考虑到仅纽约州每年就消耗数十亿美元的电力,这一结果对发电公司来说意义重大。
导入和浏览数据
本案例研究使用了两个数据集:来自纽约独立系统运营商(NYISO)网站以及来自国家气候数据中心(National climate Data Center)的天气数据——特别是温度和露点。
NYISO在一个ZIP文件中发布每月的能源数据,其中包含每天的一个单独的逗号分隔值(CSV)文件。处理跨多个文件的数据的典型方法是下载一个示例文件,浏览它以确定要分析的数据值,然后为完整的数据集导入这些值。
MATLAB中的导入工具允许我们在CSV文件中选择列,并将所选数据导入到各种MATLAB数据结构中,包括向量、矩阵、单元格数组和表。能源负载CSV包含时间戳、地区名称和该地区的负载。使用导入工具,我们选择CSV文件列和目标格式。我们可以直接从示例文件中导入数据,也可以生成一个MATLAB函数来导入与示例文件格式相匹配的所有文件(图2)。稍后,我们可以编写一个脚本,调用该函数以编程方式从源文件中导入所有数据。
一旦导入了数据,我们将生成初步的图来识别趋势,重新格式化时间和日期戳,并执行转换—例如,通过交换数据表中的行和列。
清洗和聚合数据
大多数真实世界的数据都包含缺失或错误的值,在探索数据之前,必须识别并处理这些值。在重新格式化和绘制NYISO数据后,我们注意到负荷的峰值在正常的需求周期性上升和下降之外(图3)。我们必须确定这些峰值是否异常,可以被数据模型忽略,或者它们是否表明模型应该解释的现象。我们现在选择只考察正常的周期行为;如果我们决定我们的模型需要解释这种行为,我们可以在以后处理尖峰。
有几种方法可以自动识别尖峰。例如,我们可以应用平滑样条,并通过计算平滑曲线和原始曲线之间的差异来精确定位尖峰(图4)。
从数据中移除异常点后,我们必须决定如何处理由于移除异常点而引入的缺失数据点。我们可以直接忽略它们;这样做的好处是减少了数据集的大小。或者,我们可以通过插值或使用来自另一个样本的可比数据来替换MATLAB中缺失值的近似值,注意不要使数据偏误。为了估算负载,我们将忽略缺失的值。我们仍然有足够的“好”数据来创建准确的模型。
在使用类似的技术清洗温度和露点数据后,我们将这两个数据集聚合在一起。两个数据集都存储在MATLAB表数据类型中。函数在MATLAB中应用表连接outerjoin
函数。结果是一个单一的表,使我们可以轻松访问每个时间戳的负载、温度和露点。
建立预测模型
MATLAB提供了许多数据建模技术。如果我们知道不同的参数是如何影响能量负荷的,我们可以使用统计数据或曲线拟合工具对数据进行线性或非线性回归建模。如果变量很多,底层系统特别复杂,或者控制方程未知,我们可以使用决策树或神经网络等机器学习技术。
由于负荷预测涉及到复杂的系统,需要考虑许多变量,我们将选择机器学习——具体来说,监督式学习.在监督学习中,模型是基于历史输入数据(温度)和输出数据(能量负荷)开发的。在模型被训练之后,它被用来预测未来的行为。对于能源负荷预测,我们可以使用神经网络和神经网络工具箱™来完成这些步骤。工作流程如下:
-
使用MATLAB中的神经拟合应用程序:
- 指定我们认为与预测负荷相关的变量,包括每天的小时、星期几、温度和露点
- 选择滞后指标,如24小时前的负载
- 指定目标,或者我们想要预测的变量——在本例中,是能量负荷
-
选择我们想要用来训练模型的数据集,以及我们为测试保留的数据集。
对于这个例子,我们只选择了一个模型。对于大多数实际应用程序,您将尝试几种不同的机器学习模型,并评估它们在训练和测试数据上的性能。统计和机器学习工具箱™提供了各种机器学习方法,所有方法都使用类似的调用语法,使尝试不同的方法变得容易。该工具箱还包括Classification Learner应用程序,用于交互式训练监督学习模型。
当训练完成后,我们可以使用测试数据来查看模型在新数据上的表现如何(图5)。
为了自动化设置、训练和测试神经网络的步骤,我们使用神经拟合应用程序来生成可以从脚本调用的MATLAB代码。
为了测试训练过的模型,我们将其与我们保留的数据进行对比,并将其预测与实际测量数据进行比较。结果表明,该神经网络模型对试验数据的平均绝对百分比误差(MAPE)小于2%。
当我们第一次针对测试数据集运行我们的模型时,我们注意到一些实例,其中模型的预测与实际负载有很大的差异。例如,在假期期间,我们会看到与预期行为的偏差。我们还注意到,该模型对2012年10月29日纽约市负荷的预测相差了数千兆瓦(图6)。快速搜索互联网显示,在这一天,飓风桑迪扰乱了整个地区的电网。调整模型来处理假日是有道理的,因为假日是有规律的,因此是可以预测的,但像桑迪这样的风暴是一次性事件,因此很难解释。
开发、测试和改进预测模型的过程通常需要多次迭代。通过使用并行计算工具箱™在多个处理器核心上同时运行几个步骤,可以减少训练和测试时间。对于非常大的数据集,您可以通过在多台计算机上使用MATLAB Parallel Server™运行这些步骤来扩展。
将模型部署为应用程序
一旦模型满足了我们的精度要求,最后一步就是将其转移到生产系统中。我们有几个选择。使用MATLAB编译器™,我们可以生成一个独立的应用程序或电子表格插件。使用MATLAB编译器SDK™,我们可以生成。net和Java®组件。使用MATLAB Production Server™,我们可以将应用程序直接部署到能够同时为大量用户提供服务的生产环境中。
对于我们的负载预测工具,我们通过RESTful API访问用MATLAB开发的数据分析,该API返回数值预测和可以包含在应用程序或报告中的图表。使用Production Server Compiler应用程序,我们指定要部署的MATLAB函数。应用程序自动执行依赖分析,并将必要的文件打包到单个可部署组件中。使用MATLAB Production Server,我们将组件部署为一个处理引擎,使分析可用于网络上的任何软件或设备,包括web应用程序、其他服务器和移动设备(图7)。
下一个步骤
这里开发的能源负荷预测模型提供了决策者可以通过web前端使用的高度准确的预测。由于该模型已经经过了几个月的测试数据验证,我们有信心在实际负荷的2%内给出24小时的预测。
该模型可以扩展到包含其他数据源,如节日日历和恶劣天气警报。由于整个数据分析工作流都是在MATLAB代码中捕获的,因此可以轻松地将其他数据源与现有数据合并,并对模型进行重新训练。一旦新模型部署到MATLAB Production Server,负载预测应用程序背后的算法就会自动更新——终端用户甚至不需要刷新web页面。