1. 總覽
BigQuery ML (BQML) 可讓使用者透過 SQL 查詢,在 BigQuery 中建立及執行機器學習模型,目標是讓 SQL 使用者能透過現有的工具建立模型,而且不必移動資料,可加快開發速度,使所有人都能輕鬆使用機器學習技術。
建構項目
您將使用Analytics 360 樣本資料集建立模型,預測訪客是否會完成交易。
課程內容
如何在 BigQuery 建立、評估與使用機器學習模型
軟硬體需求
2. 設定和需求
自修實驗室環境設定



請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID。
- 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。
完成本程式碼研究室的費用應該不高,甚至完全免費。請務必按照「清除」部分的指示操作,瞭解如何停用資源,避免在本教學課程結束後繼續產生帳單費用。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
開啟 BigQuery 控制台
在 Google 開發人員控制台中,按一下畫面左上方的「選單」圖示。

向下捲動選單至底部,然後點選「BigQuery」:

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

但裡面什麼都沒有!幸運的是,BigQuery 中有大量的公開資料集可供探索。
3. 建立資料集
如要建立資料集,請點選專案名稱旁的箭頭,然後選取「建立新資料集」。

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

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,取得模型資訊。在「詳細資料」下,您會找到一些基本的模型資訊,以及用於產生模型的訓練選項。在「訓練統計資料」下方,您會看見類似下方的資料表:

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_error、mean_squared_error、mean_squared_log_error、median_absolute_error、r2_score、explained_variance。如果搭配使用邏輯迴歸模型,上述查詢會傳回下列資料欄:precision、recall、accuracy、f1_score、log_loss、roc_auc。請參閱「機器學習詞彙表」或使用 Google 搜尋,瞭解這些指標的計算方式與意義。
具體來說,您會發現查詢中的 SELECT 和 FROM 部分與訓練時相同。WHERE 部分會反映時間範圍內的變化,而 FROM 部分顯示目前正在呼叫 ml.EVALUATE。您會看見類似下方的資料表:

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 部分。具體來說,我們想瞭解交易國家/地區和各自的總購買量,所以選擇 SELECT、GROUP BY 和 ORDER BY。這裡使用 LIMIT,確保只會傳回前 10 個結果。您會看見類似下方的資料表:

預測各使用者的購買量
再來看看另一個例子。這次,我們將嘗試預測各訪客的交易量、排序結果,並選出交易量排名 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;
您會看見類似下方的資料表:

7. 恭喜!
您已完成本程式碼研究室。想接受挑戰嗎?嘗試使用 BigQuery ML 建立線性迴歸模型。
涵蓋內容
- 建立二元邏輯迴歸模型
- 評估模型
- 使用模型進行預測
後續步驟
- 如要進一步瞭解 BigQuery ML,請參閱說明文件。