Step-by-Step Guide to Developing a Recommendation System Application

How to Build a Recommendation System Application with Python, Flask, and React

Configr Technologies
6 min readOct 8, 2024
Developing a Recommendation System Application

This guide will walk you through the development of a recommendation system application.

The application will consist of a backend that processes data and serves recommendations and a frontend that interacts with users.

Prerequisites

  • Basic understanding of Python and JavaScript.
  • Familiarity with machine learning concepts.
  • Understanding of web development frameworks.

Data Processing and Model Development

Setting Up the Environment

Install Python and Necessary Libraries

Make sure you have installed Python 3.8 or higher.

# Check Python version
python --version

# If not installed, download from https://www.python.org/downloads/

Create a Virtual Environment

python -m venv venv
source venv/bin/activate # On Windows use `venv\Scripts\activate`

Install Required Libraries

pip install pandas numpy scikit-learn tensorflow

Data Collection and Preprocessing

Import Libraries

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

Load Data

Assuming you have a dataset data.csv:

data = pd.read_csv('data.csv')

Data Cleaning

# Handle missing values
data = data.dropna()

# Encode categorical variables if necessary
data['category_encoded'] = data['category'].astype('category').cat.codes

Data Exploration

print(data.head())
print(data.describe())

Model Development

Collaborative Filtering with scikit-learn

from sklearn.metrics.pairwise import cosine_similarity

# Create user-item interaction matrix
interaction_matrix = data.pivot_table(index='user_id', columns='item_id', values='interaction')

# Fill NaN with zeros
interaction_matrix = interaction_matrix.fillna(0)

# Compute similarity matrix
user_similarity = cosine_similarity(interaction_matrix)

Advanced Recommendation with TensorFlow

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Embedding, Dot, Flatten

# Define embedding size
embedding_size = 50

# Define inputs
user_input = Input(name='user', shape=[1])
item_input = Input(name='item', shape=[1])

# Embeddings
user_embedding = Embedding(data['user_id'].nunique()+1, embedding_size)(user_input)
item_embedding = Embedding(data['item_id'].nunique()+1, embedding_size)(item_input)

# Dot product of embeddings
dot_product = Dot(axes=2)([user_embedding, item_embedding])
output = Flatten()(dot_product)

# Build and compile model
model = Model(inputs=[user_input, item_input], outputs=output)
model.compile(optimizer='adam', loss='mean_squared_error')

Model Training and Experimentation

Using Jupyter Notebook

Install Jupyter Notebook

pip install notebook
jupyter notebook

Experiment with Models

Use Jupyter Notebook to try out different algorithms and parameters.

Leveraging Google Colab for GPU Acceleration

Access Google Colab

Go to Google Colab and create a new notebook.

Enable GPU

Navigate to Runtime > Change runtime type > Select GPU.

Upload Data and Code

Use the following code to upload files:

from google.colab import files
uploaded = files.upload()

Backend Development

Setting Up Flask API

Install Flask

pip install flask

Create the Flask App

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/recommend', methods=['GET'])
def recommend():
user_id = request.args.get('user_id')
# Generate recommendations for the user
recommendations = get_recommendations(user_id)
return jsonify(recommendations)

def get_recommendations(user_id):
# Placeholder function
return {'user_id': user_id, 'recommendations': []}

if __name__ == '__main__':
app.run(debug=True)

Integrating the Recommendation Model

Load Trained Model

# Load model weights
model.load_weights('model_weights.h5')

Update get_recommendations Function

def get_recommendations(user_id):
# Generate recommendations using the model
user_vector = np.array([user_id])
item_ids = data['item_id'].unique()
predictions = model.predict([user_vector, item_ids])
top_items = item_ids[np.argsort(-predictions.flatten())][:10]
return {'user_id': user_id, 'recommendations': top_items.tolist()}

Database Setup with PostgreSQL

Install psycopg2

pip install psycopg2-binary

Connect to PostgreSQL

import psycopg2

conn = psycopg2.connect(
database="your_db",
user="your_user",
password="your_password",
host="localhost",
port="5432"
)
cursor = conn.cursor()

Implementing Caching with Redis

Install Redis and Redis-Py

import redis

cache = redis.Redis(host='localhost', port=6379, db=0)

Implement Caching in get_recommendations

def get_recommendations(user_id):
# Check cache first
cached = cache.get(f'recommendations:{user_id}')
if cached:
return {'user_id': user_id, 'recommendations': eval(cached)}

# Generate recommendations
user_vector = np.array([user_id])
item_ids = data['item_id'].unique()
predictions = model.predict([user_vector, item_ids])
top_items = item_ids[np.argsort(-predictions.flatten())][:10]

# Store in cache
cache.set(f'recommendations:{user_id}', str(top_items.tolist()), ex=3600)

return {'user_id': user_id, 'recommendations': top_items.tolist()}
Developing a Recommendation System Application

Frontend Development

Setting Up React Application

Install Node.js and npm

Download and install from Node.js website.

Create React App

npx create-react-app recommendation-app
cd recommendation-app

Designing Components with Tailwind CSS

Install Tailwind CSS

npm install tailwindcss postcss autoprefixer
npx tailwindcss init -p

Configure Tailwind

In tailwind.config.js:

module.exports = {
content: [
"./src/**/*.{js,jsx,ts,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}

In src/index.css:

@tailwind base;
@tailwind components;
@tailwind utilities;

Use Tailwind in Components

// src/App.js
import React, { useState, useEffect } from 'react';

function App() {
const [recommendations, setRecommendations] = useState([]);

useEffect(() => {
fetch('/recommend?user_id=1')
.then(response => response.json())
.then(data => setRecommendations(data.recommendations));
}, []);

return (
<div className="container mx-auto">
<h1 className="text-2xl font-bold">Recommendations</h1>
<ul>
{recommendations.map(item => (
<li key={item} className="p-2">{item}</li>
))}
</ul>
</div>
);
}

export default App;

Integrating with Backend APIs

Setup Proxy in package.json

"proxy": "http://localhost:5000"

Update Fetch Call

fetch('/recommend?user_id=1')

Deployment Guide

Containerization with Docker

Install Docker

Download and install from Docker website.

Create a Dockerfile for Backend

# Dockerfile
FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

Build Docker Image

docker build -t recommendation-backend .

Create a Dockerfile for Frontend

# Dockerfile
FROM node:14-alpine

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm install

COPY . .

CMD ["npm", "start"]

Build Frontend Docker Image

docker build -t recommendation-frontend .

Orchestration with Kubernetes

Install kubectl and Minikube

Follow instructions from Kubernetes documentation.

Create Deployment Files

Backend Deployment (backend-deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
spec:
replicas: 2
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: recommendation-backend
ports:
- containerPort: 5000

Apply Deployment

kubectl apply -f backend-deployment.yaml

Deploying on Google Cloud Platform

Create a GCP Account and Project

Sign up at Google Cloud.

Install Google Cloud SDK

Download from GCP documentation.

Authenticate and Set Project

gcloud auth login
gcloud config set project your-project-id

Push Docker Images to Google Container Registry

docker tag recommendation-backend gcr.io/your-project-id/recommendation-backend
docker push gcr.io/your-project-id/recommendation-backend

Use Google Kubernetes Engine (GKE)

gcloud container clusters create recommendation-cluster
kubectl apply -f backend-deployment.yaml

Monitoring and Logging

Setting Up Prometheus and Grafana

Deploy Prometheus

Create a prometheus-deployment.yaml:

apiVersion: v1
kind: Service
metadata:
name: prometheus
spec:
type: NodePort
ports:
- port: 9090
selector:
app: prometheus
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-deployment
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus
ports:
- containerPort: 9090

Apply the deployment:

kubectl apply -f prometheus-deployment.yaml

Deploy Grafana

kubectl apply -f https://raw.githubusercontent.com/grafana/grafana/master/deploy/kubernetes/grafana-deployment.yaml

Implementing ELK Stack for Logging

Deploy Elasticsearch

kubectl apply -f https://download.elastic.co/downloads/eck/1.5.0/all-in-one.yaml

Deploy Kibana

apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: kibana
spec:
version: 7.9.0
count: 1
elasticsearchRef:
name: quickstart

Apply:

kubectl apply -f kibana-deployment.yaml

Support Guide

Maintenance Best Practices

  • Regularly Update Dependencies: Keep all libraries and frameworks up to date to benefit from security patches and performance improvements.
  • Monitor System Performance: Use Prometheus and Grafana dashboards to monitor CPU, memory, and response times.
  • Automate Backups: Schedule regular backups of your databases.

Scaling the Application

  • Horizontal Scaling: Increase the number of replicas in your Kubernetes deployments to handle more traffic.
  • Load Balancing: Implement load balancers to distribute traffic evenly across instances.

Troubleshooting Common Issues

  • Database Connection Errors: Ensure that the application can reach the database service and that credentials are correct.
  • Caching Issues: If Redis cache isn’t updating, check the expiration times and cache invalidation logic.
  • API Response Errors: Use logging to trace errors in API responses. Check logs in Elasticsearch via Kibana.

Following this guide, you can develop, deploy, and maintain a recommendation system application using the specified tech stack.

Developing a Recommendation System Application

Test each component thoroughly and monitor the system regularly to ensure optimal performance. Have fun building!

Follow Configr Technologies on Medium, LinkedIn, and Facebook.

Please clap our articles if you find them useful, comment below, and subscribe to us on Medium for updates on when we post our latest articles.

Want to help support Configr’s future writing endeavors?

You can do any of the above things and/or “Buy us a cup of coffee.

It would be greatly appreciated!

Contact Configr Technologies Today to learn more about our Custom Software Solutions and how we can help your Business!

Last and most important, enjoy your Day!

Regards,

Configr Technologies

--

--

Configr Technologies
Configr Technologies

Written by Configr Technologies

Empowering your business with innovative, tailored technology solutions!

No responses yet