“Recommender systems are a subclass of information filtering systems that seek to predict the ‘rating’ or ‘preference’ that a user would give to an item” (Wikipedia, June 2015).
For the less tech-savvy, recommender systems are simply everywhere! If you think this is an over-statement, think again! If you have ever visited an e-shop, you have seen products being predicted as useful for you based on your purchases or browsing patterns. Movie rental sites, music streaming platforms, e-bookstores, mobile applications marketplace, sightseeing, wherever the volume of available options is intimidating, recommender systems are the way to go!
Recommendations can be based on people with similar tastes as you, on products similar to the ones you have already shown interest for, your social network’s preferences, your current state/context (Is it day or night? Are you at work or away for the weekend?) or a combination of the above…Useful information may at first seem irrelevant to the task at hand. Maybe your music taste is connected to your clothing style and, of course, much more interesting dependencies can be revealed…
But do you really want these interconnections to get smarter? Your income level may indeed be a decisive factor for the products you are willing to buy, but are you comfortable sharing it with an e-shop platform? Before answering that you would never do that, keep in mind that personal data don’t always come directly from you, but are also revealed from your actions and interactions and platforms can act upon the induced information towards enhancing their functionalities and increasing their profits…
Sacrificing the comforts of personalized recommendations is not a viable solution, but privacy control rules should apply. Leveraging the power of personal information is not by itself a bad idea, but in OPENi we feel that the data owner part should not be diminished in the process. The OPENi Recommender Service Enabler (SE) reconciles personalized recommendations with the emerging privacy-aware paradigm. The Recommender SE acts as a native trusted agent that retrieves contextual information from a user’s Cloudlet and uses it to deliver personalized object rankings. In order to do that, place check-ins, product purchases and selected mobile applications are occasionally retrieved from Cloudlets for which users have provided the necessary permissions, which they can revoke at any moment.
It is important to know that the Recommender is not allowed to store this information outside of the user’s Cloudlet or keep track of the users that have agreed to use the provided services. The workflow is quite straightforward: as depicted in Figure 1, when a user first accesses an OPENi application that utilizes the Recommender SE, he is asked to provide the access permissions for his Cloudlet requested by the Recommender SE and any others that may be required by the specific application. He may then optionally proceed to update the contextual information that will be used for the recommendations generation in an anonymous way. After that, the application is configured and the user can receive personalized recommendations presented to him through the application at hand. From the developer perspective, as shown in Figure 1, each of the previous actions implies a number of intermediary calls to the core OPENi APIs (Framework, Cloudlets, Permissions), but all our APIs come with extensive documentation, so you can have your application up and running with little effort and time.
Figure 1: User and Developer perspectives of the Recommender SE
In a way, what you need to remember in order to use the Recommender SE is that: Users are the only data owners and in charge of the way they are being used; Developers can leave all privacy control burdens behind and focus on more interesting parts of their apps!
Do you need more specific information? Let’s dive a bit deeper!
The OPENi Recommender SE draws its power from the user context, i.e. information such as age, gender, interests etc. We use a graph database in which we have created contextual nodes for a variety of information types, connected by parent-child category relationships, structured into context type hierarchies. The following image shows an example of such nodes (notice the “Context” label), specifically nodes that all hold demographic data of different types (“Education”, ”Gender”, ”Age”). The “weight” field is the one updated by the retrieved user interactions from the Cloudlets and shows that some nodes are more informative than others. Ιt is thus obvious that the information stored inside the Recommender SE does not point to any particular user.
Figure 2: Contextual node examples
This is of course a tiny portion of the context types available inside the Recommender database. There are many more contextual nodes that represent diverse information types, some more generic and others much more fine-grained than the ones shown here. Each of these nodes is connected to Places, Applications and Products through multiple paths. These paths together with the associated weights are used to find the best matches and return the most appropriate recommendations based on the current user’s context! This is quite a lot of nodes and edges! Fortunately, Neo4j (http://neo4j.com/) has provided us with an efficient solution as it can handle the vast amount of information and calculate the best paths in almost no-time. After all, it would not be a Recommender system fit for modern apps, if it failed to provide the recommendations exactly when the user needs them, which is usually… “right now”!
If you are looking for a privacy-aware, trustful and powerful recommender system to create killer OPENi applications, come and play with the Swagger documentation of our API (http://snf-561492.vm.okeanos.grnet.gr:8080/recommender-se/#!/recommender) or find us at the OPENi Github repository (https://github.com/OPENi-ict)!
For more details, please refer to the OPENi Deliverables D5.2 (http://www.openi-ict.eu/wp-content/uploads/2014/10/OPENi_D5.2.pdf) and D5.5.