AAYMA
RU
Войти

AURA

Прогноз почасовой выработки ВЭС на 24–48 ч: ML-сервис на XGBoost с архивными прогнозами погоды GFS из Open-Meteo, оркестратор на Go/Gin и…

Рабочий MVP
Команда «Birkaliito» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

Agentic AI для прогнозирования выработки ВЭС (AURA)

1. Название проекта

AURA: Agentic AI-система прогнозирования выработки ветроэлектростанций (ВЭС).

2. Краткое описание

Проект решает критически важную задачу точного прогнозирования почасовой выработки ветроэлектростанций на горизонте 24–48 часов. Точные прогнозы помогают операторам энергосистем и владельцам ВЭС балансировать нагрузку в сети, планировать продажи электроэнергии и избегать штрафов за небаланс. Система работает в режиме AI-агента, полностью автоматизируя весь цикл от сбора данных до выдачи финального прогноза.

3. Что реализовано

  • Автономный Agentic AI-цикл: система сама запрашивает внешние погодные данные, обрабатывает их, запускает модель и формирует почасовой прогноз.
  • Соблюдение "честности" (Time-Travel): для предсказания на тестовый период используются строго архивные погодные прогнозы (как если бы мы находились в прошлом), без использования фактических значений из будущего.
  • Точная ML-модель: ансамбль на базе XGBoost для прогнозирования нормализованной активной мощности.
  • Микросервисная архитектура: оркестратор на Go, ML-движок на Python и адаптивный веб-интерфейс AURA.

4. Как работает решение

Пользователь открывает веб-интерфейс и выбирает нужную дату в тестовом периоде (например, 1 февраля 2026 года).

  1. Backend принимает запрос и делегирует задачу ML-агенту.
  2. ML-агент обращается к открытым источникам (Open-Meteo), скачивая погодный прогноз (GFS), который был сгенерирован именно на момент 1 февраля, гарантируя отсутствие заглядывания в будущее.
  3. Данные препроцессятся, обогащаются историей (SCADA) и скармливаются модели XGBoost.
  4. Сформированный почасовой прогноз на следующие 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).

8. Как проверить решение

  1. Откройте интерфейс http://localhost:4173.
  2. Выберите турбину и установите тестовый период прогнозирования (например, с 01.02.2026 по 02.02.2026).
  3. Нажмите кнопку формирования прогноза.
  4. Вы увидите интерактивный график выработки ВЭС на ближайшие часы, построенный на основе реальной предсказательной модели, а не синтетических данных. Жюри может сверить почасовую детализацию с реальной выработкой из скрытого тестового набора.

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).

Звёзды
⭐ 1
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
32
Авторы
3
Файлы
175
Ветки
4

Авторы коммитов

abzaliito 20birxnm 8FlyInTheSkyAndOfTheDarkness 4

История коммитов

  • 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 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.