在 BigQuery ML 中建立機器學習模型
本教學課程說明如何使用 Google Cloud 控制台中的 BigQuery ML 建立邏輯迴歸模型。
BigQuery ML 可讓您使用 SQL 查詢,在 BigQuery 中建立及訓練機器學習模型。這樣一來,您就能使用 BigQuery SQL 編輯器等熟悉的工具,更輕鬆地運用機器學習技術,並省去將資料移至獨立機器學習環境的麻煩,進而加快開發速度。
在本教學課程中,不論網站訪客是否確實完成交易,都可以使用 BigQuery 專用的 Google Analytics 樣本資料集來建立一個預測模型。如要瞭解 Analytics 資料集的結構定義,請參閱 Analytics 說明中心內的「BigQuery 匯出結構定義」。
目標
本教學課程將說明如何執行下列工作:
- 使用
CREATE MODEL
陳述式建立二元邏輯迴歸模型。 - 使用
ML.EVALUATE
函式評估模型。 - 使用
ML.PREDICT
函式,透過模型進行預測。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- BigQuery
- BigQuery ML
如要進一步瞭解 BigQuery 費用,請參閱 BigQuery 定價頁面。
如要進一步瞭解 BigQuery ML 費用,請參閱 BigQuery ML 定價。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Make sure that you have the following role or roles on the project: BigQuery Data Editor, BigQuery Job User, Service Usage Admin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
前往「IAM」頁面 - 選取專案。
- 按一下「授予存取權」 。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是 Google 帳戶的電子郵件地址。
- 在「Select a role」(選取角色) 清單中,選取角色。
- 如要授予其他角色,請按一下 「新增其他角色」,然後新增每個其他角色。
- 按一下 [Save]。
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Make sure that you have the following role or roles on the project: BigQuery Data Editor, BigQuery Job User, Service Usage Admin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
前往「IAM」頁面 - 選取專案。
- 按一下「授予存取權」 。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是 Google 帳戶的電子郵件地址。
- 在「Select a role」(選取角色) 清單中,選取角色。
- 如要授予其他角色,請按一下 「新增其他角色」,然後新增每個其他角色。
- 按一下 [Save]。
-
- 新專案會自動啟用 BigQuery。如要在現有專案中啟用 BigQuery,請前往
Enable the BigQuery API.
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點按
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。針對「Location type」(位置類型) 選取「Multi-region」(多區域),然後選取「US (multiple regions in United States)」(us (多個美國區域))。
其餘設定請保留預設狀態,然後按一下「Create dataset」(建立資料集)。
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能的完整參數清單,請參閱 bq mk --dataset
指令參考資料。
建立名為「
bqml_tutorial
」的資料集,並將資料位置設為「US
」,以及說明設為「BigQuery ML tutorial dataset
」:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
這個指令採用
-d
捷徑,而不是使用--dataset
旗標。如果您省略-d
和--dataset
,該指令預設會建立資料集。確認資料集已建立完成:
bq ls
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
建立邏輯迴歸模型
使用 BigQuery 的 Analytics 範例資料集建立邏輯迴歸模型。
SQL
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
CREATE OR REPLACE MODEL `bqml_tutorial.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 '20170630'
查詢需要幾分鐘才會完成。初次迭代作業完成後,您的模型 (
sample_model
) 會出現在導覽面板中。由於查詢是使用CREATE MODEL
陳述式建立模型,因此您不會看到查詢結果。
查詢詳細資料
CREATE MODEL
陳述式會建立模型,然後使用查詢的 SELECT
陳述式擷取的資料訓練模型。
OPTIONS(model_type='logistic_reg')
子句會建立邏輯迴歸模型。邏輯迴歸模型會將輸入資料分成兩個類別,然後估算資料屬於其中一個類別的機率。您要偵測的內容 (例如電子郵件是否為垃圾郵件) 以 1 表示,其他值則以 0 表示。介於 0 到 1 之間的值,表示指定值屬於您要偵測的類別的可能性。舉例來說,如果電子郵件的機率估計值為 0.9,則該郵件有 90% 的機率是垃圾郵件。
這個查詢的 SELECT
語法會擷取下列欄位,模型會使用這些欄位預測顧客完成交易的機率:
totals.transactions
:訪客於當次工作階段內所達成的電子商務交易總數,若交易次數是NULL
,label
欄位的值就會被設為0
,否則該欄位就會被設定為1
,這些值皆可用來表示可能的結果。若要在CREATE MODEL
陳述式中設定input_label_cols=
選項,那麼建立一個名為label
的別名是可行的替代方案。device.operatingSystem
:訪客裝置的作業系統。device.isMobile
:用來表示訪客的裝置是否為行動裝置。geoNetwork.country
:以 IP 位址為依據,顯示工作階段的來源國家/地區。totals.pageviews
:當次工作階段的總檢視頁數。
FROM
子句 - 導致查詢使用 bigquery-public-data.google_analytics_sample.ga_sessions
範例資料表訓練模型。這些資料表會依日期分割,因此您可以在資料表名稱中使用萬用字元來匯總資料表:google_analytics_sample.ga_sessions_*
。
WHERE
子句 (_TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
) 會限制查詢掃描的資料表數量。而所掃描的日期區間則是從 2016 年 8 月 1 日到 2017 年 6 月 30 日。
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
查看模型的損失統計資料
機器學習是指建立一個可透過資料進行預測的模型,此模型是一個可接收資料輸入的功能,並且能夠針對輸入資料進行運算,進而產生輸出,也就是預測。
機器學習演算法是透過若干已知預測結果的範例 (像是使用者購買次數的歷史資料) 以及藉由迭代法來不斷調整模型中的各式權重,使得模型預測得以與真實數值吻合。能達到這個目標,是因為機器學習演算法透過「遺失」指標降低模型的錯誤預測。
預期每次疊代時,損失都會減少,最好是減少到零。遺失值 0,代表模型具有 100% 的正確率。
訓練模型時,BigQuery ML 會自動將輸入資料拆分為訓練集和評估集,避免模型過度擬合。這是必要步驟,因為訓練演算法不能過度貼近訓練資料,否則就無法歸納新樣本。
使用 Google Cloud 控制台,查看模型在訓練疊代期間的損失變化:
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,依序展開「bqml_tutorial」>「Models」,然後按一下「sample_model」。
按一下「訓練」分頁標籤,然後查看「損失」圖表。「損失」圖表會顯示訓練資料集疊代期間損失指標的變化。將游標懸停在圖表上,您會看到訓練損失和評估損失的線條。由於您執行的是邏輯迴歸,因此訓練損失值是使用訓練資料計算出的對數損失。評估損失是在評估資料上計算的對數損失。這兩種損失類型都代表平均損失值,是針對每次疊代中各資料集的所有範例計算平均值。
您也可以使用 ML.TRAINING_INFO
函式查看模型訓練結果。
評估模型
使用 ML.EVALUATE
函式評估模型成效。ML.EVALUATE
函式會根據實際資料來評估模型產生的預測值,如要計算邏輯迴歸專用的指標,可以使用 ML.ROC_CURVE
SQL 函式或 bigframes.ml.metrics.roc_curve
BigQuery DataFrames 函式。
在本教學課程中,您會使用偵測交易的二元分類模型。「label
」欄中的值是模型產生的兩個類別:「0
」(無交易) 和「1
」(已交易)。
SQL
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.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'))
結果應如下所示:
+--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | precision | recall | accuracy | f1_score | log_loss | roc_auc | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | 0.468503937007874 | 0.11080074487895716 | 0.98534315834767638 | 0.17921686746987953 | 0.04624221101176898 | 0.98174125874125873 | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
由於您執行了邏輯迴歸,因此結果包含以下資料欄:
precision
:分類模型的指標,該指標可確認當模型預測到正向類別時的正確發生頻率。recall
:分類模型的指標,可用來回答下列問題:在所有可能的正向標籤中,模型可以正確辨識出多少個標籤?accuracy
:準確率就是分類模型預測成功的比例。f1_score
:衡量模型準確率的指標,f1 是準確率與喚回度的調和平均數,f1 分數的最佳值為 1,最差值為 0。log_loss
:用於邏輯迴歸中的損失函式,可衡量模型預測結果與正確標籤之間的差距。roc_auc
:ROC 曲線下的面積。也就是分類器對於隨機挑選的正向樣本確實是正向的信心,高於隨機挑選的負向樣本其實是正向的情況發生機率。詳情請參閱機器學習速成課程中的「分類」一文。
查詢詳細資料
初始 SELECT
陳述式會擷取模型中的資料欄。
FROM
子句會針對模型使用 ML.EVALUATE
函式。
巢狀 SELECT
陳述式和 FROM
子句與 CREATE MODEL
查詢中的相同。
WHERE
子句 (_TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
) 會限制查詢掃描的資料表數量。而所掃描的日期區間則是從 2017 年 7 月 1 日到 2017 年 8 月 1 日,這正是您用來評估模型預測效能的資料。上述資料收集的時間點是在訓練資料所橫跨的時間區段之後、緊接著的隔月。
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
使用模型預測結果
使用模型預測各國家/地區網站訪客的交易次數。
SQL
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.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
結果應如下所示:
+----------------+---------------------------+ | country | total_predicted_purchases | +----------------+---------------------------+ | United States | 220 | | Taiwan | 8 | | Canada | 7 | | India | 2 | | Turkey | 2 | | Japan | 2 | | Italy | 1 | | Brazil | 1 | | Singapore | 1 | | Australia | 1 | +----------------+---------------------------+
查詢詳細資料
初始 SELECT
陳述式會擷取 country
資料欄,並加總 predicted_label
資料欄。predicted_label
資料欄是由 ML.PREDICT
函式產生。使用 ML.PREDICT
函式時,模型的輸出資料欄名稱為 predicted_<label_column_name>
。對線性迴歸模型來說,predicted_label
是 label
的估計值。對於邏輯迴歸模型,predicted_label
是最能描述指定輸入資料值的標籤,也就是 0
或 1
。
ML.PREDICT
函式用於透過模型預測結果。
巢狀 SELECT
陳述式和 FROM
子句與 CREATE MODEL
查詢中的相同。
WHERE
子句 (_TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
) 會限制查詢掃描的資料表數量。而所掃描的日期區間則是從 2017 年 7 月 1 日到 2017 年 8 月 1 日,這正是您執行預測所使用的資料。每當時間區段橫跨訓練資料之後,就會立刻收集月份資料。
GROUP BY
和 ORDER BY
子句會依國家/地區將結果分組,並依預測購買量總和遞減排序。
LIMIT
子句在此處的用途是僅顯示前 10 筆查詢結果。
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
預測各使用者的購買量
預測每一位網站訪客的交易次數。
SQL
這項查詢與前一節的查詢相同,只有 GROUP BY
子句不同。這裡的 GROUP BY
子句 (GROUP BY fullVisitorId
) 用於依訪客 ID 將結果分組。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.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
結果應如下所示:
+---------------------+---------------------------+ | fullVisitorId | total_predicted_purchases | +---------------------+---------------------------+ | 9417857471295131045 | 4 | | 112288330928895942 | 2 | | 2158257269735455737 | 2 | | 489038402765684003 | 2 | | 057693500927581077 | 2 | | 2969418676126258798 | 2 | | 5073919761051630191 | 2 | | 7420300501523012460 | 2 | | 0456807427403774085 | 2 | | 2105122376016897629 | 2 | +---------------------+---------------------------+
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本頁所用資源的費用,請按照下列步驟操作。
您可以刪除建立的專案,或保留專案並刪除資料集。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,選取您建立的「bqml_tutorial」資料集。
依序點選「動作」>「刪除」。
在「Delete dataset」(刪除資料集) 對話方塊中,輸入
delete
來確認刪除指令。點選「刪除」。
刪除專案
如要刪除專案,請進行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
後續步驟
- 如要進一步瞭解機器學習,請參閱機器學習速成課程。
- 如需 BigQuery ML 的總覽,請參閱 BigQuery ML 簡介。
- 如要進一步瞭解 Google Cloud 控制台,請參閱「使用 Google Cloud 控制台」。