messenger_logo
Liên hệ qua Messenger
SciEco

Dự báo chuỗi thời gian lồng nhau với spark: xu hướng các quỹ etf blockchain

I
IEFPA
Ngày viết: 06/05/2026

Thị trường tiền mã hóa vừa chứng kiến một cột mốc lịch sử khi giá Bitcoin chạm ngưỡng 125.664 đô la vào ngày 5 tháng 10. Sự bùng nổ này được thúc đẩy bởi dòng vốn ròng kỷ lục trị giá 3,24 tỷ đô la đổ vào các quỹ ETF Bitcoin giao ngay cùng nhu cầu ngày càng tăng từ công chúng. Trong bối cảnh đó, việc phân tích và dự báo xu hướng của các quỹ hoán đổi danh mục liên quan đến công nghệ blockchain trở nên quan trọng hơn bao giờ hết đối với các nhà đầu tư. Bài viết này sẽ hướng dẫn cách thực hiện dự báo lồng nhau cho hai quỹ ETF blockchain tiêu biểu bằng cách tận dụng sức mạnh tính toán song song của backend Spark.

Thiết lập môi trường và thu thập dữ liệu

Để bắt đầu, chúng ta cần thiết lập kết nối với Spark và chuẩn bị các thư viện cần thiết trong hệ sinh thái tidymodels và modeltime. Việc sử dụng Spark giúp tăng tốc quá trình huấn luyện mô hình khi xử lý nhiều chuỗi thời gian cùng lúc. Hai quỹ được lựa chọn để phân tích bao gồm Invesco CoinShares Global Blockchain và iShares Blockchain and Tech.

1library(modeltime)
2library(timetk)
3library(tidymodels)
4library(dplyr)
5library(tidyquant)
6library(sparklyr)
7sc <- spark_connect(master = "local")
8parallel_start(sc, .method = "spark")
9df_bchn <- 
10  tq_get("BCHN.L") %>% 
11  select(date, 'Invesco CoinShares Global Blockchain' = close) 
12df_iblc <- 
13  tq_get("IBLC") %>% 
14  select(date, 'iShares Blockchain and Tech' = close) 
15df_survey <- 
16  df_bchn %>% 
17  left_join(df_iblc) %>% 
18  pivot_longer(-date,
19               names_to = "id",
20               values_to = "value") %>% 
21  filter(date >= last(date) - months(6)) %>% 
22  drop_na()

Cấu trúc dữ liệu lồng nhau

Một trong những thách thức khi làm việc với dự báo lồng nhau là việc xử lý các giá trị khuyết thiếu. Trong phân tích này, các đặc trưng về độ trễ và làm mượt không được đưa vào công thức xử lý vì chúng có thể tạo ra các giá trị rỗng gây lỗi cho cấu trúc dữ liệu lồng nhau. Chúng ta sẽ tiến hành mở rộng chuỗi thời gian thêm 15 ngày cho mục đích dự báo tương lai.

1nested_data_tbl <- 
2  df_survey %>%
3  dplyr::select(id, 
4                date = date, 
5                value = value) %>%
6  extend_timeseries(
7    .id_var        = id,
8    .date_var      = date,
9    .length_future = 15
10  ) %>%
11  nest_timeseries(
12    .id_var        = id,
13    .length_future = 15
14  ) %>%
15  split_nested_timeseries(
16    .length_test = 15
17  )

Xây dựng và huấn luyện mô hình

Chúng ta sẽ sử dụng hai thuật toán phổ biến là XGBoost và Prophet để so sánh hiệu suất. Mỗi mô hình sẽ được đóng gói trong một quy trình làm việc riêng biệt với các bước tiền xử lý dữ liệu tương ứng như tạo đặc trưng từ ngày tháng, xử lý biến giả và xử lý đa cộng tuyến.

Triển khai XGBoost và Prophet

Mô hình XGBoost tập trung vào việc học từ các đặc trưng trích xuất từ chữ ký thời gian, trong khi Prophet tối ưu hóa việc xử lý các yếu tố mùa vụ theo tuần và theo ngày.

1rec_xgb <- 
2  recipe(value ~ ., extract_nested_train_split(nested_data_tbl)) %>%
3  step_timeseries_signature(date) %>%
4  step_rm(date) %>%
5  step_dummy(all_nominal_predictors(), one_hot = TRUE) %>% 
6  step_zv(all_predictors()) %>%
7  step_impute_linear(all_numeric_predictors())
8wflw_xgb <- 
9  workflow() %>%
10  add_model(boost_tree("regression") %>% 
11            set_engine("xgboost")) %>%
12  add_recipe(rec_xgb)
13rec_prophet <- 
14  recipe(value ~ date, extract_nested_train_split(nested_data_tbl)) %>% 
15  step_date(date, features = c("dow", "month", "year", "doy")) %>% 
16  step_dummy(all_nominal_predictors(), one_hot = TRUE) %>% 
17  step_zv(all_predictors()) %>%
18  step_impute_linear(all_numeric_predictors())
19wflw_prophet <- 
20  workflow() %>%
21  add_model(
22    prophet_reg("regression") %>% 
23      set_engine("prophet",
24                 seasonality_yearly = FALSE,
25                 seasonality_weekly = TRUE,
26                 seasonality_daily = TRUE)) %>%
27  add_recipe(rec_prophet)

Kết quả dự báo và đánh giá

Sau khi huấn luyện, chúng ta tiến hành chọn lọc mô hình tốt nhất dựa trên sai số phần trăm tuyệt đối trung bình. Việc tính toán song song thông qua Spark giúp quá trình khớp mô hình diễn ra nhanh chóng ngay cả khi số lượng chuỗi thời gian tăng lên.

1nested_modeltime_tbl <- 
2  nested_data_tbl %>%
3  modeltime_nested_fit(
4    wflw_xgb,
5    wflw_prophet,
6    control = control_nested_fit(allow_par = TRUE, verbose = TRUE)
7  )
8best_nested_modeltime_tbl <- 
9  nested_modeltime_tbl %>%
10  modeltime_nested_select_best(
11    metric                = "mape", 
12    minimize              = TRUE, 
13    filter_test_forecasts = TRUE
14  )
15best_nested_modeltime_tbl %>%
16  extract_nested_test_forecast() %>%
17  group_by(id) %>%
18  plot_modeltime_forecast(
19    .facet_ncol  = 1,
20    .interactive = FALSE,
21    .line_size = 1
22  )

Kết quả từ biểu đồ cho thấy khả năng bám sát xu hướng thực tế của các mô hình, giúp nhà đầu tư có cái nhìn định lượng về biến động ngắn hạn của các quỹ ETF blockchain trong giai đoạn thị trường hưng phấn.

✨ Tận dụng backend Spark trong dự báo chuỗi thời gian lồng nhau không chỉ giúp tối ưu hóa hiệu suất tính toán mà còn cho phép mở rộng quy mô phân tích hàng nghìn mã cổ phiếu cùng lúc với độ chính xác cao.

Hãy thử thay đổi tham số trong mô hình Prophet hoặc bổ sung thêm các quỹ ETF công nghệ khác vào bộ dữ liệu để kiểm tra xem liệu độ chính xác của dự báo có thay đổi đáng kể hay không?


Bài viết khác
Stata cung cấp một phương thức đơn giản và tinh tế để thực hiện các mô hình hồi quy Bayes bằng cách thêm tiền tố bayes vào trước các lệnh ước lượng. Với hơn 45 lệnh được hỗ trợ, người dùng có thể linh hoạt lựa chọn giữa các phân phối tiền nghiệm mặc định hoặc tự thiết lập theo nhu cầu nghiên cứu. Trong bài viết này, chúng ta sẽ tìm hiểu cách áp dụng hồi quy logistic Bayes và khám phá sức mạnh của phân phối tiền nghiệm Cauchy đối với các hệ số hồi quy. Một thách thức phổ biến khi làm việc với Bayes là việc lựa chọn phân phối tiền nghiệm. Cách tiếp cận thận trọng thường dùng các tiền nghiệm yếu hoặc không có thông tin để đảm bảo tính khách quan dựa trên dữ liệu. Tuy nhiên, các tiền nghiệm không có thông tin đôi khi không đủ để giải quyết những vấn đề như hiện tượng phân tách hoàn hảo trong hồi quy logistic. Ngược lại, nếu không có kiến thức chuyên gia sâu sắc, việc chọn tiền nghiệm có thông tin cũng không hề dễ dàng. Dựa trên khuyến nghị của Gelman và các cộng sự, việc sử dụng phân phối tiền nghiệm Cauchy thông tin yếu là một giải pháp cân bằng hiệu quả. Chuẩn bị dữ liệu và chuẩn hóa Chúng ta sử dụng bộ dữ liệu Iris nổi tiếng để phân loại hoa. Biến phụ thuộc virg phân biệt loài Iris virginica với các loài khác. Các biến độc lập bao gồm chiều dài và chiều rộng của đài hoa và cánh hoa. Theo khuyến nghị của các nhà nghiên cứu, các biến độc lập nên được chuẩn hóa để có trung bình bằng 0 và độ lệch chuẩn bằng 0.5 trước khi áp dụng phân phối tiền nghiệm Cauchy.
Trong bài viết này, bạn sẽ tìm hiểu kiểm định t là gì và cách thực hiện phương pháp này trong ngôn ngữ lập trình r. Đầu tiên, chúng ta sẽ làm quen với một hàm đơn giản giúp thực hiện kiểm định chỉ với một dòng mã nguồn. Sau đó, chúng ta sẽ cùng khám phá bản chất của kiểm định thông qua việc xây dựng từng bước với dữ liệu thực tế về hành khách tàu Titanic. Kiểm định t là gì Kiểm định t là một quy trình thống kê được sử dụng để kiểm tra xem sự khác biệt giữa hai nhóm có ý nghĩa hay chỉ là do ngẫu nhiên. Trong bài viết này, chúng ta sẽ xem xét dữ liệu từ các hành khách trên tàu Titanic, chia họ thành hai nhóm nam và nữ. Giả sử chúng ta muốn kiểm tra giả thuyết rằng nam giới và nữ giới có độ tuổi trung bình như nhau. Nếu dữ liệu cho thấy phụ nữ trẻ hơn nam giới trung bình 2 tuổi, chúng ta cần đặt câu hỏi: liệu đây là một sự khác biệt thực sự hay chỉ là sự trùng hợp ngẫu nhiên? Kiểm định t sẽ giúp chúng ta trả lời câu hỏi đó. Tại sao kiểm định t lại quan trọng
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội