Прогноз солнечной генерации и обнаружение аномалий в продакшене
Я пришёл в Recs Innovation стажёром, а через четыре месяца уже руководил ИИ-командой. Команда вывела в продакшен две модели: одна прогнозирует, сколько энергии выработает солнечная электростанция, а другая отмечает необычные показания в данных станции. Результаты обеих поступали в коммерческую виртуальную электростанцию (VPP) — платформу, которая управляет многими станциями как одной.
- Моя роль
- Data Science Intern → AI Engineer → AI Team Lead (март–ноябрь 2024). Руководил ML-, бэкенд- и фронтенд-командами.
- Результат
- Ошибка прогноза снизилась с 9% до 7%. Precision детектора вырос на 35 процентных пунктов, recall — на 37. Деплой стал занимать 15 минут вместо 3 часов.
- Стек
- PyTorch, графовая нейросеть (GNNAD), FastAPI, Docker Compose, GitHub Actions, PostgreSQL, Prometheus, Grafana, MLflow
- Эффект для бизнеса
- Прогноз позволил компании зарабатывать на посредничестве в торговле электроэнергией на бирже Korea Power Exchange (KPX). Ручной операционной работы стало на 80% меньше — это около $48 тыс. в год.
Задача
Компания выходила на рынок посредничества в торговле электроэнергией, то есть собиралась продавать выработку небольших солнечных электростанций на бирже Korea Power Exchange (KPX). Чтобы участвовать в торгах, компания должна достаточно точно прогнозировать выработку станций.
Кроме того, компании нужно было рано замечать неполадки на станции по показаниям, которые она присылает.
Поэтому две модели должны были работать в продакшене, а не только в экспериментах:
- прогноз выработки каждой станции, достаточно точный для KPX, и
- детектор, который отмечает необычные показания в данных станции.
Обе должны были надёжно работать и подключаться к коммерческой платформе VPP.
Обзор системы
- Данные электростанций Временные ряды показаний с солнечных электростанций — по многу измерений на каждую станцию.
- Обучение Модели на PyTorch, эксперименты отслеживаются в MLflow. Детектор аномалий переобучается каждую ночь.
- Модели Прогноз выработки каждой станции и графовый (GNN) детектор аномалий.
- API для инференса Сервисы на FastAPI отдают прогнозы и результаты обнаружения аномалий.
- Платформа VPP Сервисы подключаются к коммерческой платформе виртуальной электростанции.
- CI/CDGitHub Actions деплоит сервисы в контейнерах
- ИнфраструктураСервисы в Docker Compose с PostgreSQL
- МониторингМетрики Prometheus и дашборды Grafana
Скриншоты продакшен-системы. Название и местоположение электростанции, а также данные о продажах скрыты.
Прогнозирование
- На позиции AI Engineer я создал на PyTorch первую модель прогноза. Её средняя ошибка была меньше 10%, и это дало компании допуск к работе на KPX.
- Уже как тимлид я снизил ошибку с 9% до 7%, проанализировав данные и донастроив модель. Это открыло компании доход от посредничества в торговле электроэнергией.
-
Почасовая выработка и прогноз в виде столбцов
-
Прогноз и фактическая выработка за другую неделю
-
Страница прогноза с таблицей ошибок по часам
Обнаружение аномалий на солнечных электростанциях
Детектор построен на графовой нейросети (GNNAD). Она учится тому, как показания станции обычно меняются вместе, и отмечает показания, которые выбиваются из этой картины.
Ещё стажёром я настроил его первую версию, отслеживал эксперименты в MLflow и сделал эндпоинты на FastAPI, которые подключают детектор к платформе VPP. Уже как тимлид я шаг за шагом повышал его точность и измерял каждый шаг:
- Наглядность ошибок. Я основательно переработал open-source-код и добавил графики, которые сравнивают предсказание с фактическим показанием по каждому признаку, чтобы мы видели, где модель ошибается.
- Более точный расчёт ошибки поднял precision на 5 пунктов, а recall — на 7.
- Почасовые пороги. Один порог на весь день пропускал аномалии в некоторые часы, потому что ошибка меняется в течение дня. Переход на 24 порога, по одному на каждый час, поднял recall на 10 пунктов.
- Более чистые обучающие данные. Удаление аномальных точек из обучающей выборки подняло precision на 30 пунктов, а recall — на 20.
- Честная валидация. Кросс-валидация работает так же, как продакшен: окна инференса по 16 точек, почасовые пороги и ночное переобучение. Поэтому хороший результат на тесте означает хороший результат в продакшене.
В итоге precision вырос примерно на 35 процентных пунктов, а recall — примерно на 37. Проще говоря, детектор стал давать гораздо меньше ложных тревог и пропускать гораздо меньше реальных проблем.
- Более точный расчёт ошибки
- Почасовые пороги
- Более чистые обучающие данные
-
Найдены аномалии: система перечисляет затронутые признаки и отмечает точки красным или жёлтым
-
Тот же период на графике напряжения
-
Мониторинг: аномалий не найдено
MLOps и деплой
- На позиции AI Engineer я упаковал детектор в контейнеры и автоматизировал его деплой с помощью GitHub Actions. Деплой стал занимать 15 минут вместо 3 часов.
- Уже как тимлид я достроил остальную MLOps-инфраструктуру: сервисы в Docker Compose с PostgreSQL, деплой из GitHub Actions и метрики Prometheus на дашбордах Grafana. Ручной операционной работы стало на 80% меньше, что сэкономило около $48 тыс. в год.
Время деплоя
Ручная операционная работа
Руководство командой
На позиции AI Team Lead я руководил ML-, бэкенд- и фронтенд-командами. Моя задача была в том, чтобы модели не остались экспериментами: они должны были работать каждый день и без проблем подключаться к платформе VPP.
Результаты
- 9% → 7%ошибка прогноза; это открыло доход от посредничества на KPX
- +35 / +37 п. п.precision / recall детектора аномалий
- 3 ч → 15 минвремя деплоя
- −80%ручной операционной работы, около $48 тыс. в год
На этой странице нет кода работодателя, внутренних данных и закрытых URL.