Xin chào các bạn, đây là bài viết thứ 2 trong loạt bài viết về Times Series. Trong bài viết trước đó mình đã giới thiệu về một số khái niệm, định nghĩa của chuỗi Time Series như tính dừng, trend, lag hay cách loại bỏ trend để thu được một chuỗi dừng.

Link bài viết trước:

https://blog.vietnamlab.vn/2019/12/20/phan-tich-du-bao-chuoi-thoi-gian-time-series/blog.vietnamlab.vn

Bài viết này mình sẽ đi sâu vào mô hình Autoregressive dùng để phân tích chuỗi time series.

1. Mô hình Autogressive là gì

Theo trích dẫn trên wiki:

The autoregressive model specifies that the output variable depends linearly on its own previous values and on a stochastic term (an imperfectly predictable term); thus the model is in the form of a stochastic difference equation (or recurrence relation which should not be confused with differential equation).

có nghĩa là giá trị ở thời điểm hiện tại phụ thuộc tuyến tính vào giá trị ở thời điểm trước đó (một hoặc nhiều thời điểm), ngoài ra còn có thêm thành phần nhiễu ngẫu nhiên (không có công thức tính chính xác).

Về mặt công thức, AR model có dạng sau:

Công thức AR model (nguồn: wiki)

như ta có thể thấy X[t] phụ thuộc vào các giá trị ở thời điểm trước đó X[t-i], còn epsilon[t] chính là thành phần nhiễu ngẫu nhiên.

AR model là một mô hình có công thức đơn giản, có nhiều ứng dụng trong thực tiễn như xây dựng mô hình tài chính, thống kê hay xử lý tín hiệu. Trong phân tích tài chính, ta có thể dùng mô hình AR vào các ứng dụng sau:

  • Dùng độc lập như một phương pháp phân tích kĩ thuật
  • Kết hợp với các phương pháp khác để tạo lên một mô hình tổng quát hơn

2. Một vài tính chất của mô hình AR

2.1. Khái niệm và giả thiết

Ở phần này ta sẽ sử dụng một số khái niệm sau:

  • Bậc của mô hình AR: chính là số lượng giá trị trong quá khử dùng để mô tả giá trị hiện tại. Ví dụ bậc 2: giá trị hiện tại phụ thuộc vào 2 giá trị trước nó.
  • Mean: giá trị trung bình của chuỗi time series
  • Variance: phương sai của chuỗi time series
  • Autocovariance: tự tương quan của chuỗi time series (giữa giá trị ở thời điểm hiện tại với lag 1, lag 2, ... của nó)

Ta sẽ phân tích các tính chất trên của chuỗi time series tuân theo mô hình AR bậc 1, thường được kí hiệu là AR(1). Với bậc cao hơn, các bạn có thể tham khảo công thức trên wiki.

Xét mô hình AR bậc 1 có công thức sau:
X[t] = c + p*X[t-1] + w
Các giả thiết sau cần được thoả mãn trước khi phân tích các tính chất của mô hình AR:

  1. Nhiễu w tuân theo phân phối chuẩn với mean bằng không và variance bằng var_w, và không phụ thuộc vào X
  2. X là một chuỗi dừng (xem khái niệm chuỗi dừng ở bài viết trước)

2.2. Tính chất của mô hình

Mean của chuỗi time series:
mean(X) = c/(1-p)
Varience của chuỗi time series:
var(X) = var_w/(1-p^2)
Autocovariance của chuỗi time series:
autovar(X) = E(X[t+n]X[t]) = var(X)p^n
Nhận xét:
Với p = 1 mean(X) sẽ không xác định (tiến ra vô cùng do mẫu số 1-p = 0).
Với p < 1, tính dừng của chuỗi được thoả mãn (mean, variance bằng hằng số)
Với step n đủ lớn, autocovariance sẽ tiến về 0

3. Thực hành

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

3.1. Xử lý dữ liệu

Xây dựng dữ liệu:

p_1 = 1.5
p_2 = -0.6
c = 5
w = 0.5
T = 500
mean = c/(1-p_1-p_2)


ar_data = np.zeros(T)
ar_data[0] = mean + np.random.normal(0, w)
ar_data[1] = mean + np.random.normal(0, w)
for t in range(2, T):
    ar_data[t] = c + p_1*ar_data[t-1] + p_2*ar_data[t-2] \
                                + np.random.normal(0, w)

Plot dữ liệu:

# plot data
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(1, 1, 1)
ax.plot(ar_data)
plt.axhline(y=mean, color='r', linestyle='-')
plt.show()

uc?id=1XZEzQ_OVLn0qAmjOMhMt82Qe1M2SQuY5&export=download

Plot autocovariance (lag=1):

# plot correlation
from pandas.plotting import lag_plot
lag_plot(pd.DataFrame(ar_data))

uc?id=1EICSmmyz6mLHVNP_seTIXmmxpYxxIwjJ&export=download
Dễ nhận thấy y[t+1] phụ thuộc vào y[t] theo quan hệ tuyến tính.

3.2. Xây dựng mô hình

Ta sẽ sử dụng thư viện statsmodels để tìm các tham số cho mô hình AR.

model = sm.tsa.AR(ar_data)
print("Order of model: ", model.select_order(maxlag=6, ic='aic')) 

predicted_model = model.fit(maxlag=2)
print("Params of model: ", predicted_model.params)

Kết quả:

Order of model:  3
Params of model:  [ 5.0469888   1.46672699 -0.56703285]

3.3. Đánh giá mô hình

So sánh kết quả của mô hình với kết quả thực tế:

predicted_value = predicted_model.predict(2,300)
dif=pd.DataFrame(np.abs(predicted_value - ar_data[2:301]))
dif.describe(percentiles=[0.5, 0.75, 0.95])

Kết quả:
uc?id=1czU5Vt6TW-b9lfqC4sMTzE_6u9RES3_F&export=download

Sai lệch là tương đối nhỏ, trung bình khoảng 0.4, 90% nhỏ hơn 1.
Nếu so sánh với việc sử dụng phương pháp gradient descent trong bài toán linear regression thì sai lệch này lại tương đối lớn.
Giải thích nguyên nhân của điều này như sau:

  • Về dạng công thức, mô hình AR có thêm thành phần nhiễu không dự đoán được, mô hình LR không có thành phần này
  • Để ý rằng các tham số của mô hình học được có một chút sai lệch với thực tế, lý do là thư viện statmodels sử dụng phương pháp Maximum likelihood để tìm các tham số cho mô hình. Phương pháp này dựa trên phân bố xác suất để tìm ra tham số tối ưu nhất.

(https://www.statsmodels.org/stable/generated/statsmodels.tsa.ar_model.AR.fit.html#statsmodels.tsa.ar_model.AR.fit)

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 AR (autoregressive). Nhìn chung, AR model tỏ ra hiệu quả khi mô tả quan hệ phụ thuộc giữa giá trị hiện tại và quá khứ của chuỗi time series.
Trong bài viết tiếp theo mình sẽ giới thiệu về mô hình Moving Average (MA). Mô hình Moving Average kết hợp với mô hình AR để tạo nên mô hình tổng quát hơn là ARMA model, trung tâm của phương pháp Box-Jenkins - một phương pháp rất phổ biến trong phân tích kinh tế lượng.