Create new recommendation strategy for AppRecommender

Description of the project: AppRecommender is a recommender system application for Debian packages. Considering the high number of packages that are found on Debian distributions, this project aims at helping users find the right package for their needs, without a great manual effort. AppRecommender can perform this task with three different approaches

* Content based: The recommendation is done is based on package description. Therefore, the most significant terms of the user installed packages are used to filter new packages for a recommendation.

* Collaborative: The recommendation is done by selecting packages from other users with similar packages as the user running the application. This approach use data from popularity-contest to find the users with similar packages.

* Hybrid: This strategy is a combination of both content based and collaborative approach. Its goal is to balance the weakness found on the use of a single recommendation strategy

This project aims at creating a new strategy for AppRecommender. The new approach would only be triggered when the user installs a new package. AppRecommender would them use this contextual information and mix it together with the user already installed packages. Therefore, this new strategy focus on recommending new packages that are related to the package being installed while also taking in consideration to user preferences. As an example, if the user is a python developer, with several python packages installed on his machine, and he is currently installing vim, after the installation process is done, AppRecommender would then recommend vim plugins for python development. In order to test this proposed approach, AppRecommender will be integrated with apt and added to the Debian archive.

Student Application

I have been working with a classmate on our bachelor thesis since August 2015, and we chose to work with AppRecommender, a recommendation system for Debian packages. This happened because we had great interest in working with machine learning, and wanted to help Debian and its community. Our bachelor thesis added new recommendation strategies to AppRecommender. One of the strategies is what we call deterministic strategy, where we recommend packages using a mathematical formula based on the most recent packages used by the user. The other strategy is using machine learning to filter packages being recommended to the user based on the most recent user packages. Future plans include making AppRecommender a package easier to use individually or along with other related packages.

Project details: This project aims at creating a new strategy for AppRecommender. The new approach would only be triggered when the user installs a new package. This will be used as contextual information, combined with previously installed packages, creating more focused recommendations.

Full description on: https://wiki.debian.org/SummerOfCode2016/ProjectProposals/Create%20new%20recommendation%20strategy%20for%20AppRecommender

1. Add continuous integration for App Recommender (1 week)

2. Use chef to configure AppRecommender (1 week)

3. Create an AppRecommender Package (2 weeks)

4. Implement new user profile generator for AppRecommender, since the application currently use only single terms to create the profile. Therefore, a more complex approach for this strategy is required (2 weeks) Create relation between the actual installed pakage and the packages installed on the user’s system. After that, use this relation to recommend new packages (3 weeks)

5. Implement the strategy and integrate it with both AppRecommender and APT(1 week)

6. Collect feedback from the community (1 week)

7. Use feedback along the community to optimize the algorithm(2 weeks)

8. Document the project and point out what can still be done (1 week)

[1] - https://gitlab.com/noosfero/noosfero [2] - https://github.com/colab/colab [3] - https://github.com/TracyWebTech/django-revproxy