1. 總覽
BigQuery ML (BQML) 可讓使用者在 BigQuery 中使用 SQL 查詢,建立及執行機器學習模型。目標是讓 SQL 使用者能透過現有的工具建立模型,而且不必移動資料,可加快開發速度,使所有人都能輕鬆使用機器學習技術。
建構項目
您需要使用 Analytics 360 資料集來建立預測訪客是否完成交易的模型。
課程內容
如何在 BigQuery 中建立、評估及使用機器學習模型
軟硬體需求
2. 設定和需求
自修環境設定
提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID
。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。
執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
開啟 BigQuery 控制台
在 Google Developer Console 中,按一下畫面左上方的「選單」圖示。
將選單向下捲動至底部,然後按一下「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 日期間收集到的資料。的目的在於儲存上個月的資料以進行「預測」作業。此外,我們將最多收錄 10 萬個資料點,以節省寶貴時間。如果不趕時間,則可移除最後一行。
執行 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. 恭喜!
您已完成本程式碼研究室。想來點挑戰嗎?請嘗試使用 BQML 建立線性迴歸模型。
涵蓋內容
- 建立二元邏輯迴歸模型
- 評估模型
- 使用模型進行預測
後續步驟
- 如要進一步瞭解 BQML,請參閱說明文件。