Python Central HubSign in

Python Projects / Advanced

Advanced Recommendation System

A Python application for building a production-ready recommendation system using collaborative filtering and content-based methods.

Abstract

Advanced Recommendation System is a Python project that demonstrates how to build a scalable and production-ready recommendation engine. The application uses collaborative filtering and content-based methods to suggest items to users, featuring modular design, error handling, and a CLI interface.

Prerequisites

  • Python 3.8 or above
  • A code editor or IDE
  • Basic understanding of machine learning and recommender systems
  • Required libraries: numpy, pandas, scikit-learn

Before you Start

Install Python and the required libraries:

Shell
pip install numpy pandas scikit-learn

Getting Started

Create a Project

  1. Create a folder named advanced-recommendation-system.
  2. Open the folder in your code editor or IDE.
  3. Create a file named advanced_recommendation_system.py.
  4. Copy the code below into your file.

Write the Code

Advanced Recommendation SystemSource
Advanced Recommendation System
"""
Advanced Recommendation System

Features:
- Collaborative filtering
- Content-based filtering
- Web API (Flask)
- Modular design
- Error handling
"""
import numpy as np
import pandas as pd
from flask import Flask, request, jsonify
import sys
import threading

class CollaborativeFiltering:
    def __init__(self, ratings):
        self.ratings = ratings
        self.user_means = ratings.mean(axis=1)

    def predict(self, user, item):
        if item not in self.ratings.columns or user not in self.ratings.index:
            return None
        sim = self.ratings.corrwith(self.ratings[item])
        sim = sim.dropna()
        user_ratings = self.ratings.loc[user]
        weighted_sum = np.dot(sim, user_ratings)
        return weighted_sum / sim.sum() if sim.sum() != 0 else self.user_means[user]

class ContentBasedFiltering:
    def __init__(self, items, features):
        self.items = items
        self.features = features

    def recommend(self, user_profile):
        scores = np.dot(self.features, user_profile)
        idx = np.argsort(scores)[::-1]
        return [self.items[i] for i in idx[:5]]

class RecommendationAPI:
    def __init__(self, ratings, items, features):
        self.cf = CollaborativeFiltering(ratings)
        self.cb = ContentBasedFiltering(items, features)
        self.app = Flask(__name__)
        self.setup_routes()

    def setup_routes(self):
        @self.app.route('/predict', methods=['POST'])
        def predict():
            data = request.json
            user = data.get('user')
            item = data.get('item')
            pred = self.cf.predict(user, item)
            return jsonify({'prediction': pred})

        @self.app.route('/recommend', methods=['POST'])
        def recommend():
            data = request.json
            user_profile = np.array(data.get('profile'))
            recs = self.cb.recommend(user_profile)
            return jsonify({'recommendations': recs})

    def run(self):
        self.app.run(debug=True)

class CLI:
    @staticmethod
    def run():
        ratings = pd.DataFrame(np.random.randint(1, 6, (10, 10)), columns=[f'item{i}' for i in range(10)], index=[f'user{j}' for j in range(10)])
        items = [f'item{i}' for i in range(10)]
        features = np.random.rand(10, 5)
        api = RecommendationAPI(ratings, items, features)
        print("Starting Recommendation API on http://127.0.0.1:5000 ...")
        api.run()

if __name__ == "__main__":
    try:
        CLI.run()
    except Exception as e:
        print(f"Error: {e}")
        sys.exit(1)

Example Usage

Shell
python advanced_recommendation_system.py

Explanation

Key Features

  • Collaborative Filtering: Suggests items based on user similarity.
  • Content-Based Filtering: Recommends items based on item features.
  • Hybrid Approach: Combines both methods for improved accuracy.
  • Error Handling: Validates inputs and manages exceptions.
  • CLI Interface: Interactive command-line usage.

Code Breakdown

  1. What it imports (lines 11–15)
Python
import numpy as np
import pandas as pd
from flask import Flask, request, jsonify
import sys
import threading
  1. CollaborativeFiltering — the class (lines 17–29)
Python
class CollaborativeFiltering:
    def __init__(self, ratings):
        self.ratings = ratings
        self.user_means = ratings.mean(axis=1)
 
    def predict(self, user, item):
        if item not in self.ratings.columns or user not in self.ratings.index:
            return None
        sim = self.ratings.corrwith(self.ratings[item])
        sim = sim.dropna()
        user_ratings = self.ratings.loc[user]
        weighted_sum = np.dot(sim, user_ratings)
        return weighted_sum / sim.sum() if sim.sum() != 0 else self.user_means[user]
  1. ContentBasedFiltering — the class (lines 31–39)
Python
class ContentBasedFiltering:
    def __init__(self, items, features):
        self.items = items
        self.features = features
 
    def recommend(self, user_profile):
        scores = np.dot(self.features, user_profile)
        idx = np.argsort(scores)[::-1]
        return [self.items[i] for i in idx[:5]]
  1. RecommendationAPI — the class (lines 41–65)
Python
class RecommendationAPI:
    def __init__(self, ratings, items, features):
        self.cf = CollaborativeFiltering(ratings)
        self.cb = ContentBasedFiltering(items, features)
        self.app = Flask(__name__)
        self.setup_routes()
 
    def setup_routes(self):
        @self.app.route('/predict', methods=['POST'])
        def predict():
            data = request.json
            user = data.get('user')
            item = data.get('item')
            pred = self.cf.predict(user, item)
            return jsonify({'prediction': pred})
 
        @self.app.route('/recommend', methods=['POST'])
        def recommend():
            data = request.json
            user_profile = np.array(data.get('profile'))
            recs = self.cb.recommend(user_profile)
            return jsonify({'recommendations': recs})
 
    def run(self):
        self.app.run(debug=True)
  1. CLI — the class (lines 67–75)
Python
class CLI:
    @staticmethod
    def run():
        ratings = pd.DataFrame(np.random.randint(1, 6, (10, 10)), columns=[f'item{i}' for i in range(10)], index=[f'user{j}' for j in range(10)])
        items = [f'item{i}' for i in range(10)]
        features = np.random.rand(10, 5)
        api = RecommendationAPI(ratings, items, features)
        print("Starting Recommendation API on http://127.0.0.1:5000 ...")
        api.run()

The file defines 4 top-level symbols in all; the whole thing is above under Write the Code.

Features

  • Hybrid Recommendation Engine: Combines collaborative and content-based methods
  • Modular Design: Separate functions for each approach
  • Error Handling: Manages invalid inputs and exceptions
  • Production-Ready: Scalable and maintainable code

Next Steps

Enhance the project by:

  • Integrating with real-world datasets
  • Adding user/item metadata for improved recommendations
  • Creating a GUI with Tkinter or a web app with Flask
  • Supporting batch recommendations
  • Adding evaluation metrics (precision, recall)
  • Unit testing for reliability

Educational Value

This project teaches:

  • Recommender System Fundamentals: Collaborative and content-based filtering
  • Software Design: Modular, maintainable code
  • Error Handling: Writing robust Python code

Real-World Applications

  • E-commerce Product Recommendations
  • Content Streaming Platforms
  • Social Media Feeds
  • Educational Tools

Visualize it

Here's how raw interaction data becomes a ranked list of recommendations.

diagram Recommendation system architecture mermaid
User-item interactions train a collaborative filtering model, which computes similarities, ranks candidates, and returns the top-N recommendations.

Checkpoint exercise

This exercise practises predicting a missing rating from the most similar user, the idea behind collaborative filtering.

exerciseYour turn

Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.

Output
Press Run to see what your code prints.

Conclusion

Advanced Recommendation System demonstrates how to build a scalable and accurate recommender engine using Python. With modular design and extensibility, this project can be adapted for real-world applications in e-commerce, media, and more. For more advanced projects, visit Python Central Hub.

Was this page helpful?

Let us know how we did