Tính tự tương quan của chuỗi time series
Trong các bài viết trước về chuỗi time series, mình đã giới thiệu mô hình Moving average, Autoregressive. Khi sử dụng các mô hình như MA, AR, ARMA, ... nói riêng hay khi ta khảo sát chuỗi time series nói chung, một việc quan trọng là ta cần xác định tính tự tương quan của chuỗi. Điều này giúp ta đưa ra các tham số hợp lý cho mô hình cũng như có được đánh giá sơ bộ về chuỗi time series.
1. Khái niệm
1.1. Tương quan là gì?
Trước hết, ta tìm hiểu tương quan là gì. Tương quan theo nghĩa tiếng Việt là quan hệ với nhau, tức là đối tượng x và y có quan hệ với nhau. Trong tiếng anh, ta sử dụng thuật ngữ correlation. Nếu coi x và y là hai biến ngẫu nhiên (hoặc chuỗi time series), khi đó ta biểu thị mối quan hệ của x với y bằng correlation(x,y)
hay viết tắt là cor(x,y)
. Cần chú rằng ta có một thuật ngữ khá giống khác là covariance để chỉ sự thay đổi giữa 2 đối tượng x, y với nhau, viết tắt là cov(x,y)
.
Ta có công thức của convariance:
cov(x,y) = E[(x-m(x))(y-m(y))]
Trong đó m(x)
, m(y)
lần lượt là trung bình của x và y.
cov(x,y)
phụ thuộc vào variance của x, y nên không cho ta biết thước đo cụ thể về mối liên hệ giữa x với y. Chính vì vậy người ta chuẩn hoá cov(x,y)
bằng cách chia đi thành phần var(x)
, var(y)
để được công thức sau đây:
cor(x,y) = cov(x,y)/(sqrt(var(x).var(y)))
cor(x,y)
nhận giá trị trong khoảng -1, 1.
cor(x,y)
có giá trị càng lớn (giá trị tuyệt đối) thì chứng tỏ rằng x và y có tính tương quan cao. Ví dụ của tính tương quan cao như x càng lớn thì y cũng càng lớn (khi đó cor(x,y)~1
), hay x càng lớn thì y càng nhỏ (khi đó cor(x,y) ~ -1
).
cor(x,y)
~ 0 chứng tỏ rằng x, y không có tương quan với nhau.
Xét ví dụ để kiểm tra nhận định bên trên, nếu x=y (tương quan cao) thì
cov(x,y) = E[(x-m(x))(x-m(x))] = var(x)
cor(x,y) = cov(x,y)/sqrt(var(x)^2) = var(x)/var(x) = 1
1.2. Tự tương quan là gì
Khi phân tích chuỗi time series x, ta thường đặt ra câu hỏi là giá trị tại một thời điểm này có phụ thuộc vào giá trị thời điểm trước đó không. Nếu coi x[t-1]
(lag bậc 1 của x) là giá trị tại một thời điểm trước thì chỉ cần tính cor(x[t], x[t-1])
(tương quan giữa x[t]
và x[t-1]
) sẽ giúp ta kiểm tra được điều này.
Tổng quá ta có thể tính cor(x[t], x[t-n])
(tương quan giữa x và lag bậc n của x), giá trị này được gọi là tự tương quan bậc n của x.
2. Khảo sát tính tự tương quan
Ta sử dụng Python với các thư viện sau:
import numpy as np
from statsmodels.graphics.tsaplots import plot_acf
from matplotlib import pyplot as plt
Xây dựng dữ liệu test cho chuỗi time series với công thức sau:
y[t] = 0.5y[t-1]+0.2y[t-2]+sigma
với sigma là thành phần nhiễu.
Ta thêm thành phần seasonality với chu kì là 10 cho dữ liệu:
period = 10
for i in range(int(N/period)):
for p in range(period):
y[i*period+p] += p/(period)
Visualize dữ liệu:
plt.figure(figsize=(16,8))
plt.plot(y)
Tiếp theo ta sử dụng hàm plot_acf
để biểu diễn đồ thị tự tương quan của y[t]
:
plot_acf(np.array(y));
Trục hoành của đồ thị biểu thị bậc khi ta tính tự tương quan. Ví dụ nếu bậc là 5 nghĩa là ta đang tính tự quan giữa chuỗi time series y[t]
và lag bậc 5 của nó: y[t-5]
Hiển nhiên khi bậc bằng 0 thì y[t] = y[t-0]
do đó tương quan sẽ bằng 1, nên ta sẽ không xét bậc 0 khi phân tích chuỗi time series.
Kiểm tra đồ thị ta dễ nhận ra các bậc có giá trị tương quan cao là 1, 2, 10 (các giá trị nằm ngoài vùng màu xanh nhạt).
Điều này đúng với công thức của chuỗi time series, y[t]
phụ thuộc vào lag bậc 1 và 2 (xem lại công thức y[t]
bên trên), ngoài ra y[t]
còn chứa thành phần seasonality với chu kì là 10.
3. Kết luận
Trong bài viết này, ta đã tìm hiểu qua về khái niệm, cách tính tự tương quan, cũng như ý nghĩa của nó. Việc sử dụng graph giúp ta nhanh chóng xác định được chuỗi có tự tương quan hay không, từ đó góp phần đưa ra lựa chọn về mô hình và tham số thích hợp. Trong bài viết tiếp theo, mình sẽ trình bày về họ mô hình ARMA, ARIMA, SARIMA.
Best regards.