本教學課程將說明如何建立矩陣因數模型,並針對公開 GA360_test.ga_sessions_sample
資料表中的 Google Analytics 360 使用者工作階段資料進行訓練。接著,您可以使用矩陣分解模型為網站使用者產生內容推薦內容。
使用間接的客戶偏好資訊 (例如使用者工作階段時間長度) 訓練模型,稱為使用隱含回饋訓練。如果您使用隱含回饋做為訓練資料,矩陣分解模型會使用加權交替最小平方演算法進行訓練。
目標
本教學課程會逐步引導您完成下列工作:
- 使用
CREATE MODEL
陳述式建立矩陣分解模型。 - 使用
ML.EVALUATE
函式評估模型。 - 使用模型搭配
ML.RECOMMEND
函式,為使用者產生內容推薦。
費用
本教學課程使用 Trusted Cloud by S3NS的計費元件,包括:
- BigQuery
- BigQuery ML
如要進一步瞭解 BigQuery 費用,請參閱 BigQuery 定價頁面。
如要進一步瞭解 BigQuery ML 費用,請參閱 BigQuery ML 定價。
事前準備
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted Cloud project.
- 新專案會自動啟用 BigQuery。如要在現有的專案中啟用 BigQuery,請前往
Enable the BigQuery API.
如要建立資料集,您必須具備
bigquery.datasets.create
IAM 權限。您必須具備下列權限,才能建立模型:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
如要執行推論,您需要具備下列權限:
bigquery.models.getData
bigquery.jobs.create
所需權限
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點選
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「Create dataset」頁面上執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。在「位置類型」中選取「多區域」,然後選取「美國 (多個美國區域)」。
保留其餘預設設定,然後點選「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 快速入門:使用 BigQuery DataFrames,按照 BigQuery DataFrames 設定說明進行操作。詳情請參閱 BigQuery DataFrames 參考資料說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。
準備範例資料
將 GA360_test.ga_sessions_sample
表格中的資料轉換為更適合模型訓練的結構,然後將這些資料寫入 BigQuery 表格。以下查詢會計算每位使用者針對每個內容的工作階段持續時間,您可以將這項資料做為隱含的意見回饋,推斷使用者對該內容的偏好設定。
請按照下列步驟建立訓練資料表:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
建立訓練資料表。在查詢編輯器中貼上以下查詢,然後按一下「執行」:
CREATE OR REPLACE TABLE `bqml_tutorial.analytics_session_data` AS WITH visitor_page_content AS ( SELECT fullVisitorID, ( SELECT MAX( IF( index = 10, value, NULL)) FROM UNNEST(hits.customDimensions) ) AS latestContentId, (LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time) AS session_duration FROM `cloud-training-demos.GA360_test.ga_sessions_sample`, UNNEST(hits) AS hits WHERE # only include hits on pages hits.type = 'PAGE' GROUP BY fullVisitorId, latestContentId, hits.time ) # aggregate web stats SELECT fullVisitorID AS visitorId, latestContentId AS contentId, SUM(session_duration) AS session_duration FROM visitor_page_content WHERE latestContentId IS NOT NULL GROUP BY fullVisitorID, latestContentId HAVING session_duration > 0 ORDER BY latestContentId;
查看訓練資料的子集。在查詢編輯器中貼上以下查詢,然後按一下「執行」:
SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;
結果應如下所示:
+---------------------+-----------+------------------+ | visitorId | contentId | session_duration | +---------------------+-----------+------------------+ | 7337153711992174438 | 100074831 | 44652 | +---------------------+-----------+------------------+ | 5190801220865459604 | 100170790 | 121420 | +---------------------+-----------+------------------+ | 2293633612703952721 | 100510126 | 47744 | +---------------------+-----------+------------------+ | 5874973374932455844 | 100510126 | 32109 | +---------------------+-----------+------------------+ | 1173698801255170595 | 100676857 | 10512 | +---------------------+-----------+------------------+
建立模型
建立矩陣因式模型,並根據 analytics_session_data
資料表中的資料進行訓練。模型經過訓練,可針對每個 visitorId
-contentId
組合預測信心等級。系統會根據中位工作階段持續時間,以中心化和縮放的方式建立可信度評分。系統會將工作階段時間長度超過中位數 3.33 倍的記錄篩除為異常值。
以下 CREATE MODEL
陳述式會使用這些資料欄產生推薦內容:
visitorId
:訪客 ID。contentId
:內容 ID。rating
:為每個訪客-內容組合計算的隱含評分 (從 0 到 1),經過居中和縮放處理。
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_implicit` OPTIONS ( MODEL_TYPE = 'matrix_factorization', FEEDBACK_TYPE = 'implicit', USER_COL = 'visitorId', ITEM_COL = 'contentId', RATING_COL = 'rating', L2_REG = 30, NUM_FACTORS = 15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data` WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1;
查詢作業需要約 10 分鐘才能完成,完成後「探索器」窗格中就會顯示
mf_implicit
模型。由於查詢是使用CREATE MODEL
陳述式建立模型,因此您不會看到查詢結果。
取得訓練統計資料
您也可以選擇在Trusted Cloud 主控台中查看模型的訓練統計資料。
機器學習演算法會使用不同的參數建立許多模型疊代,然後選取能將損失降到最低的模型版本。這項程序稱為經驗風險最小化。模型的訓練統計資料可讓您查看與模型每個疊代相關的損失。
如要查看模型的訓練統計資料,請按照下列步驟操作:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,依序展開專案、
bqml_tutorial
資料集,然後展開「Models」資料夾。按一下
mf_implicit
模型,然後點選「Training」分頁標籤在「View as」部分,按一下「Table」。結果應如下所示:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 5 | 0.0027 | 47.27 | +-----------+--------------------+--------------------+ | 4 | 0.0028 | 39.60 | +-----------+--------------------+--------------------+ | 3 | 0.0032 | 55.57 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
「Training Data Loss」資料欄代表在訓練模型後計算的損失指標。由於這是矩陣因式分解模型,因此這個欄會顯示均方誤差。
評估模型
使用 ML.EVALUATE
函式評估模型效能。ML.EVALUATE
函式會根據訓練期間計算的評估指標,評估模型傳回的預測內容評等。
如要評估模型,請按照下列步驟操作:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);
結果應如下所示:
+------------------------+-----------------------+---------------------------------------+---------------------+ | mean_average_precision | mean_squared_error | normalized_discounted_cumulative_gain | average_rank | +------------------------+-----------------------+---------------------------------------+---------------------+ | 0.4434341257478137 | 0.0013381759837648962 | 0.9433280547112802 | 0.24031636088594222 | +------------------------+-----------------------+---------------------------------------+---------------------+
如要進一步瞭解
ML.EVALUATE
函式輸出內容,請參閱「矩陣因數分解模型」。
取得部分訪客與內容組合的預測評分
使用 ML.RECOMMEND
取得每部內容的預測分級,並為五位網站訪客提供建議。
如要取得預測分數,請按照下列步驟操作:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_implicit`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5 ));
結果應如下所示:
+-------------------------------+---------------------+-----------+ | predicted_rating_confidence | visitorId | contentId | +-------------------------------+---------------------+-----------+ | 0.0033608418060270262 | 7337153711992174438 | 277237933 | +-------------------------------+---------------------+-----------+ | 0.003602395397293956 | 7337153711992174438 | 158246147 | +-------------------------------+---------------------+-- -------+ | 0.0053197670652785356 | 7337153711992174438 | 299389988 | +-------------------------------+---------------------+-----------+ | ... | ... | ... | +-------------------------------+---------------------+-----------+
生成建議
使用預測評分,為每個訪客 ID 產生前五個建議內容 ID。
請按照下列步驟產生推薦內容:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
將預測的評分寫入資料表。在查詢編輯器中貼上以下查詢,然後按一下「Run」:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
選取每位訪客的前五個結果。在查詢編輯器中貼上以下查詢,然後按一下「Run」:
SELECT visitorId, ARRAY_AGG( STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId;
結果應如下所示:
+---------------------+-----------------+---------------------------------+ | visitorId | rec:contentId | rec:predicted_rating_confidence | +---------------------+-----------------+------------------------- ------+ | 867526255058981688 | 299804319 | 0.88170525357178664 | | | 299935287 | 0.54699439944935124 | | | 299410466 | 0.53424780863188659 | | | 299826767 | 0.46949603950374219 | | | 299809748 | 0.3379991197434149 | +---------------------+-----------------+---------------------------------+ | 2434264018925667659 | 299824032 | 1.3903516407308065 | | | 299410466 | 0.9921995618196483 | | | 299903877 | 0.92333625294129218 | | | 299816215 | 0.91856701667757279 | | | 299852437 | 0.86973661454890561 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
- 您可以刪除建立的專案。
- 或者您可以保留專案並刪除資料集。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有必要,請在Trusted Cloud 控制台中開啟 BigQuery 頁面。
在導覽窗格中,按一下您建立的 bqml_tutorial 資料集。
按一下視窗右側的「Delete dataset」。這個動作將會刪除資料集、資料表,以及所有資料。
在「Delete dataset」對話方塊中,輸入資料集的名稱 (
bqml_tutorial
),然後按一下「Delete」來確認刪除指令。
刪除專案
如要刪除專案,請進行以下操作:
- In the Trusted 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 簡介。
- 如要進一步瞭解機器學習,請參閱機器學習速成課程。