12
12
array([10.99999999, 12.00000001])
13
13
"""
14
14
15
-
16
15
import numpy as np
17
16
18
17
19
18
class ARIMAModel :
20
- def __init__ (self , ar_order : int = 1 , diff_order : int = 0 , ma_order : int = 0 ) -> None :
19
+ def __init__ (
20
+ self , ar_order : int = 1 , diff_order : int = 0 , ma_order : int = 0
21
+ ) -> None :
21
22
"""Initialize ARIMA model.
22
23
Args:
23
24
ar_order: Autoregressive order (p)
@@ -51,9 +52,11 @@ def fit(self, time_series: np.ndarray) -> "ARIMAModel":
51
52
y = np .asarray (time_series )
52
53
y_diff = self .difference (y , self .diff_order )
53
54
# Build lagged feature matrix
54
- feature_matrix = np .column_stack ([np .roll (y_diff , i ) for i in range (1 , self .ar_order + 1 )])
55
- feature_matrix = feature_matrix [self .ar_order :]
56
- target = y_diff [self .ar_order :]
55
+ feature_matrix = np .column_stack (
56
+ [np .roll (y_diff , i ) for i in range (1 , self .ar_order + 1 )]
57
+ )
58
+ feature_matrix = feature_matrix [self .ar_order :]
59
+ target = y_diff [self .ar_order :]
57
60
# Add intercept
58
61
feature_matrix = np .hstack (
59
62
[np .ones ((feature_matrix .shape [0 ], 1 )), feature_matrix ]
@@ -79,10 +82,10 @@ def predict(self, time_series: np.ndarray, n_periods: int = 1) -> np.ndarray:
79
82
array([10.99999999, 12.00000001])
80
83
"""
81
84
y = np .asarray (time_series )
82
- y_pred = list (y [- self .ar_order :])
85
+ y_pred = list (y [- self .ar_order :])
83
86
for _ in range (n_periods ):
84
87
# Build feature vector for prediction
85
- features = [1 ] + y_pred [- self .ar_order :][::- 1 ]
88
+ features = [1 ] + y_pred [- self .ar_order :][::- 1 ]
86
89
next_val = np .dot (features , self .coef_ )
87
90
y_pred .append (next_val )
88
- return np .array (y_pred [self .ar_order :])
91
+ return np .array (y_pred [self .ar_order :])
0 commit comments