A web application that uses Machine learning to fetch recommendations based on user's rating history.
Video at: https://www.youtube.com/watch?v=HfnsXtljXu0
Hosted at: https://recomme-engine.vercel.app/
- Note:
- The backend is deployed on Heroku on a free account, so the application sleeps if not pinged every 30 minutes. Please wait after pressing register until you see a "Success" message/alert and only then proceed to login.
- I would recommend cloning the repository and running it locally to get the full experience.
- The backend is deployed on Heroku on a free account, so the application sleeps if not pinged every 30 minutes. Please wait after pressing register until you see a "Success" message/alert and only then proceed to login.
- Used 100k MovieLens Dataset, filtered it to use about 2300 movies and 100,000 user ratings.
- Star rating: The user can rate movies on a scale of 0 to 5, which is saved in the database to recommend movies.
- Cold-start problem: (when a new user has no history of ratings so recommendations can't be fetched)
- Prevented by asking users to rate a few movies before fetching recommendations.
- Prevented by asking users to rate a few movies before fetching recommendations.
- Content Based Recommendations: (refer to "content_based.py" and "get_content_based.py")
- Uses cast, genres, director, and keywords as features/parameters.
- Movies are found by applying count vectorization on the aggregated features and sorting movies based on cosine similarity.
- Collaborative Filtering: (refer to "createSimilarityMatrix.py" and "collaborative_filtering.py"
)
- Capable of capturing the tastes of users and providing recommendations across genres.
- Using the ratings of every movie, the Pearson correlation is calculated and stored to form an item-item similarity matrix.
- The movies' ratings given by a new user are used to find similar movies by fetching the rows of the movie rated, from the similarity matrix and sorting it.
- Search Engine: (refer to "createTableForSearch.py" and "getSearchResults.py")
- The features/tags of the movies are aggregated and used to find the best match using a regular expression created from the search query.
- This fetches and shows the movies with the highest "points" first.
- "points" factor is calculated using movie popularity, vote_average, vote_count
- Query is not limited to movie titles. Users can also search by genres/directors/cast/year of release or related keywords. ex: "Comedy movies", "Christopher Nolan movies", "Avatar"
- Movie Info: Clicking on the movie card gives the user a brief about the movie.
- Also displays movies similar to the particular movie clicked.
- User Fact: Finds a keyword common in user's top-rated movies and displays it as a fact.
- Wishlist: Users can save movies to their wishlist for later.
- Refresh Recommendation Button: To get instant recommendations based on the movies rated.
- Login System: Provided a fully responsive register/login system.
- User Interface:
- Provided an interactive user-friendly interface.
- Fully optimized for smaller screens as well.
- Make sure you have node and python installed.
- Backend:
cd backend
install dependencies:
pip install -r requirements.txt
run server (running at port 5000):
python app.py
- Frontend:
cd frontend
install dependencies:
npm i
run server (running at port 3000):
npm start