{ "cells": [ { "cell_type": "markdown", "id": "8bf34aae", "metadata": {}, "source": [ "# Multivariate TimeSeries Forecasting with **Vector Auto Regression**\n", "## Objective \n", "#### Forecasting Stock Prices of Ethereum with VAR. \n", "---\n", "\n", "\n", "The **Vector Autoregression (VAR)** model is a powerful and flexible tool for analyzing multivariate time series. It generalizes the univariate autoregressive model by allowing multiple interrelated time series to influence each other dynamically. VAR models are especially effective for economic and financial data, often outperforming univariate and structural models in forecasting.\n", "\n", "#### VAR(p) Equation:\n", "\n", "$$\n", "\\mathbf{y}_t = c + A_1 \\mathbf{y}_{t-1} + A_2 \\mathbf{y}_{t-2} + \\dots + A_p \\mathbf{y}_{t-p} + \\varepsilon_t\n", "$$\n", "\n", "Where:\n", "\n", "- $\\mathbf{y}_t$ is an $n \\times 1$ vector of endogenous variables, \n", "- $c$ is a vector of intercepts, \n", "- $A_i$ are coefficient matrices, \n", "- $\\varepsilon_t$ is a vector of white noise errors.\n", "\n", "#### The model captures **lagged interactions** among all variables, making it suitable for dynamic systems analysis under stationarity assumptions.\n", "---\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "6be711dc", "metadata": {}, "source": [ "\n", "## Approach Breakdown\n", "\n", "
\n",
"1. Data Preparation and Analysis
\n",
"Collect, clean, and explore the multivariate time series data. Identify missing values, visualize trends or seasonality, and perform ACF/PACF analysis. \n",
"
⬇️
\n", "\n", "\n",
"2. Feature Engineering
\n",
"Create additional features from the data to later incorporate in VAR forecasting.\n",
"
⬇️
\n", "\n", "\n",
"3. Stationarity Checks
\n",
"Use Augmented Dickey-Fuller (ADF) or KPSS tests to check for stationarity. Apply differencing or transformations if necessary.\n",
"
⬇️
\n", "\n", "\n",
"4. Granger Causality Test for Variable Selection
\n",
"Identify predictive relationships between variables using Granger causality to refine model inputs.\n",
"
⬇️
\n", "\n", "\n",
"5. Model Order/Lag Selection (AIC/BIC)
\n",
"Choose the optimal lag length based on the lowest AIC/BIC values for better model fit and efficiency.\n",
"
⬇️
\n", "\n", "\n",
"6. Model Training
\n",
"Fit the VAR model using selected variables and optimal lag to capture dynamic interdependencies.\n",
"
⬇️
\n", "\n", "\n",
"7. Forecasting
\n",
"Generate forecasts on the test set using the trained model.\n",
"
⬇️
\n", "\n", "\n",
"8. Evaluation
\n",
"Assess performance using RMSE, MAE, or other relevant metrics and validate forecasts against actual data.\n",
"
\n", " | Open | \n", "High | \n", "Low | \n", "Close | \n", "Adj Close | \n", "Volume | \n", "
---|---|---|---|---|---|---|
Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
2017-11-10 | \n", "320.670990 | \n", "324.717987 | \n", "294.541992 | \n", "299.252991 | \n", "299.252991 | \n", "8.859860e+08 | \n", "
2017-11-11 | \n", "298.585999 | \n", "319.453003 | \n", "298.191986 | \n", "314.681000 | \n", "314.681000 | \n", "8.423010e+08 | \n", "
2017-11-12 | \n", "314.690002 | \n", "319.153015 | \n", "298.513000 | \n", "307.907990 | \n", "307.907990 | \n", "1.613480e+09 | \n", "
2017-11-13 | \n", "307.024994 | \n", "328.415009 | \n", "307.024994 | \n", "316.716003 | \n", "316.716003 | \n", "1.041890e+09 | \n", "
2017-11-14 | \n", "316.763000 | \n", "340.177002 | \n", "316.763000 | \n", "337.631012 | \n", "337.631012 | \n", "1.069680e+09 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
2024-01-17 | \n", "2587.044678 | \n", "2592.737061 | \n", "2508.432861 | \n", "2528.369385 | \n", "2528.369385 | \n", "1.044102e+10 | \n", "
2024-01-18 | \n", "2528.593262 | \n", "2546.263916 | \n", "2426.135498 | \n", "2467.018799 | \n", "2467.018799 | \n", "1.190003e+10 | \n", "
2024-01-19 | \n", "2468.688965 | \n", "2501.305176 | \n", "2414.710938 | \n", "2489.498535 | \n", "2489.498535 | \n", "1.140528e+10 | \n", "
2024-01-20 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
2024-01-21 | \n", "2469.798584 | \n", "2469.798584 | \n", "2464.171875 | \n", "2465.659180 | \n", "2465.659180 | \n", "5.195812e+09 | \n", "
2264 rows × 6 columns
\n", "\n", " | Open | \n", "High | \n", "Low | \n", "Close | \n", "Adj Close | \n", "Volume | \n", "
---|---|---|---|---|---|---|
count | \n", "2263.000000 | \n", "2263.000000 | \n", "2263.000000 | \n", "2263.000000 | \n", "2263.000000 | \n", "2.263000e+03 | \n", "
mean | \n", "1248.213140 | \n", "1283.972388 | \n", "1208.851543 | \n", "1248.811361 | \n", "1248.970441 | \n", "1.205243e+10 | \n", "
std | \n", "1118.835543 | \n", "1150.922648 | \n", "1082.560829 | \n", "1118.664405 | \n", "1118.566081 | \n", "1.012443e+10 | \n", "
min | \n", "84.279694 | \n", "85.342743 | \n", "82.829887 | \n", "84.308296 | \n", "84.308296 | \n", "6.217330e+08 | \n", "
25% | \n", "231.636727 | \n", "236.766563 | \n", "227.149369 | \n", "231.901916 | \n", "231.901916 | \n", "4.845689e+09 | \n", "
50% | \n", "1038.186646 | \n", "1090.229980 | \n", "956.325012 | \n", "1039.099976 | \n", "1039.099976 | \n", "9.401190e+09 | \n", "
75% | \n", "1870.983582 | \n", "1905.373352 | \n", "1844.880860 | \n", "1871.952942 | \n", "1871.952942 | \n", "1.657259e+10 | \n", "
max | \n", "4810.071289 | \n", "4891.704590 | \n", "4718.039063 | \n", "4812.087402 | \n", "4812.087402 | \n", "8.448291e+10 | \n", "
\n", " | Open | \n", "High | \n", "Low | \n", "Close | \n", "Adj Close | \n", "Volume | \n", "
---|---|---|---|---|---|---|
Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
2017-11-10 | \n", "320.670990 | \n", "324.717987 | \n", "294.541992 | \n", "299.252991 | \n", "299.252991 | \n", "8.859860e+08 | \n", "
2017-11-11 | \n", "298.585999 | \n", "319.453003 | \n", "298.191986 | \n", "314.681000 | \n", "314.681000 | \n", "8.423010e+08 | \n", "
2017-11-12 | \n", "314.690002 | \n", "319.153015 | \n", "298.513000 | \n", "307.907990 | \n", "307.907990 | \n", "1.613480e+09 | \n", "
2017-11-13 | \n", "307.024994 | \n", "328.415009 | \n", "307.024994 | \n", "316.716003 | \n", "316.716003 | \n", "1.041890e+09 | \n", "
2017-11-14 | \n", "316.763000 | \n", "340.177002 | \n", "316.763000 | \n", "337.631012 | \n", "337.631012 | \n", "1.069680e+09 | \n", "
2017-11-15 | \n", "337.963989 | \n", "340.911987 | \n", "329.812988 | \n", "333.356995 | \n", "333.356995 | \n", "7.226660e+08 | \n", "
2017-11-16 | \n", "333.442993 | \n", "336.158997 | \n", "323.605988 | \n", "330.924011 | \n", "330.924011 | \n", "7.972540e+08 | \n", "
2017-11-17 | \n", "330.166992 | \n", "334.963989 | \n", "327.523010 | \n", "332.394012 | \n", "332.394012 | \n", "6.217330e+08 | \n", "
2017-11-18 | \n", "331.980011 | \n", "349.615997 | \n", "327.687012 | \n", "347.612000 | \n", "347.612000 | \n", "6.496390e+08 | \n", "
2017-11-19 | \n", "347.401001 | \n", "371.290985 | \n", "344.739990 | \n", "354.385986 | \n", "354.385986 | \n", "1.181530e+09 | \n", "
\n", " | Open | \n", "Close | \n", "High | \n", "Volume | \n", "Overnight_Price_movement | \n", "ATR | \n", "
---|---|---|---|---|---|---|
Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
2018-11-11 | \n", "0.633679 | \n", "0.631758 | \n", "0.558936 | \n", "0.408502 | \n", "0.208957 | \n", "0.176748 | \n", "
2018-11-12 | \n", "0.631354 | \n", "0.631944 | \n", "0.559392 | \n", "0.406173 | \n", "0.222597 | \n", "0.176531 | \n", "
2018-11-13 | \n", "0.631087 | \n", "0.630107 | \n", "0.557752 | \n", "0.408961 | \n", "0.233395 | \n", "0.177133 | \n", "
2018-11-14 | \n", "0.629578 | \n", "0.615082 | \n", "0.556463 | \n", "0.420095 | \n", "0.347398 | \n", "0.197826 | \n", "
2018-11-15 | \n", "0.615491 | \n", "0.632172 | \n", "0.538174 | \n", "0.407415 | \n", "0.333797 | \n", "0.182778 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
2024-01-16 | \n", "0.658112 | \n", "0.685095 | \n", "0.619185 | \n", "0.425178 | \n", "0.176748 | \n", "0.175341 | \n", "
2024-01-17 | \n", "0.683215 | \n", "0.591763 | \n", "0.540033 | \n", "0.398459 | \n", "0.208488 | \n", "0.154422 | \n", "
2024-01-18 | \n", "0.592827 | \n", "0.590367 | \n", "0.515762 | \n", "0.426475 | \n", "0.255207 | \n", "0.181964 | \n", "
2024-01-19 | \n", "0.591854 | \n", "0.648045 | \n", "0.517195 | \n", "0.400176 | \n", "0.227556 | \n", "0.157487 | \n", "
2024-01-21 | \n", "0.632745 | \n", "0.616176 | \n", "0.529927 | \n", "0.323252 | \n", "0.215408 | \n", "0.114744 | \n", "
1897 rows × 6 columns
\n", "AIC | BIC | FPE | HQIC | \n", "|
---|---|---|---|---|
0 | -36.26 | -36.24 | 1.795e-16 | -36.25 | \n", "
1 | -40.91 | -40.76 | 1.717e-18 | -40.85 | \n", "
2 | -41.62 | -41.36 | 8.384e-19 | -41.53 | \n", "
3 | -41.89 | -41.50 | 6.446e-19 | -41.74 | \n", "
4 | -42.11 | -41.60 | 5.175e-19 | -41.92 | \n", "
5 | -42.24 | -41.61* | 4.516e-19 | -42.01 | \n", "
6 | -42.34 | -41.59 | 4.076e-19 | -42.07 | \n", "
7 | -42.38 | -41.51 | 3.925e-19 | -42.06 | \n", "
8 | -42.46 | -41.46 | 3.644e-19 | -42.09 | \n", "
9 | -42.53 | -41.42 | 3.372e-19 | -42.12* | \n", "
10 | -42.57 | -41.33 | 3.257e-19 | -42.11 | \n", "
11 | -42.61 | -41.26 | 3.114e-19 | -42.11 | \n", "
12 | -42.66 | -41.18 | 2.985e-19 | -42.11 | \n", "
13 | -42.66 | -41.06 | 2.966e-19 | -42.07 | \n", "
14 | -42.68 | -40.96 | 2.922e-19 | -42.04 | \n", "
15 | -42.68 | -40.84 | 2.907e-19 | -42.00 | \n", "
16 | -42.71 | -40.74 | 2.842e-19 | -41.98 | \n", "
17 | -42.70 | -40.61 | 2.861e-19 | -41.92 | \n", "
18 | -42.71 | -40.50 | 2.843e-19 | -41.89 | \n", "
19 | -42.73 | -40.40 | 2.775e-19 | -41.87 | \n", "
20 | -42.76* | -40.31 | 2.698e-19* | -41.85 | \n", "
\n", " | Open | \n", "Close | \n", "High | \n", "Volume | \n", "Overnight_Price_movement | \n", "ATR | \n", "
---|---|---|---|---|---|---|
Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
2023-07-15 | \n", "0.587395 | \n", "0.627156 | \n", "0.483853 | \n", "0.322742 | \n", "0.246626 | \n", "0.145502 | \n", "
2023-07-16 | \n", "0.626985 | \n", "0.627222 | \n", "0.555973 | \n", "0.406152 | \n", "0.221116 | \n", "0.152812 | \n", "
2023-07-17 | \n", "0.626672 | \n", "0.624297 | \n", "0.554208 | \n", "0.438452 | \n", "0.223157 | \n", "0.180827 | \n", "
2023-07-18 | \n", "0.623960 | \n", "0.622914 | \n", "0.541093 | \n", "0.395214 | \n", "0.225918 | \n", "0.163811 | \n", "
2023-07-19 | \n", "0.622685 | \n", "0.626667 | \n", "0.562394 | \n", "0.409579 | \n", "0.224457 | \n", "0.163710 | \n", "
2023-07-20 | \n", "0.626155 | \n", "0.633928 | \n", "0.559748 | \n", "0.424985 | \n", "0.217407 | \n", "0.167142 | \n", "
2023-07-21 | \n", "0.633681 | \n", "0.633343 | \n", "0.546612 | \n", "0.370509 | \n", "0.213043 | \n", "0.153894 | \n", "
2023-07-22 | \n", "0.632251 | \n", "0.613886 | \n", "0.551893 | \n", "0.399205 | \n", "0.226378 | \n", "0.171430 | \n", "
2023-07-23 | \n", "0.614669 | \n", "0.649284 | \n", "0.566747 | \n", "0.411941 | \n", "0.215605 | \n", "0.174011 | \n", "
2023-07-24 | \n", "0.647225 | \n", "0.605614 | \n", "0.545814 | \n", "0.431923 | \n", "0.221677 | \n", "0.180072 | \n", "
2023-07-25 | \n", "0.606010 | \n", "0.637904 | \n", "0.538510 | \n", "0.377478 | \n", "0.228412 | \n", "0.157148 | \n", "
2023-07-26 | \n", "0.637140 | \n", "0.642499 | \n", "0.578347 | \n", "0.428617 | \n", "0.204456 | \n", "0.170331 | \n", "
2023-07-27 | \n", "0.641645 | \n", "0.624458 | \n", "0.558439 | \n", "0.386776 | \n", "0.213177 | \n", "0.165640 | \n", "
2023-07-28 | \n", "0.624372 | \n", "0.642478 | \n", "0.555835 | \n", "0.400235 | \n", "0.213187 | \n", "0.162299 | \n", "
2023-07-29 | \n", "0.641288 | \n", "0.636930 | \n", "0.563602 | \n", "0.389287 | \n", "0.205291 | \n", "0.156777 | \n", "
2023-07-30 | \n", "0.636231 | \n", "0.619213 | \n", "0.558437 | \n", "0.427103 | \n", "0.220200 | \n", "0.170726 | \n", "
2023-07-31 | \n", "0.619189 | \n", "0.628807 | \n", "0.551689 | \n", "0.412066 | \n", "0.225549 | \n", "0.164972 | \n", "
2023-08-01 | \n", "0.628271 | \n", "0.643332 | \n", "0.557287 | \n", "0.450492 | \n", "0.209877 | \n", "0.188564 | \n", "
2023-08-02 | \n", "0.643580 | \n", "0.610078 | \n", "0.563989 | \n", "0.390866 | \n", "0.222180 | \n", "0.187855 | \n", "
2023-08-03 | \n", "0.608832 | \n", "0.629858 | \n", "0.539773 | \n", "0.383442 | \n", "0.231907 | \n", "0.169762 | \n", "