We are trying to build a model, gathering specific hotels booking data, try to find the pattern how the hotel is booked, stayed, what type of people lived, how many bookings average per day. The bookings might vary from weekdays to weekend, also from winter to summer, normal days and vacation period. All these factors are accountable.

Then, as the time passes by, we want to know if the booking becomes abnormal, e.g. normally, young couple books the hotel quite a lot, all the sudden, a bunch of business men checked in for a couple of days.

Since in this case, we don't have samples/labels for normality and abnormality, we started thinking use unsupervised learning, like clustering for a start. Say, we construct a sample(booking features for every week) going back all the way to the beginning of the year. And then, we try to cluster them, then, every week, we calculate the current week, and see if it belongs to any clusters? or it is an abnormal point stands out required attention.

Is this a reasonable approach or there are some better ways?


Look at the distribution of the features you want to consider for anomalies (e.g., user attributes) conditioned on the date, so you do not trigger a warning for normal seasonality. An anomaly then is when the current conditional distribution is significantly different from the historical average. For more information look into contextual anomaly detection. Welcome to the site and good luck!

  • $\begingroup$ Is the case I mentioned above can be modelled using clustering or you think it makes sense model it the contextual anomaly detection way. One thing I am not quite sure, is this case is similar to the sensor time-series data scenario? $\endgroup$ – Shengjie Sep 6 '17 at 2:25
  • $\begingroup$ I avoid clustering; it's slow, subjective, and undeveloped as a field. $\endgroup$ – Emre Sep 6 '17 at 3:12
  • $\begingroup$ Any particular algorithms you recommend? sci-learn anomaly detection? $\endgroup$ – Shengjie Sep 6 '17 at 4:21
  • $\begingroup$ Use that as a baseline and also try autoencoding. $\endgroup$ – Emre Sep 6 '17 at 4:22

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.