Kiểm định Tính Dừng của Chuỗi Thời Gian với ADF Test
🔍 Giới thiệu
Trong phân tích chuỗi thời gian, việc kiểm tra tính dừng (stationarity) rất quan trọng. Nếu dữ liệu không dừng, nó có thể dẫn đến kết quả sai lệch khi dự báo. Augmented Dickey-Fuller (ADF) Test giúp xác định xem dữ liệu có đơn vị gốc (unit root) hay không.
📌 Dữ liệu mẫu
Chúng ta sử dụng tập dữ liệu sau:
Datetime | Close | High | Low | Open | Volume |
---|---|---|---|---|---|
2025-03-07 | 26650 | 26800 | 26350 | 26500 | 12984900 |
2025-03-10 | 26450 | 26750 | 26400 | 26700 | 11003400 |
2025-03-11 | 26450 | 26450 | 26100 | 26300 | 12961400 |
2025-03-12 | 26300 | 26700 | 26200 | 26500 | 8814301 |
2025-03-13 | 26100 | 26450 | 26100 | 26350 | 13510500 |
📝 Code
import pandas as pd
from statsmodels.tsa.stattools import adfuller
# Tạo DataFrame từ dữ liệu mẫu
data = pd.DataFrame({
'Datetime': pd.to_datetime([
"2025-03-07", "2025-03-10", "2025-03-11", "2025-03-12", "2025-03-13"
]),
'Close': [26650, 26450, 26450, 26300, 26100],
'High': [26800, 26750, 26450, 26700, 26450],
'Low': [26350, 26400, 26100, 26200, 26100],
'Open': [26500, 26700, 26300, 26500, 26350],
'Volume': [12984900, 11003400, 12961400, 8814301, 13510500]
})
# Đặt 'Datetime' làm chỉ mục
data.set_index('Datetime', inplace=True)
# Kiểm định ADF
result = adfuller(data['Close'])
# In kết quả
print('ADF Statistic: {:.6f}'.format(result[0]))
print('p-value: {:.6f}'.format(result[1]))
print('Critical Values:')
for key, value in result[4].items():
print(f'\t{key}: {value:.3f}')
# Đưa ra kết luận
if result[1] > 0.05:
print("Chuỗi có đơn vị gốc (không ổn định), cần phải differencing.")
else:
print("Chuỗi ổn định, không cần biến đổi.")
🎯 Kết quả & Giải thích Sau khi chạy kiểm định ADF, chúng ta sẽ nhận được:
ADF Statistic: Giá trị thống kê kiểm định p-value: Nếu p-value > 0.05, chuỗi không ổn định (cần biến đổi). Ngược lại, nếu p-value ≤ 0.05, chuỗi ổn định. Critical Values: Các giá trị tới hạn tại mức ý nghĩa 1%, 5%, 10%. Nếu chuỗi không ổn định, ta có thể dùng data['Close'].diff().dropna() để tạo sai phân (differencing) giúp chuỗi trở nên ổn định.
📌 Ứng dụng thực tế ✅ Kiểm tra tính dừng trước khi xây dựng mô hình ARIMA, GARCH. ✅ Tránh lỗi khi sử dụng dữ liệu không ổn định trong phân tích chuỗi thời gian. ✅ Xác định xem có cần biến đổi dữ liệu trước khi dự báo không.