How to work on building an engine for a website wherein we want to score/recommend stuff based on her different activities, like the music she rated or the article she read, or whether email notification is a good idea to inform her about promotions
For this as a first step, item similarity (for music and articles) has been computed via collaborative filtering, and stored. Now, as a next step, we want to be able to analyze these scenarios
- (A,T) : this scenario gives me a particular activity and asks me when is a user likely to do this activity.
- (T,A) : this scenario gives me a time slot and asks me what activity makes sense to recommend to the user at this time.
- (C, T) : this scenario gives me a channel (like sms, email, webpage ad, app ad) and asks which channel will the user most likely be available on right now.
As the above suggests, there are a number of modules like time, channel, interests, location, etc that can be combined interchangeably, to determine where in this kind of plane can the user be, and based on this tell whether a specific activity suggestion to her will make sense or not.
How can we go about for accomplishing this in a scalable way?
Here are a few things that I thought of, but I am not sure if they can be effective
- Building an item profile - create an item profile that stores time slots for the activity, channels for the activity and so on. However, this scenario is useful for (A, T) cases, but not for (T, A) cases.
- Treat one user as different users - we have an item similarity table, now we can store single user history as multiple users, like user1 to user1_17hrs, user1_18hrs, user1_phone, user1_tab. However, this will blow up the user data store with $2^n$ combinations.
- Graph DB - I have a hunch that this kind of heterogeneous data can be changed to a graph with user (user properties), channel (time as channel property) and item as nodes of graph and the edges can be rating for item, etc. Then we can use this graph db to get queries like select time and channel for user
item1, in graph db syntax. But I am not sure how to model a graph db like this.
Any leads, suggestions about my approach would be very helpful, thanks in advance!