複数の時系列を交差検証し、すべての結果を 1 つのプロットにプロットしようとしています。単一の時系列ケースを使用して何が機能しているかを見てみましょう。
シングルTSケース
5 年間のシミュレートされた月次時系列の場合、次の方法を使用して予測パフォーマンスを相互検証できます。
library(prophet)
library(dplyr)
library(purrr)
## Dataset creation
ds <- seq(as.Date("2014-01-01"), as.Date("2018-12-31"), by = "month")
y <- sample(60)
df <- data.frame(ds, y)
head(df)
m <- prophet(df, seasonality.mode = 'multiplicative')
future <- make_future_dataframe(m, periods = 60)
fcst <- predict(m, future)
df.cv <- cross_validation(m, initial = 730, horizon = 365, period = 180, units = 'days')
plot_cross_validation_metric(df.cv, metric = 'mape')
最後の行では、次のようなプロットが得られます。
複数の時系列を持つ複雑なケース、
時系列が 4 つあるとします (数千など、それ以上の場合もあります)。mape 値を示す同様の折れ線グラフを取得しようとしています。
私がここでやっていることは、これです。
library(prophet)
library(dplyr)
library(purrr)
## Dataset creation
id1 <- rep(12, 60)
ds1 <- seq(as.Date("2014-01-01"), as.Date("2018-12-31"), by = "month")
value1 <- sample(60)
id2 <- rep(132, 48)
ds2 <- seq(as.Date("2015-01-01"), as.Date("2018-12-31"), by = "month")
value2 <- sample(48)
id3 <- rep(210, 72)
ds3 <- seq(as.Date("2013-01-01"), as.Date("2018-12-31"), by = "month")
value3 <- sample(72)
id <- c(id1, id2, id3)
ds <- c(ds1, ds2, ds3)
y <- c(value1, value2, value3)
df <- data.frame(id, ds, y)
head(df)
# preparations
l_df <- df %>% split(.$id)
m_list <- map(l_df, prophet) # prophet call
future_list <- map(m_list, make_future_dataframe, periods = 1) # makes future obs
forecast_list <- map2(m_list, future_list, predict)
df.cv <- cross_validation(m_list, initial = 720, period = 30, horizon = 365, units = 'days')
これは私にエラーを与えます、
> df.cv <- cross_validation(m_list, initial = 720, period = 30, horizon = 365, units = 'days')
Error in generate_cutoffs(df, horizon.dt, initial.dt, period.dt) :
Less data than horizon after initial window. Make horizon or initial shorter.
In addition: Warning messages:
1: In max(df$ds) : no non-missing arguments to max; returning -Inf
2: In min(df$ds) : no non-missing arguments to min; returning Inf
3: In max(df$ds) : no non-missing arguments to max; returning -Inf
4: In min(df$ds) : no non-missing arguments to min; returning Inf
入力のさまざまな組み合わせを試しましたが、何も機能しませんでした。したがって、すべてのモデルを相互検証し、そこから単一の図をプロットする方法を知りたいです。それを行う方法はありますか?