開始使用 BigQuery ML

開始使用 BigQuery ML

程式碼研究室簡介

subject上次更新時間:11月 29, 2021
account_circle作者:Torry Yang

1. 總覽

BigQuery ML (BQML) 可讓使用者在 BigQuery 中使用 SQL 查詢,建立及執行機器學習模型。目標是讓 SQL 使用者能透過現有的工具建立模型,而且不必移動資料,可加快開發速度,使所有人都能輕鬆使用機器學習技術。

您需要使用 Analytics 360 資料集來建立預測訪客是否完成交易的模型。

如何在 BigQuery 中建立、評估及使用機器學習模型

軟硬體需求

2. 設定和需求

自修環境設定

  1. 登入 Cloud 控制台建立新專案,或是重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID

  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

開啟 BigQuery 控制台

在 Google Developer Console 中,按一下畫面左上方的「選單」圖示

select-bq_0.png

將選單向下捲動至底部,然後按一下「BigQuery」

select-bq.png

系統會在新的瀏覽器分頁中開啟 BigQuery 控制台,如下所示:

8b0218390329e8cf.png

但這裡什麼都沒有!幸好,BigQuery 中有許多公開資料集可供您探索。

3. 建立資料集

如要建立資料集,請按一下專案名稱旁邊的箭頭,然後選取「建立新資料集」。

4f51bf57291a59db.png

接著,將資料集命名為 bqml_codelab,然後按一下「確定」。

63e32478a5652fbc.png

4. 建立模型

Analytics 360 的邏輯迴歸

接著來完成任務以下說明如何建立模型來預測訪客是否完成交易。

#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;

這裡,我們使用訪客裝置的作業系統 (無論宣稱的裝置是行動裝置、訪客所在的國家/地區,以及網頁瀏覽量),做為是否進行交易的條件。

在這個例子中是「Codelab」是資料集的名稱和「sample_model」就是模型名稱指定的模型類型是二元邏輯迴歸。在本例中,我們的目標是 label。請注意,如果您只想要 1 個資料欄,這是設定 input_label_cols 的替代方法。此外,訓練資料範圍將僅限於 2016 年 8 月 1 日至 2017 年 6 月 31 日期間收集到的資料。的目的在於儲存上個月的資料以進行「預測」作業。此外,我們將最多收錄 10 萬個資料點,以節省寶貴時間。如果不趕時間,則可移除最後一行。

執行 CREATE MODEL 指令會建立一個以非同步方式執行的查詢工作,因此您可以關閉或重新整理 BigQuery UI 視窗。

[選用] 型號資訊與訓練統計資料

如有需要,您可以在 UI 的「bqml_codelab 資料集」下方按一下「sample_model」,取得模型的相關資訊。請在「詳細資料」下方看到一些用來產生模型的基本模型資訊和訓練選項。「訓練統計資料」下方會顯示類似以下表格:

b8bd9548a0d89165.png

5. 評估模型

評估模型

#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'));

如果搭配線性迴歸模型使用,上述查詢會傳回下列資料欄:mean_absolute_errormean_squared_errormean_squared_log_errormedian_absolute_errorr2_scoreexplained_variance。如果與邏輯迴歸模型搭配使用,上述查詢會傳回下列資料欄:precisionrecallaccuracyf1_scorelog_lossroc_auc。如要瞭解各項指標的計算方式和意義,請參閱機器學習詞彙表或執行 Google 搜尋。

確切來說,您會發現查詢的 SELECTFROM 部分與訓練期間使用相同。WHERE 部分反映了時間範圍的變化,FROM 部分則顯示我們呼叫了 ml.EVALUATE。您會看見類似下方的資料表:

1c7779f6028730cc.png

6. 使用模型

預測各國家/地區的購買量

在這個步驟中,我們會嘗試預測各國家/地區訪客的交易次數、排序結果,並依消費次數選取前 10 名。

#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;

請注意,這項查詢與上一節示範的評估查詢非常相似。我們在這裡使用 ml.PREDICT,而非 ml.EVALUATE,並透過標準 SQL 指令包裝查詢的 BQML 部分。確切來說,我們想瞭解每個國家/地區的國家/地區以及購買總和,這就是我們的 SELECTGROUP BYORDER BYLIMIT 用於確保我們只會取得前 10 名的結果。您會看見類似下方的資料表:

e639f7a409741dcb.png

預測各使用者的購買量

我們再看另一個例子。這次我們會嘗試預測每位訪客的交易次數、排序結果,並按交易量選取前 10 名訪客。

#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;

您會看見類似下方的資料表:

2be1d8fa96e10178.png

7. 恭喜!

您已完成本程式碼研究室。想來點挑戰嗎?請嘗試使用 BQML 建立線性迴歸模型。

涵蓋內容

  • 建立二元邏輯迴歸模型
  • 評估模型
  • 使用模型進行預測

後續步驟