Dự báo chuỗi thời gian (Time Series Forecasting) (P1)

Giới thiệu Dự báo chuỗi thời gian là một kỹ thuật dự đoán các sự kiện thông qua một chuỗi thời gian. Nó dự đoán các sự kiện trong tương lai bằng cách phân tích các xu hướng trong quá khứ, với giả định rằng các xu hướng trong tương lai sẽ tương tự như

Giới thiệu

Dự báo chuỗi thời gian là một kỹ thuật dự đoán các sự kiện thông qua một chuỗi thời gian. Nó dự đoán các sự kiện trong tương lai bằng cách phân tích các xu hướng trong quá khứ, với giả định rằng các xu hướng trong tương lai sẽ tương tự như vậy.

Dự báo chuỗi thời gian cũng là một lĩnh vực quan trọng của học máy và có thể được coi là một vấn đề học tập có giám sát. Các phương pháp học máy như Regression, Neural Networks, Support Vector Machines, Random Forests và XGBoost có thể được áp dụng trong trường hợp này.

Dự báo chuỗi thời gian thường được sử dụng cùng với việc phân tích. Phân tích chuỗi thời gian liên quan đến việc phát triển các mô hình tìm kiếm tri thức trong dữ liệu. Dự báo chuỗi thời gian thực hiện bước tiếp theo với kiến thức vừa tìm được. Nó đòi hỏi phải phát triển các mô hình dựa trên dữ liệu trước đó và áp dụng chúng để thực hiện các quan sát và hướng dẫn các quyết định chiến lược trong tương lai.

Trường hợp sử dụng

Dự báo chuỗi thời gian là một trong những kỹ thuật khoa học dữ liệu phổ biến trong lập kế hoạch kinh doanh, sản xuất và hàng tồn kho, tài chính và quản lý chuỗi cung ứng. Một số trường hợp sử dụng dự báo chuỗi thời gian:

Dự báo nhu cầu về định giá
Dự đoán kỳ vọng hoặc nhu cầu của khách hàng luôn là một thách thức đối với các doanh nghiệp xử lý nguồn cung ứng và mua sắm. Thêm một ứng dụng nữa là dự đoán tỷ giá hoặc giá của sản phẩm/dịch vụ giúp tự động điều chỉnh tỷ lệ/giá dựa trên mục tiêu doanh thu hoặc nhu cầu.

Các khái niệm dự đoán giá trong dự báo chuỗi thời gian sẽ tạo ra nhiều cơ hội để nâng cao và cá nhân hóa trải nghiệm của khách hàng.

Phát hiện gian lận
Phát hiện bất thường trong học máy bao gồm việc quan sát các giá trị ngoại lệ trong cách phân phối điểm dữ liệu. Nói tóm lại, nó xác định các đợt tăng đột biến bất thường, lệch đáng kể so với cách nhìn của cả xu hướng và mùa vụ.

Phát hiện gian lận là một vấn đề lớn đối với bất kỳ lĩnh vực nào liên quan đến hoạt động tài chính và thanh toán. Phân tích chuỗi thời gian kết hợp với học máy có thể tìm thấy các hoạt động đáng ngờ như sửa đổi địa chỉ giao hàng hoặc số tiền lớn bị rút để chỉ ra các giao dịch gian lận.

Mục tiêu

Khi dự báo, điều quan trọng là phải hiểu mục tiêu của việc dự báo. Những vấn đề cần quan tâm bao gồm:

  • Khối lượng dữ liệu có sẵn: nhiều dữ liệu hơn thường mang lại cơ hội hơn cho phân tích dữ liệu, thử nghiệm và điều chỉnh mô hình cũng như độ trung thực của mô hình.
  • Khoảng thời gian dự đoán: khoảng thời gian ngắn hơn thường dễ dự đoán hơn với độ tin cậy cao so với khoảng thời gian dài hơn.
  • Tần suất cập nhật dự báo: Dự báo có thể cần được cập nhật thường xuyên theo thời gian hoặc có thể cần được thực hiện một lần và giữ nguyên.
  • Dự báo tần suất theo thời gian: Thông thường, các dự báo có thể được thực hiện ở tần suất thấp hơn hoặc cao hơn, cho phép khai thác việc downsampling và upsampling của dữ liệu.

Các phương pháp dự báo chuỗi thời gian

Mô hình phân tách

Dữ liệu chuỗi thời gian có thể thể hiện nhiều mẫu khác nhau, do đó, người ta thường chia chuỗi thời gian thành các thành phần, mỗi thành phần đại diện cho một loại mẫu cơ bản. Như đã đề cập ở bài viết trước, một chuỗi thời gian thường được phân tích thành 3 thành phần chính: xu hướng (trend), mùa vụ (seasonality), thành phần bất quy tắc có thể coi là dư (residuals) hay nhiễu trắng (white noise).
image.png

Phân tách dựa trên tốc độ thay đổi

Đây là một kỹ thuật phân tích chuỗi thời gian quan trọng, đặc biệt là để điều chỉnh theo mùa vụ. Nó tìm cách xây dựng một số chuỗi thành phần từ một chuỗi thời gian gốc (sau đó có thể tái tạo lại chuỗi gốc bằng phép cộng hoặc phép nhân) trong đó mỗi chuỗi này có một đặc điểm hoặc kiểu hành vi nhất định.

Nếu dữ liệu cho thấy một số tính thời vụ (ví dụ: hàng ngày, hàng tuần, hàng quý, hàng năm) thì có thể phân tách chuỗi thời gian ban đầu thành tổng của ba thành phần:

Yt=St+Tt+RtY_t= S_t+ T_t+ R_t

trong đó StS_t là thành phần theo mùa, TtT_t là thành phần xu hướng và RtR_t là thành phần còn lại.

Có một số kỹ thuật để ước tính sự phân tách như vậy. Cơ bản nhất được gọi là phân tách cổ điển và bao gồm:

  1. Ước tính xu hướng TtT_t thông qua giá trị trung bình
  2. Tính toán StS_t dưới dạng chuỗi giảm dần trung bình Yt−TtY_t-T_t cho mỗi mùa (ví dụ: cho mỗi tháng)
  3. Tính chuỗi còn lại là Rt=Yt−Tt−StR_t=Y_t-T_t-S_t.

Chuỗi thời gian cộng và chuỗi thời gian nhân

Trong một chuỗi thời gian cộng (additive time series), các thành phần cộng lại với nhau để tạo thành chuỗi thời gian. Trong một chuỗi thời gian nhân (multiplicative time series), các thành phần nhân với nhau để tạo thành chuỗi thời gian.

Ví dụ về chuỗi thời gian sử dụng mô hình cộng:

yt=Tt+Ct+St+Ity_t= T_t+C_t+S_t+I_t

Một mô hình cộng được sử dụng khi các biến thể xung quanh xu hướng không thay đổi theo cấp độ của chuỗi thời gian.

Ví dụ về chuỗi thời gian sử dụng mô hình nhân:

yt=Tt∗Ct∗St∗Ity_t= T_t*C_t*S_t*I_t

Một mô hình nhân là phù hợp nếu xu hướng tỷ lệ thuận với mức độ của chuỗi thời gian.

Phân tách chuỗi thời gian bằng Python-Pandas

Để làm rõ vai trò của các thành phần trong chuỗi thời gian, chúng ta xem qua một cách phân tách chuỗi thời gian viết bằng ngôn ngữ Python. Chúng ta sẽ xây dựng tính xu hướng, tính thời vụ và các thành phần còn lại bằng những dữ liệu hư cấu.

Giả sử chúng ta có một cảm biến đo nhu cầu điện của người dùng. Chúng ta giả định thời gian, xu hướng và trước hết bỏ qua các đơn vị tính để mọi thứ đơn giản.

import numpy as np
import matplotlib.pylab as plt
time = np.arange(1, 51)
trend = time * 2.75
plt.plot(time, trend, 'b.')
plt.title('Trend vs Time')
plt.xlabel('minutes')
plt.ylabel('electricity demand')

image.png

Hình 1. Biểu đồ tính xu hướng theo thời gian

Bây giờ là giả định biến mùa vụ.

seasonal = 10 + np.sin(time) * 10
plt.plot(time, seasonal, 'g-.')
plt.title('Seasonalilty vs Time')
plt.xlabel('minutes')
plt.ylabel('electricity demand')

image.png

Hình 2. Biểu đồ tính thời vụ theo thời gian

Xây dựng các thành phần còn lại để tạo một mô hình nhanh về số dư:

np.random.seed(10)  # reproducible results
residual = np.random.normal(loc=0.0, scale=1, size=len(time))
plt.plot(time, residual, 'r-.')
plt.title('Residuals vs Time')
plt.xlabel('minutes')
plt.ylabel('electricity demand')

image.png

Hình 3. Biểu đồ tính nhiễu theo thời gian

Tổng hợp các thành phần

Phương trình cho một chuỗi thời gian cộng đơn giản là:

Ot=Tt+St+RtO_t=T_t+S_t+R_t

OtO_t = đầu ra

TtT_t = xu hướng

StS_t = thời vụ

RtR_t = dư

tt = biến đại diện cho một thời điểm cụ thể

additive = trend + seasonal + residual
plt.plot(time, additive, 'r-.')
plt.title('Additive vs Time')
plt.xlabel('minutes')
plt.ylabel('electricity demand')

image.png

Hình 3. Biểu đồ chuỗi thời gian cộng theo thời gian


Điều tương tự cũng xảy ra đối với chuỗi thời gian nhân, chỉ khác việc ta không cộng mà nhân các giá trị của xu hướng, tính thời vụ và số dư.

Tính dừng và tự tương quan

Ngoài 3 thành phần chính nêu trên, một yếu tố quan trọng trong việc dự báo chuỗi thời gian nữa là tính dừng của dữ liệu (stationary). Một chuỗi thời gian được gọi là có tính dừng nếu các thuộc tính có ý nghĩa thống kê của nó (ví dụ như là trung bình, độ lệch chuẩn) không đổi theo thời gian. Nếu một chuỗi không dừng, việc dự báo sẽ không có giá trị ứng dụng thực tiễn. Lý do là nếu chuỗi không dừng, chúng ta chỉ có thể nghiên cứu hành vi của nó cho riêng giai đoạn đang xem xét, chẳng hạn tỉ giá đồng Việt Nam trong giai đoạn 1/1/2020 đến 5/5/2021. Vì thế, mỗi chuỗi thời gian là một giai đoạn riêng biệt, nên chúng ta không thể khái quát hóa kết quả phân tích cho các giai đoạn khác.

Để dữ liệu chuỗi thời gian có tính dừng, dữ liệu phải thể hiện các thuộc tính theo thời gian:

1. Giá trị trung bình không đổi

image.png
Ở ví dụ hình trên, nếu chúng ta vẽ giá trị trung bình của chuỗi, thì giá trị này sẽ luôn là giá trị trung bình trong mọi thời điểm.

2. Phương sai không đổi

image.png
Chuỗi thời gian cố định sẽ có phương sai không đổi trong toàn bộ chuỗi.

3. Cấu trúc tự tương quan hằng số
Tự tương quan đơn giản có nghĩa là phép đo chuỗi thời gian hiện tại tương quan với phép đo trong quá khứ.

Khoảng thời gian giữa các giá trị tương quan được gọi là LAG. Một ví dụ cụ thể là chúng ta sẽ muốn biết liệu giá cổ phiếu ngày hôm nay tương quan tốt hơn với giá của ngày hôm qua hay giá của hai ngày trước để đưa ra được những dự báo tốt hơn cho các ngày tiếp theo.

Hầu hết các mô hình về chuỗi thời gian hiện tại được xây dựng trên một giả định tính dừng. Có nghĩa là nếu chuỗi thời gian ở trong quá khứ có một hành vi nào đó, thì khả năng cao là nó sẽ lặp lại trong tương lai. Ngoài ra, các lý thuyết liên quan đến tính dừng đã được các nhà nghiên cứu khai thác một cách triệt để và dễ ràng thực hiện hơn là các lý thuyết về tính không dừng.

Tham khảo

  1. Akshay P Jain. Time Series Forecasting: Data, Analysis, and Practice
  2. tableau. Time Series Forecasting: Definition, Applications, and Examples.
  3. influxdata. Time series forecasting methods.
  4. Springboard. What Is Time Series Forecasting? Overview, Models & Methods.
  5. Phạm Duy Tùng. Dự đoán giá cổ phiếu bằng mô hình mạng Echo State Networks.

Series này mình dịch và viết với mục đích học tập của bản thân nên sẽ không tránh khỏi sai sót. Mình sẽ rất vui nếu nó có ích, còn nếu có chỗ nào chưa chính xác thì các bạn góp ý giúp mình với nhé. Cảm ơn mọi người 😄

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ