Как найти, когда график достигает вершины и плато?

9

Это может показаться очень простым, но у меня есть такая проблема: у меня есть очередь данных с размером окна 300. Новые данные добавляются на одном конце, старые значения удаляются с другого конца.

Я ожидаю, что данные в очереди останутся более или менее согласованными, например: 10,12,15,10,20, а затем начнут резко расти: 15,10,20,22,25,26,28,30,32 ... вплоть до 150 или около того. Там данные могут немного колебаться, затем они будут снижаться с аналогичным уклоном (120,118,116,115 ...) вплоть до 20 или около того.

Я пытаюсь программно определить поворотный момент в этой серии данных, но мой код обнаруживает пики чаще, чем хотелось бы. Как я могу определить, когда график растет, когда он достиг определенной точки поворота и когда он начинает падать? Должен ли я попытаться посмотреть на скорость изменения скорости изменения?

Алекс Стоун
источник
Если у вас есть разумное представление о наклоне и высоте пика, можете ли вы принять во внимание как высоту и как долго она поднимается, так и текущий наклон? Сколько у вас есть предварительных данных о пиках, и можете ли вы использовать их для подбора модели?
Карл
2
Каким бы ни был метод, вам нужно будет правильно определить, что такое пик, а что плато. Являются ли два последовательных «высоких» значения пиком или плато? Как насчет пяти? Некоторым методам может не понадобиться эта информация, но тогда она скрыта за кулисами. Как всегда, все сводится к правильному определению вашей проблемы и оптимизации ваших параметров (и / или алгоритма) для нее.
Ник Сэбб

Ответы:

2

Если вы знаете, что это именно тот паттерн, который вы ожидаете, тогда вы можете искать именно этот паттерн, но тогда вы пропустите другие паттерны. Так. Если вы знаете, что пик будет равен 150, то вы можете искать 2, 3, 4 или (сколько угодно) последовательных значений 150. Но вы говорите «или около того» - насколько велико «или около того»? Возможно, пик определен как «3 последовательных значения более 130» или, может быть, «3 из 5 последовательных значений более 140». Это вам решать.

С другой стороны, если вы просто ищете какую-то общую программу для обнаружения пиков - ну, это было рассмотрено. Существует множество методов сглаживания (например, лесс, сплайны разных видов, скользящие средние и т. Д.). Я не эксперт в этой области, но об этом много литературы.

Питер Флом
источник
4

Посмотрите на SiZer (Significant ZERo пересечения ... или склоны, я не помню), хотя, возможно, это скорее инструмент поперечного сечения, чем инструмент временных рядов. Идея состоит в том, чтобы сгладить данные с различной шириной полосы (варьирующейся примерно на три порядка) и применить некоторые локальные тесты, чтобы увидеть, является ли наклон локальной регрессии значительным положительным или отрицательным (или неопределенным). Это дает убедительную картину, которая поможет вам определить, какие функции есть. (Я удивлен, что нет реализации R, только Matlab.)

Stask
источник