My site contains a page with boxes, of varying sizes, that can be rendered in any order on a grid. Overflow goes to the next row.
I have been instructed to design a system wherein the order the boxes appear on the page is dependent upon how often a given user interacts with each box. So, if a user frequently accesses redBox, sometimes accesses grnBox and rarely accesses bluBox then they should appear on the page in the order redBox,grnBox,bluBox.
User activity is tracked in a way that a log is created for each user showing which boxes were accessed at which times. Activity is also tracked per usergroup.
The problem I have is that I am not sure what would be an effective metric for frequency.
The users themselves given the following directions/preferences: "I want the boxes I use most to be at the top of the page."
Things I have considered (I am open to using any combination of these or a different system entirely):
- Simple tally system: Boxes display in decreasing order based on number of interactions. I don't like this because if a user heavily uses grnBox for a month but then stops using it altogether, it will remain at the top of the page until another box tallies more interactions. Changes in the page layout will take too long and not properly represent user activity if their use patterns change.
- Last used system: The last box to be accessed will be the first on the page the next time it loads. I don't like this because the page layout will change too frequently and negatively impact user workflow.
- Scoring system based on arbitrary time slices: For example, each box could be given 1 points for each access in the past month, 1 point for each access in the past 2 weeks, and 1 point for each access in the past week. The scores could be recalculated server-side on the daily. My main issue here is that I have trouble imagining which time slices to use, how many to use, and how points should be distributed.
I am looking for any suggestions for how to determine use frequency and render the page accordingly in a way that will be responsive, stay responsive over time, and not cause too much disruption for the users.