在本教學課程中,您將在 BigQuery ML 中使用二元邏輯迴歸模型,根據個人的受眾特徵資料預測收入範圍。二元邏輯迴歸模型會預測某值是否屬於兩個類別之一,在本例中,即個人年收入是否超過或低於 $50,000 美元。
本教學課程使用 bigquery-public-data.ml_datasets.census_adult_income
資料集。這個資料集包含從 2000 年到 2010 年美國居民的人口和收入資訊。
目標
在本教學課程中,您將執行下列工作:- 建立邏輯迴歸模型。
- 評估模型。
- 使用模型進行預測。
- 說明模型產生的結果。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- BigQuery
- BigQuery ML
如要進一步瞭解 BigQuery 費用,請參閱 BigQuery 定價頁面。
如要進一步瞭解 BigQuery ML 費用,請參閱 BigQuery ML 定價。
事前準備
-
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.
-
Enable the BigQuery API.
所需權限
如要使用 BigQuery ML 建立模型,您需要下列 IAM 權限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
如要執行推論,您需要下列權限:
- 模型上的
bigquery.models.getData
bigquery.jobs.create
簡介
機器學習的常見工作是將資料分類為兩個類型 (稱為「標籤」) 之一。舉例來說,零售商可能會想要根據某個特定顧客的相關資訊,預測該顧客是否會購買某個新產品。在這種情況下,兩個標籤可能是 will buy
和 won't buy
。零售商可以建構資料集,設定一個資料欄代表兩個標籤,並包含顧客資訊,例如顧客的位置、先前的購買內容和回報的偏好。零售商接著可以使用二元邏輯迴歸模型,根據這項顧客資訊預測最能代表每位顧客的標籤。
在本教學課程中,您將建立二元邏輯迴歸模型,根據受訪者的受眾特徵屬性,預測美國人口普查受訪者的收入是否屬於兩個範圍之一。
建立資料集
建立 BigQuery 資料集來儲存模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點按
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
census
。針對「位置類型」選取「多區域」,然後選取「美國 (多個美國地區)」。
公開資料集儲存在
US
多地區。為簡單起見,請將資料集存放在相同位置。其餘設定請保留預設狀態,然後按一下「建立資料集」。
檢查資料
檢查資料集,然後找出要使用哪些資料欄做為邏輯迴歸模型的訓練資料。從 census_adult_income
資料表選取 100 列:
SQL
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列 GoogleSQL 查詢:
SELECT age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket, functional_weight FROM `bigquery-public-data.ml_datasets.census_adult_income` LIMIT 100;
結果類似下方:
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
查詢結果顯示 census_adult_income
資料表中的 income_bracket
資料欄只有以下兩個值其中之一:<=50K
或 >50K
。functional_weight
資料欄是人口普查機構認為某個特定資料列所代表的個體數。這個資料欄的值看起來與某個特定資料列的 income_bracket
值無關。
準備範例資料
在本教學課程中,您將根據下列屬性預測人口普查受訪者的收入:
- 年齡
- 從事的工作類型
- 婚姻狀態
- 教育程度
- 職業
- 每週工作時數
如要建立這項預測,您需要從 census_adult_income
資料表中的普查受訪者資料擷取資訊。選取特徵資料欄,包括:
education_num
,代表受訪者的教育程度workclass
,代表受訪者執行的工作類型
排除重複資料的資料欄。例如:
education
,因為education
和education_num
以不同格式表示相同資料
建立衍生自 functional_weight
資料欄的新 dataframe
資料欄,將資料分成訓練、評估和預測集。將 80% 的資料來源標示為模型訓練專用,並將其餘 20% 的資料保留為評估和預測專用。
SQL
如要準備範例資料,請建立檢視區塊來包含訓練資料。本教學課程稍後會使用 CREATE MODEL
陳述式存取這個檢視區塊。
執行查詢來準備範例資料:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢:
CREATE OR REPLACE VIEW `census.input_data` AS SELECT age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket, CASE WHEN MOD(functional_weight, 10) < 8 THEN 'training' WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation' WHEN MOD(functional_weight, 10) = 9 THEN 'prediction' END AS dataframe FROM `bigquery-public-data.ml_datasets.census_adult_income`
在「Explorer」窗格中,展開
census
資料集,然後找出input_data
檢視區塊。按一下檢視名稱,開啟資訊窗格。檢視表結構定義會顯示在「結構定義」分頁中。
BigQuery DataFrames
建立名為 input_data
的 DataFrame
。您會在後續步驟中使用 input_data
訓練模型、評估模型,以及進行預測。
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
建立邏輯迴歸模型
使用您在前一節標記的訓練資料,建立邏輯迴歸模型。
SQL
使用 CREATE MODEL
陳述式,並為模型類型指定 LOGISTIC_REG
以下是 CREATE MODEL
陳述式的重要資訊:
input_label_cols
選項會指定SELECT
陳述式中的哪個資料欄要當做標籤資料欄。這裡的標籤資料欄為income_bracket
,因此模型會根據特定資料列中呈現的其他值,學習income_bracket
的兩個值中哪一個最有可能。您不需要指定邏輯迴歸模型是二元或多元類別。BigQuery 可根據標籤資料欄中不重複值的數量,判斷要訓練哪種模型。
auto_class_weights
選項會設為TRUE
,以平衡訓練資料中的類別標籤。預設情況下,訓練資料並未加權。如果訓練資料中的標籤不平衡,則模型學習到的權重可能不均,導致最熱門的標籤類別預測比例過高。在這種情況下,由於資料集中的大多數受訪者屬於較低的收入水平,所以模型預測較低收入水平的權重可能會因而過重。系統會透過與類別出現頻率成反比的方式,來計算每個類別的權重,藉此平衡各類別標籤的權重。SELECT
陳述式會查詢包含訓練資料的input_data
檢視區塊。WHERE
子句會篩選input_data
中的資料列,只有標示為訓練資料的資料列會用於訓練模型。
執行可建立邏輯迴歸模型的查詢:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢:
CREATE OR REPLACE MODEL `census.census_model` OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, data_split_method='NO_SPLIT', input_label_cols=['income_bracket'], max_iterations=15) AS SELECT * EXCEPT(dataframe) FROM `census.input_data` WHERE dataframe = 'training'
在「Explorer」窗格中,依序展開
census
資料集和「Models」資料夾。按一下「census_model」census_model模型,開啟資訊窗格。
按一下 [Schema] (結構定義) 分頁標籤。模型結構定義會列出 BigQuery ML 用來執行邏輯迴歸的屬性。結構定義應如下所示:
BigQuery DataFrames
使用 fit
方法訓練模型,並使用 to_gbq
方法將模型儲存至資料集。
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
評估模型成效
建立模型後,請根據實際資料評估模型成效。
SQL
ML.EVALUATE
函式會根據實際資料,評估模型產生的預測值。
ML.EVALUATE
函式會將訓練好的模型和 input_data
檢視畫面中的資料列做為輸入內容,這些資料列的 dataframe
資料欄值為 evaluation
。該函式會傳回模型相關統計資料的單一資料列。
執行 ML.EVALUATE
查詢:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢:
SELECT * FROM ML.EVALUATE (MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'evaluation' ) )
結果類似下方:
BigQuery DataFrames
使用 score
方法,根據實際資料評估模型。
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
您也可以在 Google Cloud 控制台 查看模型資訊窗格,瞭解訓練期間計算的評估指標:
預測收入級距
使用模型找出特定受訪者可能屬於哪個收入水平。
SQL
使用 ML.PREDICT
函式預測可能的收入水平。輸入經過訓練的模型,以及 input_data
檢視畫面中 prediction
做為 dataframe
資料欄值的資料列。
執行 ML.PREDICT
查詢:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢:
SELECT * FROM ML.PREDICT (MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'prediction' ) )
結果類似下方:
predicted_income_bracket
是 income_bracket
的預測值。
BigQuery DataFrames
使用 predict
方法預測可能的所得級距。
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
說明預測結果
如要瞭解模型產生這些預測結果的原因,可以使用 ML.EXPLAIN_PREDICT
函式。
ML.EXPLAIN_PREDICT
是 ML.PREDICT
函式的擴充版本。
ML.EXPLAIN_PREDICT
不僅會輸出預測結果,也會輸出額外資料欄來解釋預測結果。實務上,您可以執行 ML.EXPLAIN_PREDICT
,而非 ML.PREDICT
。詳情請參閱 BigQuery ML 可解釋 AI 總覽。
執行 ML.EXPLAIN_PREDICT
查詢:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢:
SELECT * FROM ML.EXPLAIN_PREDICT(MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'evaluation'), STRUCT(3 as top_k_features))
結果類似下方:
對於邏輯迴歸模型,系統會使用 Shapley 值為模型中的每個特徵產生特徵歸因值。ML.EXPLAIN_PREDICT
輸出內容
input_data
檢視畫面每列的前三項特徵歸因,因為查詢中已將 top_k_features
設為 3
。這些歸因會依歸因的絕對值遞減排序。在本範例的第 1 列中,特徵 hours_per_week
對整體預測的貢獻最大,但在第 2 列中,occupation
對整體預測的貢獻最大。
從全域角度說明模型
如要瞭解哪些特徵通常最能決定收入水平,可以使用 ML.GLOBAL_EXPLAIN
函式。如要使用 ML.GLOBAL_EXPLAIN
,請務必將 ENABLE_GLOBAL_EXPLAIN
選項設為 TRUE
,然後重新訓練模型。
重新訓練模型並取得全域說明:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢,重新訓練模型:
CREATE OR REPLACE MODEL `census.census_model` OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, enable_global_explain=TRUE, input_label_cols=['income_bracket'] ) AS SELECT * EXCEPT(dataframe) FROM `census.input_data` WHERE dataframe = 'training'
在查詢編輯器中執行下列查詢,取得全域說明:
SELECT * FROM ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
結果類似下方:
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有必要,請在Google Cloud 控制台中開啟 BigQuery 頁面。
在導覽窗格中,按一下您建立的 census 資料集。
按一下視窗右側的「刪除資料集」。 這個動作會刪除資料集和模型。
在「Delete dataset」(刪除資料集) 對話方塊中,輸入資料集的名稱 (
census
),然後按一下 [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 簡介。
- 如要瞭解如何建立模型,請參閱
CREATE MODEL
語法頁面。