I think it would be better encapsulation to not have `user` be a field of this class, and have this method take two vectors as parameters: the rating vector and the score vector. Also, `train` might be a better name for the method.

The reason I think this is better is that it makes the responsibilities of each class more well-defined.  A good class should have a clear set of responsibilities, and the boundaries between its responsibilities and those of other classes should be clear, well-defined, and make sense.  If this method takes two vectors, then we set things up so that the rating predictor is responsible for fetching data, creating vectors, and preparing everything, and all this class is responsible for is maintaining and training OrdRec model parameter values.