anchor.diff:  There are multiple assumptions we have to make when we evaluate a
   recommendation engine:
   
  -- Definition of 'good'. We want to quantity if the engine is able to recommend
  +- Definition of 'good'. We want to quantify if the engine is able to recommend
   items which the user likes, we need to define what is meant by 'good'. In this
   examle, we have two kinds of events: 'rate' and 'buy'. The 'rate' event is
   associated with a rating value which ranges between 1 to 4, and the 'buy'
  
positive.code: 
  In MyRecommendation/src/main/scala/***Engine.scala***,
  we define the `ActualResult` which represents the user rating for validation.
  It stores the list of rating in the validation set for a user.
  
  ```scala
  case class ActualResult(
  
negative.code: 
  The console prints out the evaluation meric score of each engine params, and finally
  pretty print the optimal engine params. Amongs the 3 engine params we evaluate,
  the best Prediction@k has a score of ~0.1521.
  
  
  ## The Evaluation Design
  