Опубликовано 28 июня 2026 г.
Квантильный прогноз трафика и планирование ёмкости N+2
Зачем прогноз, если есть графики
Планирование ёмкости магистрали сводится к решению, расширять направление или нет, и принимать его нужно за месяцы до того, как канал упрётся в предел. Графики за прошлый год показывают, как было. Для планирования нужно понимать, как будет и насколько этот прогноз надёжен.
Поэтому первое требование состоит в том, чтобы прогноз был квантильным. Модель выдаёт три значения, P10, P50 и P90, на 168 часов вперёд. Планировщик ориентируется на верхний квантиль, чтобы ёмкости хватило и при неблагоприятном сценарии.
Проблема с нормализацией
Трафик в секторах магистрали различается на порядок, от сотен гигабит до нескольких терабит в секунду. Первая версия конвейера нормализовала целевую переменную глобально, и результат оказался плохим. Модель подстраивалась под самые крупные направления, а для мелких выдавала почти плоскую линию, потому что на фоне общей дисперсии их колебания выглядели шумом.
Проблему решает z-score, посчитанный отдельно для каждого сектора:
# нормализация внутри сектора, а не по всему датасету
stats = df.groupby("sector_id")["traffic_gbps"].agg(["mean", "std"])
df["traffic_normalized"] = (
df["traffic_gbps"] - df["sector_id"].map(stats["mean"])
) / df["sector_id"].map(stats["std"])
Статистики сохраняются рядом с чекпойнтом модели, без них прогноз нельзя перевести обратно в гигабиты. Чаще всего такой конвейер ломается именно здесь, когда модель обучают с одними значениями mean/std, а инференс запускают с другими.
Как прогноз превращается в решение
Сам по себе прогноз пользы не приносит. Его используют два компонента.
Планировщик ёмкости работает по методике N+2. Направление должно выдерживать отказ двух элементов, утилизация не должна превышать порог, а расширение возможно только кратными шагами, так что произвольное число гигабит докупить нельзя. В результате планировщик выдаёт конкретную рекомендацию: на каком направлении, к какой неделе и сколько ёмкости нужно заказать уже сейчас.
Детектор аномалий сравнивает фактические значения с коридором P10-P90. Выход за коридор означает, что трафик ведёт себя иначе, чем ожидала модель. Этот сигнал отличается от простого роста трафика и срабатывает в том числе на провалах, за которыми может стоять авария.
Признаки
Всего 25 признаков: календарные (час, день недели, праздники), лаговые и скользящие статистики. Они собираются отдельным слоем, для которого написан свой smoke-тест. Он прогоняет весь конвейер от загрузки данных до нормализации и проверяет форму данных, отсутствие NaN и полноту списков признаков. На временных рядах больше всего времени отнимает тихая порча данных, а падения обучения случаются реже и заметны сразу.