Time series: Moving average model

Trong các bài viết trước chúng ta đã tìm hiểu cơ bản về khái niệm chuỗi time series, về mô hình Autogressive.
Link bài viết trước:
https://blog.vietnamlab.vn/2020/04/07/time-series/
Trong bài viết này, ta sẽ tiếp tục tìm hiểu về mô hình Moving Average (sau đây sẽ được kí hiệu là MA)

1. Mô hình Moving Average là gì

Trích dẫn định nghĩa của mô hình MA trên wiki:

In time series analysis, the moving-average model (MA model), also known as moving-average process, is a common approach for modeling univariate time series. The moving-average model specifies that the output variable depends linearly on the current and various past values of a stochastic (imperfectly predictable) term.

Together with the autoregressive (AR) model, the moving-average model is a special case and key component of the more general ARMA and ARIMA models of time series, which have a more complicated stochastic structure.

Mô hình MA là một phương pháp phổ biến dùng trong mô hình hoá chuỗi time series, và như mình đã đề cập ở bài viết trước, nó cùng với phương pháp AutoRegressive sẽ tạo nên mô hình tổng quát hơn ARIMA. Về đặc điểm thì mô hình MA thể hiện rằng output (giá trị của chuỗi thời gian) sẽ phụ thuộc tuyến tính vào giá trị hiện tại cũng như các giá trị trong quá khứ của nhiễu (nhiễu mình nói ở đây như trên wiki hiểu là một thành phần stochastic - thành phần ngẫu nhiên, không thể dự đoán được)

Công thức của mô hình MA có dạng như sau:

Để tiện so sánh với mô hình AutoRegressive mình cũng đưa lại công thức mô hình AR ở đây:

Chỉ cần nhìn qua thì ta đã thấy hai mô hình này là khác nhau, trong khi mô hình AR thể hiện mối quan hệ X[t] phụ thuộc vào các giá trị chuỗi thời gian trước đó như X[t-1], X[t-2], ...
thì mô hình MA thể hiện rằng X[t] phụ thuộc vào các giá trị nhiễu.
Thực ra trong mô hình AR cũng có thành phần nhiễu epsilon(t), nhưng mối quan hệ của X[t] với epsilon(t) trong hai mô hình là hoàn toàn khác nhau.

Trong mô hình AR, ảnh hưởng của thành phần nhiễu kéo dài đến vô cùng, như biểu diễn dưới đây:
X[t] bị ảnh hưởng bởi epsilon(t)
X[t+1] bị ảnh hưởng bởi X[t] nên X[t+1] bị ảnh hưởng bởi epsilon(t)
...
Lấy vị dụ như trong mô hình tài chính, ta mô hình hoá chỉ số thị trường chứng khoán, nếu epsilon(t) là tác động của khủng hoảng tài chính (tức là epsilon rất lớn) thì ảnh hưởng mà nó gây ra sẽ kéo dài rất lâu lên chỉ số thị trường.

Trong khi đó ở mô hình AM, ảnh hưởng của thành phần nhiễu chỉ kéo dài trong khoảng thời gian q (bằng với bậc của mô hình AM), lý do vì trong mô hình AM ta không có mối quan hệ phụ thuộc giữa X[t]X[t-1].

2. Tính chất của mô hình Moving Average

Để đơn giản, ta sẽ tìm hiểu các tính chất của mô hình AM bậc 1, có công thức như sau:
Xét mô hình AR bậc 1 có công thức sau:
X[t] = u + w[t] + p* w[t-1]
Trong đó, nhiễu w tuân theo phân phối chuẩn với mean bằng 0 và variance bằng var_w, và không phụ thuộc vào X

Mean của chuỗi time series:
mean(X) = u
Varience của chuỗi time series:
var(X) = var_w^2/(1+p^2)
Autocovariance của chuỗi time series:
autovar(X) = E(X[t+n],X[t]) = 0 với n>1
autovar(X) = E(X[t+1],X[t]) = p/(1+p^2)

Ngoài ra, ta còn có một số khái niệm và tính chất khác:

  • Mô hình MA bậc hữu hạn luôn thoả mãn tính dừng (stationary)
  • Invertible MA: gọi là mô hình MA đảo ngược được (chỗ này dịch hơi khó), khi nó có thể biểu diễn được dưới dạng mô hình AR với bậc vô hạn:
    X[t] = w[t] + p*X[t-1] + p^2*X[t-2] + ...
    Mô hình invertiable MA phải có |p|<1 để đảm bảo rằng hệ số p^n không tiến ra vô cùng.
  • Hay tính chất khác khá hay là mô hình AR(1) có thể biểu diễn được dưới dạng mô hình MA bậc vô hạn.

3. Thực hành

Xét chuỗi time series tuân theo mô hình AR với bậc 1, có công thức như sau:
X[t] = 3 + w[t] - 0.6*w[t-1]
với w = normal(0,5) (phân phối chuẩn có độ lệch chuẩn bằng 5)

Import thư viện cần dùng:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from statsmodels.tsa.arima_model import ARMA

Chuẩn bị dữ liệu:

u = 3
p = -0.6
T = 500
mean = u
w = np.random.normal(loc=0,scale=1, size=500)
X = np.zeros(500)
X[0] = 3 + w[0]
for i in range(1,500):
    X[i] = 3 + w[i] - 0.6*w[i-1]

Fit dữ liệu với mô hình MA:

# fit model
model = ARMA(X, order=(0, 1))
model_fit = model.fit(disp=False)

Check kết quả:

print(model_fit.params)
-> array([ 2.9776383 , -0.59430176])

Như vậy các tham số predicted tương đối giống với tham số của mô hình thực tế (3, -0.6)

4. Kết luận

Như vậy trong bài viết này, ta đã tìm hiểu về lý thuyết, cách ứng dụng của mô hình MA (Moving Average). Việc xây dựng mô hình MA là tương đối khó khăn vì các đại lượng nhiễu trong mô hình là không thể xác định được. Tuỳ từng bài toán, ta cần linh hoạt sử dụng mô hình MA, AR hay đôi khi là kết hợp cả hai.
Trong bài tiếp theo ta sẽ tìm hiểu về kết hợp của 2 mô hình AR&MA, còn gọi là mô hình ARMA.