Sequential Pattern Mining for Daily Activities
Currently smart homes / assisted living centers are instrumented with different kinds of passive sensors. From these sensors we get a series of sensor firings each of which has a corresponding timestamp. From these lower level data, we want to infer higher level activities. There are a number of activity recognition algorithms that mainly focus on determining which activity is currently being performed. They consider which sensors are fired within a fixed time window and based on the usage assign an activity label to that time window.
Our goal is to infer more details about each activity. For example:
- Which sensors are used during an activity?
- Is there any particular order of using these sensors?
- Typical occurrence time and duration of an activity
- Typical intervals between the sensor firings of an activity
Inherent Difficulties in this Problem:
There are some inherent difficulties in this problem. They are:
- There can be noise in each stream e.g., repetitive firings of the same sensor within a short span of time which belong to the same event.
- A person can perform the same activity in more than one way. So it is difficult to define an activity in terms of a fixed sequence of sensor firings.
The first step of our algorithm is to group the sensor firings based on which room the sensor is in. Thus we infer the rooms where the user is in during different times of the day and also the duration of each stay. We construct a set of new tuples of the form <roomID, entranceTime, duration>. In the second step, we cluster the newly constructed tuples of the same room based on their entrance times and durations. After the clustering, each cluster represents a particular event that happens in a particular room, starts in similar times and lasts for similar durations for most of the days. We consider each event (represented by each cluster), that occurs more than a threshold number of days, as an activity.
In the next step, we perform sequential pattern mining. For each activity, there are a group of tuples of the form <roomID, entranceTime, duration> that belong to the corresponding cluster. From each of these tuples, we get a series of <timestamp, sensorID> pairs. We consider the pairs corresponding to each tuple as one stream. Thus, for each activity, we get a set of streams and we apply sequential pattern mining on these streams to get the set of patterns that frequently occur during this particular activity.
In the next step, we filter out patterns that are not necessary. These include the patterns that are part of a larger super pattern during an activity. We also remove the patterns that do not have any regularity in the intervals between any two successive sensor firings. Only those patterns are selected that have similar intervals between each successive sensor firings.