ReciPy — A recipe recommender web application
The goal of this project was to utilise machine learning techniques to implement a recommender system in a web application called ReciPy. The recommender collects user preferences in the form of recipe ratings and bookmarks. ReciPy uses collaborative and content-based filtering to recommend a wide range of recipes based on user preferences. The project is strongly interdisciplinary combining web engineering, data science and user interface design.
As part of this project, a web application called ReciPy was designed and developed. This web application is a recipe recommendation system. The system architecture is divided into three components: SQLite database, web application and a recommender system. The application is built with Python and Flask web framework as server-side components and Jinja template engine and Bootstrap as client-side tools. The recommender system uses Python and machine learning libraries such as scikit-learn, NumPy and Pandas. Websites with recipes are overloaded with information, this can make it difficult to choose a recipe to user’s liking. ReciPy solves this problem by decreasing the time spent on finding recipes and increasing the time left for cooking. Additionally, the number of recipes discovered by the user is increased. The user can create an account, then log in and look for cooking inspiration and recipes. Each recipe can be rated. The rating system is essential for the machine learning model to learn about user preferences. The application is designed for users who search for recipes online daily. ReciPy uses three different recommender approaches to recommend recipes. The first one is collaborative filtering which recommends recipes that users with similar preferences liked in the past. The second algorithm is a content-based algorithm that recommends recipes similar to bookmarked and highly rated recipes. The last algorithm is a popularity-based recommender that shows the most popular recipes among all the users. To develop a recommender system, first recipe data was collected. The next step was data cleaning and pre-processing to provide input in a suitable format for the algorithms. This data together with user profiles is stored in an SQLite database.
Usability test results show that participants have an overall good impression of ReciPy, they understand the functionality and would use it again. Unit tests were used to verify basic functionality of ReciPy and identify failures in code. The application was fully functional and no failures were reported. The evaluation of the recommender systems shows that the algorithms used provide relevant recommendations but do contain a small accuracy error. It is believed that better results would have been obtained with larger and more accurate datasets from real users of ReciPy. This project was unique in that it combined machine learning with a recipe recommending application.