Tiếng Việt

Khai phá sức mạnh của dữ liệu chuỗi thời gian với các hàm cửa sổ. Hướng dẫn này bao gồm các khái niệm thiết yếu, ví dụ thực tế và kỹ thuật nâng cao để phân tích dữ liệu.

Phân tích Chuỗi thời gian: Làm chủ Hàm Cửa sổ để Khai phá Dữ liệu

Dữ liệu chuỗi thời gian, đặc trưng bởi tính tuần tự và phụ thuộc vào thời gian, có mặt ở khắp mọi nơi trong các ngành công nghiệp. Từ việc theo dõi giá cổ phiếu và giám sát lưu lượng truy cập trang web đến phân tích các chỉ số cảm biến và dự báo xu hướng bán hàng, khả năng trích xuất những hiểu biết có ý nghĩa từ dữ liệu chuỗi thời gian là rất quan trọng để đưa ra quyết định sáng suốt. Các hàm cửa sổ cung cấp một bộ công cụ mạnh mẽ và linh hoạt để thực hiện các phép tính trên một tập hợp các hàng có liên quan đến hàng hiện tại trong một bảng hoặc khung dữ liệu, khiến chúng trở nên không thể thiếu trong phân tích chuỗi thời gian.

Tìm hiểu về Dữ liệu Chuỗi thời gian

Dữ liệu chuỗi thời gian là một chuỗi các điểm dữ liệu được lập chỉ mục theo thứ tự thời gian. Các điểm dữ liệu có thể đại diện cho nhiều chỉ số khác nhau, chẳng hạn như:

Phân tích dữ liệu chuỗi thời gian bao gồm việc xác định các mẫu, xu hướng và tính thời vụ, có thể được sử dụng để dự báo các giá trị trong tương lai, phát hiện các điểm bất thường và tối ưu hóa các quy trình kinh doanh.

Giới thiệu về Hàm Cửa sổ

Hàm cửa sổ, còn được gọi là hàm tổng hợp cửa sổ hoặc hàm phân tích, cho phép bạn thực hiện các phép tính trên một tập hợp các hàng liên quan đến hàng hiện tại, mà không cần nhóm các hàng thành một tập kết quả duy nhất như các hàm tổng hợp truyền thống (ví dụ: SUM, AVG, COUNT). Khả năng này đặc biệt hữu ích cho việc phân tích chuỗi thời gian, nơi bạn thường cần tính toán trung bình động, tổng tích lũy và các chỉ số dựa trên thời gian khác.

Một hàm cửa sổ thường bao gồm các thành phần sau:

  1. Hàm: Phép tính sẽ được thực hiện (ví dụ: AVG, SUM, RANK, LAG).
  2. Mệnh đề OVER: Xác định cửa sổ các hàng được sử dụng cho phép tính.
  3. Mệnh đề PARTITION BY (tùy chọn): Chia dữ liệu thành các phân vùng, và hàm cửa sổ được áp dụng độc lập cho từng phân vùng.
  4. Mệnh đề ORDER BY (tùy chọn): Chỉ định thứ tự của các hàng trong mỗi phân vùng.
  5. Mệnh đề ROWS/RANGE (tùy chọn): Xác định khung cửa sổ, là tập hợp các hàng so với hàng hiện tại được sử dụng cho phép tính.

Các khái niệm và cú pháp chính

1. Mệnh đề OVER()

Mệnh đề OVER() là trung tâm của một hàm cửa sổ. Nó xác định cửa sổ các hàng mà hàm sẽ hoạt động trên đó. Một mệnh đề OVER() đơn giản không có đối số sẽ coi toàn bộ tập kết quả là cửa sổ. Ví dụ:

Ví dụ SQL:

SELECT
  date,
  sales,
  AVG(sales) OVER()
FROM
  sales_data;

Truy vấn này tính toán doanh số bán hàng trung bình trên tất cả các ngày trong bảng sales_data.

2. PARTITION BY

Mệnh đề PARTITION BY chia dữ liệu thành các phân vùng, và hàm cửa sổ được áp dụng riêng cho từng phân vùng. Điều này hữu ích khi bạn muốn tính toán các chỉ số cho các nhóm khác nhau trong dữ liệu của mình.

Ví dụ SQL:

SELECT
  date,
  product_id,
  sales,
  AVG(sales) OVER (PARTITION BY product_id)
FROM
  sales_data;

Truy vấn này tính toán doanh số bán hàng trung bình cho từng sản phẩm một cách riêng biệt.

3. ORDER BY

Mệnh đề ORDER BY chỉ định thứ tự của các hàng trong mỗi phân vùng. Điều này rất cần thiết để tính tổng lũy kế, trung bình động và các chỉ số dựa trên thời gian khác.

Ví dụ SQL:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date)
FROM
  sales_data;

Truy vấn này tính toán tổng tích lũy của doanh số bán hàng theo thời gian.

4. ROWS/RANGE

Các mệnh đề ROWSRANGE xác định khung cửa sổ, là tập hợp các hàng so với hàng hiện tại được sử dụng cho phép tính. Mệnh đề ROWS chỉ định khung cửa sổ dựa trên số hàng vật lý, trong khi mệnh đề RANGE chỉ định khung cửa sổ dựa trên giá trị của cột ORDER BY.

Ví dụ ROWS:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Truy vấn này tính toán trung bình động của doanh số bán hàng trong 3 ngày qua (bao gồm cả ngày hiện tại).

Ví dụ RANGE:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Truy vấn này tính toán trung bình động của doanh số bán hàng trong 2 ngày qua (bao gồm cả ngày hiện tại). Lưu ý rằng RANGE yêu cầu một cột được sắp xếp có kiểu dữ liệu là số hoặc ngày/giờ.

Các Hàm Cửa sổ Phổ biến cho Phân tích Chuỗi thời gian

1. Trung bình trượt/Trung bình động

Trung bình trượt, còn được gọi là trung bình động, là một kỹ thuật được sử dụng rộng rãi để làm mịn các biến động ngắn hạn trong dữ liệu chuỗi thời gian và làm nổi bật các xu hướng dài hạn. Nó được tính bằng cách lấy trung bình các giá trị trong một cửa sổ thời gian xác định.

Ví dụ SQL:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
  sales_data;

Truy vấn này tính toán trung bình động 7 ngày của doanh số bán hàng.

Ví dụ Python (sử dụng Pandas):

import pandas as pd

# Giả sử bạn có một DataFrame Pandas tên là 'sales_df' với các cột 'date' và 'sales'

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

Ví dụ ứng dụng toàn cầu: Một nhà bán lẻ đa quốc gia có thể sử dụng trung bình động 30 ngày để làm mịn các biến động doanh số hàng ngày và xác định các xu hướng bán hàng cơ bản trên các khu vực khác nhau.

2. Tổng tích lũy

Tổng tích lũy, còn được gọi là tổng chạy, tính tổng các giá trị cho đến hàng hiện tại. Nó hữu ích để theo dõi tổng giá trị tích lũy theo thời gian.

Ví dụ SQL:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
  sales_data;

Truy vấn này tính toán tổng tích lũy của doanh số bán hàng theo thời gian.

Ví dụ Python (sử dụng Pandas):

import pandas as pd

# Giả sử bạn có một DataFrame Pandas tên là 'sales_df' với các cột 'date' và 'sales'

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

Ví dụ ứng dụng toàn cầu: Một công ty thương mại điện tử quốc tế có thể sử dụng doanh số tích lũy để theo dõi tổng doanh thu được tạo ra từ việc ra mắt sản phẩm mới ở các thị trường khác nhau.

3. Lead và Lag

Các hàm LEADLAG cho phép bạn truy cập dữ liệu từ các hàng kế tiếp hoặc trước đó, tương ứng. Chúng hữu ích để tính toán các thay đổi theo từng kỳ, xác định xu hướng và so sánh các giá trị qua các khoảng thời gian khác nhau.

Ví dụ SQL:

SELECT
  date,
  sales,
  LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
  sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
  sales_data;

Truy vấn này tính toán chênh lệch doanh số so với ngày hôm trước. Hàm LAG(sales, 1, 0) truy xuất giá trị doanh số từ hàng trước đó (độ lệch 1), và nếu không có hàng nào trước đó (ví dụ: hàng đầu tiên), nó sẽ trả về 0 (giá trị mặc định).

Ví dụ Python (sử dụng Pandas):

import pandas as pd

# Giả sử bạn có một DataFrame Pandas tên là 'sales_df' với các cột 'date' và 'sales'

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)

Ví dụ ứng dụng toàn cầu: Một hãng hàng không toàn cầu có thể sử dụng các hàm lead và lag để so sánh doanh số bán vé cho cùng một tuyến đường qua các tuần khác nhau và xác định các biến động nhu cầu tiềm ẩn.

4. Rank và Dense Rank

Các hàm RANK()DENSE_RANK() gán một thứ hạng cho mỗi hàng trong một phân vùng dựa trên thứ tự đã chỉ định. RANK() gán các thứ hạng có khoảng trống (ví dụ: 1, 2, 2, 4), trong khi DENSE_RANK() gán các thứ hạng không có khoảng trống (ví dụ: 1, 2, 2, 3).

Ví dụ SQL:

SELECT
  date,
  sales,
  RANK() OVER (ORDER BY sales DESC) AS sales_rank,
  DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
  sales_data;

Truy vấn này xếp hạng các giá trị doanh số theo thứ tự giảm dần.

Ví dụ ứng dụng toàn cầu: Một sàn thương mại điện tử toàn cầu có thể sử dụng các hàm xếp hạng để xác định các sản phẩm bán chạy nhất ở mỗi quốc gia hoặc khu vực.

Các Kỹ thuật và Ứng dụng Nâng cao

1. Kết hợp các Hàm Cửa sổ

Các hàm cửa sổ có thể được kết hợp để thực hiện các phép tính phức tạp hơn. Ví dụ, bạn có thể tính trung bình động của tổng tích lũy.

Ví dụ SQL:

SELECT
  date,
  sales,
  AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
  (
    SELECT
      date,
      sales,
      SUM(sales) OVER (ORDER BY date) AS cumulative_sales
    FROM
      sales_data
  ) AS subquery;

2. Sử dụng Hàm Cửa sổ với Tổng hợp có Điều kiện

Bạn có thể sử dụng các hàm cửa sổ kết hợp với tổng hợp có điều kiện (ví dụ: sử dụng câu lệnh CASE) để thực hiện các phép tính dựa trên các điều kiện cụ thể.

Ví dụ SQL:

SELECT
  date,
  sales,
  AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
  sales_data;

Truy vấn này tính toán trung bình động của doanh số chỉ cho những ngày có doanh số lớn hơn 100.

3. Phân rã Chuỗi thời gian

Các hàm cửa sổ có thể được sử dụng để phân rã một chuỗi thời gian thành các thành phần xu hướng, thời vụ và phần dư. Điều này bao gồm việc tính toán trung bình động để ước tính xu hướng, xác định các mẫu thời vụ, và sau đó trừ đi các thành phần xu hướng và thời vụ để thu được phần dư.

4. Phát hiện Bất thường

Các hàm cửa sổ có thể được sử dụng để phát hiện các điểm bất thường trong dữ liệu chuỗi thời gian bằng cách tính toán trung bình động và độ lệch chuẩn. Các điểm dữ liệu nằm ngoài một phạm vi nhất định (ví dụ: +/- 3 độ lệch chuẩn so với trung bình động) có thể được đánh dấu là bất thường.

Ví dụ thực tế trong các ngành

1. Tài chính

2. Bán lẻ

3. Sản xuất

4. Chăm sóc Sức khỏe

Lựa chọn Công cụ Phù hợp

Các hàm cửa sổ có sẵn trong nhiều công cụ xử lý dữ liệu và ngôn ngữ lập trình khác nhau, bao gồm:

Việc lựa chọn công cụ phụ thuộc vào nhu cầu cụ thể và chuyên môn kỹ thuật của bạn. SQL rất phù hợp cho dữ liệu được lưu trữ trong các cơ sở dữ liệu quan hệ, trong khi Python và Spark linh hoạt hơn để xử lý các bộ dữ liệu lớn và thực hiện các phân tích phức tạp.

Các Thực tiễn Tốt nhất

Kết luận

Các hàm cửa sổ là một công cụ mạnh mẽ để phân tích chuỗi thời gian, cho phép bạn tính toán trung bình động, tổng tích lũy, giá trị lead/lag và các chỉ số dựa trên thời gian khác. Bằng cách làm chủ các hàm cửa sổ, bạn có thể khai phá những hiểu biết quý giá từ dữ liệu chuỗi thời gian của mình và đưa ra các quyết định sáng suốt hơn. Cho dù bạn đang phân tích dữ liệu tài chính, dữ liệu bán hàng, dữ liệu cảm biến hay dữ liệu lưu lượng truy cập web, các hàm cửa sổ đều có thể giúp bạn xác định các mẫu, xu hướng và điểm bất thường mà khó có thể phát hiện bằng các kỹ thuật tổng hợp truyền thống. Bằng cách hiểu các khái niệm và cú pháp chính của các hàm cửa sổ và tuân theo các thực tiễn tốt nhất, bạn có thể tận dụng chúng một cách hiệu quả để giải quyết một loạt các vấn đề thực tế trong các ngành công nghiệp khác nhau.