開始使用 BigQuery ML

1. 總覽

BigQuery ML (BQML) 可讓使用者透過 SQL 查詢,在 BigQuery 中建立及執行機器學習模型,目標是讓 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 開發人員控制台中,按一下畫面左上方的「選單」圖示。

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 日收集的資料,以保留最後一個月的資料來做「預測」。此外,為節省時間,我們將資料點限制為 100,000 個。如果時間充裕,可以移除最後一行。

執行 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 BY。這裡使用 LIMIT,確保只會傳回前 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. 恭喜!

您已完成本程式碼研究室。想接受挑戰嗎?嘗試使用 BigQuery ML 建立線性迴歸模型。

涵蓋內容

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

後續步驟

  • 如要進一步瞭解 BigQuery ML,請參閱說明文件