售电量预测及负荷预测v1

1 电力背景介绍

        在电力行业中,电量和负荷的研究有助于电网的稳定运行,帮助电力进行迎峰度夏和迎峰度冬。电量和电力是需要持续研究内容;地区电量数据能及时真实反映当地经济建设和社会生产情况,行业电量数据能直接展示本地不同行业生产规律和发展态势。对于供电公司而言,需要常态化地预测未来一个月供电区域内全行业高压用户售电量以及外贸企业用电量。

        2021年下半年以来,国家层面多个政策文件对“电网企业代理购电”做出明确安排。

        售电量预测在国家政策、经济运行和供电单位而言都有着强烈的需求。

        电力系统负荷预测是指在充分考虑一些重要的系统运行特性、增容决策、自然条件与社会影响的条件下,研究或利用一套系统地处理过去与未来负荷的数学方法,在满足一定精度要求的意义下,确定未来特定时刻的负荷数值。

        提高负荷预测技术水平,有利于计划用电管理,有利于合理安排电网运行方式和机组检修计划,有利于节煤、节油和降低发电成本,有利于制定合理的电源建设规划,有利于提高电力系统的经济效益和社会效益。

        随着电力中24点和96点负荷采集系统的完善,负荷预测的重要性开始凸显。

 2 时间序列介绍

2.1时间序列的定义

        时间序列过程(time series process)定义为一个随机过程{Xt|t∈T},这是一个按时间排序的随机变量的集合。也就是将每一个时刻t位置的点作为一个随机变量。T是索引集合(index set),T决定定义时序过程以及产生观测值的一个时间集合。

        这里假定:

        (1)随机变量Xt的取值是连续的;

        (2)时间索引集合T是离散且等距的。

2.2 时间序列任务类型

        给定一组时间序列数据,通常会要求回答一个或多个有关它的问题。时间序列数据出现的主要问题类型取决于数据的上下文以及收集数据的原因,下面给出一些常见的目标:

        描述:描述时间序列的主要特征,例如:序列是递增还是递减;是否有季节性模式(例如,夏季较高,冬季较低);第二个解释变量如何影响时间序列的值?

        监控:检测时间序列行为何时发生变化,例如销售额突然下降,或者突然出现峰值。

        预测:从当前值预测时间序列的未来值,并量化这些预测中的不确定性,比如根据今天的气温预测未来几天的温度。

分类:给定多个时间序列,将它们按照相似性进行分类。

2.3 时序预测内涵

2.3.1 时序预测定义

        时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等。时间序列预测有两个要素:时间要素和数值要素。

        时间序列预测特点如下:

        (1)时间序列模型是依赖于事件发生的时间先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。

        (2)在相同时间间隔内测量到的数据点:小时、每天、每周、每X天等。

        (3)较复杂的预测建模问题,与回归分析模型的预测不同。

2.3.2 时序预测分类

        从维度上来说,时间序列可以分为:单变量预测和多变量预测。

  1. 单变量时间序列(Univariate Time Series):只考虑单个变量的时间序列,不考虑其它变量对该变量的影响。
  2. 多变量时间序列(Multivariate Time Series):多维时间序列的各维度高度相关,数据处理时应当综合考虑各维度,以免造成有效信息损失。

        按照预测多少,时间序列可以分为:单步预测和多步预测。

        单步预测是每—次预测的时候输入窗口预测未来一个值。

        多步预测是每—次预测的时候输入窗口预测未来多个值。

        有一组时序数据[1,2,3,4,5,6,7,8,9,10],利用这组数据训练一个模型,使其能对后面提供的数据做一个单步的预测。在此处令n_input=3,n_output=1,处理后的数据变为:

[1,2,3] =====> [4]

[2,3,4] =====> [5]

[3,4,5] =====> [6]

[4,5,6] =====> [7]

[5,6,7] =====> [8]

[6,7,8] =====> [9]

[7,8,9] =====> [10]

        假设一组时序数据为:

        [[1,11],[2,12],[3,13],[4,14],[5,15],[6,16],[7,17],[8,18],[9,19],[10,20]],对其进行两步预测,在此处令n_input=3,n_output=2,处理后的数据变为:

[[1,11],[2,12],[3,13]] ======>[4,5]

[[2,12],[3,13],[4,14]] ======>[5,6]

[[3,13],[4,14],[5,15]] ======>[6,7]

[[4,14],[5,15],[6,16]] ======>[7,8]

[[5,15],[6,16],[7,17]] ======>[8,9]

[[6,16],[7,17],[8,18]] ======>[9,10]

        对于监督学习,时序的关键进行特征工程和构建数据集。

        举个例子,特征的抽取

 3 负荷预测

        电力负荷(electricload)指的是使用电能的用电设备消耗的电功率。现在电力负荷有日负荷、24点负荷和96点负荷。本处研究的是24点负荷。24点负荷即1天内采集24个点的用电负荷,即每小时采集1个数据。因此,本处研究的时序数据的时间频率是1h。

        本处以单个台区级别的24点负荷数据为例,利用时序数据进行次日24点负荷的预测(单变量多步预测任务)。该任务的数据表现如下图所示。

        这是一个真实的负荷例子,单位是台区

        数据分布图展示了24点负荷的数据分布形态,周期特性和趋势项不明显。

3.1 特征构建

        时序的特征有统计特征、维度特征和滑窗特征。

        对时间序列进行统计分析是最容易想到的特征提取方法,这里包括的特征有:

        简单特征:均值、标准差、极值、分位数、尖峰个数、缺失个数、偏差等;

        高级特征:自相关性、周期性、趋势(斜率)、频率、随机噪音等。

3.1.2 维度特征

        维度特征是提取时间序列在时间维度上的信息,包括:

        1)连续型特征

        持续时间、时间间隔

        2)离散型特征

        小时级特征:哪个时间段(0-24)

        天级特征:一周中的星期几、工作日、周末、法定假日

        星期级特征:一个月中的第几个星期、一年中哪个星期

        月份级的特征:第几个月份

3.1.3 窗口特征

        将时间序列在时间轴上划分窗口是一个常用且有效的方法,包括滑动窗口(根据指定的单位长度来框住时间序列,每次滑动一个单位),与滚动窗口(根据指定的单位长度来框住时间序列,每次滑动窗口长度的多个单位)。

        窗口分析对平滑噪声或粗糙的数据非常有用,比如移动平均法等,这种方式结合基础的统计方法,

        即按照时间的顺序对每一个时间段的数据进行统计,从而可以得到每个时间段内目标所体现的特征,进而从连续的时间片段中,通过对同一特征在不同时间维度下的分析,得到数据整体的变化趋势。

3.1.4 负荷预测特征

        项目中采用最常用的窗口特征进行数据集的构建。即,把时间序列问题转换成监督数据集,从而构建时序数据特征。特征构建过程如下图所示。

3.2 多步预测方法

        多步预测方法有多种,下面逐一介绍下。对于序列这里假设一个序列:[1,2,3,4,5,6,7,8,9,10,X,Y,Z],X,Y,Z是需要被预测的数值。

3.2.1 由多个单步实现多步

model1:[1,2,3,4,5,6,7,8,9],[X]

model2:[1,2,3,4,5,6,7,8,9],[Y]

model3:[1,2,3,4,5,6,7,8,9],[Z]

        这种做法的问题是如果需要预测N个时间步,则复杂度很高,比如预测未来100天,则意味着我们要构建100个模型。

        但是这样做,较长的预测步骤数有较好的效果

3.2.2 递归多步预测

        递归多步预测,递归多步预测的本质还是简单的单步预测,但是和第一种情况不同,递归多步预测不需要预测 时间步个模型,仅仅一个模型就够了。举个例子,假设我们构建了一个3阶滞后模型:

        还是以上面的例子为例:[1,2,3,4,5,6,7,8,9,10,X,Y,Z]

        我们先预测X,即根据:

        用model去predict([8,9,10])得到prediction(X),假设predict出来的结构为11.24,然后我们把预测值当作特征,得到[9,10,11.24],然后用model去predict([9,10,11.24])得到prediction(y),依此类推。

        由于使用预测代替真实值,因此递归策略会累积预测误差,即递归策略的偏差比较大,从而随着预测时间范围的增加,模型的性能可能会迅速下降。

3.2.3 深度学习的多输出策略

        直接进行多输出,则model的形式是:

        model多输出:[8,9,10][X,Y,Z]

        这可以非常灵活的支持多输入或者多输出的形式。可以通过最后一层设为全连接层,神经元个数为输出的时间步骤数

        这种方法的问题是,如果标签是时序依赖的。比如时间序列预测未来3个时间步骤t+1,t+2,t+3,如果我们直接使用多输出的方式,则t+1,t+2,t+3三个标签我们其实是认为它们是完全独立的,但是实际上它们是存在序列依赖性的,这个问题和序列标注早期的简单方法存在的问题是一样的,就是没有考虑标签的序列依赖的性质。因此就诞生了第另外一种策略,也是基于深度学习的方法。

3.2.4 seq2seq结构

        常见的问答系统的seq2seq结构,可以符用于时序的多步预测。

        [1,2,3,4,5,6,7,8,9,10][X,Y,Z],我们可以直接构造上述seq2seq结构的输入输出样本,假设我们使用3阶滞后,预测未来的3个时间步,则样本构造为:

[1,2,3], [4,5,6]

[2,3,4], [5,6,7]

[…], […]

[8,9,10], [X,Y,Z]

        在seq2seq的结构中,可以使用LSTM或者CNN的网络结构作为encoder和decoder的组件即可,这种情况下,attention+seq2seq网络结构都可以直接处理这样的问题。

3.2.5 负荷预测多步策略

        负荷预测采用了多个单个实现多步的策略

3.3 算法选择与结果评估

        负荷预测项目中,采用XGBoost算法。该算法在负荷预测多步预测有不错的表现。好了,我们现在梳理下我们是如何预测负荷的。

        (1)利用滑窗构建负荷预测特征;

        (2)利用多个模型构建时序多步预测;

        (3)利用XGBoost作为核心算法。

结果如下:

        横坐标是时间步数,因为是多步预测,存在多个重复的时间点。但是都属于不同的test数据集的一份数据。

        从预测结果可以看到,整体预测效果非常好。在r2的评价指标上达到了0.906,rmse为0.081,比递归预测有很大优势。但这也带来了额外的开销,如模型达到了百兆,耗时为232s,比递归预测有更大的消耗。

4 电量预测

        由于日电量数据是电力部门的敏感数据,因此本处以一个开源数据集为例进行讲解。数据集从2006年12月到2010年11月,数据时长约为4年,时间频率改写成天。

        本次采用预测未来一周的用电量,经过滑窗后构建监督数据集,该数据集的电量预测步长为7,输入特征可以根据实际的业务需求判断。

        尝试了不同的循环神经网络算法,如CNN-LSTM,seq-seq LSTM,ConvLSTM,他们之间的比较结果如下。

        根据表格中个模型在不同特征条件下的评价结果,表明:针对本方法中的数据集,近期数据对未来数据预测产生正面影响,而更远期数据对模型结果产生负面影响;

        除自变量外,其他特征数据对未来数据预测产生的结果与该特征和自变量的相关性有关;

        不同模型结果显示,基于自变量的序列预测产生的效果比其他模型较好。(仅限本数据集中数据)

        不同类别模型所依赖的特征与数据长度的不同,对预测结果产生一定影响,因此需要根据数据集中数据长度和特征情况,进行慎重选择。

5 总结

        时间序列任务在工业界有较多的应用场景,如电力、IoT设备、风险监控等行业有较多的应用。在后续实际工作中,有三条基本判断原则:

  1. 如果没有可用的数据,或者如果可用的数据与预测无关,那么应该使用定性预测方法。

(2)关于过去的数字化信息是可以用的,且有理由假设过去的一些模式会在未来延续下去,可以使用定量预测。

(3)在很大程度上,什么数据是可用的,决定了选择什么合适的预测方法。这一点是非常关键的。

另外,现在时间序列方向已经延伸了更多的算法和工具,比如informer、基于深度分解架构和自相关机制的长期序列预测模型Autoformer,TFT时序框架等。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch是一种基于Python的深度学习框架,可以帮助我们构建和训练神经网络模型。使用PyTorch进行电量预测可以通过以下步骤进行: 1. 数据准备:收集和整理关于电量使用的历史数据,包括电量的测量值以及可能影响电量的各种因素如天气、季节等。将数据进行预处理,如数据清洗、缺失值处理和特征工程等。 2. 构建神经网络模型:使用PyTorch构建一个适合电量预测的神经网络模型。可以选择不同的网络架构,如MLP、RNN、CNN或Transformer等,以及相应的激活函数、损失函数和优化器。 3. 数据划分和批处理:将数据集分为训练集、验证集和测试集,通常采用70%的数据用于训练、15%的数据用于验证和15%的数据用于测试。同时,将数据进行批处理,即将数据分成小的批次进行模型训练,以加快训练速度并提高泛化性能。 4. 模型训练:使用训练集对神经网络模型进行训练,通过反向传播算法更新模型的权重和偏差。可以设置训练的迭代次数、学习率和批次大小等参数,并监控模型在验证集上的表现,以避免过拟合或欠拟合。 5. 模型评估和调优:使用测试集对训练好的模型进行评估,计算预测结果与真实值之间的误差指标,如均方根误差(RMSE)、平均绝对百分比误差(MAPE)等。根据评估结果,可以调整模型的超参数或网络结构,继续进行模型的优化。 6. 预测和应用:使用训练好的模型对未来的电量数据进行预测。可以根据实际需求设置预测的时间间隔,如小时、天或月。将模型应用于实际场景,可以根据预测结果进行电力调度、能源规划和电费优化等。 总之,使用PyTorch进行电量预测可以通过数据准备、模型构建、训练和评估等步骤来实现。PyTorch提供了强大的深度学习功能和易于使用的API,可以帮助开发者快速构建和训练高效准确的电量预测模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

the uzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值