0

I'm looking for some advice / guidance --

I'm working on a recommendation engine / personnel assistance app, using Mahout as the framework -

What I want to do is for new users of the app to begin by answering 5 questions and use the answers from the questions to effect the recommendation -- pretty much feeding the answers as a user-preference

I'm just not sure how to incorporate this into my code, I'm not even sure where to begin looking - I've been Googling but none of the search results really address this...

Any suggestions / advice / guidance will be greatly appreciated

Thanks

Didier Jean Charles
  • 462
  • 2
  • 9
  • 22

1 Answers1

0

I did just that with the new Spark Itemsimilarity implementation about a year ago. You'll need a search engine for the recommendations query because Mahout doesn't have a server. I'd suggest using the new "Universal Recommender" engine template with PredicitonIO. It uses Mahout to calculate the model and Elasticsearch to serve it. https://templates.prediction.io/PredictionIO/template-scala-parallel-universal-recommendation

PreditionIO is a framework of integrated components that provide an event server (for event storage) integration with Hadoop/HDFS, Spark, Hbase, and a REST or SDK API. All you do is install it and get the template as a plugin engine. This will provide pretty advanced recommendations queries with multiple event ingestion, a hybrid content-based method to tune results, and several methods of using popular items for backfill when no other recommendations can be made. It also uses realtime user actions for recommendations.

This last bit is super important if you want to have your users go through some training. This way they will see the benefit of training in realtime. Check this site, where I did exactly what you are talking about: https://guide.finderbots.com Notice the "Trainer". It presents you with movies and asks for thumbs up or down for as many as you care to do, then when you ask for recommendations they will be based on the realtime preferences of the user. You need to create an account first so we have a user-id.

The way I created the list for the trainer is by cluster popular items. By clustering I mean based on the users that preferred the items. Clustering produces items that are differentiated because they belong to different clusters, which means different user-sets tended to like them, and the popular ones are more likely to be known by users when they go through training. These are good things to have in a trainer.

pferrel
  • 5,673
  • 5
  • 30
  • 41
  • thank you very much for your answer, you helped me great deal -- But what I still don't understand is how my initial question can help make a recommendation...for instance...
    I would pose the following questions / statements...
    1) I enjoy watching 2) I enjoy reading 3) I enjoy eating 4) My favorite thing to do during the week is
    – Didier Jean Charles Aug 25 '15 at 22:15
  • First cluster popular items based on similarity of the users who preferred them. Present the user with these items (or some subset). Let users indicate which they like (checkmark, thumbs up etc, see the demo app for the GUI I used). This will trigger a preference event in PIO and so will be used the next time the app asks for recommendations. It will also be stored for the next time the Recommender updates its model. – pferrel Aug 27 '15 at 19:32