Recommendation systems power many of the applications we use daily, from Netflix movie suggestions to Amazon product recommendations. These systems analyze user preferences and suggest relevant content.

In this guide, we’ll build a simple recommendation system in Python using collaborative filtering and content-based filtering.

What is a Recommendation System?

A recommendation system predicts user preferences and suggests relevant products, movies, or articles based on their behavior or interests.

Types of Recommendation Systems

  • Content-Based Filtering: Recommends items similar to those a user has interacted with.
  • Collaborative Filtering: Recommends items based on similar user preferences.
  • Hybrid Models: Combines both approaches for better accuracy.

Setting Up the Environment

First, install the necessary libraries:

pip install pandas numpy scikit-learn

Method 1: Content-Based Filtering

Content-based filtering recommends items based on similarity between features.

Step 1: Load the Dataset

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# Sample dataset
data = pd.DataFrame({
    'Movie': ['Inception', 'Interstellar', 'The Dark Knight', 'Tenet'],
    'Genre': ['Sci-Fi Action', 'Sci-Fi Drama', 'Action Crime', 'Sci-Fi Thriller']
})

Step 2: Convert Text to Numerical Data

# Convert genre text into numerical representation
vectorizer = TfidfVectorizer()
genre_matrix = vectorizer.fit_transform(data['Genre'])

# Compute similarity scores
similarity = cosine_similarity(genre_matrix)

Step 3: Recommend Similar Movies

def recommend_movie(movie_name):
    idx = data[data['Movie'] == movie_name].index[0]
    scores = list(enumerate(similarity[idx]))
    scores = sorted(scores, key=lambda x: x[1], reverse=True)[1:3]  # Top 2 recommendations
    return [data.iloc[i[0]]['Movie'] for i in scores]

print(recommend_movie('Inception'))

Method 2: Collaborative Filtering

Collaborative filtering recommends items based on user preferences and behavior.

Step 1: Create a User-Item Matrix

# Sample ratings data
ratings = pd.DataFrame({
    'User': [1, 1, 2, 2, 3, 3],
    'Movie': ['Inception', 'Interstellar', 'Inception', 'The Dark Knight', 'Interstellar', 'Tenet'],
    'Rating': [5, 4, 4, 5, 5, 3]
})

# Create a user-movie matrix
user_movie_matrix = ratings.pivot_table(index='User', columns='Movie', values='Rating')

Step 2: Compute Similarities Between Users

from sklearn.metrics.pairwise import cosine_similarity

# Fill NaN values with 0
user_movie_matrix = user_movie_matrix.fillna(0)

# Compute user similarity
user_similarity = cosine_similarity(user_movie_matrix)

# Convert to DataFrame
user_similarity_df = pd.DataFrame(user_similarity, index=user_movie_matrix.index, columns=user_movie_matrix.index)

Step 3: Recommend Movies Based on Similar Users

def recommend_for_user(user_id):
    similar_users = user_similarity_df[user_id].sort_values(ascending=False)[1:3].index
    recommended_movies = ratings[ratings['User'].isin(similar_users)]['Movie'].unique()
    return recommended_movies

print(recommend_for_user(1))

Comparison of Methods

Method Best For Complexity
Content-Based Filtering Recommending items similar to user’s past choices Low
Collaborative Filtering Suggesting items based on similar user preferences Medium

Best Practices for Building Recommendation Systems

  • Use Hybrid Models: Combining content-based and collaborative filtering improves accuracy.
  • Regularly Update Data: Ensure recommendations remain relevant.
  • Evaluate Model Performance: Use precision, recall, and RMSE metrics.

FAQs

  • Which recommendation system is better? It depends on the dataset. Collaborative filtering works well for large datasets, while content-based filtering is better for small datasets.
  • Can I use deep learning for recommendations? Yes, deep learning techniques like autoencoders and neural collaborative filtering can enhance accuracy.
  • How do I deploy a recommendation system? Use Flask or FastAPI to create an API and serve recommendations.
  • What dataset size is needed for collaborative filtering? It works best with large datasets to find meaningful user similarities.
  • Can I use recommendation systems for other applications? Yes, they are used in music, e-commerce, healthcare, and more.

Conclusion

Building a recommendation system in Python is a great way to learn about machine learning and AI. By using content-based or collaborative filtering, you can create personalized suggestions for users.

Start experimenting with recommendation systems today and enhance user experiences!