Time series là gì

Hôm nay, chúng ta sẽ cùng nhau đi tìm hiểu ý tưởng cơ bản cho các thuật toán Time Series Forecasting nhé. Mình sẽ giải thích một chút về khái niệm chuỗi thời gian(Time Series), thì đây là chuỗi các điểm dữ liệu được đo theo từng khoảnh khắc thời gian liền nhau theo một tần suất thời gian thống nhất. Ví dụ như số lượng item bán ra trong mỗi ngày, mỗi tháng hay mỗi quý.

Cuộc sống là những sóng hình Sin

Mình đã từng đọc được câu này A simple model for life is a sine wave. Thực tế, chúng ta sẽ luôn phải trải qua cả những nốt thăng nốt trầm của cảm xúc và của hoàn cảnh, chúng ta không đứng mãi trên đỉnh hoặc ở mãi dưới vực, mà dành phần lớn thời gian của mình để leo lên núi hoặc trượt xuống dốc.

Life is a sine wave


Phải chăng, một đường hình sin chính là bản chất của cuộc sống?

Giao thoa của các sóng

Lúc còn học cấp 3, chúng ta đã được học về giao thoa sóng, và như chúng ta thấy đấy, sự giao thoa của nhiều sóng hình sin có thể tạo ra một pattern mà trông có vẻ không hề có chu kỳ, khó dự đoán, và giống với dữ liệu hoàn toàn ngẫu nhiên vậy.

Giao thoa của các sóng

Hình trên mô tả sự giao thoa của 4 sóng hình sin với chu kỳ và pha khác nhau, kết quả ta thu được một quỹ đạo trông rất phức tạp với nhiều điểm lên xuống gập gềnh. Và chúng ta có thể thấy, các dữ liệu trong thực tế thường nhìn gập gềnh và khó phát hiện xu hướng như trong hình cuối hơn là những đường hình sin hoàn hảo như 4 quỹ đạo ở trên. Đó chính là mặt nổi khi ta nhìn vào cuộc sống!
Một ý tưởng là, liệu chúng ta có để phân rã một đường cong phức tạp thành các thành phần dự báo được, từ đó kết hợp các dự đoán trên các thành phần phân rã để đưa ra dự đoán cho đường cong ban đầu?

Phân tích Time Series

Nối tiếp ý tưởng ở trên, liệu ta có thể phân rã một dữ liệu chuỗi thời gian thành các thành phần con độc lập? Câu trả lời là có, một dữ liệu chuỗi thời gian thường được phân rã thành 4 thành phần con sau:

  • Trend: thành phần này chỉ ra xu hướng tổng quan của dữ liệu theo thời gian: lên hoặc xuống, tăng hoặc giảm
  • Seasonality: thành phần chỉ ra các xu hướng theo mùa vị, chỉ ra các pattern theo tháng, theo quý
  • Cycle: thành phần chu kỳ, nó khác seasonality ở chỗ thành phần này có sự vận động trong khoảng thời gian dài hơn (nhiều năm)
  • Irregular remainder: thành phần nhiễu còn lại sau khi trích xuất hết các thành phần ở trên, nó chỉ ra sự bất thường của các điểm dữ liệu
Time Series Analysis  Decomposition

Thay vì đưa ra dự báo trên Actual Series  là một đường nhìn rất gập ghềnh và khó dự đoán, ta thực hiện trên các thành phần con nhìn có tính quy luật với xu hướng vận động rõ ràng hơn rồi kết hợp các thành phần này lại với nhau, giống như cách ta phân rã ABC*D thành các đường hình sin A,B,C,D như ở trên vậy!

Hiểu thêm về Time Series

Bây giờ, mình sẽ minh họa trên một bộ dữ liệu cụ thể để mọi người cùng hình dung nhé. Bộ dữ liệu này lưu trữ số lượng máy kéo bán ra hàng tháng trong khoảng thời gian từ 2003 đến 2015. Chúng ta cùng nhìn vào biểu diễn trên đồ thị của dữ liệu nhé!

image

Nhắc lại một chút thì Time Series Data có thể được phân rã thành 4 thành phần: Trend, Seasonality, Cycle, Irregular remainder. Cycle chỉ ra xu hướng vận động trong một khoảng thời gian dài (thông thường chu kỳ rơi vào 7 năm hoặc hơn), do dữ liệu của chúng ta không trải đủ rộng nên chúng ta sẽ chỉ còn quan tâm đến 3 thành phần còn lại là Trend, Seasonality và Irregular remainder thôi nhé. Model dự đoán của chúng ta sẽ dựa trên hàm xác định sự phụ thuộc của sale dựa trên các yếu tố nêu trên:

image

Chẳng hạn ta có thể xác định sale thông qua tích của các thành phần:

image

Trend

Để phát hiện ra xu hướng trong dữ liệu, ta dùng một phương pháp phổ biến gọi là trung bình trượt. Giống như việc bạn là quần áo để loại bỏ những nếp nhăn, thì phương pháp này sẽ giúp loại bỏ các đường zigzag lên xuống của đồ thị để xuất ra một xu hướng ổn định trong dữ liệu thông qua việc lấy giá trị trung bình của các giá trị liền kề trong một khoảng thời gian. Công thức của trung bình trượt được xác định như sau:

image

Chúng ta thử lấy trung bình trượt với những khoảng thời gian khác nhau trên bộ dữ liệu ban đầu nhé

image

Đường màu vàng biểu diễn dữ liệu ban đầu, còn đường màu xanh biểu diễn giá trị trung bình trượt. Như chúng ta thấy với giá trị khung thời gian bằng 12 (m=6) cho ta đồ thị gần như tuyến tính với giá trị tăng dần khi đi dọc theo trục tọa độ, đây chính là dạng Trend ta cần phát hiện. Các giá trị khung thời gian nhỏ hơn xuất ra đồ thị vẫn còn các đường lên xuống đan xen nên không cho thấy xu hướng rõ ràng của dữ liệu.

Seasonality

Để khảo sát yếu tố mùa vụ trong dữ liệu, trước hết ta thử thể hiện số lượng máy kéo bán ra theo từng tháng trong mỗi năm nhé.

Seasonality

Như ta có thể thấy, sự vận động của giá trị số lượng bán ra theo từng tháng trong một năm là có sự tương đồng giữa các năm với nhau khi đồ thị xếp chồng có cùng dạng. Lượng máy kéo bán ra gần như đạt đỉnh vào tháng 7 hoặc 8, thấp dần về đầu và cuối năm.
Thành phần mùa vụ cho từng tháng được tính bằng giá trị trung bình của tháng đó (tính từ 2003 đến 2015) sau khi đã loại bỏ Trend

Irregular remainder

Thành phần này chính là thành phần còn lại sau khi đã loại bỏ Trend và Seasonality:

image

Chúng ta mong muốn thành phần Irregular remainder này phải giống như là nhiễu trắng, tức là nó không thể hiện bất kỳ một pattern nào (truely random). Nó thể hiện chúng ta đã xuất hết các information từ dữ liệu chuỗi thời gian ban đầu, giống như việc xay nước mía thì chúng ta mong muốn lấy được hết phần nước, và nhiễu trắng giống như phần bã còn lại  không thể lấy được thêm nước từ phần bã đó.
Cụ thể biểu diễn 3 thành phần này trên đồ thị, ta thu được hình sau:

image

Đây chính là ý tưởng cơ bản cho lớp các thuật toán Time Series Forecasting. Thực thế thì những thuật toán phổ biến cho dữ liệu chuỗi thời gian như ARIMA, Holt-Winters seasonal method sẽ phức tạp hơn thế này. Việc trích xuất các thành phần con từ dữ liệu gốc không phải là đơn giản, giống như việc pha màu: bạn trộn màu vàng với xanh da trời và thu được màu xanh lá cây, vậy từ màu xanh lá cây đó, hãy tách cho tôi hai màu vàng và xanh da trời ban đầu, có dễ dàng không? Bây giờ thì bạn hiểu vấn đề rồi đó, mix nhiều thứ lại là dễ dàng, nhưng tách chúng ra khỏi hỗn hợp thì là một công việc phức tạp hơn rất rất nhiều!

Tuyển Data Engineer, đam mê khai phá dữ liệu lớn và phát triển sản phẩm Business Intelligence cho doanh nghiệp bán lẻ quốc tế. Môi trường làm việc remote, linh hoạt, tự chủ về thời gian và địa điểm làm việc.

Video liên quan