0. Chuẩn bị

setwd("/Users/thuphan/Desktop/dataR")
library(rio)
dulieu <-import("BTC-USD.csv")
dulieu1 <-ts(dulieu$Close, start=c(2015,01,01), frequency=365)
head(dulieu)
##         Date    Open    High     Low   Close Adj Close   Volume
## 1 2015-01-01 320.435 320.435 314.003 314.249   314.249  8036550
## 2 2015-01-02 314.079 315.839 313.565 315.032   315.032  7860650
## 3 2015-01-03 314.846 315.150 281.082 281.082   281.082 33054400
## 4 2015-01-04 281.146 287.230 257.612 264.195   264.195 55629100
## 5 2015-01-05 265.084 278.341 265.084 274.474   274.474 43962800
## 6 2015-01-06 274.611 287.553 272.696 286.189   286.189 23245700

1. Dự báo arima

library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
vidu1 <- auto.arima(dulieu1, seasonal=T)
#summary(vidu1)
dubao1 <-forecast(vidu1, h=365)
#summary(dubao1)
plot(dubao1)

2. Dự báoHolt - winter

vidu2 <- HoltWinters(dulieu1, seasonal = c("additive"))
#summary(vidu2)
dubao2 <-forecast(vidu2, h=365)
#summary(dubao2)
plot(dubao2)

Dự báo time serial qua machine learning

library(timetk)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(lubridate) # lấy hàm ymd()
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(recipes)   # lấy hàm recipe()
## 
## Attaching package: 'recipes'
## The following object is masked from 'package:stats':
## 
##     step
library(parsnip)   # lấy hàm set_engine()
library(workflows)
library(yardstick) # lấy hàm metrics()
## For binary classification, the first factor level is assumed to be the event.
## Use the argument `event_level = "second"` to alter this as needed.
## 
## Attaching package: 'yardstick'
## The following object is masked from 'package:forecast':
## 
##     accuracy
dulieu %>% select(Date, Close) %>% rename(Ngay = Date, GiaBCT = Close) ->dlBCT
#dlBCT <-ts(dlBCT, start=c(2015,01,01), frequency=365)
#dlBCT <-tibble(dlBCT)
head(dlBCT)
##         Ngay  GiaBCT
## 1 2015-01-01 314.249
## 2 2015-01-02 315.032
## 3 2015-01-03 281.082
## 4 2015-01-04 264.195
## 5 2015-01-05 274.474
## 6 2015-01-06 286.189
#dlBCT %>% plot_time_series(Ngay, GiaBCT, .interactive = interactive)

dltrain <-dlBCT %>% filter(Ngay <= ymd("2021-12-31"))
dltest <-dlBCT %>% filter(Ngay > ymd("2021-12-31"))
dim(dltrain)
## [1] 2557    2
head(dltrain)
##         Ngay  GiaBCT
## 1 2015-01-01 314.249
## 2 2015-01-02 315.032
## 3 2015-01-03 281.082
## 4 2015-01-04 264.195
## 5 2015-01-05 274.474
## 6 2015-01-06 286.189
dim(dltest)
## [1] 212   2
head(dltest)
##         Ngay   GiaBCT
## 1 2022-01-01 47686.81
## 2 2022-01-02 47345.22
## 3 2022-01-03 46458.12
## 4 2022-01-04 45897.57
## 5 2022-01-05 43569.00
## 6 2022-01-06 43160.93
# Đăng ký thời gian : Add time series signature
recipe_spec_timeseries <- recipe(GiaBCT ~ Ngay, data = dltrain) %>% step_timeseries_signature(Ngay) 
#bake(prep(recipe_spec_timeseries), new_data = dltrain)

# Giải mã  đăng ký
recipe_spec_final <- recipe_spec_timeseries %>%
    step_rm(Ngay) %>%
    step_rm(contains("iso"), 
            contains("second"), contains("minute"), contains("hour"),
            contains("am.pm"), contains("xts")) %>%
    step_normalize(contains("index.num"), Ngay_year) %>%
    step_interact(~ Ngay_month.lbl * Ngay_day) %>%
    step_interact(~ Ngay_month.lbl * Ngay_mweek) %>%
    step_interact(~ Ngay_month.lbl * Ngay_wday.lbl * Ngay_yday) %>%
    step_dummy(contains("lbl"), one_hot = TRUE) 

#bake(prep(recipe_spec_final), new_data = dltrain)

# Tạo mô hình hồi quy
model_spec_glmnet <- linear_reg(mode = "regression", penalty = 10, mixture = 0.7) %>% set_engine("glmnet")

# Tạo quy trình làm việc
workflow_glmnet <- workflow() %>%
    add_recipe(recipe_spec_final) %>%
    add_model(model_spec_glmnet)

workflow_glmnet
## ══ Workflow ════════════════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: linear_reg()
## 
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 8 Recipe Steps
## 
## • step_timeseries_signature()
## • step_rm()
## • step_rm()
## • step_normalize()
## • step_interact()
## • step_interact()
## • step_interact()
## • step_dummy()
## 
## ── Model ───────────────────────────────────────────────────────────────────────
## Linear Regression Model Specification (regression)
## 
## Main Arguments:
##   penalty = 10
##   mixture = 0.7
## 
## Computational engine: glmnet
# Chạy training
workflow_trained <- workflow_glmnet %>% fit(data = dltrain)
## Warning: `terms_select()` was deprecated in recipes 0.1.17.
## Please use `recipes_eval_select()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## Warning: Categorical variables used in `step_interact` should probably be avoided;  This can lead to differences in dummy variable values that are produced by `step_dummy`. Please convert all involved variables to dummy variables first.
## Categorical variables used in `step_interact` should probably be avoided;  This can lead to differences in dummy variable values that are produced by `step_dummy`. Please convert all involved variables to dummy variables first.
## Categorical variables used in `step_interact` should probably be avoided;  This can lead to differences in dummy variable values that are produced by `step_dummy`. Please convert all involved variables to dummy variables first.
## Warning: The following variables are not factor vectors
## and will be ignored: `Ngay_month.lbl.L_x_Ngay_day`,
## `Ngay_month.lbl.Q_x_Ngay_day`, `Ngay_month.lbl.C_x_Ngay_day`,
## `Ngay_month.lbl^4_x_Ngay_day`, `Ngay_month.lbl^5_x_Ngay_day`,
## `Ngay_month.lbl^6_x_Ngay_day`, `Ngay_month.lbl^7_x_Ngay_day`,
## `Ngay_month.lbl^8_x_Ngay_day`, `Ngay_month.lbl^9_x_Ngay_day`,
## `Ngay_month.lbl^10_x_Ngay_day`, `Ngay_month.lbl^11_x_Ngay_day`,
## `Ngay_month.lbl.L_x_Ngay_mweek`, `Ngay_month.lbl.Q_x_Ngay_mweek`,
## `Ngay_month.lbl.C_x_Ngay_mweek`, `Ngay_month.lbl^4_x_Ngay_mweek`,
## `Ngay_month.lbl^5_x_Ngay_mweek`, `Ngay_month.lbl^6_x_Ngay_mweek`,
## `Ngay_month.lbl^7_x_Ngay_mweek`, `Ngay_month.lbl^8_x_Ngay_mweek`,
## `Ngay_month.lbl^9_x_Ngay_mweek`, `Ngay_month.lbl^10_x_Ngay_mweek`,
## `Ngay_month.lbl^11_x_Ngay_mweek`, `Ngay_month.lbl.L_x_Ngay_wday.lbl.L`,
## `Ngay_month.lbl.Q_x_Ngay_wday.lbl.L`, `Ngay_month.lbl.C_x_Ngay_wday.lbl.L`,
## `Ngay_month.lbl^4_x_Ngay_wday.lbl.L`, `Ngay_month.lbl^5_x_Ngay_wday.lbl.L`,
## `Ngay_month.lbl^6_x_Ngay_wday.lbl.L`, `Ngay_month.lbl^7_x_Ngay_wday.lbl.L`,
## `Ngay_month.lbl^8_x_Ngay_wday.lbl.L`, `Ngay_month.lbl^9_x_Ngay_wday.lbl.L`,
## `Ngay_month.lbl^10_x_Ngay_wday.lbl.L`, `Ngay_month.lbl^11_x_Ngay_wday.lbl.L`,
## `Ngay_month.lbl.L_x_Ngay_wday.lbl.Q`, `Ngay_month.lbl.Q_x_Ngay_wday.lbl.Q`,
## `Ngay_month.lbl.C_x_Ngay_wday.lbl.Q`, `Ngay_month.lbl^4_x_Ngay_wday.lbl.Q`,
## `Ngay_month.lbl^5_x_Ngay_wday.lbl.Q`, `Ngay_month.lbl^6_x_Ngay_wday.lbl.Q`,
## `Ngay_month.lbl^7_x_Ngay_wday.lbl.Q`, `Ngay_month.lbl^8_x_Ngay_wday.lbl.Q`,
## `Ngay_month.lbl^9_x_Ngay_wday.lbl.Q`, `Ngay_month.lbl^10_x_Ngay_wday.lbl.Q`,
## `Ngay_month.lbl^11_x_Ngay_wday.lbl.Q`, `Ngay_month.lbl.L_x_Ngay_wday.lbl.C`,
## `Ngay_month.lbl.Q_x_Ngay_wday.lbl.C`, `Ngay_month.lbl.C_x_Ngay_wday.lbl.C`,
## `Ngay_month.lbl^4_x_Ngay_wday.lbl.C`, `Ngay_month.lbl^5_x_Ngay_wday.lbl.C`,
## `Ngay_month.lbl^6_x_Ngay_wday.lbl.C`, `Ngay_month.lbl^7_x_Ngay_wday.lbl.C`,
## `Ngay_month.lbl^8_x_Ngay_wday.lbl.C`, `Ngay_month.lbl^9_x_Ngay_wday.lbl.C`,
## `Ngay_month.lbl^10_x_Ngay_wday.lbl.C`, `Ngay_month.lbl^11_x_Ngay_wday.lbl.C`,
## `Ngay_month.lbl.L_x_Ngay_wday.lbl^4`, `Ngay_month.lbl.Q_x_Ngay_wday.lbl^4`,
## `Ngay_month.lbl.C_x_Ngay_wday.lbl^4`, `Ngay_month.lbl^4_x_Ngay_wday.lbl^4`,
## `Ngay_month.lbl^5_x_Ngay_wday.lbl^4`, `Ngay_month.lbl^6_x_Ngay_wday.lbl^4`,
## `Ngay_month.lbl^7_x_Ngay_wday.lbl^4`, `Ngay_month.lbl^8_x_Ngay_wday.lbl^4`,
## `Ngay_month.lbl^9_x_Ngay_wday.lbl^4`, `Ngay_month.lbl^10_x_Ngay_wday.lbl^4`,
## `Ngay_month.lbl^11_x_Ngay_wday.lbl^4`, `Ngay_month.lbl.L_x_Ngay_wday.lbl^5`,
## `Ngay_month.lbl.Q_x_Ngay_wday.lbl^5`, `Ngay_month.lbl.C_x_Ngay_wday.lbl^5`,
## `Ngay_month.lbl^4_x_Ngay_wday.lbl^5`, `Ngay_month.lbl^5_x_Ngay_wday.lbl^5`,
## `Ngay_month.lbl^6_x_Ngay_wday.lbl^5`, `Ngay_month.lbl^7_x_Ngay_wday.lbl^5`,
## `Ngay_month.lbl^8_x_Ngay_wday.lbl^5`, `Ngay_month.lbl^9_x_Ngay_wday.lbl^5`,
## `Ngay_month.lbl^10_x_Ngay_wday.lbl^5`, `Ngay_month.lbl^11_x_Ngay_wday.lbl^5`,
## `Ngay_month.lbl.L_x_Ngay_wday.lbl^6`, `Ngay_month.lbl.Q_x_Ngay_wday.lbl^6`,
## `Ngay_month.lbl.C_x_Ngay_wday.lbl^6`, `Ngay_month.lbl^4_x_Ngay_wday.lbl^6`,
## `Ngay_month.lbl^5_x_Ngay_wday.lbl^6`, `Ngay_month.lbl^6_x_Ngay_wday.lbl^6`,
## `Ngay_month.lbl^7_x_Ngay_wday.lbl^6`, `Ngay_month.lbl^8_x_Ngay_wday.lbl^6`,
## `Ngay_month.lbl^9_x_Ngay_wday.lbl^6`, `Ngay_month.lbl^10_x_Ngay_wday.lbl^6`,
## `Ngay_month.lbl^11_x_Ngay_wday.lbl^6`, `Ngay_month.lbl.L_x_Ngay_yday`,
## `Ngay_month.lbl.Q_x_Ngay_yday`, `Ngay_month.lbl.C_x_Ngay_yday`,
## `Ngay_month.lbl^4_x_Ngay_yday`, `Ngay_month.lbl^5_x_Ngay_yday`,
## `Ngay_month.lbl^6_x_Ngay_yday`, `Ngay_month.lbl^7_x_Ngay_yday`,
## `Ngay_month.lbl^8_x_Ngay_yday`, `Ngay_month.lbl^9_x_Ngay_yday`,
## `Ngay_month.lbl^10_x_Ngay_yday`, `Ngay_month.lbl^11_x_Ngay_yday`,
## `Ngay_wday.lbl.L_x_Ngay_yday`, `Ngay_wday.lbl.Q_x_Ngay_yday`,
## `Ngay_wday.lbl.C_x_Ngay_yday`, `Ngay_wday.lbl^4_x_Ngay_yday`,
## `Ngay_wday.lbl^5_x_Ngay_yday`, `Ngay_wday.lbl^6_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblSunday_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblMonday_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblTuesday_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblWednesday_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblThursday_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblFriday_x_Ngay_yday`,
## `Ngay_month.lblJanuary_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblFebruary_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblMarch_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblApril_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblMay_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblJune_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblJuly_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblAugust_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblSeptember_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblOctober_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblNovember_x_Ngay_wday.lblSaturday_x_Ngay_yday`,
## `Ngay_month.lblDecember_x_Ngay_wday.lblSaturday_x_Ngay_yday`
workflow_trained
## ══ Workflow [trained] ══════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: linear_reg()
## 
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 8 Recipe Steps
## 
## • step_timeseries_signature()
## • step_rm()
## • step_rm()
## • step_normalize()
## • step_interact()
## • step_interact()
## • step_interact()
## • step_dummy()
## 
## ── Model ───────────────────────────────────────────────────────────────────────
## 
## Call:  glmnet::glmnet(x = maybe_matrix(x), y = y, family = "gaussian",      alpha = ~0.7) 
## 
##     Df  %Dev  Lambda
## 1    0  0.00 17030.0
## 2    2  8.14 15520.0
## 3    2 15.38 14140.0
## 4    2 21.60 12880.0
## 5    2 26.92 11740.0
## 6    2 31.46 10700.0
## 7    2 35.33  9746.0
## 8    2 38.63  8880.0
## 9    2 41.42  8092.0
## 10   2 43.78  7373.0
## 11   2 45.78  6718.0
## 12   2 47.47  6121.0
## 13   2 48.89  5577.0
## 14   2 50.09  5082.0
## 15   2 51.10  4630.0
## 16   2 51.95  4219.0
## 17   2 52.66  3844.0
## 18   2 53.26  3503.0
## 19   2 53.76  3191.0
## 20   2 54.18  2908.0
## 21   2 54.53  2650.0
## 22   2 54.82  2414.0
## 23   2 55.07  2200.0
## 24   2 55.27  2004.0
## 25   2 55.45  1826.0
## 26   2 55.59  1664.0
## 27   2 55.71  1516.0
## 28   2 55.81  1382.0
## 29   2 55.89  1259.0
## 30   3 55.98  1147.0
## 31   3 56.08  1045.0
## 32   3 56.16   952.2
## 33   4 56.23   867.6
## 34   4 56.31   790.5
## 35   4 56.38   720.3
## 36   5 56.43   656.3
## 37   5 56.48   598.0
## 38   5 56.52   544.9
## 39   7 56.56   496.5
## 40   7 56.60   452.4
## 41   8 56.64   412.2
## 42   9 56.68   375.6
## 43   9 56.71   342.2
## 44   9 56.74   311.8
## 45   9 56.76   284.1
## 46  11 56.78   258.9
## 
## ...
## and 40 more lines.
# Chạy testing
dlkiemtra <- workflow_trained %>% 
    predict(dltest) %>%
    bind_cols(dltest) 

dlkiemtra
## # A tibble: 212 × 3
##     .pred Ngay       GiaBCT
##     <dbl> <date>      <dbl>
##  1 38135. 2022-01-01 47687.
##  2 38555. 2022-01-02 47345.
##  3 38886. 2022-01-03 46458.
##  4 38273. 2022-01-04 45898.
##  5 37761. 2022-01-05 43569.
##  6 38119. 2022-01-06 43161.
##  7 38198. 2022-01-07 41558.
##  8 38392. 2022-01-08 41734.
##  9 38471. 2022-01-09 41912.
## 10 38544. 2022-01-10 41821.
## # … with 202 more rows
# Calculating forecast error
dlkiemtra %>% metrics(GiaBCT, .pred)
## # A tibble: 3 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 rmse    standard    7467.   
## 2 rsq     standard       0.365
## 3 mae     standard    5878.

Dự báo tương lai

# Extract dulieu index
#idx <- dlBCT %>% tk_index()

# Get time series summary from index
#dlBCTts <- idx %>% tk_get_timeseries_signature()
#dlBCTts <- idx %>% tk_get_timeseries_summary()

## Tạo dữ liệu tương lai
#idx_future <- idx %>% tk_make_future_timeseries(n_future = 180)
#future_tbl <- tibble(date = idx_future) 
#future_tbl