ℹ️Материал подготовлен нейросетью DeepSeek.
Протокол экспериментов
Ключевая метрика для анализа
ROC‑AUC (Receiver Operating Characteristic – Area Under Curve)
Уточнённый анализ с учётом фактического определения инцидента в pg_expecto
1. Определение инцидента в проекте
В системе pg_expecto инцидент производительности СУБД — это состояние, при котором одновременно выполняются три условия:
- Корреляция между операционной скоростью и ожиданиями отрицательна (correlation < 0).
- Угол линии регрессии операционной скорости отрицательный (os_trend = -1).
- Угол линии регрессии ожиданий положительный (wait_trend = 1).
Иными словами, инцидент — это нахождение системы в одном из 9 состояний, определяемых этим условием (из 189 возможных). В таблице performance_incident, фиксируются периоды, когда система находится в одном из этих состояний.
☑️Таким образом, задача прогнозирования инцидента сводится к задаче предсказания перехода в это конкретное множество состояний в ближайшие k минут.
2. Интерпретация результатов эксперимента
В рамках эксперимента мы пытались выделить другие состояния (не сами аварийные), которые с высокой вероятностью предшествуют переходу в аварийное множество. Для этого использовался эмпирический риск — доля переходов из данного состояния в аварийное в течение заданного горизонта. Лучшие параметры (risk_threshold = 0.24, min_transitions = 90) дали следующие результаты по горизонтам:
❌По горизонтам (1–10 минут):
- ROC‑AUC = 0, число критических состояний = 0 — прогнозы не формировались, так как инциденты редко происходят в первые минуты.
☑️Горизонт 15 минут:
- ROC‑AUC = 0.473, число критических состояний = 1, доля инцидентов в окне = 0.138.
☑️Горизонт 20 минут:
- ROC‑AUC = 0.502, число критических состояний = 1, доля инцидентов = 0.177.
☑️Горизонт 30 минут:
- ROC‑AUC = 0.546 (наилучший), число критических состояний = 4, доля инцидентов = 0.252.
☑️Горизонт 45 минут:
- ROC‑AUC = 0.442, число критических состояний = 10, доля инцидентов = 0.359.
☑️Горизонт 60 минут:
- ROC‑AUC = 0.315, число критических состояний = 17, доля инцидентов = 0.462.
ℹ️Ключевые наблюдения:
- Оптимальный горизонт — 30 минут — совпадает с медианной задержкой между состоянием и переходом в аварийное множество (из анализа задержек медиана = 30.3 минуты). Это логично: мы предсказываем переход в аварийное состояние в тот момент, когда система находится в состоянии, которое в среднем приводит к аварии через 30 минут.
- ROC‑AUC = 0.546 означает, что модель чуть лучше случайного угадывания, но дискриминационная способность остаётся низкой. Это говорит о том, что выделенные нами «предаварийные» состояния не являются достаточно сильными предикторами.
- При увеличении горизонта до 45–60 минут ROC‑AUC падает, несмотря на рост числа критических состояний. Это указывает на то, что слишком длинные окна включают много шумовых переходов, и начальное состояние теряет предсказательную силу.
- Модель систематически переоценивает риск: средний риск при горизонте 30 минут — 0.375, тогда как фактическая доля переходов в аварию — 0.252. Это следствие того, что мы используем только текущее состояние, а не динамику.
3. Детальный анализ лучшего горизонта (30 минут)
Для горизонта 30 минут получены следующие метрики:
- ROC‑AUC: 0.546.
- Brier score: 0.297.
- Log‑loss: 0.881.
- Precision (при пороге 0.5): 0.206.
- Recall (при пороге 0.5): 0.252.
- Число критических состояний: 4.
- Фактическая доля инцидентов: 0.252.
- Средний предсказанный риск: 0.375.
Основные выводы по этим данным:
- ROC‑AUC = 0.546 превышает 0.5, что означает небольшое улучшение по сравнению со случайным угадыванием, но всё ещё далеко от приемлемого уровня (обычно > 0.7).
- Модель систематически переоценивает риск (средний риск 0.375 против 0.252 фактических), что указывает на проблемы с калибровкой.
- Brier = 0.297 — высокий показатель (для хорошо откалиброванной модели ожидается < 0.1).
- Log‑loss = 0.881 — умеренный, но ухудшается при больших горизонтах.
- Precision и Recall низкие, что говорит о слабой дискриминационной способности.
Сравнение с горизонтом 15 минут:
- ROC‑AUC улучшился с 0.473 до 0.546 (+0.073).
- Brier ухудшился с 0.161 до 0.297 (что ожидаемо, так как более длинный горизонт увеличивает неопределённость).
- Log‑loss улучшился с 0.965 до 0.881 (благодаря лучшей дискриминации).
Таким образом, горизонт 30 минут является оптимальным среди протестированных, но качество всё ещё неудовлетворительное.
4. Почему подход на основе цепей Маркова даёт слабые результаты даже с оптимальным горизонтом?
Учитывая, что инцидент — это конкретное множество состояний, можно выделить несколько фундаментальных ограничений:
- ⚠️Цепь Маркова первого порядка учитывает только текущее состояние, но не историю переходов. Инциденты могут происходить после определённой последовательности состояний (например, после нескольких шагов нарастания корреляции). Модель этого не видит.
- ❓Дискретизация состояний (189 комбинаций) может быть слишком грубой. Реальные метрики непрерывны, и небольшие изменения внутри одного состояния могут иметь значение. Например, корреляция –0.1 и –0.9 в одном «отрицательном» диапазоне, но поведение может различаться.
- ℹ️Недостаток данных — всего 10 дней наблюдений (с 8 по 18 июня 2026). Для устойчивой оценки вероятностей переходов для всех 189 состояний требуется гораздо больше данных, особенно для редких состояний.
- ➖Определение инцидента как момента перехода в аварийное состояние, а не как периода нахождения в нём, может создавать шум: если система часто «заглядывает» в аварийное состояние и сразу выходит, это даёт много ложных срабатываний при обучении.
5. Сравнение с предыдущей моделью (поглощающая матрица)
Старая модель (с markov_absorbing) на том же тестовом периоде (горизонт 15 минут) давала ROC‑AUC = 0.499.
Новая модель (с динамическими critical_states) на горизонте 15 минут дала ROC‑AUC = 0.473, а на горизонте 30 минут — 0.546.
ℹ️Таким образом, новая модель с оптимальным горизонтом превосходит старую, но всё ещё далека от приемлемого уровня (> 0.7). Это подтверждает, что выделение состояний, предшествующих инциденту, — правильное направление, но оно требует более сложных методов, чем простая цепь Маркова.
6. Дальнейшие рекомендации с учётом специфики инцидента
ℹ️С учётом полученных результатов и ограничений текущего подхода, предлагаются следующие шаги по улучшению прогнозирования:
❓6.1. Переход к классификации с расширенным набором признаков
Вместо цепей Маркова можно обучить классификатор (логистическая регрессия, случайный лес, градиентный бустинг) на признаках, которые включают:
- Текущие значения correlation, os_trend, wait_trend.
- Производные: скорость изменения корреляции за последние 1, 3, 5 минут.
- Длительность пребывания в текущем состоянии.
- Предыдущие состояния (например, состояние 1, 3, 5 минут назад).
- Статистики (среднее, дисперсия) метрик за последние 5–10 минут.
Это позволит учесть историю и улучшить дискриминацию.
6.2. Регрессия времени до инцидента
Вместо бинарной классификации («переход в аварию в течение N минут») можно предсказывать непрерывное время до перехода в аварийное состояние. Это даст более гибкую оценку риска и позволит использовать все данные о задержках.
Подходящие модели:
- Линейная регрессия.
- Случайный лес для регрессии.
- Градиентный бустинг (XGBoost, LightGBM).
6.3. Модели выживаемости (Cox-регрессия)
Этот подход естественно подходит для задачи прогнозирования времени до события (перехода в аварийное состояние). Он позволяет оценить влияние признаков на «опасность» (hazard) и даёт интерпретируемые результаты.
6.4. Улучшение качества данных
- Проверить, что в transition_log нет пропусков и временные метки точны до минуты.
- Рассмотреть возможность агрегации метрик по минутам, чтобы уменьшить шум.
- 📋Если есть возможность, увеличить период сбора данных (хотя бы до 30 дней) для более устойчивых оценок.
📋6.5. Агрегация состояний в кластеры
Вместо 189 дискретных состояний можно сгруппировать их в более крупные кластеры (например, по знаку корреляции и трендам) и строить прогнозы на уровне кластеров. Это увеличит статистическую мощность и уменьшит шум.
7. Заключение
Эксперимент показал, что оптимальный горизонт прогноза для предсказания перехода в аварийное состояние (инцидент) составляет 30 минут, что соответствует медианной задержке между состоянием и инцидентом.
Новая модель на цепях Маркова с динамическими критическими состояниями даёт ROC‑AUC = 0.546, что лучше старой модели (0.499), но всё ещё недостаточно для практического применения.
Рекомендуется перейти к более сложным методам машинного обучения, которые учитывают историю состояний и динамику метрик.
Наиболее перспективными являются:
- Классификация с расширенными признаками (случайный лес, градиентный бустинг).
- Регрессия времени до инцидента.
- Модели выживаемости.
Эти подходы позволят значительно улучшить качество прогнозов и сделать систему пригодной для реального использования.