Ever spent hours contemplating travel plans: looking up affordable flight fares and hotel accommodation; only to end up not going anywhere? You are not alone! Travelers spent at-least a few days searching online before fixing up a plan; often ending up annoyed with the hassle involved in finding the best deal instead of being upbeat about the the one thing we believe travelers await: the journey itself. We bridge this gap by providing suggestions based on travel history and personality preferences and simplify the overall user experience.
What it does
The application estimates the optimal travel destination using images shared by the user and their social media stream. We use the IBM Bluemix Visual Recognition API to process images and categorize them into the type of travel destination the user prefers (beach, mountain or urban holidays to name a few as examples). We use this to calculate the prior probability for the travel preference. Furthermore; using the Watson Personality Insights API, we parametrize and obtain probabilities of the personality of the user to be categorized as an adventurer or an art-lover; using textual data. Every city is characterized based on these traits based on type (beach, mountainous, urban) and preference for adventure-lovers or art-lovers. The recommender system takes in budget, duration and travel dates as inputs from the user. We then use the Amadeus API to calculate two way flights fare from user's location to a newly computed optimal destination list based on highest statistical match. On encountering a match, we notify the user that a potential travel arrangement is available. The notification is done proactively without expecting the user to request for one.
How we built it
After brainstorming the general idea, the skeleton of the application was written in python. The following software modules were critical to the success of our conceptualization:
(i) Basic framework using Flask.
(ii) Flight information using the Amadeus API Inspiration Search.
(iii) Watson Personality Insights API to map personality towards being adventurous or artistic.
(iv) Module to calculate prior probabilities of user travel preference based on image history (using Bluemix Visual Recognition API).
(v) HTML templates, bootstrap and CSS to build GUI.
(vi) Deployed the Python application on a local host.
(vii) Based on the computer personality type of user, budget input by user, dates input by user and prior probabilities, the total probabilities for a set of predefined destinations (dataset.txt available on github) are computed.
(viii) The destination with the highest total probability (maximum correlation in this case) is returned as the optimal destination for the user
Challenges we ran into
(i) Understanding the Flask framework. (ii) API function, calls and their implementation. (iii) Integration of multiple APIs in a single python application. (iv) Conceptualizing and verifiying a statistical model to combine various information in hand to compute optimal destination.
Accomplishments that we're proud of
Being first time hackers, we are extremely proud to have implemented a working proof of concept. We learnt about the use of APIs to simplify the problem solution and focus more on creating innovative solutions.
What we learned
(i) Learning the Python framework for web development (ii) Hands on experience with the Flask application and APIs
What's next for Itinerant
(i) The probability model is simplistic in order for us to deliver a complete model. We assumed that various events are IID (Independent and Identically Distributed) which may not yield the best results all the time. It might turn out that an adventurous user might have an artistic side as well; thus might not prefer a beach or mountainous setting over an urban setting. (ii) The dataset the application was tested with was not comprehensive enough in our opinion. We believe that our application would perform much better with a bigger dataset of images and tweets from a user to train a personalized recommender system. The subjectivity of a trait is highlighted by the fact that an adventurous user might either like to again repeat an adventurous event or be open to more new events. This can be explored with additional data to observe how classes of users behave under different circumstances. (iii) Text-based models are currently used to simulate the Twitter feed. We plan to expand this to actual Twitter posts and into other social media to improve the personalization. (iv) We were unable to deploy the application through IBM Bluemix and all our testing was done on the localhost. Even on consultation with IBM technical staff, the issue to deploy could not be resolved given that this was a new issue. Nevertheless, getting the application online is certainly next in our "to do list".