開始使用 BigQuery ML

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 建立線性迴歸模型。

涵蓋內容

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

後續步驟