Chuỗi thời gian - Các biến thể của ARIMA
Trong chương trước, chúng ta đã thấy mô hình ARIMA hoạt động như thế nào và những hạn chế của nó là nó không thể xử lý dữ liệu theo mùa hoặc chuỗi thời gian đa biến và do đó, các mô hình mới đã được giới thiệu để bao gồm các tính năng này.
Một cái nhìn sơ lược về các mô hình mới này được đưa ra ở đây -
Tự động hồi quy vectơ (VAR)
Đây là một phiên bản tổng quát của mô hình hồi quy tự động cho chuỗi thời gian tĩnh đa biến. Nó được đặc trưng bởi tham số 'p'.
Đường trung bình trượt vectơ (VMA)
Nó là một phiên bản tổng quát của mô hình trung bình động cho chuỗi thời gian tĩnh đa biến. Nó được đặc trưng bởi tham số 'q'.
Đường trung bình trượt hồi quy tự động vectơ (VARMA)
Nó là sự kết hợp giữa VAR và VMA và một phiên bản tổng quát của mô hình ARMA cho chuỗi thời gian tĩnh đa biến. Nó được đặc trưng bởi các tham số 'p' và 'q'. Tương tự như vậy, ARMA có khả năng hoạt động giống như một mô hình AR bằng cách đặt tham số 'q' là 0 và như một mô hình MA bằng cách đặt tham số 'p' là 0, VARMA cũng có khả năng hoạt động giống như một mô hình VAR bằng cách đặt tham số 'q' dưới dạng 0 và dưới dạng mô hình VMA bằng cách đặt tham số 'p' là 0.
Trong [209]:
df_multi = df[['T', 'C6H6(GT)']]
split = len(df) - int(0.2*len(df))
train_multi, test_multi = df_multi[0:split], df_multi[split:]
Trong [211]:
from statsmodels.tsa.statespace.varmax import VARMAX
model = VARMAX(train_multi, order = (2,1))
model_fit = model.fit()
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152:
EstimationWarning: Estimation of VARMA(p,q) models is not generically robust,
due especially to identification issues.
EstimationWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:171:
ValueWarning: No frequency information was provided, so inferred frequency H will be used.
% freq, ValueWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508:
ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
Trong [213]:
predictions_multi = model_fit.forecast( steps=len(test_multi))
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:320:
FutureWarning: Creating a DatetimeIndex by passing range endpoints is deprecated. Use `pandas.date_range` instead.
freq = base_index.freq)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152:
EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, due especially to identification issues.
EstimationWarning)
Trong [231]:
plt.plot(train_multi['T'])
plt.plot(test_multi['T'])
plt.plot(predictions_multi.iloc[:,0:1], '--')
plt.show()
plt.plot(train_multi['C6H6(GT)'])
plt.plot(test_multi['C6H6(GT)'])
plt.plot(predictions_multi.iloc[:,1:2], '--')
plt.show()
Đoạn mã trên cho thấy cách mô hình VARMA có thể được sử dụng để lập mô hình chuỗi thời gian đa biến, mặc dù mô hình này có thể không phù hợp nhất trên dữ liệu của chúng tôi.
VARMA với các biến ngoại sinh (VARMAX)
Nó là một phần mở rộng của mô hình VARMA trong đó các biến phụ được gọi là hiệp biến được sử dụng để mô hình hóa biến chính mà chúng ta quan tâm.
Đường trung bình trượt tích hợp tự động hồi quy theo mùa (SARIMA)
Đây là phần mở rộng của mô hình ARIMA để xử lý dữ liệu theo mùa. Nó chia dữ liệu thành các thành phần theo mùa và không theo mùa và lập mô hình chúng theo kiểu tương tự. Nó được đặc trưng bởi 7 thông số, đối với các thông số phần không theo mùa (p, d, q) giống như đối với mô hình ARIMA và cho các thông số phần theo mùa (P, D, Q, m) trong đó 'm' là số khoảng thời gian theo mùa và P, D, Q tương tự như các tham số của mô hình ARIMA. Các tham số này có thể được hiệu chỉnh bằng cách sử dụng tìm kiếm lưới hoặc thuật toán di truyền.
SARIMA với các biến ngoại sinh (SARIMAX)
Đây là phần mở rộng của mô hình SARIMA để bao gồm các biến ngoại sinh giúp chúng ta lập mô hình biến mà chúng ta quan tâm.
Có thể hữu ích khi thực hiện phân tích mối quan hệ đồng trên các biến trước khi đưa chúng làm biến ngoại sinh.
Trong [251]:
from scipy.stats.stats import pearsonr
x = train_multi['T'].values
y = train_multi['C6H6(GT)'].values
corr , p = pearsonr(x,y)
print ('Corelation Coefficient =', corr,'\nP-Value =',p)
Corelation Coefficient = 0.9701173437269858
P-Value = 0.0
Pearson's Correlation cho thấy mối quan hệ tuyến tính giữa 2 biến, để giải thích kết quả, trước tiên chúng ta nhìn vào giá trị p, nếu nó nhỏ hơn 0,05 thì giá trị của hệ số là có ý nghĩa, còn lại giá trị của hệ số không có ý nghĩa. Đối với giá trị p có ý nghĩa, giá trị dương của hệ số tương quan biểu thị mối tương quan thuận và giá trị âm biểu thị mối tương quan âm.
Do đó, đối với dữ liệu của chúng tôi, "nhiệt độ" và "C6H6" dường như có mối tương quan tích cực cao. Do đó, chúng tôi sẽ
Trong [297]:
from statsmodels.tsa.statespace.sarimax import SARIMAX
model = SARIMAX(x, exog = y, order = (2, 0, 2), seasonal_order = (2, 0, 1, 1), enforce_stationarity=False, enforce_invertibility = False)
model_fit = model.fit(disp = False)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508:
ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
Trong [298]:
y_ = test_multi['C6H6(GT)'].values
predicted = model_fit.predict(exog=y_)
test_multi_ = pandas.DataFrame(test)
test_multi_['predictions'] = predicted[0:1871]
Trong [299]:
plt.plot(train_multi['T'])
plt.plot(test_multi_['T'])
plt.plot(test_multi_.predictions, '--')
Hết [299]:
[<matplotlib.lines.Line2D at 0x1eab0191c18>]
Các dự đoán ở đây dường như có các biến thể lớn hơn bây giờ so với mô hình ARIMA đơn biến.
Không cần phải nói, SARIMAX có thể được sử dụng như một mô hình ARX, MAX, ARMAX hoặc ARIMAX bằng cách chỉ đặt các tham số tương ứng thành các giá trị khác không.
Đường trung bình trượt tích hợp tự động hồi quy phân số (FARIMA)
Đôi khi, có thể xảy ra trường hợp chuỗi của chúng ta không đứng yên, nhưng sự khác biệt với tham số 'd' nhận giá trị 1 có thể làm sai lệch nó quá mức. Vì vậy, chúng ta cần khác biệt chuỗi thời gian bằng cách sử dụng giá trị phân số.
Trong thế giới của khoa học dữ liệu, không có một mô hình nào vượt trội, mô hình hoạt động trên dữ liệu của bạn phụ thuộc rất nhiều vào tập dữ liệu của bạn. Kiến thức về các mô hình khác nhau cho phép chúng tôi chọn một mô hình hoạt động trên dữ liệu của chúng tôi và thử nghiệm với mô hình đó để đạt được kết quả tốt nhất. Và kết quả nên được xem như âm mưu cũng như thước đo lỗi, đôi khi một lỗi nhỏ cũng có thể là xấu, do đó, việc vẽ và hình dung kết quả là điều cần thiết.
Trong chương tiếp theo, chúng ta sẽ xem xét một mô hình thống kê khác, làm trơn theo cấp số nhân.