{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Content-Based Recommender System: Urban Bites\n",
"\n",
"**Data Analytics & Data Mining** \n",
"**Created by: Dr. Yaa** \n",
"**Demo Notebook 5A: Recommendation Systems (Content-Based Filtering)**\n",
"\n",
"---\n",
"\n",
"## The Business Problem\n",
"\n",
"**Urban Bites** is a fast-casual restaurant chain with 64 menu items across 8 categories. They want to build a **personalized recommendation engine** that suggests menu items to customers based on their past order history.\n",
"\n",
"### Why does this matter?\n",
"\n",
"Think about your own experience — when you open DoorDash or UberEats, you see \"Recommended for You.\" Those aren't random picks. They're the result of a recommendation system analyzing what you've ordered (and rated) before.\n",
"\n",
"For Urban Bites, better recommendations mean:\n",
"- **Higher average order value** (customers discover items they'll love)\n",
"- **Lower decision fatigue** (a 64-item menu is overwhelming)\n",
"- **Increased repeat visits** (personalized experience = loyalty)\n",
"\n",
"### PAIR Framework\n",
"\n",
"| Element | This Project |\n",
"|---|---|\n",
"| **P**rediction | Which menu items will a customer rate highly? |\n",
"| **A**ction | Show personalized \"Top 5 For You\" on the app/kiosk |\n",
"| **I**mpact | +15% average order value, +20% item discovery rate |\n",
"| **R**isk | Filter bubble (never showing new items), recommending out-of-stock items |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Choosing the Right Technique\n",
"\n",
"There are two main approaches to building a recommendation system:\n",
"\n",
"| Approach | How It Works | Best When... |\n",
"|---|---|---|\n",
"| **Content-Based** | Looks at *item attributes* (spicy, vegetarian, premium) and matches them to what a user already likes | You have good item metadata; new items with no ratings yet |\n",
"| **Collaborative** | Looks at *other users* who are similar to you and recommends what they liked | You have lots of user-item ratings; item attributes are hard to define |\n",
"\n",
"**Today's notebook: Content-Based Filtering.** We'll build a \"taste profile\" for each customer based on the *attributes* of items they've rated, then find new items that match that profile.\n",
"\n",
"> **Think of it this way:** If you've given 5 stars to three spicy items and two high-protein items, the system learns you like spicy + protein-packed food — and recommends other items with those same attributes."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Phase 1: Load & Explore the Data\n",
"\n",
"We have three datasets:\n",
"- `urban_bites_menu.csv` — 64 menu items with attributes (Spicy, Vegetarian, Premium, etc.)\n",
"- `urban_bites_ratings.csv` — ~6,000 customer-item ratings (0.5 to 5.0 scale)\n",
"- `urban_bites_customers.csv` — 200 customer profiles with segments"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Libraries loaded successfully!\n"
]
}
],
"source": [
"# ── Imports ──────────────────────────────────────────────────────\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.metrics.pairwise import cosine_similarity\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"# Set a clean visual style\n",
"plt.style.use('seaborn-v0_8-whitegrid')\n",
"plt.rcParams['figure.figsize'] = (10, 5)\n",
"plt.rcParams['font.size'] = 11\n",
"\n",
"print('Libraries loaded successfully!')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Menu items: 64 rows × 14 columns\n",
"Ratings: 6214 rows × 3 columns\n",
"Customers: 200 rows × 5 columns\n"
]
}
],
"source": [
"# ── Load the data ───────────────────────────────────────────────\n",
"menu_df = pd.read_csv('urban_bites_menu.csv')\n",
"ratings_df = pd.read_csv('urban_bites_ratings.csv')\n",
"customers_df = pd.read_csv('urban_bites_customers.csv')\n",
"\n",
"print(f'Menu items: {len(menu_df)} rows × {menu_df.shape[1]} columns')\n",
"print(f'Ratings: {len(ratings_df)} rows × {ratings_df.shape[1]} columns')\n",
"print(f'Customers: {len(customers_df)} rows × {customers_df.shape[1]} columns')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Average ratings per customer: 31.1\n",
"Min: 15, Max: 45\n"
]
}
],
"source": [
"# Let's check the ratings distribution\n",
"fig, axes = plt.subplots(1, 2, figsize=(14, 5))\n",
"\n",
"# Rating distribution\n",
"ratings_df['rating'].hist(bins=9, ax=axes[0], color='#D4845A', edgecolor='white', alpha=0.85)\n",
"axes[0].set_title('Distribution of All Ratings', fontweight='bold')\n",
"axes[0].set_xlabel('Rating')\n",
"axes[0].set_ylabel('Frequency')\n",
"axes[0].axvline(ratings_df['rating'].mean(), color='#333', linestyle='--',\n",
" label=f\"Mean: {ratings_df['rating'].mean():.2f}\")\n",
"axes[0].legend()\n",
"\n",
"# Ratings per customer\n",
"ratings_per_customer = ratings_df.groupby('customer_id').size()\n",
"ratings_per_customer.hist(bins=20, ax=axes[1], color='#5B8FA8', edgecolor='white', alpha=0.85)\n",
"axes[1].set_title('How Many Items Has Each Customer Rated?', fontweight='bold')\n",
"axes[1].set_xlabel('Number of Ratings')\n",
"axes[1].set_ylabel('Number of Customers')\n",
"\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n",
"print(f\"Average ratings per customer: {ratings_per_customer.mean():.1f}\")\n",
"print(f\"Min: {ratings_per_customer.min()}, Max: {ratings_per_customer.max()}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Phase 2: Data Quality Check\n",
"\n",
"> **Business reality:** Real data is messy. Before building any model, always check for issues.\n",
"\n",
"Let's look for two common problems:\n",
"1. **Duplicate ratings** — Has any customer rated the same item twice?\n",
"2. **Suspicious patterns** — Any customer who rated *everything* exactly 5 stars? (That's not helpful for a recommendation system!)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Duplicate customer-item pairs found: 16\n",
"\n",
"Example duplicates:\n",
" customer_id item_id rating\n",
"1694 54 1011 3.0\n",
"2881 92 1008 1.5\n",
"3190 103 1025 2.0\n",
"3339 108 1064 5.0\n",
"3406 110 1041 3.5\n",
"3907 126 1032 1.5\n"
]
}
],
"source": [
"# ── Check for duplicates ────────────────────────────────────────\n",
"dupes = ratings_df[ratings_df.duplicated(subset=['customer_id', 'item_id'], keep=False)]\n",
"print(f\"Duplicate customer-item pairs found: {len(dupes)}\")\n",
"if len(dupes) > 0:\n",
" print(\"\\nExample duplicates:\")\n",
" print(dupes.head(6))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ratings before cleaning: 6214\n",
"Ratings after cleaning: 6206\n",
"Removed: 8 duplicate rows\n"
]
}
],
"source": [
"# ── Fix: Keep only the most recent (last) rating for each customer-item pair ──\n",
"ratings_clean = ratings_df.drop_duplicates(subset=['customer_id', 'item_id'], keep='last')\n",
"print(f\"Ratings before cleaning: {len(ratings_df)}\")\n",
"print(f\"Ratings after cleaning: {len(ratings_clean)}\")\n",
"print(f\"Removed: {len(ratings_df) - len(ratings_clean)} duplicate rows\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Customers who gave everything 5 stars (with 5+ ratings): 3\n",
"Customer IDs: [42, 99, 155]\n",
"\n",
"⚠️ These customers don't give us useful preference signals.\n",
" If someone loves EVERYTHING equally, we can't learn what they prefer.\n",
" We'll exclude them from our training data.\n"
]
}
],
"source": [
"# ── Check for \"all 5-stars\" customers ────────────────────────────\n",
"customer_stats = ratings_clean.groupby('customer_id')['rating'].agg(['mean', 'std', 'count'])\n",
"all_fives = customer_stats[(customer_stats['mean'] == 5.0) & (customer_stats['count'] > 5)]\n",
"\n",
"print(f\"Customers who gave everything 5 stars (with 5+ ratings): {len(all_fives)}\")\n",
"if len(all_fives) > 0:\n",
" print(f\"Customer IDs: {all_fives.index.tolist()}\")\n",
" print(\"\\n⚠️ These customers don't give us useful preference signals.\")\n",
" print(\" If someone loves EVERYTHING equally, we can't learn what they prefer.\")\n",
" print(\" We'll exclude them from our training data.\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final clean dataset: 6098 ratings from 197 customers\n"
]
}
],
"source": [
"# ── Remove uninformative customers ──────────────────────────────\n",
"exclude_ids = all_fives.index.tolist()\n",
"ratings_clean = ratings_clean[~ratings_clean['customer_id'].isin(exclude_ids)]\n",
"print(f\"Final clean dataset: {len(ratings_clean)} ratings from \"\n",
" f\"{ratings_clean['customer_id'].nunique()} customers\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 💡 Key Takeaways: Why Data Quality Matters for Recommenders\n",
"\n",
"We just removed:\n",
"- **Duplicate ratings** that would double-count preferences\n",
"- **All-5-star customers** who provide zero signal about taste\n",
"\n",
"In production, you'd also watch for:\n",
"- **Bots or fake reviews** (rapid-fire identical ratings)\n",
"- **Rating inflation** (are your 4-stars actually 3-stars?)\n",
"- **Cold-start customers** (new users with <3 ratings — can't build a profile yet)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Phase 3: Build the Content-Based Model\n",
"\n",
"Here's the game plan in plain English:\n",
"\n",
"1. **Pick a customer** and grab all the items they've rated\n",
"2. **Build a \"taste profile\"** — multiply each item's attributes by the customer's rating, then average them. High-rated items contribute more to the profile.\n",
"3. **Score every menu item** — compare each item's attributes to the taste profile using cosine similarity\n",
"4. **Recommend the top items** the customer hasn't tried yet\n",
"\n",
"Let's walk through this step by step."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Step 3.1: Select a Test Customer\n",
"\n",
"Let's pick **Customer #7** and see what they've been ordering."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Customer #7 has rated 38 items.\n",
"\n",
"Their top-rated items:\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
item_name
\n",
"
category
\n",
"
rating
\n",
"
price
\n",
"
\n",
" \n",
" \n",
"
\n",
"
22
\n",
"
Wings (Buffalo)
\n",
"
Appetizer
\n",
"
5.0
\n",
"
13.82
\n",
"
\n",
"
\n",
"
1
\n",
"
Loaded Nachos
\n",
"
Appetizer
\n",
"
4.5
\n",
"
11.28
\n",
"
\n",
"
\n",
"
28
\n",
"
Meat Lovers Pizza
\n",
"
Pizza
\n",
"
4.5
\n",
"
15.10
\n",
"
\n",
"
\n",
"
29
\n",
"
Classic Smash Burger
\n",
"
Burger
\n",
"
4.5
\n",
"
14.25
\n",
"
\n",
"
\n",
"
11
\n",
"
Hummus Platter
\n",
"
Appetizer
\n",
"
4.5
\n",
"
13.53
\n",
"
\n",
"
\n",
"
37
\n",
"
Brownie Sundae
\n",
"
Dessert
\n",
"
4.5
\n",
"
8.63
\n",
"
\n",
"
\n",
"
0
\n",
"
Buddha Bowl
\n",
"
Bowl
\n",
"
4.0
\n",
"
12.17
\n",
"
\n",
"
\n",
"
13
\n",
"
Churros with Chocolate
\n",
"
Dessert
\n",
"
4.0
\n",
"
8.78
\n",
"
\n",
"
\n",
"
16
\n",
"
Acai Bowl
\n",
"
Bowl
\n",
"
4.0
\n",
"
15.31
\n",
"
\n",
"
\n",
"
34
\n",
"
Key Lime Pie
\n",
"
Dessert
\n",
"
4.0
\n",
"
8.94
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" item_name category rating price\n",
"22 Wings (Buffalo) Appetizer 5.0 13.82\n",
"1 Loaded Nachos Appetizer 4.5 11.28\n",
"28 Meat Lovers Pizza Pizza 4.5 15.10\n",
"29 Classic Smash Burger Burger 4.5 14.25\n",
"11 Hummus Platter Appetizer 4.5 13.53\n",
"37 Brownie Sundae Dessert 4.5 8.63\n",
"0 Buddha Bowl Bowl 4.0 12.17\n",
"13 Churros with Chocolate Dessert 4.0 8.78\n",
"16 Acai Bowl Bowl 4.0 15.31\n",
"34 Key Lime Pie Dessert 4.0 8.94"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ── Pick our test customer ──────────────────────────────────────\n",
"test_customer_id = 7\n",
"\n",
"# Get their ratings\n",
"cust_ratings = ratings_clean[ratings_clean['customer_id'] == test_customer_id].copy()\n",
"\n",
"# Merge with menu info so we can see what they rated\n",
"cust_rated_items = cust_ratings.merge(menu_df, on='item_id')\n",
"\n",
"print(f\"Customer #{test_customer_id} has rated {len(cust_rated_items)} items.\")\n",
"print(f\"\\nTheir top-rated items:\")\n",
"cust_rated_items[['item_name', 'category', 'rating', 'price']].sort_values(\n",
" 'rating', ascending=False).head(10)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAGDCAYAAAC/YSYEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANUVJREFUeJzt3Ql0VdXd/vEfJIJBJkUoAg4VCRAEQUEKIihVsTKKglIroHWgCM6Isy0OQKkvWORFlIpahVrAgihqcR7AOiENKqAoWor0RSYVwpTkv57d/8m6SW5CdkjuPffk+1krK8kd9z37nGQ/Zw+nWn5+fr4BAAAAgIfqPg8GAAAAAIIEAAAAgHKhRwIAAACAN4IEAAAAAG8ECQAAAADeCBIAAAAAvBEkAAAAAHgjSAAAAADwRpAAAAAA4I0gAaDAxRdfbC1btiz21apVK+vcubNdcskl9sorr5R7i3399dc2depU++yzzwpu+8c//lHwPvo5GXr27FnsM5900knWr18/u++++1y5i7r55pvd4/Tc8sjOznbbYv369WV6fLztVNnb7k9/+pM988wzcbeVPn+yvP/++3beeedZ+/bt7cQTT7THHnssYe/96aef2i233GJnnnmmnXDCCe79f/GLX9hdd91lq1atSkgZtmzZ4vadZB0viaJtPGXKlILfhw0bZtdff737WZ8/3t+q2K+yHlsAyi/9AJ4LIKJq1qzpGkiBXbt22eeff25Lly51X2PHjrVLL73U+3Xnz59vM2bMsKZNm1rr1q3dbfXq1bMuXboU/JxMdevWtTZt2lh+fr5rrOkzr1692mbPnm133nmnDR48uOCxxx13nCv34YcfXq73UuP3ueees5NPPtmaNWu238cnejutW7fOfv/737vyDRw4sOB27RdHHXWU+/zJohCjRqL2U9VX7dq1E/K+TzzxhI0fP97y8vKsRo0aLmDn5ubamjVr7Msvv3T79z333GMDBgyo1HIsWbLEHnzwQRs1apQL+FH0448/2r/+9S+3jQMKapdddpn7+cgjjyw4HmJt27at4ESF6ghA5SJIAChGjeOiZ3m///57Gzp0qPsn/cADD9gFF1xghxxyiHcDqCg1FBJ5Rrk0Rcvy73//2zVa33vvPRckfvKTn1iPHj3cfWrQBI0aX3v27LHXX3+9TI9VQzVe2Srb3//+97i3/+EPf7BkC840a3+88cYbK+x19+7dawcddFDc+5YtW+Z6pxQyu3fv7kLWoYce6u77z3/+Y2PGjHE9BLfffrvrzVJDt7LEO45SSbBPp6WllfgYhQZt6+CEw4YNG1xIyMrKcr8rrMULbCNHjnR/o/r06WONGjWqtM8A4L8Y2gSgzGfrg3/c6qFYu3ZtwX3//Oc/bcSIEdatWzc33OOcc86xhx9+2DWYRcNjNNRAZ21FQ0OCoQf7G7Kjs5IaxqDGW4cOHexXv/pVsSEkW7dutZtuusk6derkHnPllVfat99+a6eccop7DT2/PNRzMn36dBcg1KhR43F/Q5sWLFhgF154of3sZz9z2+Lss8+2yZMn286dO939Kkvbtm3dGdegMazXid1OajxpW51//vnWrl07++CDD/Y7jElnyXWW+rTTTnOvr6E/H330UcH9pT0/uD3YTvr5/vvvdz8rRMXeV9LQpi+++MJuuOEGtw8cf/zx7myxzphrCFesYLvpcyuoqa7Uy3HqqafauHHjLCcnp8T6CLZP4JFHHilWvwsXLnTbX6+p7dCrVy+bNGmS/fDDD3E/s3oRFBLV+L/jjjtKfO9p06a5fUDhQfUZhAjR/qFt36JFC7fddXyUto8En6Po8JsPP/zQfvOb37h9XWVXXepY0TEQW4dvvfWW+13vWbQ+33jjDTcEUceC6kHv/dvf/taFnVhBPeo1FEw0PEv7mo5xDR3bt2+fTZgwwe3H+tI22r17d6HX+Oabb1yA0nGm9zrjjDPcdtJzi37WePt0PDt27HC9gR9//LFlZGRYnTp13O/B4xs3blziPvLyyy+7oZcHH3xwhQZMACUjSAAos9gGQtAbsXLlSje34rXXXrP09HQ35EUhQw3RoDGqM4OxQ6WCYUH6h78/eo0nn3zS9ZKogaZGzq9//euChrkad2qwqgGpXhO9lxq1apDp9wOlYTNqHIpeV0N+SqLwpGFfK1assCOOOMINu1ED7qGHHnJnSkVnqnV7QD8XHaKhUHDrrbe65+r+smyn//3f/7U///nPdthhh7nnq160nRSofKk8Co6i7/q9tDPsagAPGjTIDdVSvajRqH1FDdQhQ4bYm2++Wew5atirwatGst7j//7v/+ypp54qtcdDdRu7rTQkLLZs9957rwuUy5cvt/r167v9TK8/c+ZMV44gvMWaO3euC3/Nmzd3gSAePS8IZRq3H28olT6DPv/vfvc7Fyh8aRvqOHr11VddA1ohVNtQDXGVffPmzYWGt8V+/mCom3qsrrjiCjf8UMO+1IDXdp0zZ47bhzdu3FjsfRX0tM9qH1Pw19l8HU+qh+eff94d5wrqTz/9tBuWGBsiVOfPPvus68lRT4He649//GPcQFbWffruu+92n0nhT4FBP+tLgUV0kkL1WZT+NqjHSIYPH+6OPwCVjyABoEzUmNDZ26ABc/TRR7uf1XhVQ0IN2BdffNE9RmeERY0PNSB0lloNg4AauGr0lGV+geYoaJiNGlRqJMp3333nzrwGZ8yDs5VqLL300kvuzKTKF/SIHKhgOIXE9sQUtWjRIvf9mmuusb/97W9ubsXixYstMzPTBR41onTGVw23gH6ON2RJQ2x0dvWvf/2ra1Tuj7aJPre2U7Ct1ahXI9KXyhOMTQ+GVJU07j9oIOq9NHdCdaXGub7/9Kc/dfuGJiIHw1liJy2rUa7to8fqjLYUndwdS/tR7LZSmYKyqSGuOQyiXis1yFUHClii+S7qwSjqk08+sXnz5rntfN1118V9X4WRoPzlCQlloe2g99DZfe3DCs/6DOqd0HZVA7/o8Lbg8+t29e4E9a6eAQV7HYv6XNqXNm3aVOgYDOg40mtoW6lXUTSESM/X8fzCCy/YMccc425XsAgoaOhxCncqr97nL3/5ixuupDpU/ZZnn9ZwwVmzZlnDhg3d8CT9rC+FU9W/fo63Lz766KNuG9SqVcsFVACJQZAAELdRqrN6wZfOiKpxoqEJOpOoISjqfZCJEye6RoPGkAdnGYNGoc4oqgFzINQoDM649u3bt+D2YEiIeihiV3WRatWq2eWXX15hNRs7F6S0oTdqxIgaX2qE6QytzowqYDz++OMlnvGOR5/FZ7Ko5qxoGIhomEoQ0nR2vjKp7oNeml/+8pcF76uhP9pvgvHtarDHql69uus1En1ODUESBRKdfS9PQzyoe51RD2h4UDDOPt7cAjXUFfRKE/R+iXoLKkOw72g7KfzpWFPDW+FHgVSN6NKoMR/0GKr3K5jroRAczOtROCga6LTylYYayc9//vOC23Wsab9X3SjcSNC7pdcIeplOP/30gmFeeq8gaMXb1mXZp9WLpB4L/Q3SsMCuXbu6HgntQ6pL/V60d0y9WwoSwT6o3igAicFkawDFaCy0gkFRanDorGZwhlL0D1/jrDVuW0MnYoc/ic5IH4jY92rQoEHBz8E4dDXWA7ENDJ0Nryg68xqvDEWpAXfVVVe5ORzqlQjKr/HoWuVKZ1nL87l9H6/GtAKM6iZ2+1QGDXEpaZvrTHps8AsarKLAETtEKHa7lhbWShIs0atGZOz8haAcOqMfbznQoGetNLHl1Bj+yqDQpeF56rXSnAZRL5/mjqgBHjscLp7YJYpLqgeVXT2LsT2BmgcUiG2Ax4be4PZgjoTmLAR1pF5HfRUVr+eurPu0wq968ILhkBpSuH37dhd64lHPi8KE9nudeACQOAQJAMWocaFhFQGNu9YQCA0PiV3VRv/sNRwimFCrM79qdKgXQv/8K+SP1P/v+RA1FIpSGeLdH3v7gdKch+D1jz322BIfpzO/Gv6hoR2aAKvGq87W62ypztBqSIcah2VRlnkRpdGQo6DMRcVum4oa/lX0dWPLEK8cRVdHilfOiihDbDnUC1JUWXoY1ABWeRWKY6+BUtRXX33lgknR9ylapnjhukmTJm6Ohfadd955xy1goAa7woV6t7QPdezYcb9l3V89FC1bbD3E1kHsikql1Y2GOcabPxMbIsu6TyvoxfaKqPchliZqB8MdYwVDLtUTytwIILEY2gRgvzQGXg0OnYXUZMiAGslBiNBZU01a1Xjr2OstVLbYs6saIx3bqKuo3gh9LlFDbn/Dk9SQ1Fh7jRfX3A1NwNYZbY2zjx1jXtFiJ4Gr4aihIBKUN7bBrLPSgXgX2/MRe0Y/WJUrXh349rD4Cl5f9aUGeLxtU5beh3g0cTkYWqQx/kVfP3hfTT7WEEANM4ptOOu+2MZ9SRP2NWFbQwk1nElBVPudwrl6AjQ0rjSx27eketAQwYoY9qMwHAzFCuatFP0qz6pJ2l4axqQyqvcumGitn3UMBb8X7RHTdTzkrLPOOuDPBsAPQQLAfqmRogZOMM46uMZA7HKQwXASDafRmO5AsOxmbM9CeVYSKomW7QwEk23VaIu3sosvDQvSUCU1BFX+YOWYeNS41Ko7GooSnDFV+FLDJ+iFCM4Mx57trahtoeElwbbWSjpBWNAF5YoOYQnmE2g7aXnbeIIyaqhNab07GhcfDKVReAoa2eqVCiZ6a0Wk2AuLVQat5hMIJlgHn1U9adK7d+9yv/7o0aNdfWoba9ha7NyfYD/Rffo52B7BNtcci6CHT/Wtic1FaSEBnY2PnRyvEBHMOYjtVQjqJnbfUSM6OMa0ulIwF0KT0N9++233s+YcxOuV8aX3D4KVJvjrmBetkqbtoGWA4w2NLOv1axQaNOcnCCXq3dDwwOD3WLFLHMeuDAcgMRjaBKBMNDFWwyzUUNLVezXsQMN8NJRADRqtH6/hTxobrVVV1NDSmGw1LK699lrXiNPkTd2mxqsCidamP1Aqh8aPa5KqGtNaxUlDR8pz5lVzG4LApHJqGIteS2ek1RNT2upJCgua7Kzto9Wj1AjU83R2WJOHVR415EQNIzXo1DjUcqFa+Sq28VtWsY1L9TjobLiGyARBJnbCs+YgqPGnRqWCoOpD81m0Lr/uUxljX0/hUY1B9VjosVphKd6qRhr2omVXtRKXzg6rQauGtPYDbUOdudaynBU1dKkkakTq2hQKk9qe2hd1hjsIEbo/qNvy0D6m64gEFyjUJGOFI4UsvYdCtd5P114IJm9ru+nijdqHdAzoNfRYTRrWMCYJQpoCmY4vzY9QENf+ohCn7a99JbaXT3Wj7athUKprDS9U/Sjo6srbGkan8qlhrvsVKvSc66+/3iqK9gXtHwoRmiivz6yeDwVYDXcq77GtIKohTsGxpm2nY7ukEBjb+1KR86IAlA09EgDKRCEgOCOvBo4aSFqBRQ1g9QrobK2G02iIky6ipYaGzixqkqQakTqLqQCihqvodp9ViUr8I1a9ugsmakSrMa0GscZKxzbMy9qI1RlVNY70pQaYzihfdNFFbohJ//799/v8KVOmuLPVatCoUaVhX9oGWklG47iDYUZaMlPLvip8qJGnieOxPTZlFUw4FzVA+/Xr5ya867XUE6HhMLFzMtQQVphRI1WBRxc907r/wWpPsa+nC8WpXlVH2qalzSXQ47Tkqxp7erxWclKA0PKdWlq1pEmyFe22225zq4jp/dTA1RAi9YaoTnQm+0D3N/V6KABoQq/mBWgekBqy2k/UG6X9RCtmBRTqdA0RhQTtp9qOaszHTggOJi0r5GghAw2fU9k14VjhRAFBS8EGKy+JGukKBqrn2LrRa6g3onPnzi7EaciPyqaJ/pqfU5GrGekkgl5T20TbVfu66lz7ugJ9sNJaeeYj6XgNgoTCvfbLknobYhdCCPZjAIlTLb8iZyQCQEioMRYsW6kGps5WAwCAikOPBICUpl4EDd/RGdvgStqis6UBxk4DAFDxmCMBIKVppRvN09CkS62Q9Prrr7vbg5VcNNQkuEAeAACoOAxtApDyNCFz1qxZ7grSmqipScNa6lNzBjRuvDzzDwAAQOkIEgAAAAC8MUcCAAAAgDeCBAAAAABvkRk4rAsraV16XQCqIq7cCQAAAFRFeXl57lo2uiZMafMMIxMkFCJ08SEAAAAAB04Xv2zQoEH0g4R6IoIPXNoVWFOFrnar5SszMzPdFYERLtRPuFE/4UXdhBv1E27UT3jlRqzdlpOT407QB+3ryAeJYDiTQkStWrUsCjuk6LNEYYeMGuon3Kif8KJuwo36CTfqJ7xyI9pu2990ASYTAAAAAPBGkAAAAADgjSABAAAAwBtBAgAAAIA3ggQAAAAAbwQJAAAAAN4IEgAAAAC8ESQAAAAAeCNIAAAAAPBGkAAAAADgjSABAAAAwBtBAiinjIwMth0AAKiyCBKInPy8vEp/j7S0NMvKynLfo/B5AAAAfKV7PwMIuWrVq9v6BdNs9+YNlupqNmhizQZclexiAAAAFEOQQCQpROzauC7ZxQAAAIgshjYBAAAA8EaQAAAAAOCNIAEAAADAG0ECAAAAgDeCBAAAAABvBAkAAAAA3ggSAAAAALwRJAAAAAB4I0gAAAAA8EaQAAAAAOCNIAEAAADAG0ECAAAAgDeCBAAAAABvBAkAAAAA3ggSAAAAAFIvSKxfv96GDh1qLVu2tLVr1xa674UXXrCBAwdahw4drFu3bjZ27FjbsmVL0soKAAAAIARBYsmSJTZ48GBr0qRJsfveeOMNGzNmjA0fPtzef/99mzNnjn322Wd28803J6WsAAAAAEISJLZt22ZPPvmknXvuucXu+/77723EiBHWr18/S09PtyOPPNKFjmXLlll+fn5SygsAAADgv9ItiQYNGuS+b9q0qdh9ffv2LXbbN998Yw0bNrRq1aqV+Jq5ubnuK9UFnyEKnyXR0tLSLGrYD8q3vdhu4UPdhBv1E27UT3jlRuz/Tlk/R1KDhI933nnHZs+ebRMnTiz1cWvWrLEoyc7OTnYRUkpGRoZlZWVZ1KxevdpycnKSXYyUw/ETXtRNuFE/4Ub9hFd2FWu3pUSQmD9/vo0bN85uueUW6927d6mPzczMtFq1alkUkqB2xrZt20byDDv8aDEClB3HT3hRN+FG/YQb9RNeuRFrt+3cubNMJ+dDHSQ0F2L8+PG2cOFCmz59unXt2nW/z1HlRaECo/p5UD7sA+Xfbmy7cKJuwo36CTfqJ7zSIvJ/p6yfIdRBQr0QS5cutXnz5rnJ1gAAAADCIbRB4uWXX7ZFixa5ryOOOCLZxQEAAAAQliDRq1cv27BhQ8Fyrv3793crMnXq1Mny8vJsx44ddtZZZxV73qOPPuoeAwAAAKAKBomXXnopmW8PAAAAIBUvSAcAAAAgNREkAAAAAHgjSAAAAADwRpAAAAAA4I0gAQAAAMAbQQIAAACAN4IEAAAAAG8ECQAAAADeCBIAAAAAvBEkAAAAAHgjSAAAAADwRpAAAAAA4I0gAQAAAMAbQQIAAACAN4IEAAAAAG8ECQAAAADeCBIAAAAAvBEkAAAAAHgjSAAAAADwRpAAAAAA4I0gAQAAAMAbQQIAAACAN4IEAAAAAG8ECQAAAADeCBIAAAAAvBEkAAAAAHgjSAAAAADwRpAAAAAA4I0gAQAAAMAbQQIAAACAN4IEAAAAAG8ECQAAAADeCBIAAAAAvBEkAAAAAKRekFi/fr0NHTrUWrZsaWvXri1039KlS23gwIHWrl0769Kli40bN8527dqVtLICAAAACEGQWLJkiQ0ePNiaNGlS7L6vvvrKrrzySjvjjDNs2bJl9uSTT9pbb73lwgQAAACAKhwktm3b5gLCueeeW+y+p59+2o466igbOXKkHXLIIda8eXO77rrrbOHChbZ9+/aklBcAAADAf6VbEg0aNMh937RpU7H7VqxY4YY0xdLv+/bts08//dQNdYonNzfXfaW64DNE4bMkWlpamkUN+0H5thfbLXyom3CjfsKN+gmv3Ij93ynr50hqkCjNli1brH379oVuO/TQQ933zZs3l/i8NWvWWJRkZ2cnuwgpJSMjw7KysixqVq9ebTk5OckuRsrh+Akv6ibcqJ9wo37CK7uKtdtCGyTiyc/Pd9+rVatW4mMyMzOtVq1aFoUkqJ2xbdu2kTzDDj9ajABlx/ETXtRNuFE/4Ub9hFduxNptO3fuLNPJ+dAGicMPP9y2bt1arJciuK8kqrwoVGBUPw/Kh32g/NuNbRdO1E24UT/hRv2EV1pE/u+U9TMkffnXkmhY08cff1zoto8++shq1Khhbdq0SVq5AAAAAIQ4SFx44YW2ceNGmzp1qu3YscNWrVplU6ZMsSFDhljt2rWTXTwAAACgSkvq0KZevXrZhg0bCuY+9O/f381/6NSpkz366KM2c+ZMmzBhgj3yyCNWp04d69evn11//fXJLDIAAACAZAeJl156qdT7O3bsaPPmzUtYeQAAAACk+NAmAAAAAOFFkAAAAADgjSABAAAAwBtBAgAAAIA3ggQAAAAAggQAAACAykePBAAAAABvBAkAAAAA3ggSAAAAALwRJAAAAAB4I0gAAAAA8EaQAAAAAOCNIAEAAADAG0ECAAAAgDeCBAAAAABvBAkAAAAA3ggSAAAAALwRJAAAAAB4I0gAAAAA8EaQAAAAAOCNIAEAAADAG0ECAAAAgDeCBAAAAABvBAkAAAAA3ggSAAAAALwRJAAAAAB4I0gAAAAA8EaQAAAAAOCNIAEAAADAG0ECAAAAgDeCBAAAAABvBAkAAAAA3ggSAAAAALwRJAAAAABEL0isXbvWRo4caV26dLEOHTpY//79bcGCBckuFgAAAFClpVuI5eXl2aWXXmodO3a0F1980Q455BBbsmSJXXfddXb44Ydbt27dkl1EAAAAoEoKdY/Epk2bbOPGjda3b1+rV6+epaen2y9+8Qv388qVK5NdPAAAAKDKCnWQaNSokRvONHfuXNu8ebPt2bPHnn/+ecvJybHTTjst2cUDAAAAqqxQD22qVq2aTZs2zS677DLr2rWr+z0jI8Puu+8+a9WqVdzn5Obmuq9UF3yGKHyWREtLS7OoYT8o3/Ziu4UPdRNu1E+4UT/hlRux/ztl/RyhDhJ79+61yy+/3I4++mibMWOGG9L06quv2s0332x169a17t27F3vOmjVrLEqys7OTXYSUoqCZlZVlUbN69WrXEwc/HD/hRd2EG/UTbtRPeGVXsXZbqIPE0qVL7ZNPPrHp06e7YU6iORILFy602bNnxw0SmZmZVqtWLYtCEtTO2LZt20ieYYefli1bssk8cPyEF3UTbtRPuFE/4ZUbsXbbzp07y3RyPtRBoqTuFf1+0EEHxX2sKi8KFRjVz4PyYR8o/3Zj24UTdRNu1E+4UT/hlRaR/ztl/Qyhnmx94oknup6ISZMm2ZYtW2zfvn32yiuv2LJly6xXr17JLh4AAABQZYW6R6JOnTo2a9Ysmzx5svXp08eNEW/WrJndeeed7sJ0AAAAAJIj1EFCjjvuOLdyEwAAAIDwCPXQJgAAAAARChJ//OMf497+448/2r333nugZQIAAAAQpSCRl5fnri79pz/9yV3jQT/Hfn399dc2b968yistAAAAgNSbI/Hwww/blClT3BWm27VrF/cxrVu3rqiyAQAAAIhCkBgxYoSdfvrpdt5559ndd99d7P6DDz7YTjnllIosHwAAAIAorNqkK+xOnTrVBQoAAAAAVVO5ln9ViHjzzTft888/d9d2KGrUqFEVUTYAAAAAUQoS99xzjz355JPugnE1a9Ysdj9BAgAAAIi2cgWJ5557zk26Pvvssyu+RAAAAACieR2Jffv2ESIAAACAKqxcQaJHjx723nvvVXxpAAAAAER3aFP37t3tzjvvdJOujzzySEtLSyu4T9eYGDx4cEWWEQAAAEAUgsTYsWPd91mzZhW7jyABAAAARF+5gsTKlSstPb1cTwUAAABQVedIlBYi8vLyDqQ8AAAAAFJAuboVWrVq5YYwleSzzz47kDIBACIsIyMj2UUAACQrSNx1112FgoR6If7973/byy+/bJdddllFlAsAkGD5eXlWrXq5OqrLTItzZGVlWVQ+DwBUZeUKEkOGDIl7+/nnn2+TJ0+2QYMGHWi5AAAJpkb3+gXTbPfmDSm/7Ws2aGLNBlyV7GIAQKRV6Izpn/70p/b5559X5EsCABJIIWLXxnVscwDAflVon+/y5cvthx9+qMiXBAAAABCVHolu3boVu23v3r32/fff2y9/+cuKKBcAAACAqAWJCy64oNiqTTVr1rQWLVrYaaedVlFlAwAAABClIDF69OiKLwkAAACA6E+21lKv8+bNs2+++cb1TmiitVZzOuWUUyq2hAAAAACiMdl68eLFdvXVV7t5EV26dLHOnTu7+RGXX365vfHGGxVfSgAAAACp3yMxc+ZM+8Mf/mDnnHNOodufeeYZmzZtmvXo0aOiygcAAAAgKj0SGs505plnFru9T58+9uWXX1ZEuQAAAABELUjUrVvXNm3aVOz2zZs3W1paWkWUCwAAAEDUgkTXrl3thhtusA8//NC2bdtm27dvtw8++MDd1r1794ovJQAAAIDUnyMxZswYN9n6oosuKrieRH5+vlux6dZbb63oMgIAAACIyvKvjz/+uH3xxRf29ddfuxCh5V+bN29esaUDAAAAkPpBIi8vz0aNGmWNGjWy3/72t3bccce5L9Hk606dOtl9991XWWUFAAAAkIpzJGbPnm0rVqyw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O/bYY4/Zu+++a2eddZZdeeWVtm7dumQXDQAAAKiyQh0ktm3bZs8++6xdf/31lpmZabVq1bIRI0ZY06ZN7emnn0528QAAAIAqK9RB4tNPP7V9+/ZZ27ZtC91+wgkn2IoVK5JWLgAAAKCqS7cQ27x5s/tev379Qrcfeuihtnz58kK35eXlue87duyw3NzcSi1XWlqaVW98nKVnFC5XKqpe73DbuXNnpW+zRKJ+wi0q9cOxE27UT7hRP+FF3YRb9QS123bt2lWofZ2SQSJQrVq1Qr/n5+cXu2337t3u+zfffJOYQjVuZ9bYImHLZ59Z5FA/4RaR+uHYCTfqJ9yon/CibsJtSwLbbWpf165dOzWDxOGHH+6+b9myxc2PiO2paNiwYaHH1qtXz4455hirWbOmVa8e6hFbAAAAQGipJ0IhQu3r0oQ6SBx//PF20EEH2ccff2zNmjUr6I3QsKbevXsXemx6ero1aNAgSSUFAAAAoqO0nohAqE/d16lTx84//3ybPHmyrVmzxs1/mDJliuuhuPDCC5NdPAAAAKDKqpavU/whtmfPHps0aZI999xzLkhkZWXZzTffbO3bt0920QAAAIAqK/RBIqo0z+P++++3N9980wWko446yl1o75xzzilxKdzx48dbdna2G+7VvXt3u/32290KVkhu/fznP/9x9aF6iV0EQHWj56Piffnll/Y///M/9uGHH7qVJTT0cejQoTZo0KC4j+f4CWfdcOwk11dffWXnnnuunX322TZhwoS4j+HYCWfdcOwk3qWXXuoujKyVB2M9+OCD1qNHj6p77ChIIPEGDRqU/6tf/Sp/w4YN+bt3785/4okn8lu1apX/8ccfF3vs1q1b808++eT8O++8M3/btm3uOXr+0KFDqboQ1M+qVavyMzMz3WNR+XJycvJPOeWU/Ntuu80dD3v27MmfN2+eq4PXX3+92OM5fsJbNxw7ybNv3778wYMH55900kn5Y8eOjfsYjp3w1g3HTuKde+65+Q8++GCZHru1CrXbQj1HIqp+/PFHa9GihUumRxxxhNWoUcMuvvhiq1u3rku7RS1atMjNntfjNXtez7ntttvcYzV3BMmtH12BXSJ3liGktH72NddcY2PHjnXHg870nHfeee7nz+IsicfxE9664dhJnocfftitQ9+zZ88SH8OxE9664dhJPG3zsv6fX1SF2m0E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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# What do their ratings look like?\n",
"fig, ax = plt.subplots(figsize=(8, 4))\n",
"cust_rated_items['rating'].value_counts().sort_index().plot(\n",
" kind='bar', color='#D4845A', edgecolor='white', ax=ax)\n",
"ax.set_title(f'Rating Distribution for Customer #{test_customer_id}', fontweight='bold')\n",
"ax.set_xlabel('Rating')\n",
"ax.set_ylabel('Count')\n",
"ax.tick_params(axis='x', rotation=0)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Step 3.2: Build the User Taste Profile\n",
"\n",
"This is the core of content-based filtering. We create a **weighted average** of the item attributes, where the weights are the customer's ratings.\n",
"\n",
"**The math (in plain English):**\n",
"- If Customer #7 gave \"Spicy Jalapeño Burger\" a 5.0 and it has `Spicy=1, Hearty=1`, those attributes get a big boost.\n",
"- If they gave \"Caesar Salad\" a 2.0 and it has `Light=1`, \"Light\" gets a small (or even negative, after centering) contribution.\n",
"- Sum it all up → that's the taste profile."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Item-Attribute matrix for Customer #7's rated items:\n",
"Shape: (38, 10) (items × attributes)\n"
]
},
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ── Visualize the taste profile ─────────────────────────────────\n",
"fig, ax = plt.subplots(figsize=(10, 5))\n",
"\n",
"sorted_profile = taste_profile.sort_values(ascending=True)\n",
"colors_bar = ['#D4845A' if v > sorted_profile.median() else '#B0C4B1' for v in sorted_profile]\n",
"\n",
"sorted_profile.plot(kind='barh', ax=ax, color=colors_bar, edgecolor='white')\n",
"ax.set_title(f'Taste Profile: Customer #{test_customer_id}', fontweight='bold', fontsize=14)\n",
"ax.set_xlabel('Preference Weight (higher = stronger preference)')\n",
"ax.axvline(sorted_profile.median(), color='gray', linestyle=':', alpha=0.5,\n",
" label=f'Median: {sorted_profile.median():.1f}')\n",
"ax.legend()\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Step 3.3: Score All Menu Items\n",
"\n",
"Now we compare every menu item's attribute vector against the taste profile. Items that are a close match get high scores.\n",
"\n",
"We use **cosine similarity** — it measures how similar two vectors are on a scale from 0 (totally different) to 1 (identical direction).\n",
"\n",
"> **Why cosine similarity?** It focuses on the *direction* (pattern of preferences), not the *magnitude*. A customer who rates everything high can still get good recommendations because we're matching the *pattern*, not the raw numbers."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"🎯 Top 10 Recommendations for Customer #7:\n",
"======================================================================\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
item_name
\n",
"
category
\n",
"
price
\n",
"
match_score
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2
\n",
"
Mushroom Swiss Burger
\n",
"
Burger
\n",
"
16.39
\n",
"
0.656849
\n",
"
\n",
"
\n",
"
7
\n",
"
Blue Cheese Burger
\n",
"
Burger
\n",
"
17.20
\n",
"
0.656849
\n",
"
\n",
"
\n",
"
25
\n",
"
Fettuccine Alfredo
\n",
"
Pasta
\n",
"
17.71
\n",
"
0.656849
\n",
"
\n",
"
\n",
"
29
\n",
"
Truffle Mac & Cheese
\n",
"
Pasta
\n",
"
13.28
\n",
"
0.628494
\n",
"
\n",
"
\n",
"
49
\n",
"
Mozzarella Sticks
\n",
"
Appetizer
\n",
"
9.11
\n",
"
0.611734
\n",
"
\n",
"
\n",
"
38
\n",
"
BLT Classic
\n",
"
Sandwich
\n",
"
14.42
\n",
"
0.600561
\n",
"
\n",
"
\n",
"
57
\n",
"
New York Cheesecake
\n",
"
Dessert
\n",
"
7.98
\n",
"
0.589388
\n",
"
\n",
"
\n",
"
33
\n",
"
Grilled Chicken Panini
\n",
"
Sandwich
\n",
"
15.74
\n",
"
0.588427
\n",
"
\n",
"
\n",
"
28
\n",
"
Shrimp Scampi Linguine
\n",
"
Pasta
\n",
"
16.55
\n",
"
0.588427
\n",
"
\n",
"
\n",
"
36
\n",
"
Turkey Avocado Wrap
\n",
"
Sandwich
\n",
"
12.52
\n",
"
0.588427
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" item_name category price match_score\n",
"2 Mushroom Swiss Burger Burger 16.39 0.656849\n",
"7 Blue Cheese Burger Burger 17.20 0.656849\n",
"25 Fettuccine Alfredo Pasta 17.71 0.656849\n",
"29 Truffle Mac & Cheese Pasta 13.28 0.628494\n",
"49 Mozzarella Sticks Appetizer 9.11 0.611734\n",
"38 BLT Classic Sandwich 14.42 0.600561\n",
"57 New York Cheesecake Dessert 7.98 0.589388\n",
"33 Grilled Chicken Panini Sandwich 15.74 0.588427\n",
"28 Shrimp Scampi Linguine Pasta 16.55 0.588427\n",
"36 Turkey Avocado Wrap Sandwich 12.52 0.588427"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ── Score every item using cosine similarity ────────────────────\n",
"\n",
"# Get the full menu attribute matrix\n",
"menu_attr_matrix = menu_df[attribute_cols].values\n",
"\n",
"# Reshape taste profile for sklearn\n",
"profile_vector = taste_profile.values.reshape(1, -1)\n",
"\n",
"# Compute cosine similarity between taste profile and every item\n",
"similarity_scores = cosine_similarity(profile_vector, menu_attr_matrix)[0]\n",
"\n",
"# Add scores to menu dataframe\n",
"menu_scored = menu_df.copy()\n",
"menu_scored['match_score'] = similarity_scores\n",
"\n",
"# Remove items the customer already rated\n",
"already_rated_ids = cust_rated_items['item_id'].tolist()\n",
"recommendations = menu_scored[~menu_scored['item_id'].isin(already_rated_ids)]\n",
"\n",
"# Sort by match score\n",
"recommendations = recommendations.sort_values('match_score', ascending=False)\n",
"\n",
"print(f\"\\n🎯 Top 10 Recommendations for Customer #{test_customer_id}:\")\n",
"print(\"=\"*70)\n",
"recommendations[['item_name', 'category', 'price', 'match_score']].head(10)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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f9ZZZ4XLL7887LnnnmGvvfZqyeOsWCRirrnmmvD++++H3377LUw66aShT58+Yddddw2LLbZYk19vjz32iD+tdazbbLNNmGiiiUK7du3iD8c7zzzzhN13371ZxytJkiTl0ZFHHhnuu+++wu///PNP6NixY2jf/v/qvd57770mv+7VV18d2kpjYoN///033HjjjeGBBx4oJCKmm266mAQhJunatWuj3mvRRRdt1ni0JRIo6RwSy3Tq1CnMNNNMYbPNNjPhIEmSNCF2ZnTv3j3ceuut49w+evTocM8994Rpp502lMuYMWNCTU1NyAsm+9ttt12Yb775YvAwcODA+Occc8wRtt9++/Dhhx+GPCKo49g53oceeijMOOOMYaeddgq//vprs16PAKo1cK4555IkSVJTnXjiiXHOm35SgqP4tnLPeccHCRo6RW655Zawzz77xOIlfvjs/Ln++uuHX375JVSTdA6JZZ5//vmYyDjqqKPCs88+W+5DkyRJUlsnM1ZaaaXw5ptvjtNe/PTTT4fJJ588zDrrrIXbmCBTHTNkyJDCbfw9u3TU4MGD4wV/qv4XXHDBsMEGG8TXyvr555/DbrvtFu9feumlw6WXXjpWWy8VRUxa559//kLQ8dRTT4UNN9wwLLzwwmH55ZcPBx10UBg+fHjheVyY5zkrrLBCWGihheJE/uGHHy7cT/fJuuuuGy/s83xemwDgp59+CnvvvXc8luWWW26s5xR7+eWXY5cDxz7VVFPF26aZZppwyCGHxACCroe77rorLL744mNdlF9nnXXGaRdn3K+//vpwwQUXhKWWWqpw+yOPPBLWW2+9eDxUS+24447hs88+KwQvJ5xwQlh22WXj8XO8p512WpMCramnnjpsvPHG4e+//w7ffvttvO3uu++O55DbElrIuY2WcnD8jCHBQ+ro+P3338MBBxwQPy+f4aKLLgpHH310fEzy0UcfxYCLz9O3b9/4eT7++OOxuoN4DmPKZ8qeU0mSJKklsbQSc1XmncQhxAHfffdd4f5Sc17mq/vtt1+c+y6wwALh5ptvHuc1U4xEcc7ZZ58dX4f3IO6g2722trbk8RAzEP+sscYaMUYqjg2KXXvtteHtt98OV1xxRYwFJp544vizyCKLxO5x/sx+HtBpv8wyy8T5+M477xzfp1RsRzEbx8pj+ZwbbbRRjH8ac9x4/PHH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5eGHHy55/1lnnRXvv+CCC1rsPRdddNE4P5911lnj70OHDg133HFHi71+Nfnll1/CmWeeGdZcc82w4IILxkKkfv36hcsuuyz8/fffTXqtE088Mdx4442h3L766quYWFlxxRXDAgssEL8PG264od8BSZKkKlfVyQysvvrqMdAp/rnwwgsb/RoEXu+//37h97vvvjsmGKrNE088Ef7555+w1FJLhZtuuqlRgdGcc84Z2rVrN859//77bysdpSRJkvKme/fu4dZbby1ZLHPPPfeEaaedttXnseOTzCg1d62G+SxJng022CAMHjw4nHbaaeGNN94Ir7zySkwEPPXUU2HjjTcOf/zxR6gko0aNCltssUX47bffwnXXXRfefvvt8Oyzz8bbjjvuuHDzzTeX+xAlSZLUSqo+mdEYBF4s5TTffPOFlVdeOU70mSSDC/sffPBBrEKi8mefffYJ1157bezMSK3ttBXTXpxF9ROPT7744ouw8847x2oolmY68MADYzIguffee8Maa6wRj2GVVVYZq+KJ1+H1cPvtt4fFFlssvPnmm2HdddcN888/fzx2JvAJFVYnn3xyWHrppeP7rbPOOo0K7nhPHktVE0Hnn3/+WfJx3377bfzsYFx4D1Bxd/XVV8dujfXXX7/Rx8L485mpqtp2223Dd999N9b9f/31VzwnPIbXWHvttcMNN9wQxowZ0+BnkiRJUutbaaWV4vy0uLv36aefDpNPPnmhgyL56KOPwg477BDndn379g077rhj7H5OuMB+wAEHxHnzEkssEc4444yx5n6vvvpqnHsOGTIkzhOZbw4cODDOUV988cX4mMcffzyst956cX69/PLLhyOOOGKs+XepuSvzbrqPN9tsszjnxsiRI8PRRx8d57PMvYkXiAcS3o/Xeuedd+LzmNOusMIKsQAqqa2tDRdffHF8fV6Dgis6I0j2JMznSS4svPDC8b2JHb788svC/bw2n5NCqzS35jE///xznefl2GOPDZ07d47vxdh06NAhdOzYMXZn8Nl/+umn+HnBEq98DpZ8TZjLc1v6LNm4h/iG+zjunXbaKR4Px8V7ZTH3J27hfsbuhBNOGCuBwnmju4fuCj77lltuOVZXfDG+Jz/++GPYbrvtwkwzzRQLq7p06RJjGMbmP//5T6PHtBgxGfEKx8r3jiWoGKPkhx9+CLvsskt8vWWX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K5IkSSq/CSqZsfXWW8cL5g8//HDJ+88666x4/wUXXNDmx5Z3d955Z9h0003D4osvHuaff/6w3HLLhYMPPjh89913hccMHTo03HHHHYXf99hjj/D000+X6YglSZIk5cGRRx4ZkxXph5jrP//5T+H3HXbYIbz33nth1llnbdPjMl6RJEmqLBNUMgPdu3cPt9566zi3jx49Otxzzz1h2mmnDXn177//luV9r7322nDSSSeFHXfcMTz77LPh7bffDtdcc0344YcfwpZbblnopnjiiSfGSmZIkiRJ0oknnhiTFeknJTiKbyulpqYmjBkzxkGUJEnShJfMWGmllcKbb745TgszHQSTTz75ONVAn376adhpp53CEkssEfr27Ru222678MEHHxTuX2211caqMurTp0+sNMq2SxdXIR122GGF55MU4DUWWGCBsPTSS4ejjz46jBw5snA/j7/66qvDWmutFdZff/14G8mDk08+OT5+wQUXDOuss06jkwgEA2effXZsp6bDYvnll48dKbW1tXU+54UXXojvs+qqq4ZJJpkktG/fPsw222zh9NNPD/vvv3/4559/wmmnnRaPaeDAgfFzvvjii7HDZamlliq8zvDhw8O+++4bFllkkfiz2267ha+//rrke/7+++9h3XXXDfvss0885sGDB8exX2yxxeKxbLDBBnZ9SJIkSVXg1VdfjXHPkCFDCh31xEXEC8QsxBENxTFffPFFfA0KrDbffPMw33zzhTXWWCO8//774YYbbgjLLLNMWHjhhcNBBx0UXwvF8cojjzwS1ltvvRhvLLroorGY67PPPqtzWdznnnsu3vbNN9+08YhJkiRNmCa4ZEa3bt1iYuL2228f63Z+T8mC5LfffoudBzPMMEN47LHHwpNPPhl69+4db/v+++/jY7g9VRM988wzYeqppw6bbbZZvI8JcLba6IQTTggdO3YMG220Ubz/8ccfj0mAY489NnY73HTTTfECPWu3ZpGoYKJ+//33x995DgkZHv/GG2+Eww8/PCYSHnzwwQY///XXXx8n87zHO++8Eyfw/H7bbbfV+Zx55pknvPXWW/H9SVxku1xIpJAEOuSQQ+LEn6CBz5oNChIChz///DN+bjo8SIzsuuuu41RaESAQuEw//fThzDPPDB06dIhJE16bxMprr70Wl7w64IADwogRIxr8zJIkScW4mOnP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8suHq666KvTq1Sv89ttv4eGHHw7HHXdcvP+oo45qgU8oSZIkqZrjGEmSJKk1ucxUDlHZtMgii4T5558/DBkypNXeZ8yYMbHb4z//+U8488wzw6yzzhqTJ127dg2bb755OP3008NEE00U/vnnn3GeO3LkyHD00UeHpZdeOh4nXSTXXnvtWK9NUmXFFVeM9y+11FLh8MMPD3/88Udh2So6RRZffPGwwAILhLXWWivceeedheezpNUtt9xS+P3ee+8Na6yxRqzsWmWVVcKNN97YauMiSZIkqWX88MMPYZdddgkLL7xwWHbZZceKGbJz/XXWWScsuOCCYYkllgj77bdf+Omnnwr3L7PMMrGT/OCDD46PIQa56667wmuvvRbWXnvtGG9sscUWYejQoYXnPPvss2HjjTeO77vYYouFnXfeOXz55ZeF+zfbbLNw4oknhlNPPTXGXjzm0ksvDR9//HHsUOc111tvvfDRRx8VnvPdd9+FvfbaKz5+0UUXDVtuuWXsTJEkSVLbMJmRQyQPnn/++fD222+H9ddfv9XeZ9CgQeHTTz8Nu+22W8n7SRqQ7MguV5WcffbZcf8MEg50kdC9QSCQ9tR45JFHYnfI1VdfHd599924NNaHH34YLr/88nj/scceGyaffPLw9NNPh7feeisccMABsROE4ylGgHDkkUfG4IXHnnzyyTHR8tBDD7X4mEiSpMpWW1tbWHLTn4bHQGptxBM///xzjA/o/iYh8MknnxTu/+CDD8IhhxwStttuu/Dmm2+G++67LxZ0kWhIKLBiyaoNNtggJjAomDrppJPibRQ5Pf7443HpXDrNwdK5dLkvt9xy4ZVXXglPPvlk/L5nO955zQcffDDu1ffyyy/HbvXzzjsvFnlRlEU8RqEXt6X/thA3TTbZZOGpp54KL7zwQizo4nkUakmSpMpRrXECKvnYG8NlpnLi0UcfjZPstMxU+/bt48SYiXprSZVJs88+e5OfS2KB/TyYzINAYZpppomJCyqufvzxx/gZJp100sJSWHRecFsKMHr06BH35+A2PifPTfdn3XDDDbGzY4UVVoi/UwV10UUXhW7duo3X55ckSdWHi6SjRo0q92FIE2Qck7XQQgvF5adY+paEQPfu3ePtFDFlO7L79OkTXn311dgdTvKAx7EELomGLDoy+vbtG/++0korhdtuuy12Y0w55ZSF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5T4MSZLUArpP0S1s3Hctx1JSRRo24LZQO/TTch+GJEkVpVO3nmHGfv3LfRjKGZMZqko//zkifP/LD+U+DEmSJEkTuH9GDA+jh35R7sOQJEmqePbpSJIkSZIkSZKkXDOZIUmSJEmSJEmScs1khiRJkiRJkiRJyjWTGZIkSZIkSZIkKddMZkiSJEmSJEmSpFwzmSFJkiRJkiRJknLNZIYkSZIkSZIkSco1kxmSJEmSJEmSJCnXTGZIkiRJkiRJkqRcM5khSZIkSZIkSZJyzWTGePrmm2/C3HPPHZ577rnQ0l599dX42rxHNbvgggvCUkstVe7DkCRJknLh0EMPDVtvvfV4vcaRRx4ZttpqqxY7JtV9rjbZZBOHR5IkqQ10bO03YBL++uuvh+uuuy4svvji41zEfu2118INN9zQqsfw77//xgnmlFNOGa6++urQrl27se4/5ZRTwgMPPBAefPDBMPXUU4e28OGHH4Yrrrgifv4RI0aEySabLPTp0ycGHMsvv3ybHIMkSZKktkOC4b777iv8/s8//4SOHTuG9u3/r8bsvffea5H3OvHEExu8CH/vvfeGiSaaKP4+ZsyYMMUUU4T//ve/Ya+99grzzjtvyJOhQ4eG559/Pmy88cZ1PoZCsDSexHydOnUKM800U9hss81MOEiSJFWBNunMmGqqqcJRRx0V/vrrr1AOTNBPP/308MYbb4Rbb711rPvefPPNcP3114cTTjihyYkMkiTNMWDAgDgJn2aaacJtt90WBg4cGO6///6wyCKLhD333DMmXCRJkiRVFxIMJCvST0pwFN/WVuabb77C+77//vuxwGuGGWYI2223Xe66w5944olwxx13NPi4NJ7EWCQ/SGQQiz777LNtcpySJEmq8GQGXRGTTDJJOO+88+p9HB0Khx12WOjbt29YaKGFwoYbbhiefPLJeN9dd90VOzuoGErWWWedsOKKK471GiuttFJMThSbc845w/777x+TGmliTnLl8MMPDxtssEF8Xk1NTbj88svDGmusERZccMGw2mqrhfPPPz9WTGWXfaKCiWWRSlU7cXxUOfEaP//88zj3jxw5Mn5Gjp0/e/bsGW8nsbHbbrvFyfeoUaPGes5XX30Vttxyy7DAAguEFVZYIdx9992F+2pra8PFF18cx2H++ecPq6++erjsssvC6NGjC4/56KOPwg477BA/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RFhggQXimN5///2F59x+++1hscUWi49fd91141iQDGJsSi2j1dTHS5IkSWo5dGYsssgicR7OUrz1zcE32WSTcOihhxa6I4gzWEqX+fw111wTExXEPcQ6LBFMIVt2iWBinj333DMMHz58rGV4iQW23HLL+DrEL8SDX331VZM+R48ePWIxHa89YsSIwu1PPfVU2HDDDWPH+fLLLx+L1XhM+ozXXXfdWB3hHCufLeGz0JlPzClJkqQqTGb88ssvcU1UKvpT+3IWy0v1798/zDTTTGPdft9994UbbrghJiKagokzE04SJ2+99VZMNrA01FVXXRXv/+677+JSSVx4f+2118Lpp58err322npf84EHHgjTTz99nBCXwkV+khHJr7/+Gp544onYzfDCCy/ExM1xxx1XZwXRkUceGQ4++OB4vCQeOKaHHnponMeShDnppJNisoZggbZskhdp3VnuZ7mrbbfdttA9MdFEE8XXIpn09NNPxyorkjMkkZoqJYR4TRxxxBHhiy++CA8++GAMOmhTP+SQQ8Inn3wS7+d8c4zXX399HH/Gm+OjDbyUpj5ekiRJUsv5559/wvPPPx8Lp9Zff/0mPZfOC+KZAQMGxGV4k0cffTTGCxSGZW211VZxueFpppkmdlRsvPHGMWlBLEMSg9chDptkkknCFltsUSh+awidGF9//XWMxVgua8oppyzEXcSdJEpeeumleD/LH1MYxnN4T+KPhMfMNddc4ZVXXincxt+XWWaZWNgmSZKkKtwzg4kkk8PZZ5+9Sc+jo4I1VZuKNmWqd3r37h1/50I/E2Iqf3bdddfwyCOPhM6dO4dddtklXjynu2KbbbYJBx54YJ2vyQV7jp/1VxuDiTYX9SeffPL4+5prrhmXqSqFhA2VSiussEL8nW4VEjHdunUb63G0fPOabH5NJwTogmDpJ9azTcdGdRHdG1QSUXUE1r3lM4LPSyVSSjg0BuePzfpItPTq1SsmUkDrOQmOSSedNP6+wQYbxCCFYCTtIcL9BCkcA0gIkeihq6P4Mzbn8ZIkqbox12nM/Q09To0fU01YSDZQFJXm4lyopxCNToWmJjMobkqxQUJMwv57jUH3Ol0Vu+22W4xveC1iIPZZpJuDGLEudJSk2IVjoXP8+OOPL9xPwRTdHsQsmG666cJ+++0XNt9887isLkkKisx4Pu/98ssvx+TH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K5WoTvrPf/4Tzj333DjRp9onoSLmlFNOCX379g2LLLJI2H///cNff/0V76NyZsEFF4zLDS222GLhmmuuiZ0EtPUOGTIkPmazzTYLJ554Yjj11FPj83ncpZdeGqttNtpoozD//PPHKqmPPvooPp5JKs9/8MEHY4JigQUWCKuttlq499576/w8JGFGjhwZdttttzDddNPF2+gu2WmnncLZZ589VhUP7cbrr79+mG+++cJyyy0XJ8i1tbXxPl7j6KOPjtU/HNfKK68crr322rHGjWN7+eWX4zGz1NKGG24YJ9gES4wRn49kUXLAAQfEBBHVYbwuY0AQ9fPPP8f7i8erOXj+LbfcEv/OcfD5nnjiiThufA4m/wMHDiw8nvfaaqut4rnjMU8++WT8M1VnkdhaaqmlxnoPXp/3ae57jhgxIhx22GFxjBZaaKE4bryvJEmS1FKOPfbYMNlkk8V4o0+fPqF9+/ahS5cuYa211goXXnhh6N69e/jll18Kjx81alQs8Fp44YXD4osvHk444YTYIZA89dRTcd7K/csvv3y84D58+PDC/fx93333jXN8fohHiA0SLshvueWWMUYgFthjjz3CV199VefxE08xnyYG4vHEJsQo2HjjjWPB1tVXXx3jEGI24piLL744LlfFHHz11VcPl112WRg9evR4jWN9x0F8R0yY9ccff8T46tZbb42/E7uts846Md4g5qT7n46ZutCF/sADD4TzzjsvrLnmmvGcEaNyDjmXK620Uvj+++8L8SkxXvrMnBeSICmmK8b5PPTQQ8Maa6xRiMEYR+I5jpnnH3HEEWN9LyRJkpSjZMY888wTJ+a0XjMZTGabbbY4ySPBkdx1111xEvvCCy/EiSQTP27LdmOQTBgwYEBMHhSbaKKJYmKCCTdJAJIlTFJZG5aL5lTdtGvXLt6Gjh3/t2oWk3CCiddeey1svvnmMcioa2mjOeecMwYqJGN++OGHse5jMjzXXHPFvxNYEECQJKFF+8orr4wX5PkTTIpJdnDbO++8E4466qiYhEnrraZju/766+MEnzHk/bbddtsYGPFZDj/88BhgsOxV+vwp2fL000/Hif1nn30WL+y3Bo6RijTeiyQTCRjO5/HHHx/vJ7DZcccd4zJcPOamm24Kt912W/wc6fO19Hvi4IMPjgEMS5u98sorYYcddgh77713rJaTJEmS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Oy7Uh4cffjh06dIlTJ8+vV4+X5IkSfWYzDjjjDNiZzD5ohPeuXPnEo9lzT333BPPo2/fvqEx2HnnncPhhx9e6rXlWk6aNKnE42+88UZsnw8//HA2HqUkSZJUvn/++ScMHjw4bLfddmHNNdcMq6yySkxKnH322bP0actzxBFHhOHDhzfY2OWFF14IH330UfHPzzzzTOjTp0/Iqu+//z62wUorrVQcg6677rrhoIMOiueWj3uDc2/RokW9Ha8kSZLqKZkxcODA2BlMvpJB8MLHqmLmzJkhl8uF+nLnnXeGbbfdNnZ8f/vtt9DQbbrppjFBMW3atOLHaP+XXnopzDnnnOHVV18t8XoeX3jhhUPXrl1nCR4lSZKk+nLhhReGm2++OZx88snhtddeC++991646qqrwvvvvx8OPvjgBnlhqhK7JP112uTjjz8ODbGiJolBH3300dCzZ8/Qr1+/cOqpp9ZrfClJkqQMLTPF8kfMlGE5pLKWRqLUmI7mYYcdFlZeeeVSO+KffvppWGONNcKQIUPiz8yuomParVu3sNpqq4Udd9wxPPfcc/E5ghfe/8svvyzxHldffXXYYIMNYsKkNAzqjxkzJpZOL7XUUmHo0KHFzzGoz3t+/fXXJX7n8ssvD927dw9FRUXh77//jkEUHedVV101bLXVVuH2228v0Xl++eWXw/bbbx+TARtuuGEYNGhQ/F1MmTIltsP6668f24FEw6233lri8zjHLbfcMj6/0047hc8++6zE85zbDTfcELbYYot4DJSN8xlllVJvsskmYerUqeHNN98sfmzUqFHhjz/+CDvssEN48cUXS7yen5nh1qRJk/id899tt93CWmutValzSK4NSRFmRjFjbuuttw6vvPJKqccnSZIkVQb9zB49eoR11lknzrxv1qxZrDRmCaX999+/uD9MPMCA/kknnRRWX3312G+lDz9jxoz4PM+tt956xQkA+q4sT3T88cfH16+99tphwIABJfr4VITQ76Zvy/vRH6ZfnCC+ofqBeIYv4p7vvvuuxPGPHDkyxgn0oXkv+svlKS92yY/DOHbOh4lofP/kk0/in5OltPh+ySWXVCpeSRBv0I7EGySKfv/99+LniMGoiuA6EKvtt99+8TPLQhzAOQ8bNiz+/OOPP4ajjz46thMVNnvuuWd49913Q1UstNBCYddddw233HJLeOSR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ycyZM+P3KVOm2K62aap5r9qmWeG9apumwdSpU0v0nyTVLmOTbPH/5mzxemWP1yxbvF7ZMzPDY3dViUua5HK53Gw4Jmm2GD9+fBg7dqytLUmSVEkdOnQIbdq0sb2kWmZsIkmSVLtxickMNSgzZswIkyZNCi1btgxNm7qKmiRJUlmY+TRt2rTQunXr0Ly5BduSsYkkSVK64xKTGZIkSZIkSZIkKdWcui5JkiRJkiRJklLNZIYkSZIkSZIkSUo1kxnK3O72/fv3D+uuu27o2rVr2GGHHcIbb7xR5utHjRoV9t5777DKKquENddcM/Tt2zdMmDBhth5zQ2xXPP3002GdddYJu+yyy2w7zobcpjy3xx57hDXWWCO261FHHRW+++672XrMDbFdH3nkkbD99tuHVVddNXTr1i0ccsghYfTo0bP1mBvi3//EtddeGzp27BjeeuutOj/Ohtyu48aNi+240korhS5duhR/de/efbYfd0O6V//6669w5plnhrXXXjv+G7D77ruHDz/8cLYes6SGzdgkW4x5sseYKluM1bLFODB7jDH/JydlyCmnnJLr2bNnbvTo0bnJkyfnrrvuulyXLl1yY8aMmeW1EyZMyK211lq5fv365SZOnJj78ccfczvvvHNun332qZdjbyjtiuOPPz631VZb5XbffffYpqpZm3766ae5zp0752666abctGnTcr/++mtuv/32y/Xu3dumrUG7Pvvss/G5YcOG5f7555/c+PHjc4cddlhuvfXWy82YMcO2rebf/8SoUaNy3bp1yy2//PK5N9980/aswb362WefxXbk/ynV3r160EEH5fr06RP/TaUfMHDgwNgH8O+/pNpibJItxjzZY0yVLcZq2WIcmD3GmP9lMkOZQXKiU6dOuaeeeqrE47169cpdcMEFs7x+yJAhuTXWWCM3ffr04sdGjBgRB4wYCFH12hWXXXZZHHQ/+eSTTWbUwr36yiuv5AYMGFDiseHDh8d7ddy4cd6q1WxX/r6TyMj33HPPxXb9+eefbddq/v0Hf/9JaPLvrMmMmv8bQDKIdpw6dar3ZS216YcffphbffXVc3/99ZdtKqlOGJtkizFP9hhTZYuxWrYYB2aPMea/XGZKmcGSUTNmzIhLb+RbeeWVS102gsdWWGGFMMcccxQ/1rlz59CsWTOXmahBu+K4444LLVq0qOklbbCq2qbrr79+OOOMM0o89u2334Y555wzzDvvvHV+vA21XXl80003jX8uKioKY8aMCUOGDInt3a5du9l23A3t7z+uuOKKsMACC4S99tprNhxlw2/XiRMnxv+bWBKJ+5Ml0Q477LB4z6p6bfrmm2+GFVdcMdx6661ho402iktNHXroofHfVkmqj3/rjU3qlzFP9hhTZYuxWrYYB2aPMea/TGYoM8aPHx+/zz///CUeZ0AteS7f77//Hp/L17x58zg4zHOqXruq9u/VQp999lm48sorw5FHHhnmmmsum7yG7Tp8+PC4F8EWW2wRXzto0CDbtAZt+t5774X77rsvnH/++aFJkya2ZS20K4kMBt7ZM4f9iB566CEqZ+OeT3/88YdtXI02/eGHH8LIkSPDtGnTwuOPPx4efvjh8Pfff4eDDjooTJ8+3TaVVGPGJtlizJM9xlTZYqyWLcaB2WOM+S+TGcqcwsEzBnyqOqDmAFzdtKtq3qYvvfRSnO2+5557xs2qVfN7deONNw4ff/xxHCRmMHO33XaL31X1Np0yZUo45ZRT4tdiiy1mE9ZSu1JB9MADD4Rdd901zDPPPGGRRRYJF110UeywDhs2zHauRpvOnDkztG7dOlYSJm1K5cs333wT3n33XdtUUq0xNskWY57sMabKFmO1bDEOzJ4mxpgmM5QdCy20UPxeWFXBYM/CCy9c6usnTJhQ4rF//vknznJN3ktVb1fV/r2auOWWW0KfPn1Cv379Qt++fW3qWmpXNG3aNHTo0CGce+654fPPP49JI1W9TS+44ILQsWPHsOOOO9p8dfzvKgPxVCGMGzfOtq5Gm1KxMd9885Xo7C+xxBLx+y+//GKbSqoxY5NsMebJHmOqbDFWyxbjwOwxxvyXlRnKDJaJYf+LESNGlJiR+cEHH4TVVlttltevssoqcU25/OUk+F3Wzl911VVn23E3tHZV3bTpTTfdFG6++eZwxx13hG222cZmroV2ZR+Sk046aZbZ2smSc6p6mw4dOjS88cYbcf+B5AtHHHFEOPzww23Sat6rTz75ZLj++utnGaQnIU8STtXrA1CFkT+pYezYsfH74osvbpNKqjFjk2wx5skeY6psMVbLFuPA7DHG/JfJDGUGe13stNNO4fLLL48zqydPnhw3oWWWJsvGMHu1V69exctHMCDMfgPnnHNOmDRpUvjuu+/irGyW81h66aXr+3Qy266q/Tb95JNP4h4ZN9xwQ9ykXrXTruuuu25cK/+RRx6JSU1eR2UBs7jZm0BVb1MqWp544onYpskXBg4cGP99VfXuVf6vYi+X+++/P1YQ8vxpp50WllpqqbDJJpvYrNVo0+7du8f2o9KNhMavv/4a93nh31gT9ZJqg7FJthjzZI8xVbYYq2WLcWD2GGP+y6mpyhQGdy6++OKw7777xoGMTp06xaV5WAv7+++/D2PGjIlruoM1sgcPHhwH2TbccMPQokWL0LNnz3DqqafW92lkul3feeedcMABB8Q/z5gxI86M7dKlS/x5wIABYbvttqvXc8lim951111xAJMBuUK2afXbtXfv3jGJceutt4b+/fuHli1bhpVXXjlWwLCEj6repu3bty+12RZccMH4perdqz169IivpUKLpBAd1TXXXDPcdttt8b5V1duUKo6kPUkI0QegkujCCy+My85JUm0wNskWY57sMabKFmO1bDEOzB5jzP9qkmMkUpIkSZIkSZIkKaWcmiZJkiRJkiRJklLNZIYkSZIkSZIkSUo1kxmSJEmSJEmSJCnVTGZIkiRJkiRJkqRUM5khSZIkSZIkSZJSzWSGJEmSJEmSJElKNZMZkiRJkiRJkiQp1UxmSJIkSZIkSZKkVDOZIUmqsY033jhcddVVjaIl+/XrFw488MCQy+Vm6+eeccYZYa+99gppcMABB4STTjqpVs7l+++/Dx07dgwvv/xytd/vhx9+CF26dAmvvfZalX/32WefDd27dw+//PJLtT9fkiRJ6WBcUveMS8pmXCLVveaz4TMkSXVo7733Dm+//Xa4/PLLQ+/evWd5/tJLLw033HBDOOqoo8LRRx9dqff8+eefwyuvvBJ23nnnUFcmT54cbrnllvDUU0+FcePGhaKiotC2bduw2WabxWNt2bJlSJuHH344PP/88+Hxxx8PTZo0iY/9888/4Y477giPPfZYGDNmTHysXbt2MZA69NBDQ+vWrWvlswcOHBhmh/vvvz/cd999YezYseHvv/8O888/f1h77bVDnz59wqKLLhpfw3VL07kstthi4aOPPipxb91zzz0x6VQR7jf+/hxzzDHh7rvvLr6ukiRJqhrjktnHuMS4RGqsrMyQpAaAJACDt4VmzJgRHnroobDwwgtX6f2GDRsWB7Tr0gknnBATGRdeeGF466234oDygAEDYlLg5JNPrpPPJPFQXVOnTg2XXHJJOPjgg8MCCywQH5s+fXqsUmAQ/Nhjj43nwReD9Xzffvvtw4QJE0JW3HrrreHcc8+NSYCXXnopfPDBB2Hw4MGxamHPPfcM06ZNC2lT2jWl7auScDniiCPC6NGjwxNPPFHLRydJktS4GJdUjnFJ+YxLjEukspjMkKQGYJNNNgnvvfdecWVAYvjw4WHeeecNSy+9dInHGaim6mL11VcPa621Vhyg/+abb+JzJBfOO++8MHLkyBJL9zD7Z4sttghdu3YNPXv2jNUI+WbOnBnOP//80K1bt7DGGmuE448/Ps7sLwvvu80228TPaN68eZhjjjnisbBc1dZbb138ut9++y1WBfCefB122GHhu+++K36e82agnd9df/3148D0t99+W/w8FRJUrey2227xNaAK5Nprr43PrbzyyqFXr17hP//5T0z+lOXRRx8Nf/75Z3yf/E42A/433nhj2HDDDUOLFi3iF8dJEoDvP/74Y3H7UCFDG6666qph8803D4MGDYoJEbBsFeeeHNN6660XTjvttPDXX3/F50855ZSwyy67xD9TNcHSTFzHgw46KL4f58455CPBxedwzTbddNN4bUnKlOXVV1+N70W1wpxzzhmaNm0alllmmXDRRRfF65kcK7PujjvuuOLryLG88cYbYdttt43Xc8cdd4zXiHbnfqDd+exE/rkUmjJlSlzKi/OhHThu2jk/UcHncT/SRiSO8peq4r6ksof7hmO59957wworrBDbKh+/T7tMmjQpLLjggvGeq2nFiSRJUmNnXGJcYlxiXCLVJZMZktQAtGnTJqyzzjpx4DYfP1MdkI9B3iOPPDIOvr/55pvhueeeiwPtJ554YnyeqggGpRnoZekeBozffffduDYq+yS8//77MdnBAHf+TPYHHnggrLLKKnFA/Prrr497EfBYWRhgfvDBB+N75+8/wQA0QVCC42LZIN6PAWkG2Vm+id8habHvvvvGDvMLL7wQqzp4fo899oiD4vkD11RO8Fkg0cBnX3PNNfF8Lr744nDnnXeGm2++uczjffHFF2NygvdP8HkkJ5ZaaqlZXj/ffPPFNurcuXP8+brrrouD8gy+U4VClQdLOvEaUKVC8oEB9Q8//DBeu88++ywmQAqR/AHJEJIKJHT233//cNlll4UvvvgiPvf000/H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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"💡 Notice how the top items share attributes with what the customer already loves,\n",
" while the bottom items have a completely different attribute profile.\n"
]
}
],
"source": [
"# ── Visualize: Top 10 vs Bottom 10 ──────────────────────────────\n",
"fig, axes = plt.subplots(1, 2, figsize=(16, 6))\n",
"\n",
"# Top 10\n",
"top10 = recommendations.head(10)\n",
"axes[0].barh(top10['item_name'], top10['match_score'], color='#7BA88B', edgecolor='white')\n",
"axes[0].set_title('Top 10 Recommendations', fontweight='bold')\n",
"axes[0].set_xlabel('Match Score (Cosine Similarity)')\n",
"axes[0].invert_yaxis()\n",
"\n",
"# Bottom 10\n",
"bottom10 = recommendations.tail(10)\n",
"axes[1].barh(bottom10['item_name'], bottom10['match_score'], color='#D4845A', edgecolor='white')\n",
"axes[1].set_title('Bottom 10 (Least Likely to Enjoy)', fontweight='bold')\n",
"axes[1].set_xlabel('Match Score (Cosine Similarity)')\n",
"axes[1].invert_yaxis()\n",
"\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n",
"print(\"\\n💡 Notice how the top items share attributes with what the customer already loves,\")\n",
"print(\" while the bottom items have a completely different attribute profile.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Phase 4: Build the Full Engine (All Customers)\n",
"\n",
"We just did it for one customer. Now let's wrap this into a **reusable function** and generate recommendations for everyone."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Functions defined! Let's test them.\n"
]
}
],
"source": [
"def build_taste_profile(customer_id, ratings_data, menu_data, attr_cols):\n",
" \"\"\"\n",
" Build a taste profile for a single customer.\n",
" Returns: pandas Series with attribute weights.\n",
" \"\"\"\n",
" # Get this customer's ratings\n",
" cust_ratings = ratings_data[ratings_data['customer_id'] == customer_id]\n",
" cust_items = cust_ratings.merge(menu_data, on='item_id')\n",
" \n",
" if len(cust_items) == 0:\n",
" return pd.Series(0, index=attr_cols) # Cold start: no profile\n",
" \n",
" # Dot product: attributes weighted by ratings\n",
" attr_matrix = cust_items[attr_cols].reset_index(drop=True)\n",
" ratings_vec = cust_items['rating'].reset_index(drop=True)\n",
" profile = attr_matrix.T.dot(ratings_vec)\n",
" \n",
" return profile\n",
"\n",
"\n",
"def get_recommendations(customer_id, ratings_data, menu_data, attr_cols, top_n=5):\n",
" \"\"\"\n",
" Generate top-N recommendations for a customer.\n",
" Returns: DataFrame with recommended items and match scores.\n",
" \"\"\"\n",
" # Build taste profile\n",
" profile = build_taste_profile(customer_id, ratings_data, menu_data, attr_cols)\n",
" \n",
" # Score all items via cosine similarity\n",
" menu_attr = menu_data[attr_cols].values\n",
" profile_vec = profile.values.reshape(1, -1)\n",
" scores = cosine_similarity(profile_vec, menu_attr)[0]\n",
" \n",
" # Prepare scored menu\n",
" scored = menu_data.copy()\n",
" scored['match_score'] = scores\n",
" \n",
" # Exclude already-rated items\n",
" rated_ids = ratings_data[ratings_data['customer_id'] == customer_id]['item_id'].tolist()\n",
" unrated = scored[~scored['item_id'].isin(rated_ids)]\n",
" \n",
" return unrated.nlargest(top_n, 'match_score')[['item_id', 'item_name', 'category',\n",
" 'price', 'match_score']]\n",
"\n",
"print(\"Functions defined! Let's test them.\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"============================================================\n",
"Customer #7 (Weekday Regular)\n",
"============================================================\n",
" Mushroom Swiss Burger Burger $16.39 Score: 0.657\n",
" Blue Cheese Burger Burger $17.2 Score: 0.657\n",
" Fettuccine Alfredo Pasta $17.71 Score: 0.657\n",
" Truffle Mac & Cheese Pasta $13.28 Score: 0.628\n",
" Mozzarella Sticks Appetizer $9.11 Score: 0.612\n",
"\n",
"============================================================\n",
"Customer #15 (Adventurous Eater)\n",
"============================================================\n",
" Hawaiian Teriyaki Burger Burger $12.35 Score: 0.709\n",
" Mushroom Swiss Burger Burger $16.39 Score: 0.665\n",
" Loaded Nachos Appetizer $11.28 Score: 0.665\n",
" Meat Lovers Pizza Pizza $15.1 Score: 0.634\n",
" Philly Cheesesteak Sandwich $15.83 Score: 0.634\n",
"\n",
"============================================================\n",
"Customer #50 (Comfort Seeker)\n",
"============================================================\n",
" Pesto Penne Pasta $16.65 Score: 0.643\n",
" Cuban Sandwich Sandwich $11.49 Score: 0.643\n",
" Reuben Sandwich Sandwich $13.2 Score: 0.643\n",
" Mediterranean Bowl Bowl $13.29 Score: 0.635\n",
" BBQ Bacon Burger Burger $17.7 Score: 0.631\n",
"\n",
"============================================================\n",
"Customer #120 (Comfort Seeker)\n",
"============================================================\n",
" Blue Cheese Burger Burger $17.2 Score: 0.698\n",
" Caesar Salad Salad $11.52 Score: 0.635\n",
" Spicy Jalapeño Burger Burger $15.59 Score: 0.622\n",
" Mozzarella Sticks Appetizer $9.11 Score: 0.615\n",
" Greek Salad Salad $12.62 Score: 0.595\n"
]
}
],
"source": [
"# ── Test with a few different customers ─────────────────────────\n",
"for cid in [7, 15, 50, 120]:\n",
" recs = get_recommendations(cid, ratings_clean, menu_df, attribute_cols, top_n=5)\n",
" segment = customers_df[customers_df['customer_id'] == cid]['customer_segment'].values[0]\n",
" \n",
" print(f\"\\n{'='*60}\")\n",
" print(f\"Customer #{cid} ({segment})\")\n",
" print(f\"{'='*60}\")\n",
" for _, row in recs.iterrows():\n",
" print(f\" {row['item_name']:<35} {row['category']:<12} \"\n",
" f\"${row['price']:<7} Score: {row['match_score']:.3f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 💡 Do the recommendations make sense?\n",
"\n",
"Look at the customer segments and their recommendations. Are \"Health Conscious\" customers getting salads and bowls? Are \"Comfort Seekers\" getting burgers and pasta? If yes — our model is working.\n",
"\n",
"If a recommendation seems off, that's actually a *great* discussion point: content-based filtering is only as good as the attributes you define."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Phase 5: Evaluate the Model\n",
"\n",
"How do we know if these recommendations are actually *good*? We can't just eyeball it.\n",
"\n",
"### Evaluation Strategy: Hold-Out Test\n",
"\n",
"1. For each customer, **hide** their 3 highest-rated items\n",
"2. Build the taste profile on the remaining ratings\n",
"3. Generate top-5 recommendations\n",
"4. Check: **Did the hidden favorites show up in the top-5?**\n",
"\n",
"This gives us **Precision@5** — the fraction of our top-5 recommendations that were actually items the customer loves."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Evaluated 197 customers\n",
"\n",
"📊 Model Performance:\n",
"=============================================\n",
" Average Precision@5: 0.084\n",
" Hit Rate (at least 1 correct): 34.5%\n",
" Average Hits per Customer: 0.42 / 3\n"
]
}
],
"source": [
"# ── Evaluation: Precision@K and Hit Rate ────────────────────────\n",
"\n",
"def evaluate_model(ratings_data, menu_data, attr_cols, top_n=5, min_ratings=10):\n",
" \"\"\"\n",
" Evaluate the content-based model using a hold-out strategy.\n",
" For each customer, hide their top-3 rated items and check if\n",
" the model recommends them.\n",
" \"\"\"\n",
" results = []\n",
" \n",
" # Only evaluate customers with enough ratings\n",
" customer_counts = ratings_data.groupby('customer_id').size()\n",
" eligible = customer_counts[customer_counts >= min_ratings].index\n",
" \n",
" for cid in eligible:\n",
" cust_data = ratings_data[ratings_data['customer_id'] == cid].copy()\n",
" \n",
" # Hold out the top 3 rated items\n",
" top_rated = cust_data.nlargest(3, 'rating')\n",
" hidden_ids = set(top_rated['item_id'].tolist())\n",
" \n",
" # Train on remaining ratings\n",
" train_data = cust_data[~cust_data['item_id'].isin(hidden_ids)]\n",
" \n",
" if len(train_data) < 3:\n",
" continue\n",
" \n",
" # Build profile on training data only\n",
" profile = build_taste_profile(cid, train_data, menu_data, attr_cols)\n",
" \n",
" # Score all items\n",
" menu_attr = menu_data[attr_cols].values\n",
" scores = cosine_similarity(profile.values.reshape(1, -1), menu_attr)[0]\n",
" \n",
" scored = menu_data.copy()\n",
" scored['match_score'] = scores\n",
" \n",
" # Exclude training items (but NOT hidden items — those are what we want to find!)\n",
" train_ids = set(train_data['item_id'].tolist())\n",
" candidates = scored[~scored['item_id'].isin(train_ids)]\n",
" top_recs = set(candidates.nlargest(top_n, 'match_score')['item_id'].tolist())\n",
" \n",
" # How many hidden favorites did we recover?\n",
" hits = len(hidden_ids & top_recs)\n",
" precision = hits / top_n\n",
" hit_rate = 1 if hits > 0 else 0\n",
" \n",
" results.append({\n",
" 'customer_id': cid,\n",
" 'hidden_items': len(hidden_ids),\n",
" 'hits': hits,\n",
" 'precision_at_k': precision,\n",
" 'hit_rate': hit_rate\n",
" })\n",
" \n",
" return pd.DataFrame(results)\n",
"\n",
"# Run the evaluation\n",
"eval_results = evaluate_model(ratings_clean, menu_df, attribute_cols, top_n=5)\n",
"\n",
"print(f\"Evaluated {len(eval_results)} customers\")\n",
"print(f\"\\n📊 Model Performance:\")\n",
"print(f\"{'='*45}\")\n",
"print(f\" Average Precision@5: {eval_results['precision_at_k'].mean():.3f}\")\n",
"print(f\" Hit Rate (at least 1 correct): {eval_results['hit_rate'].mean():.1%}\")\n",
"print(f\" Average Hits per Customer: {eval_results['hits'].mean():.2f} / 3\")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABWsAAAHmCAYAAAAFsdz8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAe3xJREFUeJzt3QeYk1X69/F7hqksUhQbYgEUEKSKiyJ2RFFBRbELdtDFAhawrIprwbWBZVVAV8VVsa29dyzYABtNELsoS7EA0/Nev/P3zJsJ05JJeZL5fq4rkEk9OXmS3M/93OecrFAoFDIAAAAAAAAAQEplp/bpAQAAAAAAAABCshYAAAAAAAAAAoBkLQAAAAAAAAAEAMlaAAAAAAAAAAgAkrUAAAAAAAAAEAAkawEAAAAAAAAgAEjWAgAAAAAAAEAAkKwFAAAAAAAAgAAgWQsAAAAAAAAAAUCyFgAAAADSzPHHH2+dOnWyvffeu9rrx48f767XKQjUTt+eI488stbXVNvrCgrfTvVzba9Xryny9YVfVhP//tWnH2655ZaUvtf+uWs7vfLKKxZ0vq3qz3B33XWXPf7440lvj54zsh932GEH69+/v40cOdKefPJJKysrq3Kf77//vvK29WlzTa/ZKykpsR49erjbnHXWWVWuW7NmjXXp0qXyMb7++usq159//vmVbS4qKrKGCP8+q+l0xhlnrNdv6o94qa1vX3/9dRs+fLh7b3r16mWDBw+266+/3lavXh2350fjkpPqBgBILgWHH3zwQZXLmjZtaptttpn16dPHjjnmGNt+++2rXK8f71tvvdWdX7hwYdTP+c0339hTTz1lAwYMWO+xa/oh3Geffdz5a665xoYOHVrtZfH0yCOPuIDjhBNOWK+v/vrXv9r06dMt6P744w+77LLL7J133nGvRX398MMP13s7kIKCAttyyy1t4MCBdsopp7htIxW0Y/LDDz/YoYceahMnTozqvql830KhkL355pv27LPP2ieffGI///yzZWVl2cYbb+yC2QMPPNB9DrKzqx4rfeyxx+yiiy6q8XH//e9/W79+/ZLwCgAASDz9Ri5fvtz9Pnq//vqrzZ49O6O7v2vXrtakSRPr3LmzZSK9n9tuu22112244YZJb0+0dtllF/e/YmFPCch//vOfLq6M9/5HtNtO8+bNXfL0q6++sjfeeMOdHnjgAbvtttusdevWlbG8fx2bbLJJg583Ly/PevbsabNmzXKf23CffvqplZeXV/6tz+8222xT5Xrp3r27a1e8+NcXyX+u9Lr9beL5vDW5+eab3Xsgm2++uW233XY2f/58W7RokT3zzDP26KOPVr4/QH2RrAUaqfz8fOvdu7c7/9tvv7kfE/3wK2n5t7/9zc4888zK2ypgqelHsT6UiLrzzjttiy22qFeyNt5BRn2SnFdccYULMMOTtekWUN9zzz0uIJCOHTtamzZtotoOKioqXFL8yy+/dCcFgA899JAL0pJNbdpqq61qDPhrk6r37aeffrIxY8bYnDlzKndK2rdv7/r4l19+sRdeeMGdFOzrSPumm25aed/ff//d/Z+Tk2M77bTTeo/dsmXLJL4SAAASp0WLFi4x+9prr1WpsFXcoSpBJaQUm2aimqpwM4WqCqM9yB4EpaWllpub62LpSC+99JIFwbhx46xv376VMbv2r7T/MnfuXLfv9uCDD7piACUFq3sdDaHYVcnaZcuWuUIEH8N+/PHHlfGrPrtK1vqEtmJbFez4+8dTXa9P26FOyaB9aJ+oPe644+ziiy9274P2pQ477DC3f6CiC1UZA9EgWQs0UpE/5CtXrnQ/+M8//7yrot1oo41cla0ccsgh7hSrl19+ud5ViTo6m4ggozZvvfWWO0qd7gG1KlFFSeenn366Xveprq/1/qua+osvvnAV0Ycffni191VQpqSoKkfjTcnMWKXiffvss89cJbIC02OPPdaOOOKI9ZLFOhgydepUN2zq9NNPd0G1Ernid0qTve0DABofDUeeNm2ai/m+++4791uug4tKLBx99NHud10jU6688koXD7777ruV99UoJz+s+O23366sjNXByueee86NILnxxhtrff6dd97ZXnzxRTcsPjxZq+St6KDlq6++ut799Hz6HVVyRK9BB3X1mzts2LDKWMSPBmvbtq1LZuk1aMSLkkkaoXLJJZdYq1atXJLJx7m6jR7De++99yoP3k+aNMkGDRpk8VLT6B/FBHfffbdLhqkycfTo0TU+hpKHquRTIkwj40466aQab7tixQrXJ0qE/+9//3Pv5/777++Gs//lL39xt3n//ffd8G3Re/LEE0+44g3FNDoArj6L9wFwFRfcf//9LjZS4lHbn+Iojezysdx///tfFyepfYWFhZX3VTJYyS8l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m8b7Xcw0VsmPZxEd4hQgdnx+gIbhM5Qe6hPPNqpkLRAvJSUlNmLECHd+5syZVLYAAAAAAACgwVhlCwAAAAAAAAACgGQtAAAAAAAAAAQAyVoAAAAAAAAACACStQAAAAAAAAAQACRrAQAAAAAAACAASNYCAAAAAAAAQADkpLoBQDrKycmxU089tfI8AAAAAAAA0FBkmYAY5Obm2siRI+k7AAAAAAAAxA3TIAAAAAAAAABAAFBZC8SgoqLCli5d6s63a9fOsrM57gEAAAAAAICGIVkLxKC4uNiOPPJId37mzJlWWFhIPwIAAAAAAKBBKAcEAAAAAAAAgAAgWQsAAFCH448/3jp16mTPPfdctdffcMMN7vpbbrklcH05b9481/6ePXvaTjvtZOeee66tWrWq1vvce++9NmDAAOvWrZv7f/r06VWuf/PNN+3SSy+1v/71r9a3b18bMWKEzZkzp9rHKikpsYMOOsj23nvvuL4uAAAAIBORrAUAAKiHTTbZxB566KH1Li8rK7P//ve/tvHGGweuH1evXm0nnniitW/f3iVYn3rqKfvuu+/snHPOqfE+ei033nijXXTRRfbRRx/ZJZdcYtdff7098cQT7vovv/zSzjzzTNt5553t7bfftjfeeMO23357O/nkk6tNAt900022bNmyhL5OAAAAIFOQrAUAAEm3bt26Gk+aF7y+ty0qKor5ttHaZ5997OOPP65cYNJ77bXXbIMNNnALToZbuHChnXTSSdarVy+X2FQyc9GiRZXXr1271lWn9u/f33r06OEqWO+5557K69955x1XrTt37lw76qijXGXsXnvtZY8//njlbZRAVfWrqler8/TTT7tFMZVwbdGihW2++eZ28cUX26xZs6q0JZyqaA877DBXCZufn2977rmnHXLIIXbfffe56+fPn+8S1Lo+Ly/Pzds+dOhQW7NmzXp9o2TvY4895voBAAAAQN1YYCzBcnNzE/0UAACknd12263G63bddVebPHly5d/77rtvjYnW3r1725QpUyr/Hjx4sKsmrU6XLl0qE46x2GijjWyXXXaxhx9+2MaNG1d5uf4+9NBD3YKTnhKXSs4q6Xnrrbe6hKn+13QBL7/8sjVr1sxVr7711lv24IMPWtu2bd35kSNHuirY3Xff3XJy/i9Mu/nmm+3aa6+1LbbYwiZOnGiXXXaZS5S2bNnSJVF1qsknn3xinTt3rhKPdO3a1Zo0aeKu69ixY5XbK+m7YMECN21COCWTH3nkEXe9Es/Nmze3F154wV0uum7LLbd0fRzeB+PHj7cLL7zQQqFQzP0OpBsWngUAAA1BZW2CtWvfzkrKS21dSVHGnkrKShPdjQAABMKRRx7pKlt9JesPP/xg77//vqssDafpBsrLy910A02bNnXJ2fPPP99KS0vtxRdfdLe54IIL7JlnnnFJzqysLNtjjz2sdevWLoka7phjjrGtt97aJW/1PHrub7/9tl7tXblypbVq1arKZXocVQLrukiaxkDtViI4nB5DlysRrukgbr/9dpes3XHHHd3p1VdfdcnogoKCyvsowaxksBLZQG1CFRUZ00E6EKKDFvo/U2TS+wMAQDqgsjbBQllZ9tInb9mv6363TNSi6QY2sPvuqiG2xkQ7ur7qyFc+AQDqL7wKNVJ2dtVjyapErYmSnJHD/ut721hoGgIN/VeicsiQIfboo4+6aQKUZA331VdfucRn9+7dq1yuClsleEVzx2o+108//bRyrlclYiOngVCi1tO0BKJpHRqqtv6IvM5Xxuryb775xk4//XQ74IAD3GJlMnXqVDc37pNPPumSuZofV++bktFAndtidrZ9/8RtVrziRzorYPI3amNtD/lbqpsBAECjQpYpCX5d+7utXFP9kEykJw0nPfvss1PdDABoFMOEE3XbWOgA3eGHH24zZsywAw880M3HeuWVV1abcNZ0Bs8991yNj3XGGWfYhhtuaA888ICb4kCJUCV+q3usWCmJ/NNPP1W5TNW9v/3223oJZl9Bq4rAyKrbFStWuNeuilvNq6v/laz+y1/+4m4/duxY9zqUnFX1r+bI/cc//uGmjgDqQ4naomVf01kAAKDRYxoEAACAKBxxxBE2Z84cN0+rEpVaICySFhv7/vvv7ddff61yuZ++QMnQr7/+2o477jg3X60StT///LP98ssvcX0vtCjZvHnzqixApgXLVOGrhc8iqWpYc9rqNuFmz57tFjLzc9/q/pGVt7pMieXXX3/dli9f7hYy69u3rzspcauksc4/++yzcX2NAAAAQCYhWQvEQDukP/74oztF7rACADLb5ptv7hYA0xQGWkCsuspXLXSmeWEnTJjgErNKlmpxM1Xj6rejRYsW7vqPP/7YzQWrxO1FF13kKmwjK2EbQtWvqja+4oorXOJYUy9cddVVNmDAAJdQlvvvv9/Ni+tpOoMnnnjCXnnlFTclg+bY1fQSp5xyirte91UblXTVwm9r1661W265xf0eat7d/fff39544w03JYI/aTSKpkfQeS2OBgAAAKB6JGuBGGjnVTvAOkXOLQgAaBwLjWkqASVrq6PpAaZNm+YW5Npnn31cRenzzz9vd911l7Vp08ZV5E6cONHeeust6927t1tsTFMJnHDCCfbaa6+5xcjqQ0lVVbyGV86G08Jm//73v12SVolUtVeVs1r8y9N8uZqH1tNctEoc6zZaPOzGG290SWclaUUVuVpM7IMPPnCPqXl8P/roIzdvrRLASg5vttlmVU7Nmzd3r1nnEz1VBQAAAJDOmLMWAACgDtOnT6/ytxKU8+fPr/U222+/vd199901PqaSnz4B6imReuyxx1b+vXDhwirXd+jQocplhxxyiDvVZrvttrN77723xuvPPPNMdwp31FFHuVNNlKRVdbCmWajPqveax1YnAAAAALWjshYAAAAAAAAAAoBkLQAAAAAAAAAEAMlaAAAAAAAAAAgAkrUAAAAAAAAAEAAkawEAAAAAAAAgAHJS3QAgHWnl62HDhlWeBwAAAAAAABqKZC0Qg7y8PBs3bhx9BwAAAAAAgLhhGgQAAAAAAAAACAAqa4EYhEIhW716tTvfsmVLy8rKoh8BAAAAAADQICRrgRgUFRXZvvvu687PnDnTCgsL6UcAAAAAAAA0CNMgAAAAAAAAAEAAkKwFAAAAAAAAgAAgWQsAAAAAAAAAAUCyFgAAAAAAAAACgGQtAAAAAAAAAAQAyVoAAAAAAAAACICUJ2u///57Gz58uHXq1MmWLFlS5brnn3/ehg4dar169bL+/fvbuHHjbOXKlZXXr1u3ziZMmGD9+vWz7t27u9u+9957KXgVaGyaNGliBx10kDvpPAAAaJyIZQEAAJAxydqXX37ZjjjiCGvTps1617355pt2/vnn2wknnGAffvihPfjggzZ//nwbP3585W2uuOIKe+edd+yee+6xWbNm2cCBA23kyJH29ddfJ/mVoLHJy8uzyy+/3J10HgAAND7EsgAAAMioZO3q1avt/vvvt0MPPXS963777TcbNWqUDRkyxHJycmzLLbd0iV1VzoZCIXffp556ysaOHWsdO3a0pk2buttvscUWNmPGjJS8HgAA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AAAAAAAaijlrgRiEQiGbPXt25XkAAAAAAACgoaisBQAAAAAAAIAAIFkLAAAAAAAAAAFAshYAAAAAAAAAAoBkLQAAAAAAAAAEAMlaAAAAAAAAAAiAnFQ3AEhXBQUFqW4CAAAAAAAAGnNlbVlZmT388MOVf7/zzjs2evRou/HGG62kpCTe7QMCqbCw0N5++2130nkAAJA+iGcBAACQMclaJWWnTJnizv/8888uUdusWTP74IMP3HUAAABAkBHPAgAAIGOStc8//7zdeeed7vyzzz5rXbt2tYkTJ9rkyZPtpZdeSkQbAQAAgLghngUAAEDGJGtXr15tHTp0cOdnzZple+yxhzu/6aab2qpVq+LfQiCAiouL7eyzz3YnnQcAAOmDeBYAAAAZk6xt3ry5rVixwv744w/78MMPrX///u5yXcbcnWgsKioq3HzNOuk8AABIH8SzAAAACKqcaO8wYMAAO+GEEyw3N9c6depk22+/vassvPLKK61v376JaSUAAAAQJ8SzAAAAyJhk7bhx4+yee+5xlbSnnHKKu0yVhb/++qtde+21iWgjAAAAEDfEswAAAMiIZG15ebm98sorduqpp1pWVlbl5Zr+4O67705E+wAAAIC4IZ4FAABAxsxZ26RJE7vkkkusrKwscS0CAAAAEoR4FgAAABm1wNjJJ59s119/vf3++++JaREAAACQQMSzAAAAyJg5a1944QX75Zdf7L777nMr6WqhsXBvv/12PNsHAAAAxBXxLAAAADImWbvffvslpiVAGtE8zR999FGqmwEAAGJAPAsAAICMSdaOHj06MS0BAAAAkoB4FgAAABkzZ6188sknduGFF9qIESPc3xUVFfb888/Hu20AAABAQhDPAgAAICOSta+++qodc8wxtmrVKps9e7a7bNmyZXbppZfaI488kog2AoFTXFxs48aNcyedBwAA6YN4FgAAABmTrL3jjjvsuuuuc/9nZWW5y9q0aWM333yz3XPPPYloIxA4qibXjp5OOg8AANIH8SwAAAAyJlm7dOlSGzhwoDvvk7XSt29f++GHH+LbOgAAACDOiGcBAACQMcna3NxcW7169XqXf/3111ZQUBCvdgEAAAAJQTwLAACAjEnW7rnnnnbJJZfYkiVL3N+au3bmzJl2zjnn2F577ZWINgIAAABxQzwLAACAjEnWXnjhhRYKhezAAw90Cyv169fPTj31VDdv7fjx4xPTSgAAACBOiGcBAAAQVDnR3qF58+Z25513uspazfeVnZ1t7dq1cycAAAAg6IhnAQAAkDHJWq9Dhw7uBAAAAKQj4lkAAACkfbL2ww8/tKuvvtpV1WoahEjz58+PV9uAwNJiepqr2Z8HAADpg3gWAAAAGZOs1eJiW2+9tQ0bNswKCwsT0yog4LKystj+AQBIU8SzAAAAyJhk7S+//GJPP/205eXlJaZFAAAAQAIRzwIAACCosqO9Q48ePey7775LTGuANFFSUmKXX365O+k8AABIH8SzAAAAyJjK2okTJ9rYsWNt1113tc0339yys6vmew855JB4tg8IpPLycnvmmWfc+XHjxqW6OQAAIArEswAAAMiYZO20adNs9uzZ7lTdPJ4kawEAABBkxLMAAADImGTt448/btdee63tt99+VlBQkJhWAQAAAAlCPAsAAICMSdYWFhbagQceaDk5Ud8VAAAASDniWQAAAGTMAmMnn3yyTZ8+PTGtAQAAABKMeBYAAABBFXV57EcffWRz5syxu+66y9q0abPeAmMPPfRQPNsHAAAAxBXxLAAAADImWdu0aVPbc889LVmWLFliN9xwg0sQFxUV2VZbbWUnnnhi5UJm7777rl1//fW2ePFi+8tf/mKDBg2yCy64gPl0AQAAkPJ4llgWAAAACU3WKjGaLBUVFXbSSSdZnz597IUXXnDJ2JdfftnGjBljrVu3ti222MJGjhxpp59+upuaYdmyZTZq1CiX1L366quT1k40PlpcT9uiPw8AANJHsuJZYlkAAABEK6ZVwj7//HN74okn7JtvvrGsrCxr3769HX744bbttttaPC1fvtwlYAcPHmwtWrRwl6ly9vLLL3dtePvtt12l7RlnnOGu69Chg0vknn/++TZu3LjK+0QqLy93p2QE6P8nZKGQZaY/X1e0/elvn4z3IVGaN28e8T7HRyb0TSLRP/QN2w2fKb5vGt93cSKeJxnxbKJi2WTGs8nQpEmTVDcBdciUbQ3BRpwP8BnKZOVR/JZGnax977333KIMW265pbVr185CoZC9+uqr9p///MedunfvbvGyySabWK9eveyRRx6xbt262QYbbOCqGdetW+eGrk2YMGG959PfZWVlNm/ePNtll12qfdxFixZZMqjicstttraSklIrLi6yTFSSV2KlpWX21ZdLXEVztD777LOEtCsT0Df0D9sOnyu+c4KB7+PM65tkxbOJimWTGc8mWmFhoXXp0iXVzUAdFi5c6LZbIBnS9bcFCAo+Q+kv6mTtzTff7I70jxgxosrlt99+uxtSdt9998WtcapyuO222+yUU06xfv36ub8V0GmKg86dO9vKlSutZ8+eVe7TqlUr9/+KFStqfNyOHTu6ucoSTRWX60qKLS8v1/LzM3OofF5enuXm5rj3I9ojCvoC0Y5LOlZTlJSU2KRJk9z5c845x/VDvKR73yQa/UPfsN3wmeL7pvF9F69duzauyclkxbOJimWTGc8C0qlTJzoCCUecD/AZymRro4hno07WfvXVV3bUUUetd7mC3XvuucfiqbS01E499VTbeuut7c4773RDwV577TUbP3585RD0SKqMEAXDNdFORXKTYFlWS3PS25+vK9b+TP57ET+PPfZYZbI2Ea8hnfsmGegf+obths8U3zeN57s43s+RrHg2UbGs8DuIZCImRbK3N7Y5gM9Qponmey072gdXBeGaNWvWu1xD4DVkK57effdd++KLL+zCCy90w8jy8/PdPF8aEvbAAw+4RcZWrVpV5T6qUBBdBwAAAKQqniWWBQAAQLSiTtbuuOOOdumll9rPP/9ceZkWTtBCCX/9618tGZPw6u/s7Gw3bGzu3LlVrps9e7YLwLt27ZqQtgAAACC9JTueJZYFAABAwpK1Gra1ePFityhC7969XbC711572dKlS+2iiy6yeNLjq6L2uuuucxWzqnTQ4g9aFGK//fZzw9cUWN9yyy2uOmLBggVuHtGjjz7amjVrFte2AAAAIDMkK54llgUAAEC0op6zdrPNNrNnn33WZs6cad9++62bV0ur6Pbv399Vu8aTVsz997//bTfddJMddNBBbgXStm3bukqIgw8+2N1m2rRpNnHiRJs6daq7/ZAhQ2zs2LFxbQcAAAAyR7LiWWJZAAAAJDxZq0oEJUdViRDu999/d5UIqnKNp2233datoluTPn362KOPPhrX5wQAAEDmSmY8SywLAACAhCRrV69e7Rbzeu6552zUqFGVK9V6S5YscdUJAAAAQBARzwIAACBjkrUaKnb11VdbRUWFDRo0aL3rlbzt169fvNsHBFJ+fr499dRTlecBAEDwEc8CAAAgY5K1xx57rA0ePNglZO++++71ri8oKLAuXbrEu31AIGk+uzZt2qS6GQAAIArEswAAAMioOWubN29ujz32mHXq1KnK5X/88Yc1a9Ys3m0DAAAA4op4FgAAAEEW9XK3eXl5dswxx1T+fckll7hFvnbbbTdbsGBBvNsHBFJpaalNnjzZnXQeAACkD+JZAAAAZEyy9sorr7T27du78x988IFbcOzee++14447zm644YZEtBEInLKyMps+fbo76TwAAEgfxLMAAADIiGkQ5PPPP3fVhPL666/bfvvtZ3379rWePXvav//970S0EQAAAIgb4lkAAABkTGWthnz7+WlnzZrlErV+OFlxcXH8WwgAAADEEfEsAAAAMqaydquttrK33nrLmjZtal9++aXtvvvu7vJPP/3UNtlkk0S0EQAAAIgb4lkAAABkTLJ25MiRdvrpp1tFRYWddtpptuGGG9qvv/5qo0ePtuHDhyemlQAAAECcEM8CAAAgY5K1gwYNst69e9uqVausc+fO7rLmzZvbBRdcYIMHD05EGwEAAIC4IZ4FAABAxiRrZdNNN3UnLysryyVqVW2bnR31NLgAAABAUhHPAgAAICOStaqmVXK2JvPnz29om4DAy8/PtxkzZlSeBwAA6YN4FgAAABmTrL3sssuqJGtVTfvDDz/YK6+8Yqecckq82wcEkirIO3TokOpmAACAGBDPAgAAIGOStUcffXS1lx9++OF200032bBhw+LRLgAAACAhiGcBAACQUXPWVqddu3b25ZdfxuvhgEArLS21u+++250/6aSTLDc3N9VNAgAADUQ8CwAAgIxJ1s6ZM8d+//33eD0cEGhlZWU2depUd3748OEkawEAyADEswAAAEi7ZG3//v2rrTL87bff7JhjjolXuwAAAICEIJ4FAABAxiRrjzzyyCoLjEl+fr5tt912tueee8azbQAAAEDcEc8CAAAgY5K1Z555ZmJaAgAAACQB8SwAAACCKjuaG8+ePdtefPHF9S6//vrrbcGCBfFsFwAAABB3xLMAAADIiGTt4sWL3ar3Wngh0o8//mgjRoywn376Kd7tAwAAAOKCeBYAAAAZk6ydNm2aDRw40MaPH7/edTfeeKNbqGHKlCnxbh8AAAAQF8SzAAAAyJg5az/44AO7++67a7z+b3/7m5122mnxahcQaHl5eXbvvfdWngcAAMFHPAsAAICMSdauWrXKttlmmxqvb9++va1YsSJe7QICrUmTJta1a9dUNwMAAESBeBYAAAAZMw2Cqgf/+OOPGq9fvXq1FRYWxqtdAAAAQFwRzwIAACBjkrWqInz++edrvP6JJ56w7t27x6tdQKCVlpbafffd5046DwAAgo94FgAAABmTrD3mmGPsmmuusaeffnq96/773//aTTfdZMcff3y82wcEUllZmd18883upPMAACD4iGcBAACQMXPWDhgwwCVjzz//fJeY1Ry1Gko2f/58++WXX+zss8+2XXfdNbGtBQAAAGJEPAsAAICMSdbKmDFjbO+993bVtd98842FQiEbNGiQDRkyxDp37py4VgIAAABxQDwLAACAjEnWSo8ePdwJAAAASEfEswAAAEj7OWsBAAAAAAAAAIlDshYAAAAAAAAAAoBkLQAAAAAAAACkS7L2008/rTw/d+7cRLYHSAt5eXl2xx13uJPOAwCAYCOeBQAAQMYka0eMGGHl5eWV54HGrkmTJtanTx930nkAABBsxLMAAABIBzn1udHGG29sw4YNs3bt2llpaamde+65Nd72hhtuiGf7AAAAgAYjngUAAEDGJGuvv/56u+uuu2z58uXu719++SXR7QICrayszB5//HF3fujQoZaTU6+PEgAASBHiWQAAAKSDemWYunfvbpMnT3bn999/f5s+fXqi2wUEmirM//nPf7rzgwcPJlkLAEDAEc8CAAAgHURdDvjCCy+4/1etWmXfffedO7/NNttY8+bN4986AAAAIM6IZwEAAJAxydq1a9faeeedZ2+88YaFQiF30gJLgwYNsquvvtry8vIS01IAAAAgDohnAQAAkDHJ2htvvNFV1GoIuCpqlaxdvHix3XnnnXbbbbfZmDFjEtNSAAAAIA6IZwEAAJAxydq33nrLpkyZ4hK1Xrdu3axr16525plnkqwFAABAoBHPAgAAIKiyo73DihUrrG3btutd3r59e1u2bFm82gUAAAAkBPEsAAAAMiZZq0TtO++8s97lumzTTTeNV7sAAACAhCCeBQAAQMZMg3DcccfZOeecYwcccIBtu+22lpWVZV9++aU999xzNnbs2MS0EgiY3NxcmzRpUuV5AACQPohnAQAAkDHJ2mHDhrnk1P33328vv/yyu0zz11555ZV24IEHJqKNQODk5ORY//79U90MAAAQA+JZAAAAZEyyVg455BB3AgAAANIR8SwAAAAyJlkLNHZlZWX2/PPPu/ODBg1ylbYAAAAAAABAUhcYS4XHH3/c9t9/f+vWrZvtvffeNm3atMrr3n33XRs6dKh1797ddtllF7viiiusqKgope1F5istLbUJEya4k84DAADUhngWAAAA9RH4ckAtXDZ58mS3mFPXrl3tvffes6uvvtp23HFHa9mypY0cOdJOP/10mz59ui1btsxGjRrlkrW6DQAAAJBqxLMAAADImGTtbbfdZmPGjLFevXq5v/fYYw93kokTJ9pWW21lZ5xxhvu7Q4cO7rbnn3++jRs3zlq0aFHtY5aXl7tTolVUVPx5LmShkGWmP19XtP3pb5+M9yERwtsd7+0p3fsm0egf+obths8U3zeN77s43X8T0zmeTYYmTZqkugmoQ6Zsawg24nyAz1AmK4/itzQn2nk6Dz30UHv66actGZYvX26LFy+2rKwsO/zww+2rr76yLbbYwlXTHnTQQfbJJ5+46Q/C6W+1c968eW5ahOosWrQoKe0vKCiwLbfZ2kpKSq24ODOnZijJK7HS0jL76sslMU0/8dlnn1k6Ki4urjz/6aefWn5+ftyfI137JlnoH/qG7YbPFN83qZeO38XEs8FSWFhoXbp0SXUzUIeFCxfaunXr6CckRTr+tgBBwmco/UWVrNUiSqFQyL788kvbbrvtLNF+/PFH9//DDz9s1113nW266ab2yCOP2LnnnmsbbbSRrVy50nr27FnlPq1atXL/r1ixosbH7dixozVt2jQplbXrSootLy/X8vMLLBPl5eVZbm6Ode7cOeojCvoC0TzE6VhNER6s6gCBdjTiJd37JtHoH/qG7YbPFN83je+7eO3atXE72E48C0SvU6dOdBsSjjgf4DOUydZGEc9GPQ3CYYcdZuecc47179/f2rZt65J1nipgjzjiCItn5YNoWFi7du3c+REjRrjK3scee6za+yiZ7NtSE+1UJDcJlmW1NCe9/fm6Yu3P5L8X8RHe5kS9hnTtm2Shf+gbths+U3zfNJ7v4ng/B/EskNrPIFDX9sY2B8SOz1AwRfO9FnWy9tprr3X/L1myZL3r4p2s9VWyzZs3r3L5lltu6aZIaN26ta1atarKdaq2FV0HAAAARCKeBQAAQFBFnaxdsGCBJcvWW2/tEraaE1TD7LxvvvnGtt9+e2vZsqW9+uqrVe4ze/ZsV+3btWvXpLUTjU9ubq5bEMSfBwAA6YN4FgAAAEGVHesdf/jhB3v//fct0SXCJ554ot1+++02d+5ct6jT9OnTbf78+Xb00UfbUUcdZcuWLbNbbrnF1qxZ4wLvSZMmueuaNWuW0LahcdN8dwMGDHAnnQcAAOmHeBYAAABBE3WWafXq1W6Br3feecclqT7//HM3JcFJJ51k06ZNc4uAxdNpp53m5qHVPLl67vbt29sdd9xhO+ywg7tez6kKx6lTp9oGG2xgQ4YMsbFjx8a1DQAAAMgcxLMAAADImGTt9ddfbxUVFfbII4/Yscce6y5TklTTElx11VV28803x7WBmgd31KhR7lSdPn362KOPPhrX5wTqs/jdG2+84c7vueeeVNcCAJBGiGcBAACQMcnad9991x588EFXQatEqhQUFNiFF15ogwYNSkQbgcApLS218ePHu/MzZ84kWQsAQBohngUAAEDGzFm7YsUK23jjjde7vLCw0IqKiuLVLgAAACAhiGcBAACQMcnadu3aVQ7/DvfQQw+56wAAAIAgI54FAABAxkyDcMYZZ7jFvvbee28rLy+3K664wr744gv77LPPbNKkSYlpJQAAABAnxLMAAADImMragQMH2v3332/Z2dm27bbb2ty5c61t27auslbXAQAAAEFGPAsAAICMqayV7t2724033hj/1gAAAABJQDwLAACAjEjWauqDe+65x1577TX76aefLD8/39q0aWMHHnigDR06NDGtBAAAAOKEeBYAAAAZk6z95z//aQ8//LDtscce1rNnTwuFQvb999+7uWu/+eYbGzNmTGJaCgRIbm6uXXbZZZXnAQBA+iCeBQAAQMYka5977jmbOnWq9enTp8rl77//vp133nkka9Eo5OTk2ODBg1PdDAAAEAPiWQAAAGTMAmNFRUWuojZS7969be3atfFqFwAAAJAQxLMAAADImGTtgAED3Hy1kd566y3be++949UuINDKysrs7bffdiedBwAA6YN4FgAAAGk9DcKtt95aeb5169Z26aWX2uOPP27t27e37OxsW7p0qX388cd23HHHJbKtQGCUlpbaOeec487PnDnTTYsAAACCi3gWAAAA6aBeGSYlZsM1bdrUFi1a5E7hlz3yyCM2evTo+LcSAFAvLHgHANUjngWA4CssLEx1EwAgPZK11U17AAAInnbt21lJeamZThmoSXYTy8vJTXUzAKQh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ubk2d+7cKlW1GjLWu3fvlLYNAAAAqAvxLAAAADImWbvBBhvY4YcfbjfddJMtWrTILbQwadIkV2l71FFHpbp5AAAAQK2IZwEAABAuK6RS1DRWUlJi1113nT3zzDMuWdulSxcbP3689ezZM9VNAwAAAOpEPAsAAICMqKyVvLw8u/jii+29996zTz/91B566KGEJWrXrVtnEyZMsH79+ln37t1t6NCh7nlrMm/ePDv++ONde3baaSc799xzbdWqVVUmF1Yl8B577GHdunWzAw880J577jlLR/Hum7///e+2/fbbu34JPz344IOW6X0jL7zwgu2yyy52xBFHrHddY95u6uqbxrzd6LpjjjnG+vTp4/pn9OjR9t1331Ve35i3m7r6JpO2m1j658knn7RDDz3UevXqZTvvvLOddtpptnDhwsrrG/O2U1ffZNK2E8v3sfevf/3LOnXqZO+//35GbjeZFs8ieJ8hAGbff/+9DR8+3P2eLFmyhC4BoqB1my666CLr37+/i1sPPvhg4q50p8pa1M/48eND++67b2jhwoWhNWvWhG6//fZQt27dQkuXLl3vtqtWrQr99a9/DV166aWh1atXh3788cfQsGHDQsOHD6+8zS233BLq27dv6KOPPgoVFRWFHn300VCXLl1C77//fqix983o0aNDF154YSgTRNM3Mnbs2NBBBx0UOvroo12/RGqs2019+qaxbjfz588Pde3aNTRt2rRQcXFxaPny5aETTjghdMABB4Qa+3ZTn77JpO0m2v556aWX3HUvv/xyqLS0NLRixYrQqFGjQrvuumuorKysUW879embTNp2ov0+9ubNmxfaeeedQx07dgzNmjWr8vJM2m6ARH6GAPzfb+4uu+wSGjdunPs9Wbx4Md0CREH7xscdd5zLrWif57777gt17tw5NHfuXPoxTaV9ZW2yrF692p566ikbO3asdezY0Zo2bWqjRo2yLbbYwmbMmLHe7Z9++mlXVXLJJZdYixYtbPPNN3cVE7NmzXLz6+q6+++/30499VTbcccdLT8/3w477DBX9aXLG3Pf+Mds1aqVpbto+0batm1rjz32mG211VbrXdeYt5u6+qYxbzf/+9//3DzdJ598sqvO0sriqkxYvHix/fLLL416u6mrbzJpu4mlfzbZZBO78cYbbcCAAZaTk2Mbbrihmwt++fLlru8a87ZTV99k0rYTy/exH7p/wQUX2BlnnFHl8kzaboBEfoYA/P/PkH4fNJoFQHT++OMP22677Vx+RbkV7fNoFHPz5s1djgXpiWRtPWnYfllZmRvKF65Hjx72ySefrHd7Xda5c2fLzc2tvKxr167WpEkTd52G4GrYf30frzH1jf/B1jBAle/37t3bDjjgALvnnnvcDmAm942MGTPGfcFWpzFvN3X1TWPebjTcRT/O4b799lsrKChwC9c05u2mrr7JpO0mlv7R5UpGil7v0qVL7b777nP9tummmzbqbaeuvsmkbSeW72PRNAdKVh933HFVLs+k7QZI5GcIwP8ZNmyYtW/fnu4AYtCsWTO76qqr3BQi3sqVK92aThtvvDF9mqZI1kYxB4i0bNmyyuXaSfHXhdOHI7LaRpU5Sg7oumgfrzH1jWy22WbuNjfccIO9++67dtZZZ9lNN91kd911l6WTeL/PjXm7qQ+2m/+zYMECmzx5sv3tb3+zwsJCtpta+iaTtpuGfK5ee+0122GHHWzQoEHutjfffHODHq8x9E0mbTux9M3HH39sjzzyiF1zzTWWlZXV4McD0hnbPAAgKDTy6bzzzrMOHTrYQQcdlOrmIEY5sd6xsYrcIQmFQutdFs1jxOPxMrFvpk6dWuXy/fff32bPnm0PPPCAG1aZbuL9PrPdVI/txuzNN990C/Yde+yxbjEktpu6+ybTtptYviP23ntv+/zzz13V8cSJE93UEUrExfp4jaFvVJ2dadtOfftm7dq1Nn78eHfSMO+GPh6QKdjmAQCpPnioxZSLiopcnFrbqFQEG5W19aR5DsVXfoZ/GKorLdftNQQwXGlpqf3222/uOn+f+j5eY+qbmmy99dZujknt7GVq39SlMW83sWpM283dd99t55xzjl166aUuKemx3dTcN5m03TT0c5WdnW3bbLONG0al+cOV3GbbqblvMmnbiXa7UdJaQ+00D211Mmm7AYIU0wAAUNsIQsVmbdq0cYUDWn8B6YtkbT1pCKTmWJ07d27lZdoRmzNnjpunLlLPnj3d/FUqQfd0X81j16tXL7dQkoK38McTVeTo+sbcN0ra/uMf/6hcbMzTgkBaWCqdqnKi7Zu6NObtpi6NfbuZNm2aG3qtxRmGDBlS5brGvt3U1jeZtN3E0j+az1cLRIUrLy+vnJ6mMW87dfVNJm070faNFkx67733rG/fvpUn0UJjp59+ekZtN0AqYhoAAKKxZMkSO+GEE+zII49003P56d6QvkjW1pPmU9Uq0JqLTjtmmqxZC2voCLqGRP78889u+ONHH33kbq+EgD4gV1xxhf36669usQ1V5Gixknbt2rmduBEjRrhqL91HZer/+c9/3I6MPmSNuW+0aqGCXVXAff/99y6p+9JLL9ljjz3mVnTP5L6pS2PeburSmLebL774ws3DOmXKFLdYX6TGvN3U1TeZtN3E0j/9+vWzZ555xp588kn32nU7VU0q0danT59Gve3U1TeZtO1E2zeqLH722Wdd3/iTXHnlle73PJO2GyAenyEAABJFxQQqMDjkkEPcQXNkiBDqrbi4OHTllVeGdt5551C3bt1CRx55ZGjOnDnuuu+++y7UsWPH0Jtvvll5+0WLFoWGDx8e6tGjR2innXYKXXTRRaHff/+98vqKiorQrbfeGtp9991DO+ywQ2jw4MGh119/PS3fkXj3zfLly0Pjxo0L7brrrqGePXuGDj744NDjjz8eyvS++eCDD9y2oFPnzp1DnTp1qvz7v//9b6PeburTN411u9HnJ7w/wk+NfbupT99k0nYTy/ex+uGQQw4J9erVy91n5MiRoQULFlRe31i3nfr0TSZtO9H2TSRdP2vWrIzcboCGfoYA1G7gwIHut6Jr167u90T/6+8TTzyRrgPq8OGHH1b53ISf+Aylryz9k+qEMQAAAAAAAAA0dkyDAAAAAAAAAAABQLIWAAAAAAAAAAKAZC0AAAAAAAAABADJWgAAAAAAAAAIAJK1AAAAAAAAABAAJGsBAAAAAAAAIABI1gIAAAAAAABAAJCsBQAAAAAAAIAAIFkLAAAAAEAC7L333nbLLbcEom8/+eQTGzhwoPXo0cOdb4h//etf7rXF25QpU+zggw+2oqIiC5KLL77YevXqZWeccUZcHu/999+3Tp062ffff1/jbU466SS74IILarx+yZIl7jH0WDUZM2aMHX/88RYPJSUldvjhh9utt94al8cDUDOStQAQUJdccokdd9xxKQ2Yw4OzJ5980gWNe+65pwvyd9ttNxs5cqQ9//zzCXteAACAhlCiqnPnztUmtJREjVciKx3cdddd9pe//MU+/PBD6969e40JRCUBIympqOveeust97eSlq+99lrl9R999JG9++67DWrfrFmz7Pbbb7ebb77ZCgoKLB7WrFnjXndDfPnll/boo4/a1Vdfbbfddlu1t/nqq69s9OjRtssuu7ik7uDBg+2RRx5p0PPefffd9s9//tOCIi8vzyZPnmz//ve/K7cDAImRk6DHBYCMoSBeAWhOzv99ZYZCIWvVqpXtuOOOdvbZZ1u7du0S8rxXXnllvW+rgDleR/qrCz71Orfddls75ZRT3A6PXv/q1atdUH3HHXfYM88844I330c///yz7b777pabm2tZWVmVj6X7EdwBAIBkUvzx97//3Z566qm4JQFTpbS01MVXsVi1apVts802LukWb/fee69tvfXW1q9fv5jur/j6mmuucZWbepx4UQJaSc+TTz455sdQv0nHjh2rxLWeqoCHDx/uChpeeOEFa9q0qdvWLrroIttkk01sjz32sEyxxRZb2NFHH20TJ060XXfd1Zo0aZLqJgEZicpaAKiH/fff3z777DN3+vzzz23GjBlWXl5uJ554ov3xxx/rBdGZ4qeffrITTjjBzjrrLLvppptcAL7hhhu6QFU7PoMGDXKVBuqD8CFRSuTKyy+/XNlvOpGoBQAAyXbEEUe4JK0OLNdGlaMPPvhglcuUkPLTGCgWGjJkiBtt5Eca6YD2ihUrXKykikol5p577rn1knkXXnih9enTx/r37+8qNMPjxZdeeskN/Ve1qx5XQ+59gtC3SwnHAw880A499NAa269KTrVP7RgwYID94x//qIxT99tvP1dRq2Rit27dbPbs2dYQ6hP1jQwbNsy9BrVRj60RWfPnz3cx5F//+lfXnqFDh1apxI30zjvv2IIFC2zEiBH1fk2R1b5SXFzsLnv88cft/vvvd9Wu//vf/1y7aqp0Vbyr91HvzU477WRHHXWUvffee+66J554wo0sE71Hp5566nr3X7t2rbv/uHHjrEWLFi6Zfthhh7nz6ofafPvtt3bsscdaz549ba+99nLtDi8Y0TQG3iuvvOK2AW13Smqrv8KpX84991zr27evq/C97rrrXBI83MKFC93rUX/uvPPOLom9aNGiyuv12rV96v1Vf+h2es0rV66svI0S0yrmePPNN2t9bQBiR7IWAGLQpk0bd7Rcwd3HH3/spiBQAK8AR0GpVFRUVE5PoKBKCd8777zTysrKKh/n008/tWOOOcZdr4D3iiuucEGmjB8/3u1ceP/5z3/cYyiYUxCmnYLl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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ── Visualize the evaluation results ────────────────────────────\n",
"fig, axes = plt.subplots(1, 2, figsize=(14, 5))\n",
"\n",
"# Precision distribution\n",
"eval_results['precision_at_k'].hist(bins=10, ax=axes[0], color='#7BA88B',\n",
" edgecolor='white', alpha=0.85)\n",
"axes[0].set_title('Distribution of Precision@5', fontweight='bold')\n",
"axes[0].set_xlabel('Precision@5')\n",
"axes[0].set_ylabel('Number of Customers')\n",
"axes[0].axvline(eval_results['precision_at_k'].mean(), color='#333', linestyle='--',\n",
" label=f\"Mean: {eval_results['precision_at_k'].mean():.3f}\")\n",
"axes[0].legend()\n",
"\n",
"# Hit distribution\n",
"eval_results['hits'].value_counts().sort_index().plot(\n",
" kind='bar', ax=axes[1], color='#D4845A', edgecolor='white')\n",
"axes[1].set_title('How Many Hidden Favorites Did We Find?', fontweight='bold')\n",
"axes[1].set_xlabel('Number of Hits (out of 3 hidden)')\n",
"axes[1].set_ylabel('Number of Customers')\n",
"axes[1].tick_params(axis='x', rotation=0)\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 💡 Interpreting the Results (Business Translation)\n",
"\n",
"**For the executive summary:**\n",
"- **Hit Rate** tells us: \"For what % of customers did we get *at least one* recommendation right?\" This is the metric a restaurant manager cares about most.\n",
"- **Precision@5** tells us: \"Of our 5 recommendations, how many were items the customer actually loves?\" This is the *quality* metric.\n",
"\n",
"**What's \"good enough\"?**\n",
"- A random recommender on 64 items with top-5 would have Precision@5 ≈ 5/64 ≈ 0.078\n",
"- Anything significantly above that means our model is adding value!\n",
"\n",
"**What could improve this?**\n",
"- More granular attributes (cuisine sub-types, preparation methods)\n",
"- Combining with collaborative filtering (Notebook 5B!)\n",
"- Adding time-of-day or seasonal context"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Phase 6: Deploy to Excel — \"Train in Python, Deploy in Excel\"\n",
"\n",
"Here's where it gets real. Our model works in Python, but the restaurant manager doesn't use Python. They use **Excel**.\n",
"\n",
"We'll export two things:\n",
"1. **A taste profile for every customer** (the pre-computed weights)\n",
"2. **A recommendation lookup table** (top-5 picks per customer)\n",
"\n",
"The manager opens the Excel file, types a customer ID, and sees personalized recommendations. No Python required."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Generated profiles for 197 customers\n",
"Generated 985 total recommendations (197 × 5)\n"
]
}
],
"source": [
"# ── Generate recommendations for ALL customers ──────────────────\n",
"\n",
"all_customer_ids = ratings_clean['customer_id'].unique()\n",
"all_recommendations = []\n",
"all_profiles = []\n",
"\n",
"for cid in all_customer_ids:\n",
" # Build taste profile\n",
" profile = build_taste_profile(cid, ratings_clean, menu_df, attribute_cols)\n",
" profile_dict = {'customer_id': cid}\n",
" profile_dict.update(profile.to_dict())\n",
" all_profiles.append(profile_dict)\n",
" \n",
" # Get top-5 recommendations\n",
" recs = get_recommendations(cid, ratings_clean, menu_df, attribute_cols, top_n=5)\n",
" for rank, (_, row) in enumerate(recs.iterrows(), 1):\n",
" all_recommendations.append({\n",
" 'customer_id': cid,\n",
" 'rank': rank,\n",
" 'item_id': row['item_id'],\n",
" 'item_name': row['item_name'],\n",
" 'category': row['category'],\n",
" 'price': row['price'],\n",
" 'match_score': round(row['match_score'], 4)\n",
" })\n",
"\n",
"profiles_df = pd.DataFrame(all_profiles)\n",
"recs_export_df = pd.DataFrame(all_recommendations)\n",
"\n",
"print(f\"Generated profiles for {len(profiles_df)} customers\")\n",
"print(f\"Generated {len(recs_export_df)} total recommendations ({len(all_customer_ids)} × 5)\")"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"✅ Files exported for Excel deployment:\n",
" 1. urban_bites_recommendations.csv — Top-5 picks per customer\n",
" 2. urban_bites_taste_profiles.csv — Customer preference weights\n",
" 3. urban_bites_menu_reference.csv — Full menu with attributes\n",
"\n",
"💡 Next step: Open these in Excel to build the manager-facing lookup tool.\n",
" Or use the pre-built 'UrbanBites_Recommender.xlsx' workbook!\n"
]
}
],
"source": [
"# ── Export to CSV files (for Excel import) ──────────────────────\n",
"\n",
"# Recommendation lookup table\n",
"recs_export_df.to_csv('urban_bites_recommendations.csv', index=False)\n",
"\n",
"# Customer taste profiles\n",
"profiles_df.to_csv('urban_bites_taste_profiles.csv', index=False)\n",
"\n",
"# Menu reference\n",
"menu_df.to_csv('urban_bites_menu_reference.csv', index=False)\n",
"\n",
"print(\"\\n✅ Files exported for Excel deployment:\")\n",
"print(\" 1. urban_bites_recommendations.csv — Top-5 picks per customer\")\n",
"print(\" 2. urban_bites_taste_profiles.csv — Customer preference weights\")\n",
"print(\" 3. urban_bites_menu_reference.csv — Full menu with attributes\")\n",
"print(\"\\n💡 Next step: Open these in Excel to build the manager-facing lookup tool.\")\n",
"print(\" Or use the pre-built 'UrbanBites_Recommender.xlsx' workbook!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sample: What the Excel Deployment Looks Like\n",
"\n",
"Let's preview what the manager would see:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"╔══════════════════════════════════════════════════════════╗\n",
"║ URBAN BITES — Personalized Recommendation Lookup ║\n",
"╠══════════════════════════════════════════════════════════╣\n",
"║ Customer ID: 15 Segment: Adventurous Eater ║\n",
"╠══════════════════════════════════════════════════════════╣\n",
"║ Rank Item Category Price ║\n",
"╠══════════════════════════════════════════════════════════╣\n",
"║ 1 Hawaiian Teriyaki Burger Burger $12.35 ║\n",
"║ 2 Mushroom Swiss Burger Burger $16.39 ║\n",
"║ 3 Loaded Nachos Appetizer $11.28 ║\n",
"║ 4 Meat Lovers Pizza Pizza $15.1 ║\n",
"║ 5 Philly Cheesesteak Sandwich $15.83 ║\n",
"╚══════════════════════════════════════════════════════════╝\n"
]
}
],
"source": [
"# ── Preview: Manager's view ─────────────────────────────────────\n",
"sample_cid = 15\n",
"segment = customers_df[customers_df['customer_id'] == sample_cid]['customer_segment'].values[0]\n",
"\n",
"print(f\"╔{'═'*58}╗\")\n",
"print(f\"║ URBAN BITES — Personalized Recommendation Lookup ║\")\n",
"print(f\"╠{'═'*58}╣\")\n",
"print(f\"║ Customer ID: {sample_cid:<10} Segment: {segment:<20} ║\")\n",
"print(f\"╠{'═'*58}╣\")\n",
"print(f\"║ {'Rank':<6} {'Item':<30} {'Category':<12} {'Price':<8} ║\")\n",
"print(f\"╠{'═'*58}╣\")\n",
"\n",
"cust_recs = recs_export_df[recs_export_df['customer_id'] == sample_cid]\n",
"for _, row in cust_recs.iterrows():\n",
" print(f\"║ {row['rank']:<6} {row['item_name']:<30} {row['category']:<12} ${row['price']:<7}║\")\n",
"\n",
"print(f\"╚{'═'*58}╝\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Wrap-Up: Key Takeaways\n",
"\n",
"### What We Built\n",
"A complete content-based recommendation engine that:\n",
"1. ✅ Starts with a **business question** (\"What should we recommend to each customer?\")\n",
"2. ✅ Explores and **cleans the data** (duplicates, uninformative raters)\n",
"3. ✅ Builds **taste profiles** using weighted attribute vectors\n",
"4. ✅ Generates **personalized recommendations** via cosine similarity\n",
"5. ✅ **Evaluates** performance with Precision@K and Hit Rate\n",
"6. ✅ **Deploys** results to Excel for business users\n",
"\n",
"### PAIR Framework Recap\n",
"\n",
"| Element | What We Delivered |\n",
"|---|---|\n",
"| **P**rediction | Match scores for every customer-item pair |\n",
"| **A**ction | Top-5 personalized recommendations in Excel |\n",
"| **I**mpact | Measurable via Precision@5 and Hit Rate |\n",
"| **R**isk | Filter bubble (addressed by mixing in popular items); cold-start (flagged customers with <3 ratings) |\n",
"\n",
"### Content-Based Filtering: Strengths & Limitations\n",
"\n",
"| Strengths | Limitations |\n",
"|---|---|\n",
"| Works with **new items** (no ratings needed — just attributes) | Only as good as the **attributes you define** |\n",
"| **Transparent** — you can explain *why* an item was recommended | Creates **filter bubbles** (never surprises the customer) |\n",
"| **No cold-start for items** (unlike collaborative filtering) | Doesn't learn from **other users'** behavior |\n",
"| Easy to **deploy** (pre-compute profiles, lookup in Excel) | Misses **cross-category discoveries** (\"People who like X also like Y\") |\n",
"\n",
"### What's Next?\n",
"\n",
"**Notebook 5B** will build a **Collaborative Filtering** recommender on the same Urban Bites data — so you can compare both approaches side by side and see when each one shines.\n",
"\n",
"---\n",
"\n",
"*\"The best recommendation system isn't the most sophisticated one — it's the one that actually gets deployed and drives decisions.\"*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}