Làm quen với công nghệ học máy BigQuery

1. Tổng quan

BigQuery ML (BQML) cho phép người dùng tạo và thực thi các mô hình học máy trong BigQuery bằng cách sử dụng truy vấn SQL. Mục tiêu là dân chủ hoá hoạt động học máy bằng cách cho phép chuyên viên SQL xây dựng các mô hình bằng cách sử dụng các công cụ hiện có và tăng tốc độ phát triển bằng cách loại bỏ nhu cầu di chuyển dữ liệu.

Sản phẩm bạn sẽ tạo ra

Bạn sẽ sử dụng tập dữ liệu mẫu của Analytics 360 để tạo một mô hình dự đoán xem khách truy cập có thực hiện giao dịch hay không.

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

Cách tạo, đánh giá và sử dụng các mô hình học máy trong BigQuery

Bạn cần có

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Có kiến thức cơ bản về SQL hoặc BigQuery
  • Tài liệu về BQML

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Hãy nhớ mã dự án, một tên duy nhất trên tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID.

  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.

Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Mở Bảng điều khiển BigQuery

Trong Google Developer Console, hãy nhấp vào biểu tượng Trình đơn ở trên cùng bên trái màn hình.

select-bq_0.png

Di chuyển xuống cuối trình đơn, rồi nhấp vào BigQuery:

select-bq.png

Thao tác này sẽ mở bảng điều khiển BigQuery trong một thẻ trình duyệt mới, có dạng như sau:

8b0218390329e8cf.png

Nhưng không có gì ở đây cả! Rất may là có vô số tập dữ liệu công khai trong BigQuery để bạn khám phá.

3. Tạo tập dữ liệu

Để tạo một tập dữ liệu, hãy nhấp vào mũi tên bên cạnh tên dự án rồi chọn tạo tập dữ liệu mới.

4f51bf57291a59db.png

Tiếp theo, hãy đặt tên cho tập dữ liệu của bạn là bqml_codelab rồi nhấp vào OK.

63e32478a5652fbc.png

4. Tạo mô hình

Hồi quy logistic cho Analytics 360

Bây giờ, hãy chuyển sang nhiệm vụ của chúng ta. Sau đây là cách bạn tạo một mô hình để dự đoán liệu khách truy cập có thực hiện giao dịch hay không.

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.sample_model` 
OPTIONS(model_type='logistic_reg') AS
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170631'
LIMIT 100000;

Ở đây, chúng tôi sử dụng hệ điều hành của thiết bị mà khách truy cập sử dụng, liệu thiết bị đó có phải là thiết bị di động hay không, quốc gia của khách truy cập và số lượt xem trang làm tiêu chí để xác định xem giao dịch đã được thực hiện hay chưa.

Trong trường hợp này, "codelab" là tên của tập dữ liệu và "sample_model" là tên của mô hình. Loại mô hình được chỉ định là hồi quy logistic nhị phân. Trong trường hợp này, label là giá trị mà chúng ta đang cố gắng điều chỉnh. Xin lưu ý rằng nếu bạn chỉ quan tâm đến 1 cột, thì đây là một cách khác để thiết lập input_label_cols. Chúng tôi cũng giới hạn dữ liệu huấn luyện ở những dữ liệu được thu thập từ ngày 1 tháng 8 năm 2016 đến ngày 31 tháng 6 năm 2017. Chúng tôi làm việc này để lưu dữ liệu của tháng trước cho mục "dự đoán". Hơn nữa, chúng ta sẽ giới hạn ở 100.000 điểm dữ liệu để tiết kiệm thời gian. Bạn có thể xoá dòng cuối cùng nếu không vội.

Việc chạy lệnh CREATE MODEL sẽ tạo một Công việc truy vấn chạy không đồng bộ để bạn có thể đóng hoặc làm mới cửa sổ giao diện người dùng BigQuery.

[Không bắt buộc] Thông tin về mô hình và số liệu thống kê về hoạt động huấn luyện

Nếu quan tâm, bạn có thể xem thông tin về mô hình bằng cách nhấp vào sample_model trong tập dữ liệu bqml_codelab trong giao diện người dùng. Trong phần Chi tiết, bạn sẽ thấy một số thông tin cơ bản về mô hình và các lựa chọn huấn luyện được dùng để tạo ra mô hình. Trong phần Training Stats (Số liệu thống kê về hoạt động huấn luyện), bạn sẽ thấy một bảng tương tự như bảng này:

b8bd9548a0d89165.png

5. Đánh giá mô hình

Đánh giá mô hình của chúng tôi

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.sample_model`, (
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));

Nếu được dùng với mô hình hồi quy tuyến tính, truy vấn ở trên sẽ trả về các cột sau: mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score, explained_variance. Nếu được dùng với mô hình hồi quy logistic, truy vấn trên sẽ trả về các cột sau: precision, recall, accuracy, f1_score, log_loss, roc_auc. Vui lòng tham khảo bảng chú giải về học máy hoặc tìm kiếm trên Google để hiểu cách tính và ý nghĩa của từng chỉ số này.

Cụ thể, bạn sẽ nhận thấy phần SELECTFROM của truy vấn giống hệt với phần được dùng trong quá trình huấn luyện. Phần WHERE phản ánh sự thay đổi về khung thời gian và phần FROM cho thấy chúng ta đang gọi ml.EVALUATE. Bạn sẽ thấy một bảng tương tự như sau:

1c7779f6028730cc.png

6. Sử dụng mô hình

Dự đoán số lượt mua hàng theo quốc gia

Ở đây, chúng tôi cố gắng dự đoán số lượng giao dịch do khách truy cập ở mỗi quốc gia thực hiện, sắp xếp kết quả và chọn 10 quốc gia hàng đầu theo số lượng giao dịch mua.

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY country
ORDER BY total_predicted_purchases DESC
LIMIT 10;

Lưu ý rằng truy vấn này rất giống với truy vấn đánh giá mà chúng ta đã minh hoạ trong phần trước. Thay vì ml.EVALUATE, chúng ta sẽ sử dụng ml.PREDICT ở đây và gói phần BQML của truy vấn bằng các lệnh SQL chuẩn. Cụ thể, chúng tôi quan tâm đến quốc gia và tổng số giao dịch mua của từng quốc gia, vì vậy, đó là những gì chúng tôi SELECT, GROUP BYORDER BY. LIMIT được dùng ở đây để đảm bảo chúng ta chỉ nhận được 10 kết quả hàng đầu. Bạn sẽ thấy một bảng tương tự như sau:

e639f7a409741dcb.png

Dự đoán số giao dịch mua trên mỗi người dùng

Sau đây là một ví dụ khác. Lần này, chúng ta sẽ cố gắng dự đoán số lượng giao dịch mà mỗi khách truy cập thực hiện, sắp xếp kết quả và chọn ra 10 khách truy cập hàng đầu theo số lượng giao dịch.

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country,
  fullVisitorId
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY fullVisitorId
ORDER BY total_predicted_purchases DESC
LIMIT 10;

Bạn sẽ thấy một bảng tương tự như sau:

2be1d8fa96e10178.png

7. Xin chúc mừng!

Bạn đã hoàn tất lớp học lập trình này. Bạn đang tìm thử thách? Hãy thử tạo mô hình hồi quy tuyến tính bằng BQML.

Nội dung đã đề cập

  • Tạo mô hình hồi quy logistic nhị phân
  • Đánh giá mô hình
  • Sử dụng mô hình để đưa ra dự đoán

Các bước tiếp theo

  • Để biết thêm thông tin về BQML, vui lòng tham khảo tài liệu.