Secondary events are hard to come by for “complimentary purchases" because, as you point out, the entity being tracked is a cart, not a user. The cart has few possible actions or indicators that can be associated with it. The use has many. Also the cart does not have a brain we are trying to look into, humans do and cross-indicators are how we look into different aspects of the human mind.
Back to earth… You can do a query on a cart-id if you are sending (cart-id, add-to-cart, item-id) in realtime but it’s usually not as convenient as doing an “itemSet” query with the contents of the user’s cart against the model build from cart-transactions, which I assume are purchases tied to a cart id. One small flaw in this is that tracking add-to-cart doesn’t account for remove-from-cart vey well. So training on cart-level purchases and querying with the current contents intuitively seems better. It would take a rigorous A/B test to know for sure. On May 24, 2017, at 8:28 AM, Dennis Honders <[email protected]> wrote: Current data: {"event": "cart-transaction", "entityId": "1", "entityType": "user", "targetEntityId": "12", "targetEntityType": "item"}, {"event": "$set", "entityType": "item", "entityId": "12", "properties": {"category": ["1", "2", "3", "4", "5", "6", "7"], "manufacturer": 1, "label": "test", "price": "$1-$2"}} Questions: Cart-transaction is the primary for shopping cart recommendation, maybe use user-buy-item as secondary event or is there no link between this? Item-based queries are for similar items. For shopping cart recommendations, complementary recommendations will suite better? If so, those are made by 'user-id' (cart-id). How can this be done? I like to do content-based recommendation for items that haven't been in a transaction. I think this can be configured in the engine.json. Any advice for doing this? Engine.json: { "comment":" This config file uses default settings for all but the required values see README.md for docs", "id": "default", "description": "Default settings", "engineFactory": "com.actionml.RecommendationEngine", "datasource": { "params" : { "name": "ur-name", "appName": "Test", "eventNames": ["cart-transaction"] } }, "sparkConf": { "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.kryo.registrator": "org.apache.mahout.sparkbindings.io.MahoutKryoRegistrator", "spark.kryo.referenceTracking": "false", "spark.kryoserializer.buffer.mb": "300", "spark.kryoserializer.buffer": "300m", "es.index.auto.create": "true" }, "algorithms": [ { "comment": "simplest setup where all values are default, popularity based backfill, must add eventsNames", "name": "ur", "params": { "appName": "Test", "indexName": "test", "typeName": "cart", "comment": "must have data for the first event or the model will not build, other events are optional", "eventNames": ["cart-transaction"], "maxEventsPerEventType": 50000, "maxCorrelatorsPerEventType": 5000, "num": 10, "itemBias": 2.0, "rankings": [{ "name": "preferredRank", "type": "userDefined" }] } } ] }
