本教學課程說明如何建立矩陣分解模型,並在公開的 GA360_test.ga_sessions_sample
資料表中,使用 Google Analytics 360 使用者工作階段資料訓練模型。接著,您可以使用矩陣分解模型,為網站使用者生成內容建議。
使用使用者工作階段時間等間接顧客偏好資訊訓練模型,稱為使用隱性意見回饋訓練。使用隱性意見回饋做為訓練資料時,系統會使用加權交替最小平方演算法訓練矩陣分解模型。
建立資料集
建立 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 (多個美國區域))。
其餘設定請保留預設狀態,然後按一下「建立資料集」。
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」。
準備範例資料
將 GA360_test.ga_sessions_sample
資料表中的資料轉換為更適合模型訓練的結構,然後將資料寫入 BigQuery 資料表。下列查詢會計算每位使用者在每項內容的停留時間,您之後可將這項資料做為隱性意見回饋,推斷使用者對該內容的偏好。
請按照下列步驟建立訓練資料表:
前往 Google 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,並經過置中和縮放。
前往 Google 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
模型會顯示在「Explorer」窗格中。由於查詢是使用CREATE MODEL
陳述式建立模型,因此您不會看到查詢結果。
取得訓練統計資料
您也可以在Google Cloud 控制台中查看模型的訓練統計資料。
機器學習演算法會使用不同參數建立多個模型疊代版本,然後選取可將損失降到最低的模型版本。這項程序稱為經驗風險最小化。模型訓練統計資料會顯示模型每次疊代的相關損失。
如要查看模型的訓練統計資料,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在左側窗格中,按一下「Explorer」
:如果沒有看到左側窗格,請按一下「展開左側窗格」圖示
開啟窗格。在「Explorer」窗格中展開專案,然後按一下「Datasets」。
點選「
bqml_tutorial
」資料集。您也可以使用搜尋功能或篩選器來尋找資料集。按一下「模型」分頁標籤。
按一下
mf_implicit
模型,然後按一下「訓練」分頁標籤。在「查看方式」部分,按一下「表格」。結果應如下所示:
+-----------+--------------------+--------------------+ | 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
函式會根據訓練期間計算的評估指標,評估模型傳回的預測內容分級。
請按照下列步驟評估模型:
前往 Google 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
取得五位網站訪客對每項內容的預測評分。
請按照下列步驟取得預測評分:
前往 Google 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。
請按照下列步驟產生建議:
前往 Google Cloud 控制台的「BigQuery」頁面。
將預測評分寫入資料表。在查詢編輯器中,貼上以下查詢並點選「執行」:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
選取每位訪客的前五個結果。在查詢編輯器中,貼上以下查詢並點選「執行」:
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 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+