The random ranking is assigned after every `pio train` so if you have not trained in-between, they will be the same. Random is not really meant to do what you are using it for, it is meant to surface items with no data—no primary events. This will allow some to get real events and be recommended for the events next time you train. It is meant to fill in when you ask for 20 recs but there are only 10 things to be recommended. Proper use of this with frequent training will cause items with no data to be purchased and to therefore get data. The reason rankings are assigned at train time is that this is the only way to get all of the business rules applied to the query as well as a random ranking. In other words the ranking must be built into the model with `pio train`
If you want to recommend random items each time you query, create a list of item ids from your catalog and return some random sample each query yourself. This should be nearly trivial. From: Brian Chiu <br...@snaptee.co> <br...@snaptee.co> Reply: user@predictionio.apache.org <user@predictionio.apache.org> <user@predictionio.apache.org> Date: August 28, 2018 at 1:51:24 AM To: u...@predictionio.incubator.apache.org <u...@predictionio.incubator.apache.org> <u...@predictionio.incubator.apache.org> Subject: Distinct recommendation from "random" backfill? Dear pio developers and users: I have been using predictionIO and Universal Recommender for a while. In universal recommender engiene.json, there is a configuration field `rankings`, and one of the option is random. Initially I thought it would give each item without any related event some random recommended items, and each of the recommendation list is different. However, it turns out all of the random recommended item list is the same. For example, if both item "6825991" and item "682599" have no events during training, the result will be ``` $ curl -H "Content-Type: application/json" -d '{ "item": "6825991" }' http://localhost:8000/queries.json {"itemScores":[{"item":"8083748","score":0.0},{"item":"7942100","score":0.0},{"item":"8016271","score":0.0},{"item":"7731061","score":0.0},{"item":"8002458","score":0.0},{"item":"7763317","score":0.0},{"item":"8141119","score":0.0},{"item":"8080694","score":0.0},{"item":"7994844","score":0.0},{"item":"7951667","score":0.0},{"item":"7948453","score":0.0},{"item":"8148479","score":0.0},{"item":"8113083","score":0.0},{"item":"8041124","score":0.0},{"item":"8004823","score":0.0},{"item":"8126058","score":0.0},{"item":"8093042","score":0.0},{"item":"8064036","score":0.0},{"item":"8022524","score":0.0},{"item":"7977131","score":0.0}]} $ curl -H "Content-Type: application/json" -d '{ "item": "682599" }' http://localhost:8000/queries.json {"itemScores":[{"item":"8083748","score":0.0},{"item":"7942100","score":0.0},{"item":"8016271","score":0.0},{"item":"7731061","score":0.0},{"item":"8002458","score":0.0},{"item":"7763317","score":0.0},{"item":"8141119","score":0.0},{"item":"8080694","score":0.0},{"item":"7994844","score":0.0},{"item":"7951667","score":0.0},{"item":"7948453","score":0.0},{"item":"8148479","score":0.0},{"item":"8113083","score":0.0},{"item":"8041124","score":0.0},{"item":"8004823","score":0.0},{"item":"8126058","score":0.0},{"item":"8093042","score":0.0},{"item":"8064036","score":0.0},{"item":"8022524","score":0.0},{"item":"7977131","score":0.0}]} ``` But I my webpage, whenever user click on these products without events, they will see exactly the same recommended items, making it looks boring. Is there anyway to give each item distinct random list? Even if it is generated dynamically is OK. If you have any other alternative, please also tell me. Thanks all developers! Best Regards, Brian