Hello and welcome! In today's lesson, we are diving deeper into content-based recommendation systems. Before we explore building recommendations for the dataset from the previous lesson, let's consider a simpler example. The aim here is to learn how to compute similarity and make recommendations effectively using this simpler context. By the end of this lesson, you will be empowered to understand the mechanics and apply them to different datasets.
In a content-based recommendation system, there are two main profiles to understand: item profiles and user profiles.
-
Item Profiles refer to the attributes or features of an item. For example, movies can be represented by their genres. Here is a simple code block illustrating item profiles in our movie example:
Python1# Sample item profiles: described by movie genres 2item_profiles = { 3 'Movie1': {'Action': 0.9, 'Romance': 0.1, 'Sci-Fi': 0.5}, 4 'Movie2': {'Action': 0.2, 'Romance': 0.8, 'Sci-Fi': 0.1}, 5 'Movie3': {'Action': 0.4, 'Romance': 0.9, 'Sci-Fi': 0.2}, 6}
In this dictionary, each movie is represented by how strongly it aligns with three genres. The values range between 0 and 1, indicating the strength of the association.
-
User Profiles capture a user's preferences, often based on their past behavior. For example, a user may like 'Action' and 'Sci-Fi' movies. Here's how we represent this in code:
Python1# Sample user profile: representing preferences for genres 2# User has watched and liked past movies mostly in 'Action' and 'Sci-Fi' 3user_profile = {'Action': 0.8, 'Romance': 0.1, 'Sci-Fi': 0.6}
The user profile is similar in structure to an item profile, allowing direct comparison of preferences to item attributes.
A critical part of recommending items is determining how similar they are to a user's preferences. We compute this similarity using the dot product, a straightforward mathematical operation ideal for this purpose.
The dot product sums the products of corresponding features in the user and item profiles. Here's how it's implemented:
Python1# Compute similarity using a dot product 2def compute_similarity(user, item): 3 return sum(user[feature] * item.get(feature, 0) for feature in user)
In this function, each feature's value in the user profile is multiplied by the corresponding value in the item profile, and these products are summed up. This sum gives us a similarity score, indicating how well an item matches the user's preferences.
Let's see an example of how we can calculate the similarity score for Movie1
using the provided user profile:
- Action: 0.8 (User) * 0.9 (Movie1) = 0.72
- Romance: 0.1 (User) * 0.1 (Movie1) = 0.01
- Sci-Fi: 0.6 (User) * 0.5 (Movie1) = 0.3
Total similarity score for Movie1
is 0.72 + 0.01 + 0.3 = 1.03.
With similarity scores in hand, we can now make recommendations by selecting the items with the highest scores. Let's go through the recommendation process:
The recommend_items
function calculates and sorts items based on their similarity scores:
Python1# Recommend items based on similarity to user profile 2def recommend_items(user_profile, item_profiles): 3 recommendations = {item: compute_similarity(user_profile, profile) for item, profile in item_profiles.items()} 4 return sorted(recommendations.items(), key=lambda x: x[1], reverse=True) 5 6# Get recommendations 7recommendations = recommend_items(user_profile, item_profiles) 8print("Recommendations:", recommendations)
The function maps each item to its similarity score with the user profile. It then sorts the items by these scores in descending order to prioritize recommendations that best align with user interests.
Output:
1Recommendations: [('Movie1', 1.03), ('Movie3', 0.53), ('Movie2', 0.3)]
The output shows the movies sorted by their recommendation strength, with 'Movie1' being the most recommended.
In this lesson, you've learned about the core aspects of content-based recommendation systems: understanding item and user profiles, computing similarity using the dot product, and making recommendations based on these similarities.
Now, as you progress into practice exercises, focus on experimenting with various profiles to see how different user preferences and item attributes influence recommendations. You've reached an important milestone in learning recommendation systems, and this skill is pivotal as you continue exploring machine learning.