该存储库用于预测德国的电力消耗。
基于并受到以下启发:
数据来源:SMARD
将所有下载的文件放入:
/example/dataset # there is already used dataset included if you pull, but you could update
检查 Forecast.Rmd 文件以了解如何在更新版本的 SMARD-Data 上运行此代码。
使用的库:
# Probably needed
# Load Packages
# library(fhswf)
# library(tsibbledata)
# library(broom)
# library(readr)
# library(datasets)
# library(timeDate)
# library(qlcal)
# library(corrplot)
# library(mgcv)
# library(MEFM)
# library(TTR)
packages <- c(
"devtools",
"ggplot2",
"dplyr",
"tsibble",
"fable",
"fabletools",
"feasts",
"distributional",
"lubridate",
"tidyr",
"forecast",
"zoo",
"scales",
"fable.prophet"
)
install.packages(packages)
library(devtools)
library(ggplot2)
library(dplyr)
library(tsibble)
library(fable)
library(fabletools)
library(feasts)
library(distributional)
library(lubridate)
library(tidyr)
library(forecast)
library(zoo)
library(scales)
library(fable.prophet)
尝试在 example/ 文件夹中开始工作。
# Define datapaths
power_consum_path <- "dataset\stunde_2015_2024\Realisierter_Stromverbrauch_201501010000_202407090000_Stunde.csv"
power_consum_smard_prediction_path <- "dataset\propgnose_vom_smard\Prognostizierter_Stromverbrauch_202401010000_202407090000_Stunde.csv"
# Load Smard Prediction
power_consum_smard_prediction_loaded <- load_power_consum(path=power_consum_smard_prediction_path)
raw_smard_pred <- power_consum_smard_prediction_loaded$raw_data
cleaned_smard_pred <- power_consum_smard_prediction_loaded$cleaned_data
cleaned_smard_pred <- cleaned_smard_pred |>
mutate(.model = "SMARD")
names(cleaned_smard_pred)[names(cleaned_smard_pred) == "PowerConsum"] <- ".mean"
# Load PowerConsum Data
power_consum_loaded <- load_power_consum(path=power_consum_path)
raw_power_consum <- power_consum_loaded$raw_data
cleaned_power_consum <- power_consum_loaded$cleaned_data
# Generate more features
cleaned_power_consum$localName[is.na(cleaned_power_consum$localName)] = "Working-Day"
cleaned_power_consum$MeanLastWeek <- rollapply(cleaned_power_consum$PowerConsum, width = 24*8, FUN = function(x) mean(x[1:(24*8-25)]), align = "right", fill = NA)
cleaned_power_consum$MeanLastTwoDays <- rollapply(cleaned_power_consum$PowerConsum, width = 24*3, FUN = function(x) mean(x[1:(24*3-25)]), align = "right", fill = NA)
cleaned_power_consum$MaxLastOneDay <- rollapply(cleaned_power_consum$PowerConsum, width = 24*2, FUN = function(x) max(x[1:(24*2-25)]), align = "right", fill = NA)
cleaned_power_consum$MinLastOneDay <- rollapply(cleaned_power_consum$PowerConsum, width = 24*2, FUN = function(x) min(x[1:(24*2-25)]), align = "right", fill = NA)
以下功能是从数据集和假日 API 生成的:
指数 | 列名 | 描述 |
---|---|---|
1 | 日期从 | 用于验证 DateIndex(类似,但原始) |
2 | 功耗 | 功耗(MW) |
3 | 日期索引 | 时间戳 (yyyy-mm-dd hh:mm:ss) |
4 | 工作日 | Mo、Di、Mi、Do、Fr、Sa、So(德语工作日) |
5 | 日期 | 日期(年-月-日) |
6 | 年 | 年份 yyyy |
7 | 星期 | 周数 0-53 |
8 | 小时 | 小时数 0-24 |
9 | 月 | 月份号 1-12 |
10 | 本地名称 | 时间戳的假日名称 |
11 | 工作日 | 1/0 如果是工作日(Werktag)则 1 |
12 | 莫 | 1/0 如果星期一则 1 |
13 | 迪 | 1/0 如果星期二则 1 |
14 | 米 | 1/0 如果星期三则 1 |
15 | 做 | 1/0 如果星期四则 1 |
16 | Fr | 1/0 如果星期五则 1 |
17 号 | 萨 | 1/0 如果星期六则 1 |
18 | 所以 | 1/0 如果周日则 1(如果使用周一至周六则不需要) |
19 | 假期 | 1/0 如果是假期则 1 |
20 | 工作日假期周末 | 如果是假期、周末或工作日(对于地块,是字符。) |
21 | 假期和工作日 | 1/0 如果假期是工作日则 1 |
22 | 最后一天不是工作日 | 1/0 如果最后一天不是工作日则 1 |
23 | 最后一天不是工作日而现在是工作日 | 1/0 如果最后一天不是工作日而现在是工作日则 1 |
24 | 下一天不是工作日并且现在是工作日 | 1/0 如果第二天不是工作日而现在是工作日则 1 |
25 | 最后一天是假期而不是周末 | 1/0 如果最后一天是假期而不是周末,则 1 |
26 | 下一天是假期而不是周末 | 1/0 如果第二天是假期而不是周末,则 1 |
27 | 假期名称 | 类似于 localName(假期名称) |
28 | 年底 | 1/0 如果是年底(第 52 或 53 周) |
29 | 新年第一周 | 1/0 如果是年初(第一周) |
30 | 假期延长 | 1/0 滞后假期(第二天 6 小时) |
31 | 假期平滑 | 假期延长 + sin(2*pi(小时)+1)/24) |
32 | 平均上周 | 上周平均功耗(班次:24*8-25) |
33 | 平均最后两天 | 近两天平均功耗(班次:24*3-25) |
34 | 最大最后一天 | 最后一天的最大功耗(班次:24*2-25) |
35 | 最短最后一天 | 最后一天的最小功耗(班次:24*2-25) |
在这项研究中,有来自 SMARD 的 2015 - 2024 年德国电力消耗数据集。
图 1 显示了原始数据集,其中包含缺失值(红色)、重复的时间戳(深红色)和随时间变化的功耗(灰色)、每小时分辨率。每年有一个缺失值和一个重复值,因此很容易清理数据集。总体而言,这是一个几乎干净的集合。清理数据集后,可以对功耗进行合理的观察:
有一种简单的方法可以通过最后一次观察来填补空白(这是可能的,因为分辨率足够大并且只有很少的缺失值)。第一个值被保留以用于重复。
图1 原始功耗
local_name_colors <- c(
"Christi Himmelfahrt" = palette()[2],
"Erster Weihnachtstag" = palette()[2],
"Karfreitag" = palette()[2],
"Neujahr" = palette()[2],
"Ostermontag" = palette()[2],
"Pfingstmontag" = palette()[2],
"Reformationstag" = palette()[2],
"Tag der Arbeit" = palette()[2],
"Tag der Deutschen Einheit" = palette()[2],
"Zweiter Weihnachtstag" = palette()[2],
"Regulärer Tag" = palette()[1]
)
week_colors <- c(
"Mo" = palette()[1],
"Di" = palette()[1],
"Mi" = palette()[1],
"Do" = palette()[1],
"Fr" = palette()[1],
"Sa" = palette()[2],
"So" = palette()[2]
)
working_colors <- c("1" = "#2E9FDF", "0" = "#FC4E07")
whw_colors <- c(
"FeiertagnKein Wochenende" = "black",
"Kein FeiertagnKein Wochenende" = "red",
"Kein FeiertagnWochenende" = "orange",
"FeiertagnWochenende" = "blue"
)
p <- cleaned_power_consum |>
gg_tsdisplay(PowerConsum, plot_type = "partial", lag = 100)
ggsave(
"plots/power_consum_acf_pacf.png",
plot = p,
width = 5.5,
height = 3.7,
dpi = 600
)
plot_calculated_features(
cleaned_power_consum = cleaned_power_consum,
file_name = "plots/MinLastOneDay.png",
x = "MinLastOneDay",
y = "PowerConsum",
x_label = "Minimaler Stromverbrauch vom letzten Tag [MW]",
y_label = "Stromverbrauch [MW]"
)
plot_calculated_features(
cleaned_power_consum = cleaned_power_consum,
file_name = "plots/MaxLastOneDay.png",
x = "MaxLastOneDay",
y = "PowerConsum",
x_label = "Maximaler Stromverbrauch vom letzten Tag [MW]",
y_label = "Stromverbrauch [MW]"
)
plot_calculated_features(
cleaned_power_consum = cleaned_power_consum,
file_name = "plots/MeanLastWeek.png",
x = "MeanLastWeek",
y = "PowerConsum",
x_label = "Durchschnittlicher Stromverbrauch der letzten 7 Tage [MW]",
y_label = "Stromverbrauch [MW]"
)
plot_calculated_features(
cleaned_power_consum = cleaned_power_consum,
file_name = "plots/MeanLastTwoDays.png",
x = "MeanLastTwoDays",
y = "PowerConsum",
x_label = "Durchschnittlicher Stromverbrauch der letzten 2 Tage [MW]",
y_label = "Stromverbrauch [MW]"
)
plot_histogram_by_group(
cleaned_power_consum,
group_name = "WorkdayHolidayWeekend",
file_name = "plots\workday_holiday_weekend_histogram.png",
colors = whw_colors,
x="PowerConsum",
x_label = "Stromverbrauch [MW]",
y_label = "Häufigkeit",
name_0 = "Wochenende oder Feiertage",
name_1 = "Werktag"
)
plot_histogram_by_group(
cleaned_power_consum,
group_name = "WorkDay",
file_name = "plots\workday_histogram.png",
colors = working_colors,
x="PowerConsum",
x_label = "Stromverbrauch [MW]",
y_label = "Häufigkeit",
name_0 = "Wochenende oder Feiertage",
name_1 = "Werktag"
)
plot_histogram_by_group(
cleaned_power_consum,
group_name = "Holiday",
file_name = "plots\holiday_histogram.png",
colors = working_colors,
x="PowerConsum",
x_label = "Stromverbrauch [MW]",
y_label = "Häufigkeit",
name_0 = "Werktag oder Wochenende",
name_1 = "Feiertag"
)
plot_histogram_by_group(
cleaned_power_consum,
group_name = "HolidayAndWorkDay",
file_name = "plots\holiday_workday_histogram.png",
colors = working_colors,
x="PowerConsum",
x_label = "Stromverbrauch [MW]",
y_label = "Häufigkeit",
name_0 = "Wochenende oder Werktag",
name_1 = "Feiertag am Werktag"
)
plot_by_group(
cleaned_power_consum,
group_name = "HolidayName",
file_name = "plots\holiday_boxplot.png",
colors = local_name_colors,
title = "Übersicht der einzelnen Feiertage",
y="PowerConsum",
y_label="Stromverbrauch [MW]",
x_label="Jahre"
)
plot_by_group(
cleaned_power_consum,
group_name = "Weekday",
file_name = "plots\weekday_boxplot.png",
colors = week_colors,
title = "Übersicht der einzelnen Wochentage",
y = "PowerConsum",
y_label="Stromverbrauch [MW]",
x_label="Jahre"
)
plot_by_group(
cleaned_power_consum,
group_name = "WorkDay",
file_name = "plots\workday_boxplot.png",
colors = working_colors,
title = "Übersicht, ob Feiertag (FALSE) oder Werktag (TRUE)",
y = "PowerConsum",
y_label="Stromverbrauch [MW]",
x_label="Jahre"
)
plot_by_column(
df = cleaned_power_consum,
x = "Hour",
y = "PowerConsum",
x_label = "Stunden",
y_label = "Stromverbrauch [MW]",
file_name = "plots\hour_boxplot.png",
title = "Übersicht der einzelnen Stunden"
)
plot_by_column(
df = cleaned_power_consum,
x = "Month",
y = "PowerConsum",
x_label = "Monate",
y_label = "Stromverbrauch [MW]",
file_name = "plots\month_boxplot.png",
title = "Übersicht der einzelnen Monate"
)
plot_by_column(
df = cleaned_power_consum,
x = "Week",
y = "PowerConsum",
x_label = "Woche",
y_label = "Stromverbrauch [MW]",
file_name = "plots\week_boxplot.png",
title = "Übersicht der einzelnen Wochen"
)
plot_by_column(
df = cleaned_power_consum,
x = "Year",
y = "PowerConsum",
x_label = "Jahr",
y_label = "Stromverbrauch [MW]",
file_name = "plots\year_boxplot.png",
title = "Übersicht der einzelnen Jahre"
)
plot_year_month_week_day(
df=cleaned_power_consum,
date_column="DateIndex",
y="PowerConsum",
from_year=2015,
to_year=2024,
from_week=0,
to_week=53,
year_for_week=2018,
from_day=1,
to_day=30,
month_for_day=4,
year_for_day=2018,
from_month=1,
to_month=12,
year_for_month=2018,
holiday="Holiday",
day_of_week = "Weekday"
)
以下部分将越来越详细地介绍数据。我们将从年度代表开始。
图 2 是 2015-2024 年的年度图。在这里我们可以注意到,年初用电量增加,年底用电量减少(圣诞节、新年)。整体看起来像微笑形状或蝴蝶结。
图 2 每年的功耗
让我们尝试汇总所有年份并将它们分成几周。图 3 中的箱线图结合了所有年份。我们可以更详细地看到该模式。一年的开始和结束用红色表示,并显示出与常规“微笑形状”相比有所减少。图3 每周用电量汇总数据
让我们更详细地了解一下,例如 2018 年。图4是2018年的月度图。在这里我们可以更详细地观察年底的情况。 12月24日左右,用电量有所下降。这里还值得注意的是周末和节假日(红色)。所有周末和所有节假日都会减少。
图 4 每月的功耗,作为一个方面
我们可以更进一步查看数据的每小时表示。图 5 显示了每小时的聚合箱线图。夜间(21:00-06:00)也减少,白天/工作时间(06:00-21:00)增加。也是需要包含在模型中的模式。
图5 每小时用电量汇总数据
我们来谈谈工作日吧。正如所假设的,周末电力消耗会减少。 “Durchschnitt”是意思。图 6 显示了多年来的所有工作日(汇总)。周末减少约 10,000 MW。
图 6 功耗“周内效应”
图8显示了假期效果。 “Durchschnitt”是多年来的平均功耗。与节假日(红色)相比,“工作日”(深灰色)的耗电量显着增加。我们可以假设假期对于电力消耗来说就像周末一样”。
图6 功耗“假期效应”
图 7 代表不同日期的不同行为。有 4 类。 “Feiertag Kein Wochenende”的意思是这是一个假期,但不是周末。 “Feiertag Wochenende”的意思是这是一个假期和一个周末。 “Kein Feiertag Kein Wochenende”表示这是一个正常工作日,“Kein Feiertag Wochenende”表示这只是周末。我们可以观察到假设的非正常工作日的类似分布。
图7 功耗“不同效果”比较
MeanLastTwoDays、MeanLastWeek、MaxLastOneDay 和 MinLastOneDay 等滞后值是生成的特征。
与 DOI 中讨论的类似:10.1109/TPWRS.2011.2162082 - 基于半参数加性模型的短期负荷预测
图 8-11(红色不是工作日)表示相对于实际功耗的滞后值。
这个生成的特征有轻微的相关性。
# Check Correlation
cor <- cor(cleaned_power_consum[sapply(cleaned_power_consum, is.numeric)], method = c("pearson", "kendall", "spearman"), use = "complete.obs")
特征 | 与功耗的相关性 |
---|---|
假期平滑 | -0.556194 |
平均上周 | 0.389044 |
平均最后两天 | 0.201253 |
最大最后一天 | 0.320193 |
最短最后一天 | 0.348583 |
图 8 功耗 - MeanLastTwoDays
图 9 功耗 - MeanLastWeek
图 10 功耗 - MaxLastOneDay
图 11 功耗 - MinLastOneDay
存在复杂的季节性。对于每小时分辨率,有每年、每周和每日的季节性。这需要由模型跟踪。这里的解决方案如预测:原理与实践第 12.1 章复杂季节性中所述,使用傅里叶项通过 cos() 和 sin() 表示和组装复杂季节性。
我们可以看一下 ACF 和 PACF 图,几乎没有显着的尖峰,但它只是 96 个滞后值的表示。如果我们采用一年约 9000 个滞后观测值,就会出现复杂的季节性。这就是为什么使用傅里叶项更容易。仅通过以下方式查找 PDQ 和 pdq 组件也效果不佳
ARIMA(...
stepwise=FALSE,
greedy=FALSE,
approx=FALSE)
本身。如果没有傅里叶项,训练时间也会急剧增加。
图 12 功耗 - ACF PACF 原始功耗图
这项工作中发现的最佳功能组合是:
为了比较模型,我们使用 MAE 和 MAPE 指标。 SMARD 是 SMARD 页面上“Bundesnetzagentur”的模型。 Prophet模型也被尝试过,表现不错,但还不够好。
SMARD 预测值的 MAPE 达到 3.6%。 <- 不在本研究中。
训练数据:
迄今为止发现的最好的模型是 LHM + DHR(线性谐波模型 + 动态谐波回归)
这个想法是将线性模型与 ARIMA 模型集成。因为 ARIMA 模型很难处理假期的虚拟变量。因此,集成模型发挥了作用。
train_power_consum <- cleaned_power_consum |>
filter(year(DateIndex) > 2020 & (year(DateIndex) < 2024))
generate_models(model_name = "model/mean_naive_drift",
train_power_consum = train_power_consum)
train_power_consum_v5 <- train_power_consum |>
mutate(HolidaySmoothed = Holiday + sin(2 * pi * (as.numeric(Hour)+1) / 24))
holiday_effect_model <- lm(
PowerConsum ~
HolidaySmoothed,
data = train_power_consum_v5
)
saveRDS(holiday_effect_model, file = "ensemble_model/version_5/holiday_effect_2021_2023.rds")
train_power_consum_v5$Residuals <- residuals(holiday_effect_model)
fit <- train_power_consum_v5 |>
model(
ARIMA = ARIMA(Residuals ~
PDQ(0,0,0)
+ pdq(d=0)
+ MeanLastWeek
+ WorkDay
+ EndOfTheYear # new
+ FirstWeekOfTheYear # new
+ MeanLastTwoDays
+ MaxLastOneDay
+ MinLastOneDay
+ fourier(period = "day", K = 6)
+ fourier(period = "week", K = 7)
+ fourier(period = "year", K = 3)
)
)
saveRDS(fit, file = "ensemble_model/version_5/arima_2021_2023.rds")
我们可以直观地看到效果以及模型的工作原理。图 13 显示了该模型背后的想法。首先,我们拟合 LHM 模型并计算残差。通过残差训练 DHR 模型并对两者求和。它有点像 LHM 上的镜像,并将值推回到顶部。
对于 LHM 模型,我们在这里使用一种简单的方法,即每 24 小时重复一次的正弦曲线,并在假期或工作日减少或增加。
通过预测新数据的 LHM,我们可以预测新数据的残差。残差 + LHM 将值移回“正确”位置。
图 13 LHM + DHR 模型表示
ensembled_fc <- load_ensembled_models(
days_to_forecast = 40,
months_to_forecast = 6,
year_to_forecast = 2024,
starting_month = 1,
real_data = cleaned_power_consum,
smard_fc = cleaned_smard_pred,
model_path = "ensemble_model"
)
all_forecasts_ensembled <- ensembled_fc$all_forecasts
raw_fc_ensembled <- ensembled_fc$raw_forecasts
fc <- load_all_model_results(
days_to_forecast = 40,
months_to_forecast = 6,
year_to_forecast = 2024,
starting_month = 1,
smard_fc = cleaned_smard_pred,
real_data = cleaned_power_consum
)
all_forecasts <- fc$combined_forecasts
raw_fc <- fc$raw_forecasts
metric_results <- calculate_metrics(fc_data = all_forecasts, fc_data_ensembled=all_forecasts_ensembled)
# Plot best Model for single Models
name_of_best_model_for_single_model <- plot_forecast(
all_forecasts = all_forecasts,
metric_results = metric_results,
cleaned_power_consum = cleaned_power_consum,
raw_fc = raw_fc,
month_to_plot = 1,
days_to_plot = 40
)
# Plot best Model for ensembled Models
name_of_best_model_ensembled <- plot_forecast_ensembled(
all_forecasts = all_forecasts_ensembled,
metric_results = metric_results,
cleaned_power_consum = cleaned_power_consum,
month_to_plot = 1,
days_to_plot = 40
)
# Residuals Compared with SMARD
plot_compare_with_smard(
all_forecasts = all_forecasts_ensembled,
name_of_best_model = name_of_best_model_ensembled
)
# LHM DHM representation
plot_representation_of_lhm_dhm_components(path_dhm = "ensemble_model/version_5/arima_2021_2023.rds",
path_lhm = "ensemble_model/version_5/holiday_effect_2021_2023.rds",
from_month = 1,
to_month = 1,
raw_fc_ensembled = raw_fc_ensembled)
version_5(LHM + DHR 模型)的 MAPE 得分为 3.8%。
让我们更深入地了解一下是否仅使用 ARIMA 模型 (arima_14)。图 14 展示了该模型的结果。我们可以看到节假日(橙色)、周末(红色)和正常日期(蓝色)。假期有显着的异常值,尽管 ARIMA 模型有一个虚拟变量,但它无法正确捕捉假期。
图 14 预测与实际值 ARIMA(DHR、arima_14),作为单个模型
另一方面,LHM + DHR 模型在假期中表现更好。图 15 代表了它。
图 15 预测与实际值 LHM + DHR,集成模型
图 16 显示了 2024 年 1 月的预测。看起来很合理。
图 16 2024 年 1 月预测值与实际值 LHM + DHR
此外,与 SMARD 模型相比,该模型的残差看起来也不错。很少有峰值,但可能很重要,并且可以通过建模更好地准备。但总体而言,这是一个坚实的结果。
图 17 2024 年 1 月 - 7 月的残差 LHM + DHR
图 18 2024 年 1 月 - 7 月的残差 LHM + DHR
指数 | 型号名称 | 均方根误差 | MAPE | MAE | 合奏 |
---|---|---|---|---|---|
2 | 真实观察 | 0.000 | 0.000000 | 0.000 | 真的 |
3 | SMARD | 2480.693 | 3.602140 | 1869.466 | 错误的 |
4 | SMARD | 2480.693 | 3.602140 | 1869.466 | 真的 |
5 | 版本_5 | 2626.807 | 3.816012 | 1937.670 | 真的 |
6 | 版本_0 | 2613.258 | 3.846888 | 1946.314 | 真的 |
7 | 版本_7 | 2770.359 | 4.107272 | 2076.045 | 真的 |
8 | 版本_8 | 2775.441 | 4.146788 | 2091.153 | 真的 |
9 | 版本_9 | 2887.179 | 4.177841 | 2100.381 | 真的 |
10 | 版本_6 | 2906.242 | 4.216517 | 2142.092 | 真的 |
11 | arima_14_2021_2023.rds | 3208.735 | 4.389492 | 2207.395 | 错误的 |
12 | arima_18_2021_2023.rds | 3208.735 | 4.389492 | 2207.395 | 错误的 |
13 | 版本_4 | 2875.929 | 4.535388 | 2255.645 | 真的 |
14 | 版本_2 | 2905.990 | 4.580770 | 2279.624 | 真的 |
15 | arima_9_2021_2023.rds | 3267.160 | 4.611857 | 2302.918 | 错误的 |
16 | arima_2_2021_2023.rds | 3251.390 | 4.614028 | 2301.447 | 错误的 |
17 号 | arima_4_2021_2023.rds | 3251.390 | 4.614028 | 2301.447 | 错误的 |
18 | arima_5_2021_2023.rds | 3251.390 | 4.614028 | 2301.447 | 错误的 |
19 | arima_13_2021_2023.rds | 3283.745 | 4.619636 | 2307.415 | 错误的 |
20 | arima_10_2021_2023.rds | 3265.913 | 4.625508 | 2314.395 | 错误的 |
21 | arima_0_2021_2023.rds | 3269.009 | 4.645944 | 2317.138 | 错误的 |
22 | arima_17_2021_2023.rds | 3269.009 | 4.645944 | 2317.138 | 错误的 |
23 | arima_16_2021_2023.rds | 3298.902 | 4.673116 | 2334.857 | 错误的 |
24 | arima_1_2021_2023.rds | 3312.429 | 4.696342 | 2340.193 | 错误的 |
24 | Prophet_0_2021_2023.rds | 3044.849 | 4.711527 | 2435.572 | 错误的 |
25 | arima_8_2021_2023.rds | 3332.217 | 4.716612 | 2358.085 | 错误的 |
26 | arima_11_2021_2023.rds | 3358.020 | 4.758970 | 2388.791 | 错误的 |
27 | arima_12_2021_2023.rds | 3430.191 | 5.022772 | 2495.067 | 错误的 |
28 | arima_7_2021_2023.rds | 3475.671 | 5.049287 | 2510.903 | 错误的 |
29 | 版本_3 | 3546.729 | 5.064654 | 2570.530 | 真的 |
30 | arima_15_2021_2023.rds | 3734.584 | 5.165147 | 2606.661 | 错误的 |
31 | arima_6_2021_2023.rds | 3748.583 | 5.375326 | 2723.837 | 错误的 |
32 | 版本_1 | 4495.568 | 6.483477 | 3229.647 | 真的 |
33 | arima_3_2021_2023.rds | 4558.982 | 6.953247 | 3453.387 | 错误的 |
34 | tslm_0_2021_2023.rds | 6760.994 | 11.189119 | 5694.949 | 错误的 |
35 | mean_2021_2023.rds | 9489.303 | 16.406032 | 8101.476 | 错误的 |
36 | naive_2021_2023.rds | 14699.338 | 20.797370 | 12130.587 | 错误的 |
37 | drift_2021_2023.rds | 14763.692 | 20.917883 | 12200.002 | 错误的 |
笔记:
检查 example/ensemble_model_2022_forecast 或 example/ensemble_model_2023_forecast
我们可以包括更多因素,例如: