From e4021df6d29cc3c89b848e895d5b044e87306946 Mon Sep 17 00:00:00 2001 From: Jonathan Berrisch Date: Sun, 25 May 2025 17:24:06 +0200 Subject: [PATCH] Finalize CRPS + MCRS begin working on VolDep --- assets/crps_learning/forget.png | Bin 0 -> 59488 bytes assets/library.bib | 32 ++ index.qmd | 580 ++++++++------------------------ 3 files changed, 164 insertions(+), 448 deletions(-) create mode 100644 assets/crps_learning/forget.png diff --git a/assets/crps_learning/forget.png b/assets/crps_learning/forget.png new file mode 100644 index 0000000000000000000000000000000000000000..56f654c609aef512547d212932fc36642145c693 GIT binary patch literal 59488 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 + + ::: -::: {.column width="48%"} +::: {.column width="4%"} + +::: + +::: {.column width="58%"} + +###   -**Weights of expert 2** ```{r, echo = FALSE, fig.width=7, fig.height=5, fig.align='center', cache = TRUE} -load("assets/crps_learning/changing_weights.rds") -mod_labs <- c("Optimum", "Pointwise", "Smooth", "Constant") -names(mod_labs) <- c("TOptimum", "Pointwise", "Smooth", "Constant") +load("assets/crps_learning/weights_preprocessed.rda") +mod_labs <- c("Optimum", "No Forget\nPointwise", "No Forget\nP-Smooth", "Forget\nPointwise", "Forget\nP-Smooth") +names(mod_labs) <- c("Optimum", "nf_ptw", "nf_psmth", "f_ptw", "f_psmth") colseq <- c(grey(.99), "orange", "red", "purple", "blue", "darkblue", "black") weights_preprocessed %>% mutate(w = 1 - w) %>% @@ -1084,19 +1087,10 @@ weights_preprocessed %>% :::: -## Simulation Results - -The simulation using the new DGP carried out for different algorithms (1000 runs): - -
- -
+:::: ## Possible Extensions -:::: {.columns} - -::: {.column width="48%"} **Forgetting** @@ -1117,34 +1111,20 @@ The simulation using the new DGP carried out for different algorithms (1000 runs \label{fixed_share_simple}. \end{align*} -::: +TODO: Move these to the multivariate slides -::: {.column width="2%"} +## Application Study -::: +::: {.panel-tabset} -::: {.column width="48%"} - -**Non-Equidistant Knots** - -- Non-equidistant spline-basis could be used -- Potentially improves the tail-behavior -- Destroys shrinkage towards constant - -
- -
- -::: - -:::: - -## Application Study: Overview +## Overview :::: {.columns} ::: {.column width="29%"} +::: {style="font-size: 85%;"} + Data: - Forecasting European emission allowances (EUA) @@ -1160,6 +1140,8 @@ Tuning paramter grids: - Smoothing Penalty: $\Lambda= \{0\}\cup \{2^x|x\in \{-4,-3.5,\ldots,12\}\}$ - Learning Rates: $\mathcal{E}= \{2^x|x\in \{-1,-0.5,\ldots,9\}\}$ +:::: + ::: ::: {.column width="2%"} @@ -1203,7 +1185,9 @@ overview :::: -## Application Study: Experts +## Experts + +::: {style="font-size: 90%;"} Simple exponential smoothing with additive errors (**ETS-ANN**): @@ -1235,6 +1219,7 @@ ARIMA(0,1,0)-GARCH(1,1) with student-t errors (**I-GARCHt**): Y_{t} = \mu + Y_{t-1} + \varepsilon_t \quad \text{with} \quad \varepsilon_t = \sigma_t Z, \quad \sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2 \quad \text{and} \quad Z_t \sim t(0,1, \nu) \end{align*} +:::: ## Results @@ -1242,6 +1227,8 @@ Y_{t} = \mu + Y_{t-1} + \varepsilon_t \quad \text{with} \quad \varepsilon_t = \ ## Significance +
+ ```{r, echo = FALSE, fig.width=7, fig.height=5.5, fig.align='center', cache = TRUE, results='asis'} load("assets/crps_learning/bernstein_application_study_estimations+learnings_rev1.RData") @@ -1494,247 +1481,47 @@ weights %>% :::: -## Wrap-Up - -:::: {.columns} - -::: {.column width="48%"} - -Potential Downsides: - -- Pointwise optimization can induce quantile crossing - - Can be solved by sorting the predictions - -Upsides: - -- Pointwise learning outperforms the Naive solution significantly -- Online learning is much faster than batch methods -- Smoothing further improves the predictive performance -- Asymptotically not worse than the best convex combination - -::: - -::: {.column width="2%"} - -::: - -::: {.column width="48%"} - -Important: - -- The choice of the learning rate is crucial -- The loss function has to meet certain criteria - -The [`r fontawesome::fa("github")` profoc](https://profoc.berrisch.biz/) R Package: - -- Implements all algorithms discussed above -- Is written using RcppArmadillo `r fontawesome::fa("arrow-right", fill ="#000000")` its fast -- Accepts vectors for most parameters - - The best parameter combination is chosen online -- Implements - - Forgetting, Fixed Share - - Different loss functions + gradients - -::: - :::: - - # Multivariate Probabilistic CRPS Learning with an Application to Day-Ahead Electricity Prices ---- +Berrisch, J., & Ziel, F. (2024). *International Journal of Forecasting*, 40(4), 1568-1586. -## Outline - -
- -**Multivariate CRPS Learning** - -- Introduction -- Smoothing procedures -- Application to multivariate electricity price forecasts - -**The `profoc` R package** - -- Package overview -- Implementation details -- Illustrative examples - -## The Framework of Prediction under Expert Advice - -### The sequential framework - -:::: {.columns} - -::: {.column width="48%"} - -Each day, $t = 1, 2, ... T$ - -- The **forecaster** receives predictions $\widehat{X}_{t,k}$ from $K$ **experts** -- The **forecaster** assings weights $w_{t,k}$ to each **expert** -- The **forecaster** calculates her prediction: - -$$\widetilde{X}_{t}=\sum_{k=1}^K w_{t,k}\widehat{X}_{t,k}$$ - -- The realization for $t$ is observed - -::: - -::: {.column width="2%"} - -::: - -::: {.column width="48%"} - -- The experts can be institutions, persons, or models -- The forecasts can be point-forecasts (i.e., mean or median) or full predictive distributions -- We do not need any assumptions concerning the underlying data -- @cesa2006prediction - -::: - -:::: - -## The Regret - -Weights are updated sequentially according to the past performance of the $K$ experts. - -`r fontawesome::fa("arrow-right", fill ="#000000")` A loss function $\ell$ is needed (to compute the **cumulative regret** $R_{t,k}$) - -\begin{equation} - R_{t,k} = \widetilde{L}_{t} - \widehat{L}_{t,k} = \sum_{i = 1}^t \ell(\widetilde{X}_{i},Y_i) - \ell(\widehat{X}_{i,k},Y_i) - \label{eq_regret} -\end{equation} - -The cumulative regret: -- Indicates the predictive accuracy of expert $k$ until time $t$. -- Measures how much the forecaster *regrets* not having followed the expert's advice - -Popular loss functions for point forecasting @gneiting2011making: - -:::: {.columns} - -::: {.column width="48%"} - -- $\ell_2$-loss $\ell_2(x, y) = | x -y|^2$ - - optimal for mean prediction - -::: - -::: {.column width="2%"} - -::: - -::: {.column width="48%"} - -- $\ell_1$-loss $\ell_1(x, y) = | x -y|$ - - optimal for median predictions - -::: - -:::: - ---- - -:::: {.columns} - -::: {.column width="48%"} - -### Probabilistic Setting - -An appropriate loss: - -\begin{align*} - \text{CRPS}(F, y) & = \int_{\mathbb{R}} {(F(x) - \mathbb{1}\{ x > y \})}^2 dx - \label{eq_crps} -\end{align*} - -It's strictly proper @gneiting2007strictly. - -Using the CRPS, we can calculate time-adaptive weights $w_{t,k}$. However, what if the experts' performance varies in parts of the distribution? - -`r fontawesome::fa("lightbulb", fill = col_yellow)` Utilize this relation: - -\begin{align*} - \text{CRPS}(F, y) = 2 \int_0^{1} \text{QL}_p(F^{-1}(p), y) \, d p. - \label{eq_crps_qs} -\end{align*} - -... to combine quantiles of the probabilistic forecasts individually using the quantile-loss QL. - -::: - -::: {.column width="2%"} - -::: - -::: {.column width="48%"} - -### Optimal Convergence - -
- -`r fontawesome::fa("exclamation", fill = col_orange)` exp-concavity of the loss is required for *selection* and *convex aggregation* properties - -`r fontawesome::fa("exclamation", fill = col_orange)` QL is convex, but not exp-concave - -`r fontawesome::fa("arrow-right", fill ="#000000")` The Bernstein Online Aggregation (BOA) lets us weaken the exp-concavity condition. - -Convergence rates of BOA are: - -`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t *selection* @gaillard2018efficient. - -`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t *convex aggregation* @wintenberger2017optimal. - -::: - -:::: ## Multivariate CRPS Learning :::: {.columns} -::: {.column width="48%"} - -Additionally, we extend the **B-Smooth** and **P-Smooth** procedures to the multivariate setting: - -- Basis matrices for reducing -- - the probabilistic dimension from $P$ to $\widetilde P$ -- - the multivariate dimension from $D$ to $\widetilde D$ +::: {.column width="45%"} -- Hat matrices -- - penalized smoothing across P and D dimensions +We extend the **B-Smooth** and **P-Smooth** procedures to the multivariate setting: -We utilize the mean Pinball Score over the entire space for hyperparameter optimization (e.g, $\lambda$) +::: {.panel-tabset} -::: +## Penalized Smoothing -::: {.column width="2%"} +Let $\boldsymbol{\psi}^{\text{mv}}=(\psi_1,\ldots, \psi_{D})$ and $\boldsymbol{\psi}^{\text{pr}}=(\psi_1,\ldots, \psi_{P})$ be two sets of bounded basis functions on $(0,1)$: -::: +\begin{equation*} + \boldsymbol w_{t,k} = \boldsymbol{\psi}^{\text{mv}} \boldsymbol{b}_{t,k} {\boldsymbol{\psi}^{pr}}' +\end{equation*} -::: {.column width="48%"} +with parameter matix $\boldsymbol b_{t,k}$. The latter is estimated to penalize $L_2$-smoothing which minimizes -*Basis Smoothing* +\begin{align} + & \| \boldsymbol{\beta}_{t,d, k}' \boldsymbol{\varphi}^{\text{pr}} - \boldsymbol b_{t, d, k}' \boldsymbol{\psi}^{\text{pr}} \|^2_2 + \lambda^{\text{pr}} \| \mathcal{D}_{q} (\boldsymbol b_{t, d, k}' \boldsymbol{\psi}^{\text{pr}}) \|^2_2 + \nonumber \\ + & \| \boldsymbol{\beta}_{t, p, k}' \boldsymbol{\varphi}^{\text{mv}} - \boldsymbol b_{t, p, k}' \boldsymbol{\psi}^{\text{mv}} \|^2_2 + \lambda^{\text{mv}} \| \mathcal{D}_{q} (\boldsymbol b_{t, p, k}' \boldsymbol{\psi}^{\text{mv}}) \|^2_2 \nonumber +\end{align} -Represent weights as linear combinations of bounded basis functions: +with differential operator $\mathcal{D}_q$ of order $q$ + +[{{< fa calculator >}}]{style="color:var(--col_green_10);"} We have an analytical solution. + +## Basis Smoothing + +Linear combinations of bounded basis functions: \begin{equation} \underbrace{\boldsymbol w_{t,k}}_{D \text{ x } P} = \sum_{j=1}^{\widetilde D} \sum_{l=1}^{\widetilde P} \beta_{t,j,l,k} \varphi^{\text{mv}}_{j} \varphi^{\text{pr}}_{l} = \underbrace{\boldsymbol \varphi^{\text{mv}}}_{D\text{ x }\widetilde D} \boldsymbol \beta_{t,k} \underbrace{{\boldsymbol\varphi^{\text{pr}}}'}_{\widetilde P \text{ x }P} \nonumber @@ -1750,42 +1537,15 @@ If $\widetilde P = P$ it holds that $\boldsymbol \varphi^{pr} = \boldsymbol{I}$ For $\widetilde P = 1$ we receive constant weights -::: - :::: -## Multivariate CRPS Learning - -:::: {.columns} - -::: {.column width="48%"} - -**Penalized smoothing:** - -Let $\boldsymbol{\psi}^{\text{mv}}=(\psi_1,\ldots, \psi_{D})$ and $\boldsymbol{\psi}^{\text{pr}}=(\psi_1,\ldots, \psi_{P})$ be two sets of bounded basis functions on $(0,1)$: - -\begin{equation} - \boldsymbol w_{t,k} = \boldsymbol{\psi}^{\text{mv}} \boldsymbol{b}_{t,k} {\boldsymbol{\psi}^{pr}}' -\end{equation} - -with parameter matix $\boldsymbol b_{t,k}$. The latter is estimated to penalize $L_2$-smoothing which minimizes - -\begin{align} - & \| \boldsymbol{\beta}_{t,d, k}' \boldsymbol{\varphi}^{\text{pr}} - \boldsymbol b_{t, d, k}' \boldsymbol{\psi}^{\text{pr}} \|^2_2 + \lambda^{\text{pr}} \| \mathcal{D}_{q} (\boldsymbol b_{t, d, k}' \boldsymbol{\psi}^{\text{pr}}) \|^2_2 + \nonumber \\ - & \| \boldsymbol{\beta}_{t, p, k}' \boldsymbol{\varphi}^{\text{mv}} - \boldsymbol b_{t, p, k}' \boldsymbol{\psi}^{\text{mv}} \|^2_2 + \lambda^{\text{mv}} \| \mathcal{D}_{q} (\boldsymbol b_{t, p, k}' \boldsymbol{\psi}^{\text{mv}}) \|^2_2 \nonumber -\end{align} - -with differential operator $\mathcal{D}_q$ of order $q$ - -Computation is easy since we have an analytical solution. - ::: ::: {.column width="2%"} ::: -::: {.column width="48%"} +::: {.column width="53%"} ```{r, fig.align="center", echo=FALSE, out.width = "1000px", cache = TRUE} knitr::include_graphics("assets/mcrps_learning/algorithm.svg") @@ -1841,63 +1601,6 @@ Computation Time: ~30 Minutes :::: -## Special Cases - - -:::: {.columns} - -::: {.column width="48%"} - -::: {.panel-tabset} - -## Constant - -```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} -knitr::include_graphics("assets/mcrps_learning/constant.svg") -``` - -## Constant PR - -```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} -knitr::include_graphics("assets/mcrps_learning/constant_pr.svg") -``` - -## Constant MV - -```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} -knitr::include_graphics("assets/mcrps_learning/constant_mv.svg") -``` - -:::: - -::: - -::: {.column width="2%"} - -::: - -::: {.column width="48%"} - -::: {.panel-tabset} - -## Pointwise - -```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} -knitr::include_graphics("assets/mcrps_learning/pointwise.svg") -``` - -## Smooth - -```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} -knitr::include_graphics("assets/mcrps_learning/smooth_best.svg") -``` - -:::: - -::: - -:::: - ## Results :::: {.columns} @@ -2040,7 +1743,41 @@ table_performance %>% ::: {.column width = "45%"} -Foo +
+ +::: {.panel-tabset} + +## Constant + +```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} +knitr::include_graphics("assets/mcrps_learning/constant.svg") +``` + +## Pointwise + +```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} +knitr::include_graphics("assets/mcrps_learning/pointwise.svg") +``` + +## B Constant PR + +```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} +knitr::include_graphics("assets/mcrps_learning/constant_pr.svg") +``` + +## B Constant MV + +```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} +knitr::include_graphics("assets/mcrps_learning/constant_mv.svg") +``` + +## Smooth.Forget + +```{r, fig.align="center", echo=FALSE, out.width = "400", cache = TRUE} +knitr::include_graphics("assets/mcrps_learning/smooth_best.svg") +``` + +:::: ::: @@ -2048,7 +1785,11 @@ Foo ## Results -```{r, warning=FALSE, fig.align="center", echo=FALSE, fig.width=12, fig.height=6, cache = TRUE} +::: {.panel-tabset} + +## Chosen Parameters + +```{r, warning=FALSE, fig.align="center", echo=FALSE, fig.width=12, fig.height=5.5, cache = TRUE} load("assets/mcrps_learning/pars_data.rds") pars_data %>% ggplot(aes(x = dates, y = value)) + @@ -2085,9 +1826,9 @@ pars_data %>% ) ``` -## Results: Hour 16:00-17:00 +## Weights: Hour 16:00-17:00 -```{r, fig.align="center", echo=FALSE, fig.width=12, fig.height=6, cache = TRUE} +```{r, fig.align="center", echo=FALSE, fig.width=12, fig.height=5.5, cache = TRUE} load("assets/mcrps_learning/weights_h.rds") weights_h %>% ggplot(aes(date, q, fill = weight)) + @@ -2125,9 +1866,9 @@ weights_h %>% scale_y_continuous(breaks = c(0.1, 0.5, 0.9)) ``` -## Results: Median +## Weights: Median -```{r, fig.align="center", echo=FALSE, fig.width=12, fig.height=6, cache = TRUE} +```{r, fig.align="center", echo=FALSE, fig.width=12, fig.height=5.5, cache = TRUE} load("assets/mcrps_learning/weights_q.rds") weights_q %>% mutate(hour = as.numeric(hour) - 1) %>% @@ -2166,51 +1907,9 @@ weights_q %>% scale_y_continuous(breaks = c(0, 8, 16, 24)) ``` -## Profoc R Package - -:::: {.columns} - -::: {.column width="48%"} - -### Probabilistic Forecast Combination - profoc - -Available on [Github](https://github.com/BerriJ/profoc) and [CRAN](https://CRAN.R-project.org/package=profoc) - -Main Function: `online()` for online learning. -- Works with multivariate and/or probabilistic data -- Implements BOA, ML-POLY, EWA (and the gradient versions) -- Implements many extensions like smoothing, forgetting, thresholding, etc. -- Various loss functions are available -- Various methods (`predict`, `update`, `plot`, etc.) - -::: - -::: {.column width="2%"} - -::: - -::: {.column width="48%"} - -### Speed - -Large parts of profoc are implemented in C++. - -
- -
- -We use `Rcpp`, `RcppArmadillo`, and OpenMP. - -We use `Rcpp` modules to expose a class to R -- Offers great flexibility for the end-user -- Requires very little knowledge of C++ code -- High-Level interface is easy to use - -::: - :::: -## Profoc - B-Spline Basis +## Non-Equidistant Knots ::: {.panel-tabset} @@ -2315,8 +2014,8 @@ chart = { }); // Build SVG - const width = 800; - const height = 400; + const width = 1200; + const height = 450; const margin = {top: 40, right: 20, bottom: 40, left: 40}; const innerWidth = width - margin.left - margin.right; const innerHeight = height - margin.top - margin.bottom; @@ -2347,15 +2046,6 @@ chart = { .attr("preserveAspectRatio", "xMidYMid meet") .attr("style", "max-width: 100%; height: auto;"); - // Add chart title - // svg.append("text") - // .attr("class", "chart-title") - // .attr("x", width / 2) - // .attr("y", 20) - // .attr("text-anchor", "middle") - // .attr("font-size", "20px") - // .attr("font-weight", "bold"); - // Create the chart group const g = svg.append("g") .attr("transform", `translate(${margin.left},${margin.top})`); @@ -2372,20 +2062,6 @@ chart = { .call(d3.axisLeft(y).ticks(5)) .style("font-size", "20px"); - // Add axis labels - // g.append("text") - // .attr("x", innerWidth / 2) - // .attr("y", innerHeight + 35) - // .attr("text-anchor", "middle") - // .text("x"); - - // g.append("text") - // .attr("transform", "rotate(-90)") - // .attr("x", -innerHeight / 2) - // .attr("y", -30) - // .attr("text-anchor", "middle") - // .text("y"); - // Add a horizontal line at y = 0 g.append("line") .attr("x1", 0) @@ -2482,23 +2158,27 @@ TODO: Add actual algorithm to backup slides ## Wrap-Up + :::: {.columns} ::: {.column width="48%"} - The [`r fontawesome::fa("github")` profoc](https://profoc.berrisch.biz/) R Package: +[{{< fa triangle-exclamation >}}]{style="color:var(--col_red_9);"} Potential Downsides: -Profoc is a flexible framework for online learning. +- Pointwise optimization can induce quantile crossing + - Can be solved by sorting the predictions -- It implements several algorithms -- It implements several loss functions -- It implements several extensions -- Its high- and low-level interfaces offer great flexibility +[{{< fa magnifying-glass >}}]{style="color:var(--col_orange_9);"} Important: -Profoc is fast. +- The choice of the learning rate is crucial +- The loss function has to meet certain criteria -- The core components are written in C++ -- The core components utilize OpenMP for parallelization +[{{< fa rocket >}}]{style="color:var(--col_green_9);"} Upsides: + +- Pointwise learning outperforms the Naive solution significantly +- Online learning is much faster than batch methods +- Smoothing further improves the predictive performance +- Asymptotically not worse than the best convex combination ::: @@ -2508,17 +2188,21 @@ Profoc is fast. ::: {.column width="48%"} -Multivariate Extension: +The [`r fontawesome::fa("github")` profoc](https://profoc.berrisch.biz/) R Package: -- Code is available now -- [Pre-Print](https://arxiv.org/abs/2303.10019) is available now +- Implements all algorithms discussed above +- Is written using RcppArmadillo `r fontawesome::fa("arrow-right", fill ="#000000")` its fast +- Accepts vectors for most parameters + - The best parameter combination is chosen online +- Implements + - Forgetting, Fixed Share + - Different loss functions + gradients -Get these slides: +Pubications: -
- -
-[https://berrisch.biz/slides/23_06_ecmi/](https://berrisch.biz/slides/23_06_ecmi/) +[{{< fa newspaper >}}]{style="color:var(--col_grey_7);"} Berrisch, J., & Ziel, F. [-@BERRISCH2023105221]. CRPS learning. *Journal of Econometrics*, 237(2), 105221. + +[{{< fa newspaper >}}]{style="color:var(--col_grey_7);"} Berrisch, J., & Ziel, F. [-@BERRISCH20241568]. Multivariate probabilistic CRPS learning with an application to day-ahead electricity prices. *International Journal of Forecasting*, 40(4), 1568-1586. ::: @@ -2526,7 +2210,7 @@ Get these slides: # Modeling Volatility and Dependence of European Carbon and Energy Prices -TODO: Add Reference +Berrisch, J., Pappert, S., Ziel, F., & Arsova, A. (2023). *Finance Research Letters*, 52, 103503. ---