全文链接:https://tecdat.cn/?p=41810
分析师:Peng'an Chen
在数字经济浪潮席卷全球的当下,电力行业正经历着从传统运营模式向数据驱动型模式的深刻变革。作为数据科学家,我们深知精准的数据建模与预测是电力企业提升运营效率、优化资源配置的核心竞争力。此前,我们团队承接了中国南方电网相关数据建模预测的咨询项目,在项目过程中,面对海量且复杂的数据,通过运用 SQL、Python 机器学习、时间序列分析等技术,成功构建了购售电、现金流、折旧等多个关键模型,有效解决了数据清理筛选、模型精度优化等难题,为企业决策提供了坚实的数据支撑。
与此同时,我们还探索了 R 语言在电力负荷时间序列预测中的应用,运用分位数回归、GAM 样条曲线、指数平滑和 SARIMA 等模型,深入剖析电力负荷与各类影响因素之间的关系,实现对电力负荷的精准预测。
本专题将全面呈现这些研究成果与实践经验,无论是南方电网数据建模中对业务目标的精准拆解、数据处理的细致流程,还是 R 语言在电力负荷预测中的多元模型构建与分析,都将一一展开。
分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测 专题项目文件已分享在交流社群,阅读原文进群和 500 + 行业人士共同交流和成长,希望能与各位同行碰撞出更多思维火花,共同推动电力数据领域的发展与创新。
文章脉络:
中国南方电网数据建模预测研究
在当今数字化时代,电力行业的数据处理和分析对于企业的运营和决策至关重要。中国南方电网广东公司面临着购售电、年度现金流、中长期现金流、折旧等模型的建模预测工作。这些工作涉及多种技术操作,如 SQL、Python 机器学习建模以及时间序列分析建模等。由于数据量巨大、维度多且质量方差大,不仅需要对数据进行清理筛选,还对建模精度有着较高的要求,需要不断优化模型以适应项目的需求。
一、任务目标
- 购电成本模型:通过预测未来一年的购电量和成本,为年底购电成本预算编制提供有力辅助,从而制定合理的年度目标。
- 售电收入模型:一方面,预测未来一年的售电量和收入,助力年底售电收入预算编制并制定年度目标;另一方面,当有新数据时,验证模型滚动预测未来一个月售电量与收入的能力。
- 年度现金流模型:通过预测未来一年的会计科目支出,支撑年度现金流预测,并制定年度目标。当有新数据时,能够滚动预测下一个月各会计科目支出,实现月度现金流的精细化管理。
- 中长期现金流模型:预测省公司/地市局未来三年的会计科目支出,支撑年度现金流预测并制定年度目标。当有新数据时,考虑使用时间序列模型实现年度现金流的提前预测。
- 折旧预测模型:在有新数据时,滚动预测下一个月各会计科目支出,实现月度现金流的精细化管理,同时说明折旧测算模型的背景。
二、数据源准备与处理(以机器学习模型和时间序列分析模型为例)
(一)售电收入(机器学习模型)的数据源处理
- 数据收集:研究并收集了内、外部因素的相关数据。外部数据涵盖宏观经济、对外贸易、气候等方面,内部数据涵盖电量、电价、业扩报装等方面,数据时间初始跨度为 2016 年 1 月至 2022 年 12 月。
编辑
2. 数据预处理
- 数据转换:工业增加值、出口总值、社会消费品零售总额的公布口径均为月度累计数值,需要将同年相邻两个月相减得到数据的当月值;GDP 的公布口径均为季度累计数值,需要将同年相邻两个季度相减得到数据的当季值,然后平均分配在当季月份。
- 缺失值处理:统计月报 1 月不公布,2 月公布 1-2 月的累计值,因此将 1-2 月累计值平均分摊到 1 月和 2 月;其他缺失值用线性插值法填补。
- 零值与负值处理:由于内部数据特征中业扩报装数据(实际增容、实际减容等)和内部历史数据趸售、稻田排灌等存在少量 0 值、负值等难以解释的数据影响模型预测的精确度,将用均值填补。
- 剔除异常值:通过四分位差,分别计算上须、下须的值,如果月度售电量、售电收入数据仅在某一年份超出上须或者下须,我们将它视为异常值,并从历史数据剔除后再运行预测模型。
- 特征工程
- 特征筛选:首先使用过滤法,筛选出特征与目标变量的相关系数的绝对值大于 0.1 的特征量;然后使用包裹法中的递归特征消除 (RFE)法。
- 特征预测器:经济数据趋势性和季节性比较强,采用 ETS 指数平滑时间序列模型进行预测;温度和降雨量采用过去两年的同期平均值;目录电价将使用南方电网官网发布的最新电价信息。
- 数据划分:模型训练前,将数据集划分训练集、验证集和测试集三部分。我们将从 2016 年 1 月至 2021 年 12 月的数据作为训练集和验证集,2022 年 1 月至 2022 年 12 月作为测试集来评估模型预测能力。
AI 提示词:请使用 Python 对售电收入机器学习模型的数据源进行处理,包括数据收集、数据预处理(数据转换、缺失值处理、零值与负值处理、剔除异常值)、特征工程(特征筛选)、特征预测器的设置以及数据划分(划分训练集、验证集和测试集),并考虑上述具体的处理方法和数据时间跨度。
# 假设已经导入了相关的库,如 pandas、numpy 等# 数据收集,这里假设已经将数据存储在一个 DataFrame 中data = pd.read_csv('sales_revenue_data.csv')# 数据预处理# 数据转换data['工业增加值当月值'] = data['工业增加值月度累计值'].diff()data['GDP当季值'] = data['GDP季度累计值'].diff() / 3# 缺失值处理data['统计月报1月值'] = data['统计月报2月累计值'] / 2data = data.interpolate()# 零值与负值处理data['业扩报装数据'] = data['业扩报装数据'].fillna(data['业扩报装数据'].mean())# 剔除异常值Q1 = data['月度售电量'].quantile(0.25)Q3 = data['月度售电量'].quantile(0.75)IQR = Q3 - Q1data = data[(data['月度售电量'] >= Q1 - 1.5 * IQR) & (data['月度售电量'] <= Q3 + 1.5 * IQR)]# 特征工程# 特征筛选,假设目标变量是 '售电收入'corr = data.corr()selected_features = corr[abs(corr['售电收入']) > 0.1].index.tolist()data = data[selected_features]# 特征预测器# 这里仅简单示例经济数据的预测,其他类似from statsmodels.tsa.api import ExponentialSmoothingmodel = ExponentialSmoothing(data['经济数据'], seasonal='add', seasonal_periods=12).fit()data['经济数据预测值'] = model.forecast(12)# 数据划分from sklearn.model_selection import train_test_splittrain_val_data, test_data = train_test_split(data, test_size=0.2, shuffle=False)train_data, val_data = train_test_split(train_val_data, test_size=0.2, shuffle=False)
(二)电费资金收入预测(时间序列分析)的数据预处理
- 数据输入:通过取数路径获取各地市局已推送的电费资金收入历史数据。该历史数据为日度数据,且每日有多笔交易。
- 数据清洗
- 原始数据分类汇总:对已推送数据根据地市局、日期、用电类别、交易方式进行分类汇总,加总各个地市局下各分类每日的各笔交易电费,获得单日电费资金收入总数。然后,按照给定的分类名称,将原始数据再次整合分类,最终得到各地市局从用电类别分类和从交易方式分类下的每日电费资金输入数据。
- 数据选择:对各分类数据,规定若一个月的数据量少于 15 天,则该月为无效数据并剔除。整合后发现 2019 年 11 月之前的数据残缺不全,属于无效数据,因此,选择 2019 年 11 月及之后的数据作为模型输入数据。
- 处理异常值:由于实际输送错误、抄写错误等原因,原始数据中实收电费可能出现负值,对该类数据用 0 替换。同时,对每月已推送数据中无电费资金收入的日期,用 0 填充其收入金额,保证每月数据不出现缺失值。
AI 提示词:请使用 Python 对电费资金收入时间序列分析模型的数据进行预处理,包括数据输入、数据清洗(原始数据分类汇总、数据选择、处理异常值),考虑数据的日度性质、多笔交易以及上述具体的处理规则和数据时间范围。
# 假设已经导入了相关的库,如 pandas、numpy 等# 数据输入,这里假设已经将数据存储在一个 DataFrame 中data = pd.read_csv('electricity_fee_data.csv')# 数据清洗# 原始数据分类汇总data['单日电费资金收入总数'] = data.groupby(['地市局', '日期', '用电类别', '交易方式'])['交易电费'].sum()data = data.pivot_table(index=['地市局', '日期'], columns=['用电类别', '交易方式'], values='单日电费资金收入总数')data = data.reset_index()# 数据选择monthly_counts = data['日期'].dt.to_period('M').value_counts()valid_months = monthly_counts[monthly_counts >= 15].indexdata = data[data['日期'].dt.to_period('M').isin(valid_months)]data = data[data['日期'].dt.year >= 2019]# 处理异常值data['实收电费'] = data['实收电费'].clip(lower=0)data = data.fillna(0)
三、模型建立与训练
- 模型加载:通过大量实验测试和资料查询,发现集成算法的表现优于大部分单个机器学习算法。集成学习是通过多个模型的组合形成一个精度更高的模型,包含 Bagging 和 Boosting 两种类别。Bagging 是 bootstrap aggregating,从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,获取平均值作为结果输出,避免不好的样本数据,提高准确度。Boosting 的基本思想是通过某种方式使得每一轮基学习器在训练过程中更加关注上一轮学习错误的样本。最终考虑了 20 多种不同类型的算法(stacking、MLP 等),最后保留最好的 5 种集成算法(随机森林、梯度提升回归(GBR)、XGBoost、Adaboost、BaggingRegressor),通过交叉验证 10 次选择平均月度预测值的误差最小表现最稳定最优的模型进行调参优化。
- 模型调参:引入机器学习中 GridSearchCV (网格搜索)进行自动调参,通过依次调整参数,利用调整的参数训练学习器,从而在所有的参数中找到在验证集上精度最高的参数,达到模型最佳效果。不同的集成学习模型,对不同参数进行调参。
AI 提示词:请使用 Python 进行售电收入模型的建立与训练,考虑使用集成学习算法(随机森林、梯度提升回归、XGBoost、Adaboost、BaggingRegressor),并使用 GridSearchCV 进行调参优化,按照上述不同算法的参数设置范围进行操作。
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, BaggingRegressorfrom xgboost import XGBRegressorfrom sklearn.ensemble import AdaBoostRegressorfrom sklearn.model_selection import GridSearchCV# 假设已经有训练集 train_data 和验证集 val_data,特征为 X_train, X_val,目标变量为 y_train, y_val# 随机森林rf = RandomForestRegressor()rf_params = { 'n_estimators': [10, 30, 100, 500], 'max_depth': [3, 4, 5, 6], 'min_samples_leaf': [3, 4, 5, 6]}rf_grid = GridSearchCV(rf, rf_params, cv=10)rf_grid.fit(X_train, y_train)best_rf = rf_grid.best_estimator_# 梯度提升回归gbr = GradientBoostingRegressor()gbr_params = { 'n_estimators': [20, 50, 100], 'max_depth': [3, 4, 5, 6]}gbr_grid = GridSearchCV(gbr, gbr_params, cv=10)gbr_grid.fit(X_train, y_train)best_gbr = gbr_grid.best_estimator_# Xgboostxgb = XGBRegressor()xgb_params = { 'max_depth': [3, 4, 5, 6], 'n_estimators': [10, 30, 100, 500], 'learning_rate': [0.1, 0.05, 0.01]}xgb_grid = GridSearchCV(xgb, xgb_params, cv=10)xgb_grid.fit(X_train, y_train)best_xgb = xgb_grid.best_estimator_# Adaboostada = AdaBoostRegressor()ada_params = { 'n_estimators': [25, 50, 100], 'learning_rate': [0.1, 0.05, 0.01]}ada_grid = GridSearchCV(ada, ada_params, cv=10)ada_grid.fit(X_train, y_train)best_ada = ada_grid.best_estimator_# Baggingbag = BaggingRegressor()bag_params = { 'n_estimators': [10, 30, 100, 500], 'max_samples': [0.1, 0.05, 0.5]}bag_grid = GridSearchCV(bag, bag_params, cv=10)bag_grid.fit(X_train, y_train)best_bag = bag_grid.best_estimator_
四、数据建模(时间序列分析)
- 预测各分类的当月电费资金收入:对输入数据按月加总,得到各地市局各分类历史月度实收电费。通过画图观察发现各分类每月电费资金收入呈现一定周期性,以东莞供电局-大工业用电为例。
编辑
图 1:东莞-大工业月度电费资金折线图
采用时序分解方法将数据过滤为趋势项、季节项和余项,由于数据样本量较少,采用以鲁棒局部加权回归作为平滑方法的时序分解法(STL)。使用 STL 时序分解法能更好拟合局部回归曲线,描述整体趋势。
编辑
𝑌𝑣 , 𝑇𝑣, 𝑆𝑣, 𝑅𝑣分别表示时间序列数据、趋势项、季节项和余项
对趋势项数据采用线性回归拟合趋势,对季节项数据采用季节 ARIMA 模型,以年为周期进行拟合,以 mse 为标准挑选最优模型,最终得到各分类月度数据的预测结果。
编辑
图 2:东莞-大工业月度电费资金 STL 分解图
图 2 从上到下依次是:原数据折线图、趋势分量折线图、季节分量折线图、余项散点图。由季节趋势分解图像,其趋势项基本呈线性趋势,用一次回归曲线可以较好拟合;季节项基本符合 T=12 时周期曲线的规律,适宜用带季节项参数的模型;残差项散点集中在零附近,误差基本接近于 0。以上三图可以说明月度数据具有以年为单位的周期性,验证了猜想,同时其他地市局、其他分类也具有类似性质。因此,在预测各地市局各分类前,采用 STL 方法先将月度数据分解为季节项与趋势项。然后,对趋势项数据采用线性回归(LinearRegression)拟合趋势,对季节项数据采用季节 ARIMA 模型,以年为周期进行拟合,以 mse 为标准挑选最优模型。最终得到各分类月度数据的预测结果,即趋势项预测与季节项预测之和。
2. 预测各分类当月每日电费资金收入占全月的比例:由于影响每日电费资金收入的因素难以搜集或量化,直接建立时间序列模型进行预测。采用最近一年的数据(2020 年 8 月至 2021 年 11 月)进行建模,模型采用滚动预测的方式。采取三种数据处理方法作为不同模型输入数据,分别采用不同的模型(SARIMA 模型、Holt Winter 模型、ARIMA 模型、Holt 模型、移动平均模型等)进行拟合。根据不同模型的特点和数据的性质选择合适的模型参数,依据不同的准则(最小化均方误差、赤井信息准则等)挑选最优模型。对预测的比例做相应的预测调整,考虑特殊月份(春节假期、国庆假期)的影响。将训练集放入时序模型,计算模型在验证集上的 RMSE 和 50%回收率时的累积绝对误差,选择最优的时序模型进行预测。
- 数据处理:对于数据,由于电费资金收入的规则、政策以及当地的产业情况变动频繁,时间较久远的日度收入规律不具有参考性,故采用最近一年的数据,即 2020 年 8 月至 2021 年 11 月的数据进行建模,其中 2020 年 8 月至 2021 年 7 月为训练集,2021 年 8 - 10 月为验证集,2021 年 11 月为测试集。同时为了保持预测数据的实时性,模型采用滚动预测的方式,即每次预测某月电费占比后,将该月加入训练集,与历史数据一起预测下一个月。
为了规范周期长短,对各月份数据统一处理,方便后续建模,将每月数据调整为 30 天一个月,若该月天数大于 30 天,则将 30 号后的数据加总到 30 号;否则将最后一天数据平摊到后续新增天数上。由于月尾电费收入占全月份额较少,处理后影响不大,因此数据操作后不会影响月内每日电费资金收入行为的特征。 - 模型选择:
- 模型输入数据:由于每个地市局各分类每个月的收入数据波动非常大,且每月收入峰值出现的时间非常不稳定(无法非常准确地预测峰值会出现在具体某一天),部分分类峰值出现存在以月为单位的周期性,部分分类峰值出现不固定在一定范围内,部分分类历史同日具有一定规律。同时,为了避免数据存在过大的波动,将绝对金额转化为各自占当月总金额的比例,对这些比例进行训练和预测。因此,本模型采取三种数据处理方法作为不同模型输入数据:
- 直接计算每日电费资金收入占全月电费资金收入占比,将每日收入占比作为模型输入数据进行建模预测,以东莞供电局下一般住宅用电为例,对每月每日电费资金收入占比进行绘图:
编辑
图 3:东莞-一般住宅每日电费资金比例折线图
图 3 可以看出该分类下不同月份高峰出现规律类似,相邻月份收费高峰较为集中,月末电费资金收入占比较低,呈现截尾特征。采用该方法重构数据可以更直接观察每日电费资金收入分布情况,对规律相似度高的数据拟合效果最佳。由于数据的周期性,这里采用 SARIMA 模型和 Holt Winter 模型,以月为周期(T = 30)作模型拟合。
- 以 5 天一单位的电费资金收入总额占月总额的占比作为建模输入数据。以东莞供电局下商业用电为例,对每月五天一单位的电费资金收入占比进行绘图
编辑
上图为东莞供电局商业用电各月 6 个数(比例)的波动情况,大部分地市局的情况类似,可以看出不同的月份的规律类似,高峰集中在第二个 5 日内(6 - 10 号),最后一个 5 日(26 号 - 月末)电费资金收入占比平均较少。采用该方法重构数据可以减少每日数据波动的不确定性,发现收费高峰出现的时间范围。与 a 相仿,这里采用 SARIMA 模型和 Holt - Winter 模型,以月为周期(T = 6)作模型拟合。
- 对每月同一日单独建模。以东莞供电局下大工业用电为例, 对每月同一日的电费资金收入占比进行绘图:
编辑
图 5:东莞-大工业用电每月同一日电费资金比例折线图
由图 5,大部分日期历史同一天电费收入没有明显的周期性,通过 ADF 检验和 Ljung Box 检验从统计学上验证了数据满足平稳性(或差分后平稳)。采用该方法可以观察每月同一日电费资金收入规律和趋势,更突出每日以月为周期的周期规律。对于每月同一日数据,可以采用 ARIMA 模型、Holt 模型、移动平均模型拟合实收电费趋势。
- 训练模型:针对上述三种模型输入数据,本模型主要采用 ARIMA、SARIMA、指数平滑、移动平均等方法进行模型预测。
- ARIMA 模型对平稳序列数据(或差分后平稳)具有良好的建模效果,形成 ARIMA(p,d,q)模型。该模型也称为差分自回归滑动平均模型,其中 d 为差分项,p、q 为延迟参数。因此,对于具有弱平稳或差分后平稳的历史每月同一日时序数据,ARIMA 模型具有良好的拟合效果。然而,对于一些既有季节效应又有长期趋势的时间序列,ARIMA 模型不足以提取其中的季节信息,这时通常需要采用 SARIMA 模型。因此,SARIMA 模型适用于每日数据预测和每 5 日数据预测,这些数据具备周期性,SARIMA 模型能更好捕获季节性和趋势性。
- 指数平滑模型分为 SES 模型、Holt 模型、三阶 Holt - Winter 模型。对于没有明显趋势或季节规律的预测数据,通常采用 SES 模型,该模型预测使用加权平均计算,最大的权重与最近的观测值相关,而最小的权重与最远的观测值相关。而 Holt 模型在 SES 基础上增加了水平预测方程和趋势预测方程,对存在趋势量的数据更加敏感。因此,SES 和 Holt 对适用于不具有明确季节性的历史每月同一日时序数据。而 Holt Winter 模型进一步添加了季节性组件,可选择趋势项和季节项的组合方式,适用于每日数据预测和每 5 日数据预测。
- 模型预测与评估:
- 模型参数范围选择:根据经验,SARIMA 中的各个参数在实际运用中一般小于 3,据此设定模型参数范围运用于模型训练,由最小化均方误差(MSE)的原则挑选 SARIMA 的最优参数,即 p(自回归阶数)、d(差分阶数)、q(移动平均阶数)。
对 ets 模型即指数平滑模型,调整季节性平滑参数,选择加/乘法趋势、加/乘性季节、是否允许优化阻尼参数等选项,形成各个模型参数,依据赤井信息准则(AIC)最小化原则选择最优模型。
对于模型 C 采用的 ARIMA 模型、简单指数平滑模型和 Holt 模型:一般而言,ARIMA 模型的参数范围小于 3,且不设置季节项参数,由此设定模型参数范围,并由最小 MSE 挑选最优参数;简单指数平滑模型用于模拟移动平均算法,调节参数使得预测模型实时性更强或者平稳性更好;而 Holt 模型在简单指数平滑模型基础上加上趋势项拟合,同样调节参数使得预测模型实时性更强或者平稳性更好。 - 预测比例调整:针对上述三种不同模型,对预测的比例做相应的预测调整。比如,对模型 A、C 应调整预测使得一个月内每天电费资金占比加总等于 1。而针对模型 B,除了调整预测使得一个月内 6 个比例加总等于 1 外,还需要将预测的 5 天比例分配到 5 天当中。由折线图可知,每日电费资金收入比例与相邻月份收入情况比较接近,因此分配的比例依据上月同期比例。
对存在春节假期、国庆假期的特殊月份,由于上述模型只能预测月度每日电费资金缴费行为的一般情况,而受到假期影响用户电费缴纳行为与往常不同,故这几个月份应做特别的调整。对于国庆每年固定 1 - 7 号放假,而春节时间受农历影响公历并不固定,需要通过农历求出往后年份春节对应的日期。在得到假期具体公历日期后,在模型预测的基础上调整预测。一般而言各年份假期电费缴费行为相似,因此将假期中每日的电费资金比例调整为历史同期平均的比例,由此依据一个月比例加总为 1 的原则相应调整这个月内其他日期。 - 模型预测与评估:将训练集放入上述时序模型,计算各个具体参数组合下的模型在验证集上的 RMSE(Root Mean Square Error, 均方根误差),以及验证集该月 50%回收率时的累积绝对误差。
验证集上进行滚动预测:验证集中当月模型预测完成后,将该月实际实收电费添加入训练集中,并通过新的训练集预测下一个月每日电费资金比例,计算 RMSE 和 50%回收率时的累积绝对误差,以此类推。将得到的各模型各组误差分别作平均,选择累积绝对误差小于 0.1 的情况下 RMSE 最小的模型作为最优的时序模型并预测;
完成测试集上的预测之后,通过乘上各分类的当月电费资金收入,得到各分类每日电费资金收入。此外,实际上,从用电类别分类和从交易方式分类仅仅是同一天电费不同维度的分类,两者预测加总后得到的每日电费资金收入应该相等。因此将从用电类别和交易方式分类得到的每日电费资金收入的均值,作为当天电费资金收入的预测值,并由此调整各分类当日的预测结果。
对模型预测结果进行评估。评估结果包括两个部分:每个分类的每日准确率和每日累积准确率,以及加总后的每日电费资金收入的准确率和累积准确率。
五、模型评估与应用
最终数据模型的准确率超过 93%,模型通过中科院评审, 已经应用到广东电网的实际预测工作中。通过以上一系列的数据建模预测工作,为中国南方电网广东公司的购售电、现金流等方面的管理提供了有力的支持和决策依据。在未来,随着数据的不断更新和业务的发展,还需要持续对模型进行优化和改进,以适应不断变化的需求。
通过这次对中国南方电网数据建模预测的研究,我们深入了解了电力行业数据处理和分析的复杂性和重要性,也为其他类似的项目提供了宝贵的经验和参考。在不断探索和实践中,我们相信能够更好地利用数据驱动的方法,为电力行业的发展做出更大的贡献。
R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测
电力负荷预测是电网规划的基础,其水平的高低将直接影响电网规划质量的优劣。为了准确预测电力负荷,有必要进行建模。本文在R语言中使用分位数回归、GAM样条曲线、指数平滑和SARIMA模型对电力负荷时间序列预测并比较。
用电量
本文使用的数据是1996年至2010年之间的每周用电量数据,序列
load ("Load.RData")plot (ts( data = Load , start= 1996 , frequency = 52) )
用电量变量及其影响因素:
•星期几(离散)
•时间小时(离散或非参数)
•年(连续)
交互影响:
•日期和时间
•年份和时间
活动
•公共假期
温度对模型的影响:高温、低温和极冷温度
模型:
分段线性函数,
GAM模型中的样条曲线
数据探索
时间对电力负荷的影响
> plot ( NumWeek , Load )
温度对电力负荷的影响,(Tt,Yt)
> plot ( Temp , Load )
负荷序列(Yt)的自相关的影响,
> acf (Load )
OLS与 中位数回归
中位数回归通过单调变换是稳定的。
lm(y˜x, data =df)lm(y˜x, data =df , tau =.5)
现在,中位数回归将始终有两个观察结果。
which ( predict ( fit ))21 46
分位数回归和指数平滑
简单的指数平滑:
经典地,我们寻找使预测误差最小的α,即
X=as. numeric ( Nile )SimpleSmooth = function (a){for (t in 2:T{L[t=a*X[t+(1 -a)*L[t -1}lines ( SimpleSmooth (.2) ,col =" red ")
V= function (a){for (t in 2:T){L[t]=a*X[t]+(1 -a)*L[t -1]erreur [t]=X[t]-L[t -1] }return ( sum ( erreur ˆ2) )optim (.5 ,V)$ par[1] 0.2464844hw= HoltWinters (X, beta =FALSEhw$ alpha[1] 0.2465579
我们可以考虑分位数误差
HWtau = function ( tau ){loss = function (e) e*(tau -(e< ;=0) *1)V= function (a){for (t in 2:T){L[t]=a*X[t+(1 -a)*L[t -1erreur [t=X[t-L[t -1return ( sum ( loss ( erreuroptim (.5 ,V)$ par
plot (X, type ="b",cex =.6 lines ( SimpleSmooth ( HWtau (.8,col=" blue ",lwd =2)
双指数平滑
我们考虑分位数误差
其中。
hw= HoltWinters (X, gamma =FALSE ,l. start =X[1])hw$ alphaalpha0.4223241hw$ betabeta0.05233389DouSmo = function (a,b){for (t in 2:T){L[t]=a*X[t+(1 -a*(L[t -1]+ B[t -1]B[t]=b*(L[t]-L[t -1]) +(1 -b*B[t -1] return (L+B)
预测
数理统计建立在对概率模型参数的估计和假设检验的基础上。
统计中的预测:当模型拟合观测值时,它会提供良好的预测。
相反,我们使用没有出现过的场景,它使我们能够评估未来的主要趋势,而不是预测极端事件的能力。
预测变量的构造
plot (ts( data = Load $Load , start =1996 , frequency = 52) ,col =" white "
回归
plot (ts( data = Temp , start =1996 , frequency = 52) ,lines (ts( data = train $Temp , start =1996 , frequency = 52) )lines (ts( data = test $Temp , start =1996+620 /52, frequency = 52)
SARIMA模型,s = 52
ARIMA = arima (z, order =c(1 ,0 ,0 ,seasonal =list ( order =c(0 ,1 ,0 ,period =52plot ( forecast (ARIMA ,h =112 )
关于分析师
在此对 Peng'an Chen 对本文所作的贡献表示诚挚感谢,他在暨南大学获得网络工程 - 金融学双学位。他擅长软件 SQL、Python,在深度学习、数据挖掘、数理金融、数据建模等领域表现出色。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。