Dự báo chuỗi thời gian bằng Vertex AI và công nghệ học máy BigQuery

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách xây dựng một mô hình dự báo chuỗi thời gian bằng TensorFlow, sau đó tìm hiểu cách triển khai các mô hình này bằng Vertex AI.

Kiến thức bạn sẽ học được

Bạn sẽ tìm hiểu cách:

  • Chuyển đổi dữ liệu để có thể dùng trong một mô hình học máy
  • Trực quan hoá và khám phá dữ liệu
  • Sử dụng BigQuery ML để tạo mô hình dự báo chuỗi thời gian
  • Xây dựng mô hình dự báo chuỗi thời gian bằng TensorFlow bằng cách sử dụng các cấu trúc LSTM và CNN

2. Giới thiệu về tính năng Dự báo chuỗi thời gian

Lớp học lập trình này tập trung vào cách áp dụng các kỹ thuật dự báo chuỗi thời gian bằng Google Cloud Platform. Đây không phải là một khoá học dự báo chuỗi thời gian nói chung, nhưng một chuyến tham quan ngắn gọn về các khái niệm có thể hữu ích cho người dùng của chúng tôi.

Dữ liệu chuỗi thời gian

Trước tiên, chuỗi thời gian là gì? Đây là một tập dữ liệu có dữ liệu được ghi lại theo các khoảng thời gian đều đặn. Tập dữ liệu chuỗi thời gian chứa cả thời gian và ít nhất một biến phụ thuộc vào thời gian.

85af6a1ff05c69f2.png

Thành phần

Chuỗi thời gian có thể được phân tách thành các thành phần:

  • Xu hướng: tăng hoặc giảm theo một quy luật có thể dự đoán được
  • Theo mùa: lặp lại trong một khoảng thời gian cụ thể, chẳng hạn như một ngày, tuần, tháng, mùa, v.v.
  • Ngẫu nhiên: biến động còn lại

Có thể có nhiều lớp theo mùa. Ví dụ: một trung tâm dịch vụ khách hàng có thể nhận thấy một quy luật về số lượng cuộc gọi vào một số ngày nhất định trong tuần cũng như vào một số tháng nhất định. Phần dư có thể được giải thích bằng các biến khác ngoài thời gian.

6e8d45bbbbc388ec.png

Tính dừng

Để có kết quả dự báo tốt nhất, dữ liệu chuỗi thời gian phải được cố định, trong đó các thuộc tính thống kê như giá trị trung bình và phương sai không đổi theo thời gian. Bạn có thể áp dụng các kỹ thuật như lấy hiệu số và loại bỏ xu hướng cho dữ liệu thô để làm cho dữ liệu đó ổn định hơn.

Ví dụ: biểu đồ dưới đây về nồng độ CO2 cho thấy một mẫu hình lặp lại hằng năm với xu hướng tăng. ( Nguồn)

ab82857e2e7d0b89.png

Sau khi loại bỏ xu hướng tuyến tính, dữ liệu sẽ phù hợp hơn để dự báo vì hiện có giá trị trung bình không đổi.

c936381ab1095528.png

Sử dụng dữ liệu chuỗi thời gian cho công nghệ học máy

Để sử dụng dữ liệu chuỗi thời gian trong một vấn đề về học máy, bạn cần chuyển đổi dữ liệu đó để có thể sử dụng các giá trị trước đó nhằm dự đoán các giá trị trong tương lai. Bảng này cho thấy ví dụ về cách tạo các biến trễ để dự đoán mục tiêu.

d667a941dbd470f5.png

Sau khi tìm hiểu một số kiến thức cơ bản, hãy bắt đầu khám phá dữ liệu và dự đoán!

3. Thiết lập môi trường Notebook

Bây giờ chúng ta đã có phần giới thiệu ngắn gọn về dữ liệu, hãy thiết lập môi trường phát triển mô hình.

Bước 1: Bật API

Trình kết nối BigQuery sử dụng BigQuery Storage API. Tìm BigQuery Storage API trong bảng điều khiển rồi bật API này nếu hiện đang tắt.

9895a2fd3cdf8f8c.png

Bước 2: Tạo một sổ tay Vertex AI Workbench

Chuyển đến phần Vertex AI Workbench của Cloud Console rồi nhấp vào New Notebook (Sổ tay mới). Sau đó, hãy chọn loại sổ tay TensorFlow Enterprise 2.x mới nhất không có GPU:

4e7b73eabf2bc061.png

Sử dụng các lựa chọn mặc định rồi nhấp vào Tạo. Sau khi tạo phiên bản, hãy chọn Open JupyterLab (Mở JupyterLab):

18c9f3c462aafaee.png

Sau đó, hãy tạo một sổ tay Python 3 trong JupyterLab:

58523671a252b95a.png

Bước 3: Tải tài liệu về lớp học xuống

Tạo một cửa sổ dòng lệnh mới trong giao diện JupyterLab: File (Tệp) -> New (Mới) -> Terminal (Dòng lệnh).

Từ đó, hãy sao chép tài liệu nguồn bằng lệnh sau:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. Khám phá và trực quan hoá dữ liệu

Trong phần này, bạn sẽ:

  • Tạo một truy vấn nhóm dữ liệu thành chuỗi thời gian
  • Điền các giá trị bị thiếu
  • Trực quan hoá dữ liệu
  • Phân tích chuỗi thời gian thành các thành phần xu hướng và thành phần theo mùa

Bước 1

Trong Vertex AI Workbench, hãy chuyển đến training-data-analyst/courses/ai-for-time-series/notebooks rồi mở 01-explore.ipynb.

Bước 2

Xoá tất cả các ô trong sổ tay (Chỉnh sửa > Xoá tất cả đầu ra), thay đổi chế độ cài đặt khu vực, dự án và nhóm trong một trong những ô đầu tiên, sau đó chạy từng ô.

Bước 3

Trong phần này, bạn đã nhập dữ liệu và trực quan hoá nhiều phương diện của dữ liệu đó. Giờ đây, khi đã có một bức tranh rõ ràng hơn về dữ liệu, bạn sẽ sẵn sàng tiến hành lập mô hình học máy bằng dữ liệu này.

55839e7bc0427915.png

5. Tạo mô hình bằng tính năng Dự đoán chuỗi thời gian của BigQuery

Trong phần này, bạn sẽ:

  • Nhập dữ liệu đầu vào chuỗi thời gian vào một bảng BigQuery
  • Tạo mô hình chuỗi thời gian bằng cú pháp BQML
  • Tìm hiểu cách đánh giá các thông số và độ chính xác của mô hình
  • Dự báo bằng mô hình của bạn

Bước 1

Chúng ta sẽ tạo một bảng BigQuery chứa dữ liệu thô từ tệp CSV mà chúng ta vừa khám phá. Hãy bắt đầu bằng cách tải tệp CSV xuống từ môi trường sổ tay.

Trong thư mục training-data-analyst/courses/ai-for-time-series/notebooks/data, hãy nhấp chuột phải vào cta_ridership.csv rồi Tải tệp này xuống môi trường cục bộ của bạn.

Bước 2

Tiếp theo, chúng ta sẽ tải dữ liệu này lên một bảng BigQuery.

Chuyển đến BigQuery trong bảng điều khiển (bằng cách tìm kiếm hoặc sử dụng đường liên kết này):

649e7ab1c44b75e8.png

Bạn có thể thêm bảng vào một tập dữ liệu mới hoặc hiện có. Tập dữ liệu này sẽ nhóm các bảng có liên quan. Nếu chưa tạo tập dữ liệu, bạn có thể nhấp vào dự án của mình ở góc dưới bên trái, rồi chọn Tạo tập dữ liệu ở góc dưới bên phải.

281b97020cd52f29.png

Chọn tên bạn muốn, chẳng hạn như demo, chấp nhận các giá trị mặc định và tiếp tục.

Khi bạn chọn tập dữ liệu đó, hãy chọn Tạo bảng ở góc dưới cùng bên phải để tạo một bảng mới.

ad47810d44cfb289.png

Đối với các lựa chọn tạo bảng, hãy chọn:

  • Tạo bảng từ: Tải lên
  • Chọn tệp: cta_ridership.csv
  • Tên bảng: cta_ridership
  • Giản đồ: Chọn hộp để tự động phát hiện Giản đồ và các tham số đầu vào

213e4177e9e79544.png

Bước 3

Giờ là lúc tạo mô hình! BigQuery ML cung cấp một cú pháp đơn giản tương tự như SQL, cho phép bạn tạo nhiều loại mô hình.

Trong trình chỉnh sửa truy vấn, hãy dán/nhập truy vấn này, thay thế demo (nếu cần) bằng tên tập dữ liệu của bạn ở cả hai vị trí:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

Hãy xem xét các thành phần chính của cú pháp để hiểu rõ:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Câu lệnh này sẽ tạo mô hình. Có nhiều biến thể của câu lệnh này, ví dụ: CREATE MODEL, nhưng chúng tôi chọn thay thế một mô hình hiện có có cùng tên ở đây.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Ở đây, chúng ta xác định các lựa chọn về mô hình, trong đó lựa chọn đầu tiên là loại mô hình. Khi bạn chọn ARIMA, một mô hình dự báo chuỗi thời gian sẽ được tạo.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

Cột có thông tin về ngày/giờ

TIME_SERIES_DATA_COL=‘total_rides'

Cột dữ liệu

HOLIDAY_REGION=‘us'

Tham số không bắt buộc này cho phép chúng tôi đưa các ngày lễ vào mô hình. Vì quá trình khám phá dữ liệu ở bước trước cho thấy số lượng hành khách thấp hơn vào các ngày lễ và dữ liệu đến từ Chicago, Illinois, Hoa Kỳ, nên chúng ta sẽ đưa các ngày lễ của Hoa Kỳ vào mô hình.

AS SELECT ... FROM ...

Phần này chọn dữ liệu đầu vào mà chúng ta sẽ dùng để huấn luyện mô hình.

Bạn có thể thêm một số lựa chọn khác vào truy vấn, chẳng hạn như xác định một cột nếu có nhiều chuỗi thời gian hoặc chọn xem có tự động khám phá các tham số mô hình ARIMA hay không. Bạn có thể tìm hiểu thêm thông tin chi tiết trong tài liệu tham khảo về cú pháp Câu lệnh CREATE MODEL cho các mô hình chuỗi thời gian.

Bước 4

Hãy cùng tìm hiểu thêm về mô hình của chúng tôi. Sau khi quá trình huấn luyện hoàn tất, hãy chạy một truy vấn khác, đồng thời thay thế demo nếu cần:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

Hãy diễn giải kết quả. Trong mỗi hàng, bạn sẽ thấy một mô hình đề xuất, cùng với các thông số và số liệu thống kê đánh giá của mô hình đó. Kết quả được trả về theo thứ tự tăng dần của AIC (hay tiêu chí thông tin Akaike), cung cấp một chỉ báo tương đối về chất lượng mô hình. Vì vậy, mô hình ở hàng đầu tiên có AIC thấp nhất và được coi là mô hình tốt nhất.

Bạn sẽ có thể xem các tham số p, d và q của mô hình ARIMA, cũng như tính thời vụ được phát hiện trong mô hình. Trong trường hợp này, mô hình hàng đầu bao gồm cả tính thời vụ theo tuần và theo năm.

5b5b1e129c70a340.png

Bước 5

Giờ đây, chúng ta đã sẵn sàng dự đoán bằng hàm ML.FORECAST!

Dán/nhập nội dung sau (thay thế demo nếu cần):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

Truy vấn này chỉ dự báo 7 ngày bằng mô hình của chúng tôi! Bạn có thể thấy 7 hàng được trả về bên dưới. Dự báo cũng bao gồm một khoảng tin cậy, mặc định là 0,95 nhưng có thể định cấu hình trong truy vấn.

b8a7f22657dc2d27.png

Tuyệt vời! Chúng ta đã tạo một mô hình chuỗi thời gian chỉ bằng một vài truy vấn BQML.

6. Tạo mô hình dự báo tuỳ chỉnh

Trong phần này, bạn sẽ:

  • Xoá giá trị ngoại lệ khỏi dữ liệu
  • Thực hiện dự báo nhiều bước
  • Thêm các tính năng khác vào mô hình chuỗi thời gian
  • Tìm hiểu về cấu trúc mạng nơ-ron để dự báo chuỗi thời gian: LSTM và CNN
  • Tìm hiểu về các mô hình thống kê, bao gồm cả phương pháp Holt-Winters Exponential Smoothing
  • Mô hình kết hợp

Bước 1

Trong Vertex AI Workbench, hãy chuyển đến training-data-analyst/courses/ai-for-time-series/notebooks rồi mở 02-model.ipynb.

Bước 2

Xoá tất cả các ô trong sổ tay (Chỉnh sửa > Xoá tất cả đầu ra), thay đổi chế độ cài đặt khu vực, dự án và nhóm trong một trong những ô đầu tiên, sau đó chạy từng ô.

Bước 3

Trong sổ tay này, bạn đã khám phá nhiều cấu trúc mô hình: LSTM, CNN và các mô hình thống kê. Đối với mỗi mô hình, bạn có thể xem hiệu suất của mô hình so với dữ liệu kiểm thử:

a528df58f4e6d372.png

7. Huấn luyện và dự đoán trên đám mây

Trong phần này, bạn sẽ:

  • Chuẩn bị dữ liệu và mô hình để huấn luyện trên đám mây
  • Huấn luyện mô hình và theo dõi tiến trình của công việc bằng AI Platform Training
  • Dự đoán bằng mô hình với Nền tảng Trí tuệ nhân tạo Predictions

Bước 1

Trong Vertex AI Workbench, hãy chuyển đến training-data-analyst/courses/ai-for-time-series/notebooks rồi mở 03-cloud-training.ipynb.

Bước 2

Xoá tất cả các ô trong sổ tay (Chỉnh sửa > Xoá tất cả đầu ra), thay đổi chế độ cài đặt khu vực, dự án và nhóm trong một trong những ô đầu tiên, sau đó chạy từng ô.

Bước 3

Trong phần trước, chúng ta đã huấn luyện một mô hình và dự đoán bằng mô hình đó, tất cả đều nằm trong một sổ tay Workbench. Trong phần này, chúng ta đã minh hoạ cách sử dụng Python SDK cho Vertex AI từ sổ tay của bạn để sử dụng các dịch vụ Vertex AI cho việc huấn luyện và triển khai.

a3f6b5dc895a24fb.png

8. Thách thức

Trong phần này, bạn sẽ thử áp dụng các khái niệm đã học vào một tập dữ liệu mới!

Chúng tôi sẽ không cung cấp hướng dẫn chi tiết, mà chỉ đưa ra một số gợi ý (nếu bạn muốn!).

Mục tiêu là dự đoán các yêu cầu dịch vụ 311 của Thành phố New York. Những yêu cầu không khẩn cấp này bao gồm đơn khiếu nại về tiếng ồn, vấn đề về đèn đường, v.v.

Bước 1

Hãy bắt đầu bằng cách tìm hiểu tập dữ liệu.

Trước tiên, hãy truy cập vào tập dữ liệu Yêu cầu dịch vụ 311 của Thành phố New York.

Để hiểu rõ hơn về dữ liệu, hãy thử một vài truy vấn mẫu được liệt kê trong phần mô tả tập dữ liệu:

  • Có bao nhiêu yêu cầu đến số 311 liên quan đến xe tải bán kem?
  • Những ngày nào có nhiều yêu cầu nhất đến số điện thoại 311 liên quan đến các bữa tiệc?

Trong giao diện người dùng BigQuery, hãy chọn Tạo truy vấn để xem cách truy cập vào tập dữ liệu. Lưu ý rằng câu lệnh chọn đang truy vấn từ bigquery-public-data.new_york_311.311_service_requests.

Bước 2

Chúng tôi đã sẵn sàng bắt đầu. Trong phần này, hãy sửa đổi sổ tay Khám phá và trực quan hoá để xử lý dữ liệu này.

Gợi ý

  • Sao chép sổ tay 01-explore.ipynb rồi bắt đầu làm việc trên bản sao đó.
  • Để khám phá dữ liệu, hãy thử truy vấn sau:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • Để biết số lượng sự cố theo tháng, hãy sử dụng truy vấn này:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • Cập nhật các biến cột trong phần hằng số. Trong truy vấn ở trên, cột đích là y và cột ngày là ds. Không có tính năng bổ sung nào.
  • Hãy cân nhắc việc thay đổi tên tệp mà bạn xuất dữ liệu cho phòng thí nghiệm tiếp theo.
  • Xuất dữ liệu bằng cách sử dụng: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

Bước 3

Bây giờ, hãy tạo một mô hình chuỗi thời gian bằng dữ liệu hằng tháng.

Gợi ý:

  • Sao chép sổ tay 02-model.ipynb rồi bắt đầu làm việc trên bản sao đó.
  • Cập nhật các thông số của tập dữ liệu:
  • Cập nhật các tham số target_colts_col cho phù hợp với tập dữ liệu mới.
  • Cập nhật các thông số mô hình:
  • Tần suất theo tháng (mã cho ngày bắt đầu tháng là "MS")
  • Các bước nhập: 12 (giai đoạn xem lại là 12 tháng)
  • Các bước đầu ra: 3 (dự đoán 3 tháng tới)
  • Mùa: 12 (Tính thời vụ là 12 tháng)
  • Thay đổi tên tệp đầu vào nếu bạn đã thay đổi tên này trong sổ tay trước đó.
  • Nếu bạn chạy truy vấn vào giữa tháng, tổng số lượt chuyển đổi hằng tháng cho tháng cuối cùng sẽ thấp hơn nhiều so với dự kiến. Vì mục đích của phòng thí nghiệm này, hãy xoá tháng cuối cùng khỏi tập dữ liệu bằng cách sử dụng: df = df[:-1]
  • Có vẻ như không có giá trị ngoại lệ rõ ràng nào trong dữ liệu, vì vậy hãy bỏ qua hoặc nhận xét về những ô đó.
  • Điều chỉnh các đơn vị LSTM, bộ lọc CNN và kích thước hạt nhân cho mô hình mới này.

9. Dọn dẹp

Nếu muốn tiếp tục sử dụng sổ tay này, bạn nên tắt sổ tay khi không dùng. Trong giao diện người dùng Workbench của Cloud Console, hãy chọn sổ tay rồi chọn Dừng:

57213ef2edad9257.png

Nếu bạn muốn xoá tất cả tài nguyên đã tạo trong phòng thí nghiệm này, chỉ cần Xoá sổ tay trên băng ghế dự bị thay vì dừng sổ tay đó.

Sử dụng trình đơn Điều hướng trong Cloud Console, hãy duyệt qua Storage (Bộ nhớ) và xoá cả hai vùng chứa mà bạn đã tạo để lưu trữ các thành phần mô hình (CẢNH BÁO: chỉ thực hiện việc này nếu bạn tạo các vùng chứa mới chỉ cho phòng thí nghiệm này).