Кейс 3. Прогноз потребления ресурсов сервера
Этот кейс находится на стыке машинного обучения и DevOps. В отличие от предыдущих примеров, здесь речь идёт не о бизнес-объектах и не о людях, а о системе – сервере или сервисе, который работает под нагрузкой.
Такие задачи встречаются повсеместно: от внутренних микросервисов до высоконагруженных API. И что важно – линейные модели здесь используются не "для учебника", а как реальный baseline в production.
Суть кейса
Представим сервис, который обрабатывает пользовательские запросы. Нам нужно предсказать, какую нагрузку на CPU или RAM он будет испытывать в ближайшее время, чтобы заранее принять решение об auto-scaling или throttling.
Мы используем следующие признаки:
количество запросов в минуту
средний размер ответа
количество активных пользователей
количество фоновых задач / cron jobs
время суток, представленное числом (например, 0–23) В реальных системах время суток чаще кодируют циклически (sin/cos) или бинарными признаками (day/night), однако для baseline-модели мы будем используется упрощённое числовое представление
Цель – предсказать загрузку CPU (в процентах) или потребление памяти.
С точки зрения ML это классическая задача регрессии с числовыми признаками и числовой целевой переменной.
Почему это реалистичный кейс
Во-первых, линейные модели очень часто используются как baseline в DevOps-аналитике. Они быстрые, устойчивые и легко интерпретируются.
Во-вторых, этот кейс отлично демонстрирует важность feature engineering. Например, время суток само по себе – слабый признак, но в сочетании с нагрузкой может хорошо отражать дневные и ночные паттерны.
В-третьих, такие модели реально применяются для auto-scaling, особенно там, где сложные модели избыточны или слишком дороги в обслуживании.
Реалистичный сценарий использования
Данные для обучения обычно поступают из инфраструктурных источников:
метрики CPU, RAM и RPS – из Prometheus
дополнительные параметры – из логов или APM
агрегация – за фиксированные интервалы времени (например, 1 минута)
Модель может переобучаться регулярно – раз в десятки минут или часы, в зависимости от динамики нагрузки. Предсказание используется системой оркестрации (Kubernetes, autoscaler) или внутренним monitoring-tool.
Важно, что здесь модель часто живёт долго и работает "на фоне", а не как разовый аналитический эксперимент.
Формализация задачи
Каждое наблюдение описывается вектором:
Где:
x1 – количество запросов в минуту
x2 – средний размер ответа
x3 – количество активных пользователей
x4 количество фоновых задач / cron jobs
x5 – время суток
Модель линейной регрессии:
где y^ – предсказанная нагрузка CPU в процентах.
Реализация с RubixML
В этом кейсе мы снова используем библиотеку, потому что в инфраструктурных задачах важны стабильность и поддерживаемость кода.
Подготовка данных
Каждая строка здесь – агрегированная метрика за один временной интервал. Количество строк в примере сокращено для наглядности.
Обучение модели
Обучение занимает миллисекунды и может спокойно выполняться регулярно.
Предсказание нагрузки
Такое предсказание может использоваться как дополнительный сигнал в логике auto-scaling или при принятии решений об изменении ресурсов.
Интерпретация коэффициентов
Как и в предыдущих кейсах, линейная модель ценна своей интерпретируемостью.
Интерпретация обычно выглядит так:
коэффициент при запросах в минуту отражает базовую нагрузку от RPS
коэффициент при размере ответа показывает влияние сетевых и сериализационных накладных расходов
количество активных пользователей часто коррелирует с конкуренцией за ресурсы
количество фоновых задач может показывать, как съедаются ресурсы параллельно с основной нагрузкой
время суток может отражать фоновые процессы или особенности дневных пиков
Такая модель позволяет не только предсказывать, но и понимать, почему растёт нагрузка. Однако нужно понимать, что интерпретация коэффициентов корректна при условии, что признаки не находятся в сильной корреляции и модель обучена на репрезентативном объёме данных.
Обучение "на лету" и concept drift
В DevOps-кейсе данные со временем меняются. Добавляются новые фичи, меняется профиль трафика, появляются кэши и оптимизации. В инфраструктурных системах это проявляется как data drift и изменение зависимости между метриками (concept drift в инженерном смысле).
Линейная модель здесь удобна тем, что её можно:
регулярно переобучать на свежих данных
использовать скользящее окно последних метрик
быстро заменить или пересобрать без сложной инфраструктуры
Даже если модель становится неточной, она деградирует плавно и предсказуемо.
Ограничения модели
Линейная регрессия не умеет ловить резкие скачки, нелинейные эффекты и saturation-поведение (например, когда CPU упирается в 100%).
Но именно поэтому она хороша в качестве отправной точки. Если линейная модель уже даёт полезный сигнал – усложнять систему стоит только при реальной необходимости.
Выводы по кейсу
Этот кейс показывает, что машинное обучение может быть естественной частью инфраструктуры. Без нейросетей, без GPU и без сложных пайплайнов.
Линейная регрессия здесь выступает как инженерный инструмент: простой, объяснимый и достаточно надёжный. В DevOps-мире это часто важнее максимальной точности.
Чтобы самостоятельно протестировать этот код, установите примеры из официального репозитория GitHub или воспользуйтесь онлайн-демонстрацией для его запуска.
Last updated