{"id":906,"date":"2024-08-05T11:07:21","date_gmt":"2024-08-05T15:07:21","guid":{"rendered":"https:\/\/www.econai.tech\/?page_id=906"},"modified":"2026-05-06T08:59:41","modified_gmt":"2026-05-06T12:59:41","slug":"personalization-and-recommendation","status":"publish","type":"page","link":"https:\/\/tomomitanaka.ai\/?page_id=906","title":{"rendered":"Recommendation and Personalization"},"content":{"rendered":"\n<p>Personalization and recommendation systems play a crucial role in enhancing user experience and driving business growth. <\/p>\n\n\n\n<p>By leveraging the power of BigQuery ML and the rich data available in Google Analytics, we can create personalization and recommendation models. <\/p>\n\n\n\n<p>This post will guide you through the process of building such a system using the Google Analytics Sample Dataset in BigQuery.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Contents<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Preparing the Data<\/li>\n\n\n\n<li>Building a Matrix Factorization Model<\/li>\n\n\n\n<li>Generating Recommendations<\/li>\n\n\n\n<li>Evaluating the Model<\/li>\n\n\n\n<li>Implementing Personalization<\/li>\n\n\n\n<li>Conclusion<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Preparing the Data<\/h3>\n\n\n\n<p>To build an effective recommendation system, we need to prepare our data. Here&#8217;s a query to extract relevant features:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"-- Step 1: Preparing the Data\nCREATE OR REPLACE TABLE `predictive-behavior-analytics.Section9.user_item_interactions` AS\nSELECT\n  fullVisitorId,\n  CONCAT(product.productSKU, '_', product.v2ProductName) AS item_id,\n  SUM(product.productQuantity) AS interaction_count,\n  SUM(product.productPrice * product.productQuantity) \/ 1000000 AS total_revenue\nFROM\n  `bigquery-public-data.google_analytics_sample.ga_sessions_*`,\n  UNNEST(hits) AS hits,\n  UNNEST(hits.product) AS product\nWHERE\n  _TABLE_SUFFIX BETWEEN '20170701' AND '20170731'\n  AND hits.eCommerceAction.action_type = '6'  -- Completed purchase\nGROUP BY\n  fullVisitorId, item_id\nHAVING\n  interaction_count &gt; 0;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">-- Step 1: Preparing the Data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">OR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">REPLACE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">TABLE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">`predictive-behavior-analytics.Section9.user_item_interactions`<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  fullVisitorId,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">CONCAT<\/span><span style=\"color: #D4D4D4\">(product.productSKU, <\/span><span style=\"color: #CE9178\">&#39;_&#39;<\/span><span style=\"color: #D4D4D4\">, product.v2ProductName) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> item_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">SUM<\/span><span style=\"color: #D4D4D4\">(product.productQuantity) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> interaction_count,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">SUM<\/span><span style=\"color: #D4D4D4\">(product.productPrice * product.productQuantity) \/ <\/span><span style=\"color: #B5CEA8\">1000000<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> total_revenue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">FROM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #CE9178\">`bigquery-public-data.google_analytics_sample.ga_sessions_*`<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  UNNEST(hits) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> hits,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  UNNEST(hits.product) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> product<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">WHERE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  _TABLE_SUFFIX <\/span><span style=\"color: #569CD6\">BETWEEN<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;20170701&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;20170731&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">AND<\/span><span style=\"color: #D4D4D4\"> hits.eCommerceAction.action_type = <\/span><span style=\"color: #CE9178\">&#39;6&#39;<\/span><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #6A9955\">-- Completed purchase<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">GROUP BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  fullVisitorId, item_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">HAVING<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  interaction_count &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p>This query creates a table of user-item interactions, focusing on completed purchases.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Building a Matrix Factorization Model<\/h3>\n\n\n\n<p>Now that we have our data prepared, let&#8217;s use BigQuery ML to create a matrix factorization model for item recommendations:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"-- Step 2: Building the Matrix Factorization Model\nCREATE OR REPLACE MODEL `predictive-behavior-analytics.Section9.item_recommendation_model`\nOPTIONS(\n  model_type='MATRIX_FACTORIZATION',\n  user_col='fullVisitorId',\n  item_col='item_id',\n  rating_col='interaction_count',\n  feedback_type='implicit'\n) AS\nSELECT\n  fullVisitorId,\n  item_id,\n  interaction_count\nFROM\n  `predictive-behavior-analytics.Section9.user_item_interactions`;\n\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">-- Step 2: Building the Matrix Factorization Model<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CREATE<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">OR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">REPLACE<\/span><span style=\"color: #D4D4D4\"> MODEL <\/span><span style=\"color: #CE9178\">`predictive-behavior-analytics.Section9.item_recommendation_model`<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">OPTIONS(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  model_type=<\/span><span style=\"color: #CE9178\">&#39;MATRIX_FACTORIZATION&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  user_col=<\/span><span style=\"color: #CE9178\">&#39;fullVisitorId&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  item_col=<\/span><span style=\"color: #CE9178\">&#39;item_id&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  rating_col=<\/span><span style=\"color: #CE9178\">&#39;interaction_count&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  feedback_type=<\/span><span style=\"color: #CE9178\">&#39;implicit&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">AS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  fullVisitorId,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  item_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  interaction_count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">FROM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #CE9178\">`predictive-behavior-analytics.Section9.user_item_interactions`<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>This model will learn latent factors for users and items based on their interactions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Generating Recommendations<\/h3>\n\n\n\n<p>With our model trained, we can now generate personalized recommendations for users:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"-- Step 3: Generating Recommendations\nWITH user_item_pairs AS (\n  SELECT DISTINCT\n    ui1.fullVisitorId,\n    ui2.item_id\n  FROM\n    `predictive-behavior-analytics.Section9.user_item_interactions` ui1\n  CROSS JOIN\n    (SELECT DISTINCT item_id FROM `predictive-behavior-analytics.Section9.user_item_interactions`) ui2\n),\npredictions AS (\n  SELECT *\n  FROM ML.PREDICT(MODEL `predictive-behavior-analytics.Section9.item_recommendation_model`,\n    (SELECT * FROM user_item_pairs))\n)\nSELECT\n  fullVisitorId AS user_id,\n  ARRAY_AGG(STRUCT(item_id, predicted_interaction_count_confidence)\n            ORDER BY predicted_interaction_count_confidence DESC\n            LIMIT 5) AS top_5_recommendations\nFROM predictions\nGROUP BY fullVisitorId\nLIMIT 10;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">-- Step 3: Generating Recommendations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">WITH<\/span><span style=\"color: #D4D4D4\"> user_item_pairs <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">SELECT DISTINCT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    ui1.fullVisitorId,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    ui2.item_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #CE9178\">`predictive-behavior-analytics.Section9.user_item_interactions`<\/span><span style=\"color: #D4D4D4\"> ui1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">CROSS JOIN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    (<\/span><span style=\"color: #569CD6\">SELECT DISTINCT<\/span><span style=\"color: #D4D4D4\"> item_id <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">`predictive-behavior-analytics.Section9.user_item_interactions`<\/span><span style=\"color: #D4D4D4\">) ui2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">predictions <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> ML.PREDICT(MODEL <\/span><span style=\"color: #CE9178\">`predictive-behavior-analytics.Section9.item_recommendation_model`<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    (<\/span><span style=\"color: #569CD6\">SELECT<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> user_item_pairs))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">SELECT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  fullVisitorId <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> user_id,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  ARRAY_AGG(STRUCT(item_id, predicted_interaction_count_confidence)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">ORDER BY<\/span><span style=\"color: #D4D4D4\"> predicted_interaction_count_confidence <\/span><span style=\"color: #569CD6\">DESC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">LIMIT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">AS<\/span><span style=\"color: #D4D4D4\"> top_5_recommendations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">FROM<\/span><span style=\"color: #D4D4D4\"> predictions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">GROUP BY<\/span><span style=\"color: #D4D4D4\"> fullVisitorId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">LIMIT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>This query will generate top 10 recommended items for each user.<\/p>\n\n\n\n<p>You can find\u00a0<a href=\"https:\/\/github.com\/tomomitanaka00\/Blog-SQL\/blob\/main\/Section9.sql\">the complete code<\/a>\u00a0in\u00a0my GitHub repository.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Evaluating the Model<\/h3>\n\n\n\n<p>To assess the performance of the Matrix Factorization recommendation model, we utilized several key metrics. These metrics provide insights into different aspects of the model&#8217;s effectiveness in predicting user-item interactions and generating relevant recommendations.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Evaluation Metrics<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Mean Average Precision (MAP):<\/strong> 0.2503<\/li>\n\n\n\n<li><strong>Mean Squared Error (MSE):<\/strong> 0.0417<\/li>\n\n\n\n<li><strong>Normalized Discounted Cumulative Gain (NDCG):<\/strong> 0.9750<\/li>\n\n\n\n<li><strong>Average Rank:<\/strong> 0.3338<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Mean Average Precision (MAP)<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Our model achieved a MAP of 0.2503, indicating that approximately 25% of the recommended items are relevant to users.<\/li>\n\n\n\n<li>While there&#8217;s room for improvement, this score is reasonable for a recommendation system based on implicit feedback.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Mean Squared Error (MSE)<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The low MSE of 0.0417 suggests that our model&#8217;s predictions closely align with actual user interactions.<\/li>\n\n\n\n<li>This indicates high accuracy in predicting user-item interaction strengths.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Normalized Discounted Cumulative Gain (NDCG)<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>With an impressive NDCG of 0.9750, our model excels at ranking relevant items higher in the recommendation lists.<\/li>\n\n\n\n<li>This high score implies that users are likely to find the most relevant items at the top of their recommendations.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Average Rank<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The average rank of 0.3338 indicates that relevant items typically appear within the top third of recommendation lists.<\/li>\n\n\n\n<li>This suggests that users won&#8217;t need to scroll far to find items of interest, enhancing the user experience.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Key Insights<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ranking Effectiveness:<\/strong> The high NDCG and low Average Rank demonstrate that our model is particularly adept at prioritizing relevant items. This is crucial for user satisfaction in recommendation systems.<\/li>\n\n\n\n<li><strong>Prediction Accuracy:<\/strong> The low MSE indicates that our model accurately predicts the strength of user-item interactions, which is valuable for understanding user preferences.<\/li>\n\n\n\n<li><strong>Relevance vs. Ranking:<\/strong> While the MAP suggests moderate performance in terms of overall recommendation relevance, the high NDCG indicates that the most relevant items are consistently ranked at the top.<\/li>\n\n\n\n<li><strong>User Experience:<\/strong> The combination of strong ranking performance and low average rank suggests that users are likely to find relevant items quickly, potentially leading to higher engagement.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusion<\/h4>\n\n\n\n<p>Our Matrix Factorization model demonstrates robust performance, particularly in ranking relevant items and accurately predicting user-item interactions. While there&#8217;s room to improve overall precision, the model&#8217;s strength in prioritizing relevant recommendations suggests it will effectively enhance user experience and engagement in our recommendation system.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Implementing Personalization<\/h3>\n\n\n\n<p>Beyond item recommendations, we can use our model for broader personalization efforts:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Personalized Email Campaigns<\/strong>: Use top recommendations for each user to create targeted email content.<\/li>\n\n\n\n<li><strong>Website Personalization<\/strong>: Dynamically adjust product displays based on user preferences.<\/li>\n\n\n\n<li><strong>Tailored Promotions<\/strong>: Offer discounts on items likely to interest specific users.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>By leveraging BigQuery ML and Google Analytics data, we&#8217;ve created a powerful personalization and recommendation system. This approach allows for scalable, data-driven decision-making that can significantly enhance user experience and drive business growth.<\/p>\n\n\n\n<p>Remember, the key to successful personalization is continuous iteration and testing. Regularly update your model with new data and experiment with different features to improve its performance over time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Personalization and recommendation systems play a crucial role in enhancing user experience and driving business growth. By leveraging the power of BigQuery ML and the rich data available in Google Analytics, we can create personalization and recommendation models. This post will guide you through the process of building such a system using the Google Analytics<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":877,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-906","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/pages\/906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=906"}],"version-history":[{"count":29,"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/pages\/906\/revisions"}],"predecessor-version":[{"id":6374,"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/pages\/906\/revisions\/6374"}],"up":[{"embeddable":true,"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=\/wp\/v2\/pages\/877"}],"wp:attachment":[{"href":"https:\/\/tomomitanaka.ai\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}