During the summer of my freshman year, I made a decision to spend two months on a ship with the Semester at Sea program. I was given the opportunity to spend time with people from over 50 countries and I ended up visiting amazing places with drastically different cultures such as Lisbon, Saint Petersburg, Barcelona, and Oslo. This experience highlighted for me how travel can deeply enrich and meaningfully develop one’s thinking and learning. My life was forever changed after those two months: I conducted a cross-cultural study on different religions in Europe including Celtic Paganism, Judaism, Islam and Christianity. My travels even helped me to more effectively consider my own spiritual values.
Travel has expanded my understanding of other cultures and religions and given me a chance to form deep bonds with people from completely different backgrounds. Travel enabled me to understand, serve and love others better. Unfortunately, in the real world, planning travel is complicated and unpleasant, often involving long hours of planning, making sure all the details fit together, dealing with constantly changing prices of flights and accommodations, and other complication.
Just Go! is designed to help people enjoy personalized, cheap and convenient travel.
What it does
Just Go! searches for the best travel deals available that combines both flight and hotel, whose schedules fit together. It utilizes state-of-the-art machine learning algorithms, natural language processing techniques and massive amounts of online travel information to create a personality profile for every travel deal available. Then it recommends the most relevant travel deals to users based on their personalities, such as “artsy” and “trendsetter”.
It also utilizes an ensemble of recommendation systems such as item-based collaborative filtering, matrix factorization and factorization machine to continuously improve the recommendations as it learns more about the users.
A user would only need to input his or her personality, click on a travel deal, and book.
How it was built
The mobile app started from scratch, literally. The process of development involved included:
- Market research was done by creating, sending and analyzing over 400 questionnaires from a diverse population, and conducting large scale interviews with potential users.
- Multiple wireframes are made to test initial design ideas.
- Brainstorming of the best tools to build the mobile app occurred, and it was decided to use Swift for front-end, Java for backend, and Python for recommendation engine.
- Conducted data mining using parallel programs to efficiently acquire travel related data was organized. Next, word2vec natural language processing model on raw text data to turn each word into a vector was used. For each piece of content, linearly all the word vectors within the content with weights equal to the word’s TFIDF score in the content were combined. Next, I experimented with different machine learning models such as support vector machine, gradient boosted tree and neural network classifier to classify content into personality-related tags such as “Artsy”, “Trendsetter”.
- A hybrid recommendation system that utilizes the best of different models, including: item-based collaborative filtering, matrix factorization and factorization machine was developed. The hybrid model chooses different weights on recommendation results generated from multiple models based upon the validation measures from the models including F1-score.
- Next, I connect the front-end Swift module, back-end Java module and recommendation-side Python module together using RESTful API and Google Protocol Buffers.
- Lastly, I conducted user-testing along development to adjust design details and modify features. I conducted unit-testing to ensure the stability of the app.
To accurately generate personality profile for travel deals from both raw text data and quantitative data such as price, hotel star and ratings is a machine learning challenge. The process of constructing the model is more of an art, since the process requires a lot of experimenting and intuition.
Initially JSON parsing was used as the data serialization method across modules written in different languages. However, since the design changes frequently in the initial phase, the JSON parsing code written in different languages had to be written entirely and that wasted significant amount of time. Finally, Google Protocol Buffers were used and data serialization was done much more efficiently.
Finding the target audience is hard because the initial assumptions about potential users were proven to be inaccurate during a phase of user-testing. The brand and design for the app had to be refined to fit the target audience.
I creating a mobile app that connects travel experiences to people in a way that is accessible, personalized and convenient. It can help real people find travel experiences that otherwise would not be accessible.
I deepened my knowledge in machine learning, data mining and natural language processing. I learned about new data serialization techniques and web development. I learned about user-testing and survey methods.
What’s next for Just Go!
Just Go! currently serves 10 cities, and it will serve more cities in the future. More sophisticated machine learning algorithms will be implemented to improve user experience.
Personal Highlights and Accomplishments
For this project, I am especially proud of several significant accomplishments, which include:
- I performed Mixed Factorial ANOVA experiment to determine the best design prototype for target audience
- I conducted a literature search on how to solve a Cold Start problem in Collaborative Filtering based recommendation systems, and implemented a hybrid recommendation system that is an ensemble of multiple recommendation models, such as an item-based collaborative filtering model and matrix factorization model. The model also combines user personality data and interaction data with the mobile app.
- I implemented parallel Python programs to mine travel related data from Internet efficiently.
- I applied a combination of word2vec model and TF-IDF to convert raw text data mined from the Internet into vectors that represent sentences or paragraphs.
- I experimented with different machine learning models to classify raw text data with features into categories. I used models to include neural network classifier, support vector machine and gradient boosted tree.
- I implemented data pipeline to connect recommendation engine with front-end and back-end using novel data sterilization technique – Google Protocol Buffer.
- I implemented and deployed backup backend system using Python web frameworks.