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ô 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 AI Vertex.

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 để dùng trong mô hình học máy
  • Trực quan hoá và khám phá dữ liệu
  • Sử dụng công nghệ học máy BigQuery để 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 kiến trúc LSTM và CNN

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

Trọng tâm của lớp học lập trình này là cách áp dụng 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 chung về dự báo chuỗi thời gian, nhưng việc giới thiệu ngắn gọn về các khái niệm này có thể giúp ích cho người dùng.

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

Trước hết, chuỗi thời gian là gì? Đây là một tập dữ liệu chứa dữ liệu được ghi lại tại các khoảng thời gian không đổi. Một tập dữ liệu chuỗi thời gian chứa cả giá trị thời gian và ít nhất một biến phụ thuộc vào thời gian.

85af6a1ff05c69f2.pngS

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: di chuyển lên hoặc xuống theo mô hình dễ dự đoán một cách hợp lý
  • Theo mùa: lặp lại trong một khoảng thời gian cụ thể, chẳng hạn như ngày, tuần, tháng, mùa, v.v.
  • Ngẫu nhiên: biến động dư

Có thể có nhiều lớp tính thời vụ. Ví dụ: tổng đài có thể thấy một mẫu về số lượng cuộc gọi vào những ngày nhất định trong tuần cũng như vào những tháng nhất định. Các biến số còn lại có thể được giải thích ngoài thời gian.

6e8d45bbbbc388ec.png.

Trạm trụ

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

Ví dụ: Biểu đồ thể hiện nồng độ CO2 dưới đây cho thấy chu kỳ hằng năm lặp lại với xu hướng tăng lên. ( Nguồn)

ab82857e2e7d0b89.png

Sau khi xoá xu hướng tuyến tính, dữ liệu 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 bài tập học máy, dữ liệu đó cần được biến đổi để có thể 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 một ví dụ về cách các biến bị trễ được tạo để giúp dự đoán mục tiêu.

d667a941dbd470f5.png

Giờ đây, khi chúng ta đã tìm hiểu một số nguyên tắc cơ bản, hãy bắt đầu khám phá dữ liệu và dự báo!

3. Thiết lập môi trường Sổ tay

Giờ đây, khi đã 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ếu API đó đang tắt.

9895a2fd3cdf8f8c.png.

Bước 2: Tạo sổ tay trong Vertex AI Workbench

Chuyển đến mục Vertex AI Workbench (Bảng điều khiển Cloud) 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 tuỳ 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:

18c9f3c462aafaee.pngS

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

58523671a252b95a.pngS

Bước 3: Tải tài liệu phòng thí nghiệm xuống

Tạo cửa sổ Terminal mới từ giao diện JupyterLab: File -> Mới -> Terminal.

Sau đó, 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 giúp nhóm dữ liệu theo chuỗi thời gian
  • Điền các giá trị còn thiếu
  • Trực quan hoá dữ liệu
  • Phân rã 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ả ô trong sổ tay (Chỉnh sửa > Xoá tất cả kết quả đầu ra), thay đổi chế độ cài đặt khu vực, dự án và bộ chứa ở một trong vài ô đầ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ình bày trực quan nhiều phương diện của dữ liệu đó. Giờ đây, khi đã hiểu rõ hơn về dữ liệu, bạn có thể chuyển sang quy trình lập mô hình học máy bằng dữ liệu này.

55839e7bc0427915.pngS

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

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

  • Nhập dữ liệu đầu vào của chuỗi thời gian vào 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ự đoán bằng mô hình của bạn

Bước 1

Chúng ta sẽ tạo một bảng BigQuery bằng dữ liệu thô từ tệp CSV mà chúng ta vừa tìm hiểu. Hãy bắt đầu bằng cách tải tệp CSV xuống từ môi trường của 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 nhấp vào Tải xuống thư mục đó vào 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 liên quan với nhau. Trong trường hợp chưa tạo tập dữ liệu, bạn có thể nhấp vào dự án ở 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.pngS

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

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

ad47810d44cfb289.png

Đối với các chế độ tạo bảng, hãy chọn:

  • Tạo bảng bằng: Tải lên
  • Chọn tệp: cta_ridership.csv
  • Tên bảng: cta_ridership
  • Giản đồ: Đánh dấu vào hộp để tự động phát hiện Giản đồ và tham số dữ liệu nhập

213e4177e9e79544.pngS

Bước 3

Đã đến lúc tạo mô hình của chúng ta! BigQuery ML cung cấp 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ế bản minh hoạ nếu cần bằng tên tập dữ liệu ở 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 qua 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 tuyên bố 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 tại đây.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

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

TIME_SERIES_TIMESTAMP_COL=‘service_date'

Cột có thông tin 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 ta đưa ngày nghỉ vào mô hình. Vì dữ liệu khám phá dữ liệu của chúng tôi ở bước trước cho thấy rằng lượng hành khách ít hơn vào các ngày lễ và dữ liệu đến từ Chicago, IL, Hoa Kỳ, nên chúng tôi thêm các ngày lễ của Hoa Kỳ vào mô hình này.

AS SELECT ... FROM ...

Phần này chọn dữ liệu đầu vào mà chúng tôi sẽ 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 bạn có nhiều chuỗi thời gian hoặc chọn xem có tự động khám phá các tham số của 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 cú pháp TẠO MÔ HÌNH cho 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 huấn luyện xong, hãy chạy một truy vấn khác, một lần nữa thay thế bản minh hoạ nếu cần:

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

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

Bạn có thể xem các thông 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ụ hằng tuần và hằng năm.

5b5b1e129c70a340.pngS

Bước 5

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

Dán/nhập vào nội dung sau (thay thế bản minh hoạ nếu cần):

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

Truy vấn này chỉ dự đoán rằng sau 7 ngày nữa sẽ hết bằng mô hình của chúng tôi! Chúng ta có thể thấy 7 hàng được trả về bên dưới. Thông tin 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 tôi đã tạo mô hình chuỗi thời gian chỉ bằng một vài truy vấn BQML.

6. Xây dựng mô hình dự báo tuỳ chỉnh

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

  • Xoá các điểm ngoại lai khỏi dữ liệu
  • Dự báo nhiều bước
  • Cung cấp các tính năng bổ sung trong mô hình chuỗi thời gian
  • Tìm hiểu về kiến 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 làm mượt luỹ thừa Holt-Winters
  • Mô hình Ensemble

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ả ô trong sổ tay (Chỉnh sửa > Xoá tất cả kết quả đầu ra), thay đổi chế độ cài đặt khu vực, dự án và bộ chứa ở một trong vài ô đầu tiên, sau đó Chạy từng ô.

Bước 3

Giờ đây, bạn đã khám phá nhiều cấu trúc mô hình trong sổ tay: LSTM, CNN và 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 đó dựa trên dữ liệu thử nghiệm:

a528df58f4e6d372.png

7. Luyện tập 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 để đào tạo trên đám mây
  • Huấn luyện mô hình và theo dõi tiến độ công việc thông qua chương trình Đào tạo về nền tảng AI
  • Dự đoán bằng mô hình bằng tính năng Dự đoán của nền tảng AI

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ả ô trong sổ tay (Chỉnh sửa > Xoá tất cả kết quả đầu ra), thay đổi chế độ cài đặt khu vực, dự án và bộ chứa ở một trong vài ô đầ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 về mô hình đó, tất cả đều có trong một sổ tay Workbench. Trong phần này, chúng tôi đã trình bày cách sử dụng Python SDK cho Vertex AI trong sổ tay của bạn để đào tạo và triển khai các dịch vụ Vertex AI.

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, chỉ là một số gợi ý (nếu bạn muốn!).

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

Bước 1

Hãy bắt đầu bằng cách tìm hiểu về 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:

  • Số lượng yêu cầu 311 liên quan đến xe bán kem là bao nhiêu?
  • Những ngày nào nhận được nhiều nhất 311 yêu cầu có liên quan đến các bên?

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á để làm việc với dữ liệu này.

Gợi ý

  • Sao chép sổ tay 01-explore.ipynb rồi bắt đầu làm việc từ sổ tay đó.
  • Để 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ố sự cố theo tháng, hãy sử dụng truy vấn sau:
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ủa cột trong mục hằng số. Trong truy vấn trên, cột mục tiêu là y và cột ngày là ds. Không có tính năng bổ sung.
  • 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: 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 từ sổ tay đó.
  • Cập nhật các tham số của tập dữ liệu:
  • Cập nhật các tham số target_colts_col để khớp với tập dữ liệu mới.
  • Cập nhật các thông số của mô hình:
  • Tần suất hằng 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)
  • Bước đầu ra: 3 (dự đoán cho 3 tháng tiếp theo)
  • Mùa: 12 (Theo thời vụ là 12 tháng)
  • Thay đổi tên tệp nhập nếu bạn đã thay đổi tên trong sổ tay trước.
  • Nếu bạn chạy truy vấn vào giữa tháng, tổng số hằng tháng của tháng cuối cùng sẽ thấp hơn nhiều so với dự kiến. Do đó, để phục 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ó điểm ngoại lai rõ ràng nào trong dữ liệu, vì vậy hãy bỏ qua hoặc đánh dấu các ô đó.
  • Điều chỉnh các đơn vị LSTM và bộ lọc CNN cũng như 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 sử dụng. Trong giao diện người dùng Workbench trong Cloud Console, hãy chọn sổ tay rồi chọn Stop (Dừng):

57213ef2edad9257.pngS

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

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