Gentoo: An adaptive recommendation system.

| June 20, 2023

This project delivered a personalized user experience through tailored recommendations for events and activities based on individual preferences, including favoured restaurants, interests, and schedules. To achieve this, the project retrieved users’ interests from the Yelp API, a custom questionnaire, and their schedules from .ics files. A specific objective questionnaire was formulated to grasp users’ preferences and availability. The acquired data was employed to generate a user model, producing personalized suggestions for events such as restaurant reservations and concerts, resulting in a more engaging user experience. Additionally, the application solicited user feedback and consistently incorporated it to enhance the recommendation algorithm. Ultimately, the project aimed to provide a personalized and satisfying user experience during the search for events, activities, and restaurants.

The project’s motivation stemmed from the aspiration to improve the user experience when searching for events, activities, and restaurants. Conventional search methods often offered generic recommendations that did not align with the user’s preferences and schedule. Recognizing each individual as a unique amalgamation of various tastes, the project sought to offer a personalized and enjoyable experience by providing recommendations tailored to individual preferences and schedules.

Data

During the project’s development phase, we sourced data from Yelp and Eventbrite, focusing on restaurant details and events. Yelp provided comprehensive information on restaurants, including names, review counts, ratings, and prices. Eventbrite offered details like event names, times, locations, and ticket prices. Reviews from Yelp’s API added another layer to our data pool.

For data pre-processing, we refined event data by eliminating null entries, combining text fields, and converting text to lowercase. We used the geopy library for location details and split event times. Restaurant data underwent a more comprehensive treatment, integrating Yelp reviews through natural language processing. This involved case adjustments, removal of emojis and stop words, and sentiment analysis to gauge review tones.

User details, including names, emails, preferred cuisines, and interests, were stored in a MySQL database. Two user models were created based on this data and integrated with restaurant and event information, allowing for personalized recommendations.

User model

The Adaptive Calendar project incorporated an adaptive application system that dynamically adjusted behavior based on user interactions. The user model, developed using Cosine Similarity, measured the similarity between user preferences and metadata from Yelp and EventBrite. During user setup, relevant information such as interests, cuisines, and spending preferences was collected, transformed into vectors, and compared to Yelp and EventBrite data, resulting in an initial similarity score.

A user rating system was implemented, influencing a weighted similarity score for recommendations. Positive ratings increased the score, while negative ratings decreased it. The updated score personalized subsequent recommendations based on user feedback, ensuring an adaptive and inclusive user experience.

Implementation involved creating keys for restaurant and event data, correlating them with user keys. Sentiment analysis on Yelp reviews assigned weights based on compound sentiment scores. Similarity scores formed the basis of initial recommendations, with weighted cosine similarity refining suggestions based on user ratings.

Implementation

The data layer utilized a MySQL database hosted on Google Cloud Services to store user registration details, user models, and data from Yelp and Eventbrite. The business layer, containing modules like User Modeling and Raw Sources, played a vital role in implementing backend logic. The Service API module, using Flask framework, established connections between layers, facilitating smooth data exchange.

The presentation layer, constituting the front-end, provided a user-friendly interface designed with HTML, CSS, and JavaScript. Jira and GitLab were employed for project management and code repository management, respectively.

The API design involved key endpoints like User Registration, Generate Event Recommendation, Generate Restaurant Recommendation, and Update Recommendation. These APIs processed user input, fetched data from sources, and updated user models based on feedback.

The frontend design aimed for an adaptive and engaging interface, supporting user registration, recommendation retrieval, and feedback. Use cases such as User Registration, Look for Recommendations, and Give Feedback were implemented with attention to effective information gathering, intuitive navigation, and a visually appealing design. Web technologies like HTML5, CSS3, Javascript, and jQuery were used for implementation, providing a cross-platform and responsive user interface. Screenshots demonstrated the user registration flow and the process of obtaining recommendations and giving feedback, showcasing the application’s design and functionality.

Evaluation

The frontend was assessed through human testers, considering factors such as ease of use, navigation, consistency, performance, pleasingness, and engagement. Three testers from diverse backgrounds provided feedback, resulting in satisfactory scores across dimensions. However, variations in scores, particularly from less tech-savvy users, indicated potential areas for improvement.

For the backend evaluation, the cosine similarity function was tested using the ‘Reuters’ dataset from the Python nltk library. This dataset, known for NLP and Text Classification tasks, was split into control and test parts. The mean and standard deviation values of the cosine similarity function were calculated, indicating a high average similarity between control and test sets with consistent performance across different folds. These results affirmed the adequacy and reliability of the cosine similarity function in correlating user preferences with reviews and metadata from Yelp and EventBrite for user modeling in the Adaptive Calendar application.

Video demo