Поделиться через


series_periods_detect()

Находит наиболее значимые периоды, существующие во временном ряду.

Синтаксис

series_periods_detect(num_periods серии, min_period max_period, , )

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
серия dynamic ✔️ Массив числовых значений, как правило, результирующий результат операторов make-series или make_list .
min_period real ✔️ Минимальный период, для которого требуется выполнить поиск.
max_period real ✔️ Максимальный период, для которого следует искать.
num_periods long ✔️ Максимальное требуемое количество периодов. Это число будет длиной выходных динамических массивов.

Внимание

  • Алгоритм может обнаруживать периоды, содержащие по крайней мере 4 точки и не более половины длины ряда.
  • Задайте min_period немного ниже и max_period чуть выше периодов, которые вы ожидаете найти в временных рядах. Например, если у вас есть почасовой агрегированный сигнал, и вы ищете как ежедневные, так и еженедельные периоды (24 и 168 часов соответственно), можно задать min_period=0,8*24, max_period=1,2*168 и оставить 20% полей вокруг этих периодов.
  • Входной временный ряд должен быть регулярным. То есть, агрегированный в константных ячейках, который всегда является случаем, если он был создан с помощью make-series. В противном случае выходные данные не имеют смысла.

Возвраты

Функция выводит таблицу с двумя столбцами:

  • периоды: динамический массив, содержащий найденные периоды в единицах размера ячейки, упорядоченных по их оценкам.
  • оценки: динамический массив, содержащий значения от 0 до 1. Каждый массив измеряет значение периода в соответствующей позиции в массиве периодов .

Пример

Следующий запрос внедряет моментальный снимок месяца трафика приложения, агрегированный дважды в день. Размер ячейки составляет 12 часов.

print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y  
| render linechart

Периоды рядов.

Выполнение series_periods_detect() в этой серии приводит к еженедельной периоду, 14 очков длину.

print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y  
| project series_periods_detect(y, 0.0, 50.0, 2)

Выходные данные

series_periods_detect_y_periods series_periods_detect_y_periods_scores
[14.0, 0.0] [0.84, 0.0]

Примечание.

Ежедневный период, который также можно увидеть на диаграмме, не найден, так как выборка слишком грубо (размер 12h bin), поэтому ежедневный период 2 ячейки ниже минимального размера периода 4 пункта, необходимого алгоритму.