AURA
Прогноз почасовой выработки ВЭС на 24–48 ч: ML-сервис на XGBoost с архивными прогнозами погоды GFS из Open-Meteo, оркестратор на Go/Gin и…
О проекте
Команда: Birkaliito
Кейс HackAlem.ai: Энергетика — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: AI-агент, прогнозирующий выработку ветровой электростанции по погодным данным
Суть
Прогноз почасовой выработки ВЭС на 24–48 ч: ML-сервис на XGBoost с архивными прогнозами погоды GFS из Open-Meteo, оркестратор на Go/Gin и веб-интерфейс AURA, всё в Docker Compose.
Как устроено
Python ML-агент скачивает из Open-Meteo previous-runs API архивный прогноз GFS, выпущенный именно на выбранную дату (с имитацией задержки публикации 6 ч), обогащает его историей SCADA и запускает ансамбль XGBoost для нормализованной мощности. Go/Gin backend принимает запросы, управляет job, forecast, replay и evaluation и отдаёт OpenAPI. Frontend (design/) рисует графики и принимает CSV. В ml/reports эксперименты точности с GFS, ICON и ансамблем, а также валидация на публичном датасете Kelmarsh SCADA.
Ключевые решения
- XGBoost
- Open-Meteo previous-runs (GFS, ICON)
- time-travel бэктест без утечки
- ансамбль погодных моделей
- валидация на Kelmarsh SCADA
Особенности
Честный бэктест: для тестового периода берутся архивные погодные прогнозы на ту дату с учётом задержки публикации. Модель дополнительно проверена на открытом датасете Kelmarsh. Микросервисы Go и Python связаны сгенерированными контрактами. Слово «agentic» здесь означает автоматический пайплайн, без LLM.
Стек
Python 3.12 · XGBoost · scikit-learn · pandas · Go · Gin · JavaScript · Docker Compose
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-938e08c5-birkaliito.
README
README.mdAgentic AI для прогнозирования выработки ВЭС (AURA)
1. Название проекта
AURA: Agentic AI-система прогнозирования выработки ветроэлектростанций (ВЭС).
2. Краткое описание
Проект решает критически важную задачу точного прогнозирования почасовой выработки ветроэлектростанций на горизонте 24–48 часов. Точные прогнозы помогают операторам энергосистем и владельцам ВЭС балансировать нагрузку в сети, планировать продажи электроэнергии и избегать штрафов за небаланс. Система работает в режиме AI-агента, полностью автоматизируя весь цикл от сбора данных до выдачи финального прогноза.
3. Что реализовано
- Автономный Agentic AI-цикл: система сама запрашивает внешние погодные данные, обрабатывает их, запускает модель и формирует почасовой прогноз.
- Соблюдение "честности" (Time-Travel): для предсказания на тестовый период используются строго архивные погодные прогнозы (как если бы мы находились в прошлом), без использования фактических значений из будущего.
- Точная ML-модель: ансамбль на базе XGBoost для прогнозирования нормализованной активной мощности.
- Микросервисная архитектура: оркестратор на Go, ML-движок на Python и адаптивный веб-интерфейс AURA.
4. Как работает решение
Пользователь открывает веб-интерфейс и выбирает нужную дату в тестовом периоде (например, 1 февраля 2026 года).
- Backend принимает запрос и делегирует задачу ML-агенту.
- ML-агент обращается к открытым источникам (Open-Meteo), скачивая погодный прогноз (GFS), который был сгенерирован именно на момент 1 февраля, гарантируя отсутствие заглядывания в будущее.
- Данные препроцессятся, обогащаются историей (SCADA) и скармливаются модели XGBoost.
- Сформированный почасовой прогноз на следующие 24–48 часов возвращается по HTTP и визуализируется на дашборде. При изменении входных условий расчет автоматически повторяется.
5. Технологии
- Языки: Go (Backend/Оркестрация), Python 3.12 (ML), JavaScript/HTML/CSS (Frontend).
- ML & Data:
XGBoost,scikit-learn,pandas,numpy. - Фреймворки:
Gin(Go API), нативный HTTP в Python (http.server). - Инфраструктура: Docker, Docker Compose.
- API / Внешние сервисы: Open-Meteo API (
previous-runs-api) для получения архивных GFS прогнозов.
6. Архитектура проекта
Архитектура состоит из трех контейнеризированных компонентов:
frontend(порт 4173): Легковесный сервер, раздающий статику AURA и проксирующий API-запросы к Backend.backend(порт 8080): Go/Gin REST API. Принимает клиентские запросы, управляет стейтом и маршрутизирует задачи.ml(порт 8000): Python-сервис. Выполняет роль AI-агента — хостит обученныеjoblibмодели, общается с Open-Meteo, проводит инференс и возвращает JSON-результаты Бэкенду.
7. Установка и запуск
Требования: Docker и Docker Compose (Git-репозиторий должен содержать CSV-датасеты турбин в папке ml/data или корне, если вы собираете модель с нуля).
# 1. Склонируйте репозиторий
git clone <url-репозитория>
cd hack-938e08c5-birkaliito
# 2. Запустите оркестрацию через Docker Compose
cd backend
docker compose up --build -d
Первый запуск займет около 2-4 минут (скачиваются ML-библиотеки и слои Docker).
- Frontend интерфейс: http://localhost:4173
- Swagger документация: http://127.0.0.1:8080/docs
8. Как проверить решение
- Откройте интерфейс http://localhost:4173.
- Выберите турбину и установите тестовый период прогнозирования (например, с 01.02.2026 по 02.02.2026).
- Нажмите кнопку формирования прогноза.
- Вы увидите интерактивный график выработки ВЭС на ближайшие часы, построенный на основе реальной предсказательной модели, а не синтетических данных. Жюри может сверить почасовую детализацию с реальной выработкой из скрытого тестового набора.
9. Данные и интеграции
- Исторические данные: предоставленные CSV-файлы SCADA (скорость ветра, мощность, температура окружающей среды).
- Погода: Интеграция с
previous-runs-api.open-meteo.com. Мы используем модель GFS (Global Forecast System) с симуляцией задержки публикации в 6 часов, чтобы честно воспроизводить состояние информации на "вчера".
10. Ограничения
- Модель обучена специфично под 2 предоставленные турбины. Добавление новой турбины потребует запуска пайплайна дообучения.
- Система чувствительна к rate-limit'ам бесплатного тарифа Open-Meteo (при массовом ретроспективном тестировании могут потребоваться задержки между запросами).
11. Ссылка на deployed-версию
Деплой-версия в сети отсутствует по условиям конфиденциальности датасета; проект предназначен для локального запуска жюри через docker compose (см. пункт 7).
Авторы коммитов
История коммитов
- 2026-09-23 18:07Fix frontend build configurationabzaliito
- 2026-09-23 18:05Restore frontend filesabzaliito
- 2026-09-23 17:53Update README according to Hackathon prompt templateabzaliito
- 2026-09-23 17:50Fix design Dockerfile go modabzaliito
- 2026-09-23 17:49last commitabzaliito
- 2026-09-23 17:46Merge remote-tracking branch 'origin/main' into devbirka # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # birxnm
- 2026-09-23 17:43Merge pull request #5 from BAITC-Hacks/devbirkaabzaliito
- 2026-09-23 17:42Merge remote-tracking branch 'origin/main' into devbirkabirxnm
Все коммиты (32)
- 2026-09-23 17:41Merge pull request #4 from BAITC-Hacks/dev/abzalabzaliito
- 2026-09-23 17:39added back detailsabzaliito
- 2026-09-23 17:39added backabzaliito
- 2026-09-23 17:37Merge remote-tracking branch 'origin/main' into devbirkabirxnm
- 2026-09-23 17:29refactor: simplify forecast experiencebirxnm
- 2026-09-23 17:25Merge pull request #3 from BAITC-Hacks/dev/abzalabzaliito
- 2026-09-23 17:20added back detailsabzaliito
- 2026-09-23 17:18feat: integrate AURA frontend with backend APIbirxnm
- 2026-09-23 17:03Merge pull request #2 from BAITC-Hacks/dev/flyin_mlabzaliito
- 2026-09-23 17:03Merge branch 'main' into dev/flyin_mlabzaliito
- 2026-09-23 17:00Merge pull request #1 from BAITC-Hacks/dev/abzalabzaliito
- 2026-09-23 16:58Merge remote-tracking branch 'origin/dev/abzal' into devbirkabirxnm
- 2026-09-23 16:45feat: organize ML workspace and add accuracy experimentsFlyInTheSkyAndOfTheDarkness
- 2026-09-23 16:44added back detailsabzaliito
- 2026-09-23 16:20added back detailsabzaliito
- 2026-09-23 16:07Merge remote-tracking branch 'origin/dev/abzal' into devbirkabirxnm
- 2026-09-23 16:04added back detailsabzaliito
- 2026-09-23 15:59added backabzaliito
- 2026-09-23 15:38feat: add local forecast UI with CSV uploadsFlyInTheSkyAndOfTheDarkness
- 2026-09-23 15:36added back detailsabzaliito
- 2026-09-23 15:35add AURA interactive designbirxnm
- 2026-09-23 15:26added backabzaliito
- 2026-09-23 15:02feat: improve wind forecasts and validate on public SCADAFlyInTheSkyAndOfTheDarkness
- 2026-09-23 13:57feat: add wind power forecasting pipeline and backtestFlyInTheSkyAndOfTheDarkness
Структура репозитория (175 файлов)
Dataset HackAlemAI для участников 11.03.2023-28.02.2026 - turbine 1.csv Dataset HackAlemAI для участников 11.03.2023-28.02.2026 - turbine 2.csv README.md backend/.dockerignore backend/.env.example backend/.gitignore backend/Dockerfile backend/README.md backend/api/docs.html backend/api/embed.go backend/api/openapi.yaml backend/cmd/api/main.go backend/compose.http.yaml backend/compose.real.yaml backend/compose.yaml backend/contracts/typescript/api-types.ts backend/contracts/typescript/client.ts backend/contracts/typescript/package-lock.json backend/contracts/typescript/package.json backend/contracts/typescript/tsconfig.json backend/docs/ARCHITECTURE.md backend/docs/ASSUMPTIONS.md backend/docs/AUDIT.md backend/docs/CONTRACT_CHANGELOG.md backend/docs/FRONTEND_HANDOFF.md backend/docs/PYTHON_INTEGRATION.md backend/go.mod backend/go.sum backend/internal/adapters/agenthttp/client.go backend/internal/adapters/agenthttp/mapping_generated.go backend/internal/adapters/agenthttp/types_generated.go backend/internal/adapters/agentmock/catalog.go backend/internal/adapters/agentmock/store.go backend/internal/adapters/agentmock/worker.go backend/internal/adapters/configrepo/repository.go backend/internal/app/app.go backend/internal/app/config.go backend/internal/application/catalog/service.go backend/internal/application/evaluation/service.go backend/internal/application/forecast/service.go backend/internal/application/job/service.go backend/internal/application/ports/metadata.go backend/internal/application/ports/ports.go backend/internal/application/replay/service.go backend/internal/domain/errors.go backend/internal/domain/types_generated.go backend/internal/domain/validation.go backend/internal/transport/http/dto/mapping_generated.go backend/internal/transport/http/dto/types_generated.go backend/internal/transport/http/handlers/catalog.go backend/internal/transport/http/handlers/csv.go backend/internal/transport/http/handlers/evaluation.go backend/internal/transport/http/handlers/forecast.go backend/internal/transport/http/handlers/input.go backend/internal/transport/http/handlers/job.go backend/internal/transport/http/handlers/replay.go backend/internal/transport/http/middleware/middleware.go backend/internal/transport/http/responses/errors.go backend/internal/transport/http/router.go backend/tools/generate_contract.py design/DESIGN.md design/Dockerfile design/HOME.md design/THEME.md design/api.mjs design/api.test.mjs design/app.js design/assets/wind-landscape.png design/assets/wind-studio.png design/index.html design/main.go design/model.mjs design/model.test.mjs design/previews/desktop.jpg design/previews/green-analytics-mobile.jpg design/previews/green-sidebar-collapsed.jpg design/previews/green-sidebar-desktop.jpg design/previews/green-sidebar-mobile.jpg design/previews/home-desktop.jpg design/previews/home-mobile.jpg design/previews/mobile-passport.jpg design/previews/mobile.jpg design/previews/orange-data-desktop.jpg design/previews/orange-desktop.jpg design/previews/orange-forecast.jpg design/previews/tablet.jpg design/previews/v2-desktop.jpg design/previews/v2-history.jpg design/previews/v2-mobile.jpg design/previews/v2-tablet.jpg design/previews/v3-analysis.jpg design/previews/v3-desktop.jpg design/previews/v3-tablet.jpg design/styles.css ml/.dockerignore ml/.gitignore ml/Dockerfile ml/README.md ml/config.json ml/outputs/README.md ml/pyproject.toml ml/reports/accuracy/diagnostic.json ml/reports/accuracy/ensemble_window_d5_history.json ml/reports/accuracy/ensemble_window_d5_weather.json ml/reports/accuracy/gfs_absolute_d5_history.json ml/reports/accuracy/gfs_absolute_d5_weather.json ml/reports/accuracy/gfs_window_d3_history.json ml/reports/accuracy/gfs_window_d3_weather.json ml/reports/accuracy/gfs_window_d5_history.json ml/reports/accuracy/gfs_window_d5_weather.json ml/reports/accuracy/icon_absolute_d5_history.json ml/reports/accuracy/icon_absolute_d5_weather.json ml/reports/accuracy/icon_window_d3_history.json ml/reports/accuracy/icon_window_d3_weather.json ml/reports/accuracy/icon_window_d5_history.json ml/reports/accuracy/icon_window_d5_weather.json ml/reports/accuracy/metrics.json ml/reports/accuracy/report.md ml/reports/accuracy/selection.json ml/reports/accuracy_ensemble/ensemble_window_d5_history.json ml/reports/accuracy_ensemble/ensemble_window_d5_weather.json ml/reports/accuracy_ensemble/metrics.json ml/reports/accuracy_ensemble/report.md ml/reports/accuracy_ensemble/selection.json ml/reports/accuracy_icon/icon_absolute_d5_history.json ml/reports/accuracy_icon/icon_absolute_d5_weather.json ml/reports/accuracy_icon/icon_window_d3_history.json ml/reports/accuracy_icon/icon_window_d3_weather.json ml/reports/accuracy_icon/icon_window_d5_history.json ml/reports/accuracy_icon/icon_window_d5_weather.json ml/reports/accuracy_icon/metrics.json ml/reports/accuracy_icon/selection.json ml/reports/feature_importance.csv ml/reports/improved/comparison.md ml/reports/improved/learning_curve.csv ml/reports/improved/learning_curve.png ml/reports/improved/metrics.json ml/reports/improved/regression.png ml/reports/january_backtest.png ml/reports/metrics.json ml/reports/model_report.md ml/reports/public_validation/metrics.json ml/reports/public_validation/monthly.csv ml/reports/public_validation/report.md ml/requirements-tested.txt ml/scripts/diagnose_accuracy.py ml/scripts/download_weather.py ml/scripts/improve_accuracy.py ml/scripts/public_kelmarsh.py ml/tests/conftest.py ml/tests/test_accuracy.py ml/tests/test_data.py ml/tests/test_evaluation.py ml/tests/test_forecast.py ml/tests/test_history.py ml/tests/test_public_kelmarsh.py ml/tests/test_ui.py ml/wind_forecast/__init__.py ml/wind_forecast/__main__.py ml/wind_forecast/accuracy.py ml/wind_forecast/agent.py ml/wind_forecast/backend_api.py ml/wind_forecast/cli.py ml/wind_forecast/data.py ml/wind_forecast/evaluation.py ml/wind_forecast/experiments.py ml/wind_forecast/features.py ml/wind_forecast/forecast.py ml/wind_forecast/history.py ml/wind_forecast/model.py ml/wind_forecast/ui.html ml/wind_forecast/ui.py ml/wind_forecast/uploads.py ml/wind_forecast/validation.py ml/wind_forecast/weather.py
Ветки (4)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.