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