From d34708dfec41b4935fd647f1072c9ab86705d681 Mon Sep 17 00:00:00 2001 From: MMenchero Date: Wed, 31 Jan 2024 21:58:13 -0600 Subject: [PATCH] Added more information to the tutorials. --- man/figures/logo.png | Bin 23214 -> 42161 bytes vignettes/anomaly-detection.Rmd | 25 ++++++++++++++++++++----- vignettes/cross-validation.Rmd | 26 +++++++++++++++++++++----- vignettes/historical-forecast.Rmd | 22 +++++++++++++++++++++- 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/man/figures/logo.png b/man/figures/logo.png index b78266c9ad7fc8b209dd0a2af020d6aa4b566d3a..9f30ef452a18e62d93d6cb99bd83af5bcaac8593 100644 GIT binary patch literal 42161 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

+2X#D%4cVdt=8j-6yheiCXHyNiuWQ( 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 z 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 diff --git a/vignettes/anomaly-detection.Rmd b/vignettes/anomaly-detection.Rmd index 3c5602f..6a03460 100644 --- a/vignettes/anomaly-detection.Rmd +++ b/vignettes/anomaly-detection.Rmd @@ -27,23 +27,38 @@ library(nixtlar) ``` ## 1. Anomaly detection -text +Anomaly detection plays a crucial role in time series analysis and forecasting. Anomalies, also known as outliers, are unusual observations that don't follow the expected time series patterns. They can be caused by a variety of factors, including errors in the data collection process, unexpected events, or sudden changes in the patterns of the time series. Anomalies can provide critical information about a system, like a potential problem or malfunction. After identifying them, it is important to understand what caused them, and then decide whether to remove, replace, or keep them. + +TimeGPT has a method for detecting anomalies, and users can call it from `nixtlar`. This vignette will explain how to do this. It assumes you have already set up your TimeGPT token. If you haven't done this, please read the [Get Started](https://nixtla.github.io/nixtlar/articles/anomaly-detection.html) vignette first. + +## 2. Load data +For this vignette, we'll use the electricity consumption dataset that is included in `nixtlar`, which contains the hourly prices of five different electricity markets. ```{r} df <- nixtlar::electricity head(df) ``` +## 3. Detect anomalies +To detect anomalies, use `nixtlar::timegpt_anomaly_detection`. The key parameters of this method are: + +- **df**: The dataframe or tsibble with the time series data. It should include at least a column with the datestamps and a column with the observations. Default names for these columns are `ds` and `y`. If different, please specify their names. +- **id_col**: If the data contains multiple ids, as in this case, please specify the column that contains them. If working with a single series, leave it as it is by default (NULL). + ```{r} -timegpt_anomalies <- timegpt_anomaly_detection(df, id_col = "unique_id") +timegpt_anomalies <- nixtlar::timegpt_anomaly_detection(df, id_col = "unique_id") head(timegpt_anomalies) ``` -## 2. Plot TimeGPT forecast -`nixtlar` includes a function to plot the historical data and any output from `timegpt_forecast`, `timegpt_historic`, `timegpt_anomaly_detection` and `timegpt_cross_validation`. If you have long series, you can use `max_insample_length` to only plot the last N historical values (the forecast will always be plotted in full). +The `anomaly_detection` method from TimeGPT evaluates each observation and uses a prediction interval to determine if it is an anomaly or not. By default, `nixtlar::timegpt_anomaly_detection` uses a 99% prediction interval. Observations that fall outside this interval will be considered anomalies and will have a value of 1 in the `anomaly` column (zero otherwise). To change the prediction interval, for example to 95%, use the argument `level=c(95)`. Keep in mind that multiple levels are not allowed, so when given several values, `nixtlar::timegpt_anomaly_detection` will use the maximum. + +## 4. Plot anomalies +`nixtlar` includes a function to plot the historical data and any output from `nixtlar::timegpt_forecast`, `nixtlar::timegpt_historic`, `nixtlar::timegpt_anomaly_detection` and `nixtlar::timegpt_cross_validation`. If you have long series, you can use `max_insample_length` to only plot the last N historical values (the forecast will always be plotted in full). + +When using `nixtlar::timegpt_plot` with the output of `nixtlar::timegpt_anomaly_detection`, set `plot_anomalies=TRUE` to plot the anomalies. ```{r} -timegpt_plot(df, timegpt_anomalies, id_col = "unique_id", plot_anomalies = TRUE) +nixtlar::timegpt_plot(df, timegpt_anomalies, id_col = "unique_id", plot_anomalies = TRUE) ``` ```{r, include=FALSE} diff --git a/vignettes/cross-validation.Rmd b/vignettes/cross-validation.Rmd index e3e964b..9a1e0e4 100644 --- a/vignettes/cross-validation.Rmd +++ b/vignettes/cross-validation.Rmd @@ -1,5 +1,5 @@ --- -title: "Cross Validation" +title: "Cross-Validation" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Cross Validation} @@ -26,21 +26,37 @@ knitr::opts_chunk$set( library(nixtlar) ``` -## 1. Cross Validation -text +## 1. Time series cross-validation +Cross-validation is a method for evaluating the performance of a forecasting model. Given a time series, it is carried out by defining a sliding window across the historical data and then predicting the period following it. The accuracy of the model is computed by averaging the accuracy across all the cross-validation windows. This method results in a better estimation of the model’s predictive abilities, since it considers multiple periods instead of just one, while respecting the sequential nature of the data. + +TimeGPT has a method for performing time series cross-validation, and users can call it from `nixtlar`. This vignette will explain how to do this. It assumes you have already set up your TimeGPT token. If you haven't done this, please read the [Get Started](https://nixtla.github.io/nixtlar/articles/anomaly-detection.html) vignette first. + +## 2. Load data +For this vignette, we'll use the electricity consumption dataset that is included in `nixtlar`, which contains the hourly prices of five different electricity markets. ```{r} df <- nixtlar::electricity head(df) ``` +## 3. Perform time series cross-validation +To perform time series cross-validation using TimeGPT, use `nixtlar::timegpt_cross_validation`. The key parameters of this method are: + +- **df**: The dataframe or tsibble with the time series data. It should include at least a column with the datestamps and a column with the observations. Default names for these columns are `ds` and `y`. If different, please specify their names. +- **h**: The forecast horizon. +- **id_col**: If the data contains multiple ids, as in this case, please specify the column that contains them. If working with a single series, leave it as it is by default (NULL). +- **n_windows**: The number of windows to evaluate. Default value is 1. +- **step_size**: The gap between each cross-validation window. Default value is NULL. + ```{r} timegpt_cv <- timegpt_cross_validation(df, h = 8, id_col = "unique_id", n_windows = 5) head(timegpt_cv) ``` -## 2. Plot TimeGPT forecast -`nixtlar` includes a function to plot the historical data and any output from `timegpt_forecast`, `timegpt_historic`, `timegpt_anomaly_detection` and `timegpt_cross_validation`. If you have long series, you can use `max_insample_length` to only plot the last N historical values (the forecast will always be plotted in full). +## 4. Plot cross-validation results +`nixtlar` includes a function to plot the historical data and any output from `nixtlar::timegpt_forecast`, `nixtlar::timegpt_historic`, `nixtlar::timegpt_anomaly_detection` and `nixtlar::timegpt_cross_validation`. If you have long series, you can use `max_insample_length` to only plot the last N historical values (the forecast will always be plotted in full). + +When using `nixtlar::timegpt_plot` with the output of `nixtlar::timegpt_cross_validation`, each cross-validation window is visually represented with vertical dashed lines. For any given pair of these lines, the data before the first line forms the training set. This set is then used to forecast the data between the two lines. ```{r} timegpt_plot(df, timegpt_cv, id_col = "unique_id", max_insample_length = 200) diff --git a/vignettes/historical-forecast.Rmd b/vignettes/historical-forecast.Rmd index eef764f..fb0a8ce 100644 --- a/vignettes/historical-forecast.Rmd +++ b/vignettes/historical-forecast.Rmd @@ -27,18 +27,38 @@ library(nixtlar) ``` ## 1. TimeGPT Historical Forecast +When generating a forecast, sometimes you might be interested in forecasting the historical observations. These predictions, known as **fitted values**, can help you better understand and evaluate a model's performance over time. + +TimeGPT has a method for generating fitted values, and users can call it from `nixtlar`. This vignette will explain how to do this. It assumes you have already set up your TimeGPT token. If you haven't done this, please read the [Get Started](https://nixtla.github.io/nixtlar/articles/anomaly-detection.html) vignette first. + +## 2. Load data +For this vignette, we'll use the electricity consumption dataset that is included in `nixtlar`, which contains the hourly prices of five different electricity markets. ```{r} df <- nixtlar::electricity head(df) ``` +## 3. Forecast historical data +To generate a forecast for the historical data, use `nixtlar::timegpt_historic`. The key parameters of this method are: + +- **df**: The dataframe or tsibble with the time series data. It should include at least a column with the datestamps and a column with the observations. Default names for these columns are `ds` and `y`. If different, please specify their names. +- **id_col**: If the data contains multiple ids, as in this case, please specify the column that contains them. If working with a single series, leave it as it is by default (NULL). +- **level**: The prediction intervals for the forecast. Defaults are 80 and 95%. + ```{r} timegpt_fitted_values <- timegpt_historic(df, id_col = "unique_id", level = c(80,95)) head(timegpt_fitted_values) ``` -## 2. Plot TimeGPT forecast +Notice that there are no fitted values for some of the initial observations. This is because TimeGPT requires a minimum number of values to generate reliable forecasts. + +All the fitted values are generated using a rolling window, meaning that the fitted value for observation $T$ was generated using the first $T-1$ observations. + +### 3.1 Fitted values from `nixtlar::timegpt_forecast` +`nixtlar::timegpt_historic` is the dedicated function that calls TimeGPT's method for generating fitted values. However, you can also use `nixtlar::timegpt_forecast` with `add_history=TRUE`. This will generate both a forecast for the historical data and for the next $h$ future observations. + +## 4. Plot historical forecast `nixtlar` includes a function to plot the historical data and any output from `timegpt_forecast`, `timegpt_historic`, `timegpt_anomaly_detection` and `timegpt_cross_validation`. If you have long series, you can use `max_insample_length` to only plot the last N historical values (the forecast will always be plotted in full). ```{r}