Ví dụ về dữ liệu thời gian
Lời mở đầuChào các bạn, hôm nay tuy không rảnh lắm, nhưng mình vẫn thử dịch và viết một bài về Time Series data (dữ liệu theo thời gian). Bài viết này dựa trên ý hiểu của mình khi đọc bài gốc, có gì sai sót mong các bạn bỏ qua. Show Định nghĩaTime series data là gì ? Để trả lời câu hỏi này, tôi sẽ đặt ra 3 tình huống:
Như các bạn thấy trong các ví dụ trên, tôi đã và đang làm việc với dữ liệu theo thời gian, từ đơn hàng cho đến dự đoán của sản phẩm, ... Thể hiện rõ nhất ở đây là biểu đồ chứng khoán. Trong xã hội hiện đại, khi lượng thông tin càng ngày càng tăng, việc phân tích dữ liệu time series trở nên cực kỳ quan trọng, nhưng cho dù có nhiều thuật toán hay mô hình trí tuệ nhân tạo sinh ra, việc dự đoán tương lai vẫn thất bại do sự thiếu ổn định trong chuỗi thời gian. Một vài thuật ngữ trong Time SeriesTrend: xu hướng của dữ liệu (tăng hoặc giảm). Điều này có thể phát hiện thông qua độ dốc của dữ liệu trên biểu đồ. Seasonality: dữ liệu bị ảnh hưởng theo thước đo thời gian như: giờ, tuần, tháng, năm, ... Trong trường hợp, này dữ liệu có chu kỳ lặp đi lặp lại theo thước đo thời gian kể trên với một tần suất cố định. Cyclicity: một chu kỳ xảy ra khi dữ liệu tăng và giảm không theo một tần suất cố định. Dễ thấy nhất ở đây là trong lĩnh vực kinh tế. Residuals: dữ liệu time series có thể chia thành 2 loại: giá trị dự báo tại thời điểm t và phần thặng dư tại thời điểm t
Một số ví dụ:
Một chuỗi cũng có thể là tổ hợp của nhiều loại kể trên. Tính ổn định của chuỗiĐơn giản hiểu là một chuỗi lặp đi lặp lại theo một chu kỳ, giá trị không tăng theo thời gian. Dự đoán chuỗi có tính ổn định rất dễ do có các đặc tính như: mean, variance, autocorrelation, ... Biến đổi về chuỗi ổn địnhĐại đa số trường hợp chúng ta bắt gặp các chuỗi bất ổn định, vì vậy cần phải loại bỏ những yếu tố gây bất ổn định.
Pratice codeKiểm tra tính ổn định của chuỗiVisualizeCách đơn giản nhất là quan sát chuỗi bằng mắt thường. Nếu bạn là dân code ngôn ngữ python-er như mình có thể dùng thư viện matplotlib để vẽ dữ liệu thành biểu đồ. Ở đây tôi dùng dữ liệu xuất nhập khẩu Úc-Nhật.
AdfullerCách 2, dùng adfuller test để kiểm tra tính ổn định của chuỗi. Bạn cần tải về thư viện statsmodels
KPSSCách 3, dùng KPSS test với giả thuyết rằng chuỗi có xu hướng ổn định. Nói cách khác, p-value < X% độ tin cậy => loại bỏ giả thuyết này, chuỗi không có xu hướng ổn định và ngược lại.
ACF & PACFAutocorrelation (ACF) plot là đồ thị thể hiện sự tương quan giữa chuỗi và độ trễ của chính nó. Partial autocorrelation (PACF) plot là đồ thị thể hiện số lượng tương quan giữa chuỗi và độ trễ, không tính mối tương quan với độ trễ thấp. Lý tưởng nhất là không có tương quan nào giữa chuỗi và độ trễ. Tức là chuỗi luôn cập nhật chính xác và kịp thời.
Các cột vượt quá vùng xanh thể hiện mối tương quan với độ trễ 1, 2, 3, 4 Exponential SmoothingPhương pháp làm mịn này phù hợp với dữ liệu không theo xu hướng hoặc không theo chu kỳ. Các phương pháp làm mịn dữ liệu có phương thức cơ bản là tính trung bình cộng của quá khứ. Với những phương pháp nâng cao thì có thể thêm tính chu kỳ và tính xu hướng. Để dễ hiểu hơn, tôi sẽ giải thích bằng công thức toán học với y là chuỗi, p là kết quả dự đoán, l là giá trị p đã được smooth, s là giá trị chu kỳ và b là giá trị xu hướng. Simple Exponential SmoothingThuật toán này dùng khi ít dữ liệu, không có xu hướng và chu kỳ. Công thức ở đây là: pt=ltp_t = l_t lt=α∗yt+( 1−α)∗lt−1l_t = \alpha * y_t + (1-\alpha) * l_{t-1} Ở điểm ban đầu, lấy kết quả dự đoán ban đầu làm giá trị khởi tạo của l. Giá trị smooth ở thời điểm t = giá trị smooth ở thời điểm t-1 nhân với 1- α\alpha (thông số làm mịn) cộng với α\alpha nhân với giá trị quan sát ở thời điểm t-1.
Holt’s Linear SmoothingPhương pháp làm mịn này phù hợp với dữ liệu theo xu hướng, không theo chu kỳ (1)Forecastp t+h∣t=lt+bt(1) Forecast p_{t+h|t} = l_t + b_t (2)l t=α∗yt+(1−α)∗lt−1(α=smoothinglevel)(2) l_t = \alpha * y_t + (1-\alpha) * l_{t-1} (\alpha = smoothing level) (3)bt=β∗(lt−lt− 1)+(1−β)∗bt−1(β=smoothingslope)(3) b_t = \beta * (l_t - l_{t-1}) + (1-\beta) * b_{t-1} (\beta = smoothing slope)
Dễ thấy ở đây, Holt's Linear cho ra kết quả tốt hơn một chút so với SES. Nhưng không thực tế do xu hướng tính bằng phương pháp này là hằng số không đổi trong tương lai (tăng đến vô hạn và giảm đến vô hạn). Vì vậy người ta nghĩ ra một cách là thêm một thông số để xu hướng hội tụ trong tương lai.
Còn phương pháp Holt-Winter’s Seasonal smoothing dành cho chuỗi theo chu kỳ nhưng tôi sẽ đề cập lần sau. Kết luậnỞ đây tôi sẽ không viết về ARIMA, các bạn có thể tham khảo blog của anh Khánh nếu muốn hiểu rõ hơn. Tổng thể cả bài tôi giới thiệu sơ qua định nghĩa về chuỗi thời gian và một số phương pháp làm mịn dữ liệu. Nhưng do lười nên tôi chỉ viết đến đây thôi, hẹn các bạn phần sau Tham khảohttps://phamdinhkhanh.github.io/2019/12/12/ARIMAmodel.html https://towardsdatascience.com/time-series-in-python-exponential-smoothing-and-arima-processes-2c67f2a52788 https://gitlab.fit.cvut.cz/marchan1/mvi-sp/tree/master => Lấy data về test thử |