How to improve algorithm for determining binge usage on a service? 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. 
 A: 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.
A: 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.
