For a side project I am trying to determine if users in a dataset are either "binge" users or not. I have a dataset of user log data, where each row is a user event.

Right now my algorithm is somewhat hackneyed but gets the job done. First, I calculate the time between events. I then label those time deltas as either "small" (0) or "large" (1), e.g. if a time delta is less than 10 minutes, it is "small", otherwise "large".

Then, I take the average of the labels for each user. So, binge activity for a user is on a scale of zero to one.

How can this be improved? What are other things to think about or look into the data to improve this rating?

EDIT: People can go greater than a week without using the service before coming back. So, utilizing an average of time deltas, etc. isn't as useful as it would be normally.

  • 1
    $\begingroup$ Why use a 0,1 variable? It would be much more informative to model the actual delta. You could treat each user's behavior as its own logistic growth or "diffusion curve" whereby the deltas are cumulated and a Gompertz-type diffusion model is fit for each individual. Lots of papers out there on this type of approach. By comparing the logistic growth curve fit of the individual users to the overall or average logistic growth curve across all users, predicted deviations above and below that overall curve should suggest "binging". Normalizing the curves before comparing them may be informative-idk $\endgroup$ – Mike Hunter Apr 4 '17 at 16:45

It would appear to me that "binge-iness" is a relative notion. It would be nice to produce an estimate in real units in order to compare users.

You might consider storing the actual mean time-between-events instead of the mean label. Then, each user has an average visit period in units of minutes, which is nice, because we can directly compare different users.

In the previous construction, a user who did the thing once every 10.1 minutes would be indistinguishable from a user who visited every 200 minutes. Further, a user who visited the site every 10.1 minutes would look much worse than a user who visited every 9.9 minutes, despite being quite similar.

After that, you could take the 90th percentile of visit periods and label them "bingey". Futher: plotting this distribution will give you a clear sense of what the boundary of "bingey" ought to be.

| cite | improve this answer | |
  • $\begingroup$ Thanks for the thoughts -- see the comment. I don't think an approach using the mean would be as useful as it would be normally since there are large gaps between clusters of events. $\endgroup$ – zthomas.nc Apr 4 '17 at 16:37

I think this question touches upon the essentials in algorithm design. This is how I usually work:

1) Get to know your data. Spend time with it. Annotate some portion of it. Annotation gives you understanding of what are reasonable questions to ask (if you can define what bingey'ness is, so can computer).

2) (ONLY IF) amount of data is lacking or precise annotation is difficult -> Generate synthetic data, this makes you understand the structure of dataset and allows you to define variables you need to predict.

3) Work with simple cases close to the data. Build a simple solutions that works for these and pick your favorite 1-3.

4) Work in generality and test your changes against annotations. Over a time period you start to question your sanity and improving upon a single value metric (e.g. precision) is basically the only way to maintain any reliability on your changes.

5) Using usual training- / test- data paradigm, iterate over set of hand-picked variables and choose the ones that work the best.

| cite | improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.