как найти интересные точки во временных рядах - PullRequest
1 голос
/ 08 августа 2011

у меня есть массив дат => значений, как это

"2010-10-12 14:58:36" =>13.4
"2010-10-17 14:58:36" =>12
"2010-10-22 14:58:36" =>17.6
"2010-10-27 14:58:36" =>22
"2010-11-01 14:58:36" =>10
[...]

Я использую эту комбинацию даты и значения, чтобы нарисовать график в javascript. Теперь мне нравится отмечать те даты, которые «очень особенные».

Моя проблема (и Вопрос) в том, какой аспект следует учитывать, чтобы найти эти конкретные даты?

Как человек, я предпочитаю дату «2010-10-17 14:58:36», потому что «что-то» должно произойти в эту дату, потому что значение следующих дат возрастает на 5,6 балла, что является за большим шагом следует один большой шаг вверх. С другой стороны, дата "2010-10-27 14:58:36" является "основным моментом", потому что это

  1. верх всех значений и
  2. после этой даты наступает самый большой шаг вниз.

Так что, как человек, я бы выбрал обе даты.

Моя проблема: как может выглядеть алгоритм?

  1. Я пытался усреднить значения для n дат до и после текущих значений, что приводит к накоплению этих специфических дат в начале и в конце графика
  2. Итак, я попытался найти самый большой процентный шаг вверх (в зависимости от даты до этого), но я не уверен, если я действительно найду конкретные даты, которые я ищу?!

Как бы вы решили эту проблему?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 08 августа 2011

Похоже, проблема с финансовым снабжением :-) Вы ищете Time series analysis - это статистическая проблема. Я бы порекомендовал использовать R язык программирования для игры с ним (вы можете делать сложные статистические вещи очень быстро). Есть десятки специальных пакетов, конечно же, финансовых. Как только вы знаете, чего хотите, вы можете реализовать решение на любом другом языке.

Просто попробуйте в Google time series analysis r.

РЕДАКТИРОВАТЬ : обратите внимание, что R очень мощный - я бы поспорил, есть инструмент, как использовать пакеты R из других языков.

1 голос
/ 08 августа 2011

Если у вас есть информация по временной шкале, вы можете использовать Инерполяция .

A Полиномиальная интерполяция дастВы приблизительный многочлен, который проходит через точки.
Что приятно в этом, вы можете затем использовать Математический анализ , который легко на многочленах, чтобы найти интересные точки (большие градиенты, мин-макс. точек и т. д. ...)

Также вы получите приблизительное представление о том, как ведет себя функция, чтобы вы могли "прогнозировать" точки и видеть, что может произойти в ближайшем будущем.

Конечносмотреть в будущее не так точно, но в аналитике используются формы интерполяции, чтобы увидеть тенденции и поведение.

И, конечно, легко построить многочлен, что всегда приятно.

0 голосов
/ 08 августа 2011

Вам нужны примеры данных, на основе которых создается функция, которая может вычислить значение expected для любой заданной даты;например, усреднение значений предыдущего дня, того же дня недели предыдущей недели, предыдущего месяца и т. д.После этого решите threshold: интересными являются даты, для которых реальная стоимость находится за пределами expected value +- threshold

0 голосов
/ 08 августа 2011

Это действительно вопрос статистики http://en.wikipedia.org/wiki/Statistics и контекста ваших данных и того, что вы хотите выделить, например, тот факт, что между 12/10 и 17/10 данные сдвинулись отрицательно 1.4единицы могут быть более полезными в некоторых сценариях, чем большие положительные изменения шага.

...