Задний план
Я работаю над набором данных временных рядов показаний счетчиков энергии. Длина ряда варьируется в зависимости от метра - у некоторых у меня есть несколько лет, у других - всего несколько месяцев и т. Д. Многие демонстрируют значительную сезонность, а часто и несколько слоев - в течение дня, недели или года.
Одна из вещей, над которыми я работал, - это кластеризация этих временных рядов. На данный момент моя работа носит академический характер, и, хотя я занимаюсь и другим анализом данных, у меня есть конкретная цель провести некоторую кластеризацию.
Я выполнил некоторую начальную работу, где вычислял различные функции (процентное соотношение, используемое в выходные дни, по сравнению с днем недели, процентное соотношение, используемое в разных временных блоках и т. Д.). Затем я перешел к рассмотрению использования динамической деформации времени (DTW) для получения расстояния между различными рядами и кластеризации на основе значений разностей, и я нашел несколько статей, связанных с этим.
Вопрос
Приведет ли сезонность к изменению конкретной серии к неправильной кластеризации? И если да, то как мне с этим бороться?
Меня беспокоит то, что расстояния, полученные DTW, могут вводить в заблуждение в тех случаях, когда картина во временных рядах изменилась. Это может привести к неправильной кластеризации.
В случае, если вышеизложенное неясно, рассмотрите эти примеры:
Пример 1
Измеритель имеет низкие показания с полуночи до 8:00, затем значения резко возрастают в течение следующего часа и остаются высокими с 9:00 до 17:00, затем резко уменьшаются в течение следующего часа и затем остаются низкими с 6:00 до полуночи. Измеритель продолжает эту схему последовательно каждый день в течение нескольких месяцев, но затем меняется на схему, где показания просто остаются на постоянном уровне в течение дня.
Пример 2
Метр показывает примерно одинаковое количество энергии, потребляемой каждый месяц. Через несколько лет он меняется на схему, в которой потребление энергии выше в течение летних месяцев, а затем возвращается к обычному количеству.
Возможные направления
- Я задавался вопросом, могу ли я продолжать сравнивать целые временные ряды, но разделить их и рассматривать их как отдельные серии, если картина существенно меняется. Однако, чтобы сделать это, мне нужно было бы обнаружить такие изменения. Кроме того, я просто не знаю, является ли это подходящим способом или работа с данными.
- Я также подумал о разделении данных и рассмотрении их как множества отдельных временных рядов. Например, я мог бы рассматривать каждую комбинацию день / метр как отдельную серию. Однако тогда мне нужно было бы поступить аналогичным образом, если бы я хотел учесть недельные / ежемесячные / годовые модели. Я думаю, что это сработало бы, но это потенциально довольно обременительно, и я бы не хотел идти по этому пути, если есть лучший способ, по которому я скучаю.
Дальнейшие заметки
Это то, что появилось в комментариях, или то, о чем я подумал из-за комментариев, которые могут иметь отношение к делу. Я помещаю их сюда, чтобы людям не приходилось читать все, чтобы получить соответствующую информацию.
- Я работаю в Python, но у меня есть rpy для тех мест, где R больше подходит. Я не обязательно ищу ответ на языке Python - если у кого-то есть практический ответ о том, что должно быть сделано, я с удовольствием выясню детали реализации самостоятельно.
- У меня много работающего "черновика" кода - я выполнил несколько прогонов DTW, я сделал несколько разных типов кластеризации и т. Д. Я думаю, что я в основном понимаю направление, в котором я иду, и что я ' На самом деле поиск связан с тем, как я обрабатываю свои данные перед нахождением расстояний, запуском кластеров и т. д. При этом я подозреваю, что ответ будет одинаковым независимо от того, рассчитываются ли расстояния между рядами с помощью DTW или более простого евклидова расстояния (ED).
- Я нашел эти документы особенно информативными по временным рядам и DTW, и они могут быть полезны, если требуется некоторая предыстория для тематической области: http://www.cs.ucr.edu/~eamonn/selected_publications.htm