AAYMA
RU
Войти

WindAI

Full-stack агентное приложение прогноза мощности двух турбин на 24/48 ч: CatBoost на каждую турбину, архивная погода Open-Meteo, закрытый агентный…

Доведённый продукт
Команда «SYNC» 15💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: SYNC
Кейс HackAlem.ai: Энергетика — Самрук-Казына
Стадия: Доведённый продукт

Задача кейса: AI-агент, прогнозирующий выработку ветровой электростанции по погодным данным

Суть

Full-stack агентное приложение прогноза мощности двух турбин на 24/48 ч: CatBoost на каждую турбину, архивная погода Open-Meteo, закрытый агентный цикл с проверками и пересчётом, объяснение на русском от OpenAI.

Как устроено

FastAPI-бэкенд с агентом выполняет цикл «погода → проверка данных → входы → модель → проверка прогноза → анализ → пересчёт → объяснение». Проверяются непрерывность, диапазоны и согласованность мощности со скоростью ветра; пересчёт разрешён максимум один раз. Мощность считает CatBoost (по модели на турбину, с ранними версиями для прошлых дат), а OpenAI только пересказывает рассчитанные факты по-русски, без ключа используется шаблон. Бэктест воспроизводит 29 дат февраля 2026 (58 запусков агента) на архивных прогонах с условием доступности погоды до выпуска. Фронтенд на React (FSD-архитектура), всё поднимается через Docker Compose.

Ключевые решения

  • CatBoost
  • temporal validation
  • agentic loop с перерасчётом
  • leakage-free archived weather
  • baseline comparison (persistence, previous day, power curve)

Метрики

MAE ≈2.4% (T1) и 2.8% (T2) номинала на отложенной выборке дек 2025–янв 2026 (наблюдённая погода); −29% ошибки против кривой мощности; 82 backend + 58 ML тестов; 58 запусков агента без ошибок

Особенности

В репозитории сохранены журналы действий агента по всем 58 запускам, есть проверка воспроизводимости по контрольным суммам и явное разделение метрик на наблюдённой погоде и бэктеста на прогнозной. Чистый Docker-образ работает без сети и ключей на сохранённом архиве погоды.

Стек

Python · FastAPI · CatBoost · React · TypeScript · Docker · docker-compose · Render

Модели

OpenAI (модель не указана)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-bacd3af2-sync.

README

README.md

WindAI — прогнозируем чистое завтра

Сегодня ветер есть. А сколько электричества он даст завтра? WindAI помогает ответить на этот вопрос заранее: показывает ожидаемую мощность двух ветровых турбин на 24 или 48 часов и объясняет, когда ждать роста или спада.

Это помогает диспетчеру планировать работу станции и заранее замечать часы, когда энергии может не хватать. Проект команды SYNC для HackAlemAI.

Что получает пользователь

Выбирает дату и турбины, нажимает «Запустить агента» — и видит результат на одном экране:

Экран WindAI: график мощности двух турбин, погода, ход расчёта и объяснение

  • Когда будет больше и меньше энергии — на почасовом графике каждой турбины.
  • Главные числа — средняя мощность и время ожидаемого пика.
  • Почему меняется прогноз — погода и объяснение простыми словами.
  • На что обратить внимание — предупреждения и результаты проверок агента.

Пример на экране: прогноз на 31 января, обе турбины, горизонт 24 часа. Утром ожидается пик, к вечеру выработка снижается почти до нуля. Средняя мощность за сутки составляет около 44% от номинальной, то есть от мощности, на которую рассчитана турбина. Это показатель работы станции, а не процент точности ИИ. На графике 1 означает 100% номинальной мощности.

Скриншот можно увеличить нажатием. На нём видны завершённый цикл агента, метрики модели и русское объяснение OpenAI. Метрики относятся к отложенной выборке с наблюдённой погодой; условия проверки приведены ниже.

Что мы разработали

В основе прогноза — ИИ, обученный на реальных измерениях двух турбин. Для каждой турбины мы обучили отдельную модель CatBoost: она изучила, как ветер и температура связаны с мощностью станции.

Работа командыМасштаб
Проверили и подготовили историю измерений291 859 исходных записей
Собрали данные для обучения48 452 почасовых наблюдения за март 2023 — январь 2026
Обучили моделиДве основные модели, по одной на турбину, и две ранние версии для проверки прошлых дат
Рассчитали прогнозы на архивной погоде29 ежедневных запусков, два горизонта, 4 176 прогнозных значений
Проверили повторяемость результатов58 автоматических ML-тестов и повторное обучение с совпадением предсказаний по сохранённому аудиту

Мы связали интерфейс, сервер, погоду и обученные модели в одно приложение. Агент проверяет входные данные и прогноз, сообщает о проблемах и при необходимости выполняет повторный расчёт. В main по умолчанию используются настоящие обученные модели.

Почему это Agentic AI

Агент самостоятельно принимает решение, достаточно ли надёжен результат или нужен пересчёт. Его цикл: получение погоды → проверка данных → подготовка входов → запуск модели → проверка прогноза → анализ → пересчёт при необходимости → объяснение.

Он проверяет почасовую непрерывность, пропуски и допустимые диапазоны, сопоставляет мощность со скоростью ветра и повторно проверяет погодные входы. Обновление доступной на момент прогноза погоды, выход мощности за границы или существенные физические противоречия запускают повторный расчёт. Пересчёт ограничен одной попыткой; при его ошибке сохраняется исходный проверенный прогноз и выводится предупреждение.

Каждый шаг имеет статус, длительность и объяснение решения. Журналы полного прогона сохранены в репозитории. CatBoost рассчитывает мощность; OpenAI получает уже рассчитанные факты и объясняет их по-русски. Без ключа используется шаблонное объяснение.

Прогноз как будто в прошлом

Воспроизведены 29 дат выпуска с 31 января по 28 февраля 2026 года: 58 запусков полного агента для горизонтов 24 и 48 часов, обе турбины, 4 176 почасовых прогнозных значений. Время площадки: Asia/Almaty.

Используются отдельные архивные запуски Open-Meteo Single Runs, доступные на соответствующий момент прогнозирования. Проверяется условие weather_valid_time <= forecast_origin <= timestamp: погода должна быть доступна до выпуска прогноза. Модель также выбирается с учётом доступности её обучающей истории; для 31 января предусмотрены ранние версии моделей. Фактическая мощность февраля в расчёте не используется.

Итог 58 запусков · Журнал действий агента · Прогнозы на 24 ч · Прогнозы на 48 ч

Проверено перед сдачей

ПроверкаПодтверждённый результат
Автоматические тесты82 теста бэкенда + 58 ML-тестов прошли
Полный исторический сценарий58 запусков агента без ошибок, оба горизонта и обе турбины
Сборка и запускФронтенд и Docker собираются; чистый образ из main рассчитывает прогноз без API-ключа и без сети, используя настоящую модель и сохранённый архив
Реальные внешние сервисыЧетыре успешные проверки на 31 января, 1, 12 и 20 февраля: CatBoost, архив Open-Meteo и русское объяснение OpenAI

Это результаты зафиксированной проверки, а не оценка точности за февраль: отчёт готовности, результаты живых запросов, скрипт повторной проверки.

Как мы проверили результат

Мы дали модели погоду за декабрь 2025 — январь 2026 и сравнили её расчёты с реальными измерениями мощности. При обучении проверяемая модель ещё не видела этот период.

Если представить номинальную мощность турбины как 100 единиц, расчёт расходился с фактом в среднем на 2,4 единицы у первой турбины и на 2,8 у второй. Это средняя ошибка: в отдельные часы она может быть больше.

По сравнению с простым расчётом только по зависимости мощности от ветра средняя ошибка уменьшилась примерно на 29%.

Средняя ошибка CatBoost и трёх базовых методов для двух турбин

Ниже столбец, точнее расчёт. CatBoost сравнивается с повтором последнего значения, предыдущего дня и зависимостью мощности от ветра. Золотой цвет обозначает первую турбину, зелёный вторую.

Фактическая мощность и расчёт модели на трёх 48-часовых окнах декабря и января

Светлая линия: реальные измерения. Цветной пунктир: расчёт модели. Три фиксированных 48-часовых примера показывают и совпадения, и ошибки. Верхний ряд относится к первой турбине, нижний ко второй.

Эта проверка использует уже известную погоду. В реальной работе ошибка погодного прогноза тоже влияет на результат. Февральские прогнозы мы уже рассчитали, но проверить их точность пока нельзя: фактические измерения за февраль не предоставлены.

Модели и файлы обучения · Подробные результаты и графики · Проверка воспроизводимости · Февральские прогнозы

Как открыть проект у себя

  1. Скачайте репозиторий (Code → Download ZIP) и распакуйте. Установите и запустите Docker Desktop.

  2. Откройте терминал в папке с docker-compose.yml и выполните:

    docker compose up --build
    
  3. Дождитесь запуска и откройте http://localhost:5173. Выберите 1 февраля 2026 → обе турбины → 48 ч → «Запустить агента».

При первом запуске нужен интернет для сборки. Ключи API не обязательны: при недоступности погодного API используется сохранённый архив, а текст объяснения формируется по шаблону. Модель мощности остаётся настоящей. Ссылка localhost работает на том компьютере, где запущен проект.

Дальнейшее развитие

Следующие возможности запланированы:

  • Интервалы неопределённости: показывать диапазон вероятной мощности для планирования резерва.
  • Контроль точности после поступления факта: сопоставлять прогнозы с измерениями, отслеживать рост ошибки и необходимость переобучения.
  • Подключение новых ВЭС: расширять систему на другие площадки с их координатами, историей и моделями турбин.

Технологии: React — интерфейс · FastAPI — сервер · CatBoost — прогноз мощности · Open-Meteo — погода · Docker — запуск.

Для разработчиков: Backend · ML.

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

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

Malika 24yerkenaz 19

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

  • 2026-09-23 17:59docs: highlight model quality with two key evaluation chartsMalika
  • 2026-09-23 17:56docs: show verified live dashboard with metrics and OpenAIMalika
  • 2026-09-23 17:55docs: explain WindAI results and setup in plain Russianyerkenaz
  • 2026-09-23 17:55docs: demonstrate agent decisions, historical replay and delivery checksMalika
  • 2026-09-23 17:52deploy: add free single-service Render blueprintyerkenaz
  • 2026-09-23 17:45docs: streamline jury README and match charts to dashboard paletteyerkenaz
  • 2026-09-23 17:44Merge branch 'backend' into delivery/windai-finalMalika
  • 2026-09-23 17:43test: record clean main Docker startup without API credentialsMalika
Все коммиты (43)
  • 2026-09-23 17:42test: verify Docker demo with real weather and OpenAI explanationsMalika
  • 2026-09-23 17:40docs: substantiate real ML training and project scopeyerkenaz
  • 2026-09-23 17:35docs: introduce WindAI dashboard in Russian READMEyerkenaz
  • 2026-09-23 17:34Merge branch 'backend' into delivery/windai-finalMalika
  • 2026-09-23 17:33test: publish complete February agent replay and provenance logsMalika
  • 2026-09-23 17:32Merge tested forecasting agent into main; preserve team READMEMalika
  • 2026-09-23 17:31feat: enforce archived weather and replay the full forecasting agentMalika
  • 2026-09-23 17:25Merge ML delivery into main with trained models and verified backtestsyerkenaz
  • 2026-09-23 17:12Restore ML branch root README before project homepage redesignyerkenaz
  • 2026-09-23 17:05Publish compact Russian charts on the project homepageyerkenaz
  • 2026-09-23 17:04Restyle README charts with compact Russian labels and softer paletteyerkenaz
  • 2026-09-23 17:00style: remove em dashes from user-visible textMalika
  • 2026-09-23 16:58feat(backend): trained model and live weather by default; mock only on explicit flagMalika
  • 2026-09-23 16:58Publish Russian project overview and model quality figures on mainyerkenaz
  • 2026-09-23 16:57feat(frontend): reference redesign, Russian UI and Russian template explanationMalika
  • 2026-09-23 16:56Make linked ML reports concise and readable in Russianyerkenaz
  • 2026-09-23 16:49Add concise Russian project README with four model quality figuresyerkenaz
  • 2026-09-23 16:29docs: use a neutral placeholder for the OpenAI key in READMEMalika
  • 2026-09-23 16:25docs: jury-facing README with leakage proof, baselines and agentic loopMalika
  • 2026-09-23 16:10Correct archived weather source and evaluation wording in model metadatayerkenaz
  • 2026-09-23 16:06Document ML audit with reproducible model and backtest checksyerkenaz
  • 2026-09-23 16:06feat(backend): model-reported clipping trigger and real hold-out metricsMalika
  • 2026-09-23 16:00feat(backend): closed agentic loop, OpenAI explanations and real CatBoost modelsMalika
  • 2026-09-23 15:43Merge origin/ml: bring trained models and inference package into backendMalika
  • 2026-09-23 15:43fix(ml): preserve forecast checksums across platformsyerkenaz
  • 2026-09-23 15:42feat(ml): deliver validated inference and real February backtestyerkenaz
  • 2026-09-23 15:30data: import archived February weather export from backendyerkenaz
  • 2026-09-23 15:18docs: separate live-demo weather from leakage-free backtest weatherMalika
  • 2026-09-23 15:18feat(backend): export leakage-free archived weather forecasts for February backtestMalika
  • 2026-09-23 15:03feat(ml): train turbine models with temporal validation and Almaty time contractyerkenaz
  • 2026-09-23 14:54Merge origin/main: add ML data-quality audit (ml/) alongside backend and frontendMalika
  • 2026-09-23 14:48feat: complete WindAI dashboard, docs, Docker setup and real turbine coordinatesMalika
  • 2026-09-23 14:34init: add backend and frontend folderMalika
  • 2026-09-23 14:30init: add first ai partyerkenaz
  • 2026-09-23 13:55init: add project structureMalika
Структура репозитория (279 файлов)
.dockerignore
.env.example
.gitignore
Dockerfile.render
Dockerfile.render.dockerignore
README.md
backend/.env.example
backend/.gitignore
backend/Dockerfile
backend/README.md
backend/app/__init__.py
backend/app/agent/__init__.py
backend/app/agent/agent_steps.py
backend/app/agent/forecast_agent.py
backend/app/api/__init__.py
backend/app/api/deps.py
backend/app/api/routes/__init__.py
backend/app/api/routes/forecast.py
backend/app/api/routes/health.py
backend/app/api/routes/metrics.py
backend/app/core/__init__.py
backend/app/core/config.py
backend/app/core/constants.py
backend/app/deploy.py
backend/app/main.py
backend/app/ml/__init__.py
backend/app/ml/mock_model.py
backend/app/ml/model_adapter.py
backend/app/ml/predictor.py
backend/app/ml/real_model.py
backend/app/schemas/__init__.py
backend/app/schemas/agent.py
backend/app/schemas/forecast.py
backend/app/schemas/health.py
backend/app/schemas/metrics.py
backend/app/services/__init__.py
backend/app/services/analysis_service.py
backend/app/services/forecast_service.py
backend/app/services/llm_explainer.py
backend/app/services/metrics_service.py
backend/app/services/weather_service.py
backend/app/utils/__init__.py
backend/app/utils/datetime.py
backend/app/utils/validation.py
backend/app/web.py
backend/models/README.md
backend/requirements-dev.txt
backend/requirements-ml.txt
backend/requirements.txt
backend/scripts/__init__.py
backend/scripts/check_delivery.py
backend/scripts/export_weather_backtest.py
backend/scripts/replay_agent.py
backend/tests/__init__.py
backend/tests/conftest.py
backend/tests/test_agent.py
backend/tests/test_agent_loop.py
backend/tests/test_api.py
backend/tests/test_archived_weather.py
backend/tests/test_metrics_service.py
backend/tests/test_real_model.py
backend/tests/test_weather_backtest_export.py
backend/tests/test_web.py
data/weather/february_backtest.csv
data/weather/february_backtest_skipped.csv
docker-compose.yml
docs/DEPLOY.md
docs/images/windai-dashboard.png
frontend/.dockerignore
frontend/.env.example
frontend/.gitignore
frontend/Dockerfile
frontend/README.md
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/public/favicon.svg
frontend/src/app/providers/AppProviders.tsx
frontend/src/app/providers/QueryProvider.tsx
frontend/src/app/providers/RouterProvider.tsx
frontend/src/app/router/NotFound.tsx
frontend/src/app/router/RootLayout.tsx
frontend/src/app/router/routeTree.tsx
frontend/src/app/router/router.tsx
frontend/src/app/styles/index.css
frontend/src/entities/agent/index.ts
frontend/src/entities/agent/model/pipeline.ts
frontend/src/entities/agent/model/useStepReveal.ts
frontend/src/entities/agent/types/agent.ts
frontend/src/entities/forecast/api/dto.ts
frontend/src/entities/forecast/api/forecastApi.ts
frontend/src/entities/forecast/api/mappers.ts
frontend/src/entities/forecast/index.ts
frontend/src/entities/forecast/lib/chartData.ts
frontend/src/entities/forecast/model/constants.ts
frontend/src/entities/forecast/model/params.ts
frontend/src/entities/forecast/model/useForecast.ts
frontend/src/entities/forecast/types/forecast.ts
frontend/src/entities/metrics/api/metricsApi.ts
frontend/src/entities/metrics/index.ts
frontend/src/entities/metrics/model/useModelMetrics.ts
frontend/src/entities/metrics/types/metrics.ts
frontend/src/entities/turbine/index.ts
frontend/src/entities/turbine/model/selection.ts
frontend/src/entities/turbine/model/turbines.ts
frontend/src/entities/turbine/types/turbine.ts
frontend/src/features/run-forecast/index.ts
frontend/src/features/run-forecast/ui/RunForecastButton.tsx
frontend/src/features/select-forecast-date/index.ts
frontend/src/features/select-forecast-date/ui/ForecastDateField.tsx
frontend/src/features/select-horizon/index.ts
frontend/src/features/select-horizon/ui/HorizonField.tsx
frontend/src/features/select-turbine/index.ts
frontend/src/features/select-turbine/ui/TurbineSelectField.tsx
frontend/src/main.tsx
frontend/src/pages/about/index.ts
frontend/src/pages/about/ui/AboutPage.tsx
frontend/src/pages/forecast/index.ts
frontend/src/pages/forecast/model/useForecastParams.ts
frontend/src/pages/forecast/ui/ForecastPage.tsx
frontend/src/shared/api/client.ts
frontend/src/shared/api/config.ts
frontend/src/shared/api/index.ts
frontend/src/shared/config/index.ts
frontend/src/shared/config/motion.ts
frontend/src/shared/config/palette.ts
frontend/src/shared/lib/chartAxis.ts
frontend/src/shared/lib/cn.ts
frontend/src/shared/lib/format.ts
frontend/src/shared/lib/index.ts
frontend/src/shared/types/index.ts
frontend/src/shared/ui/AnimatedNumber.tsx
frontend/src/shared/ui/Badge.tsx
frontend/src/shared/ui/Button.tsx
frontend/src/shared/ui/Card.tsx
frontend/src/shared/ui/DateInput.tsx
frontend/src/shared/ui/EmptyState.tsx
frontend/src/shared/ui/Field.tsx
frontend/src/shared/ui/Reveal.tsx
frontend/src/shared/ui/SegmentedControl.tsx
frontend/src/shared/ui/Select.tsx
frontend/src/shared/ui/Skeleton.tsx
frontend/src/shared/ui/Spinner.tsx
frontend/src/shared/ui/TurbineMark.tsx
frontend/src/shared/ui/chart/ChartLegend.tsx
frontend/src/shared/ui/chart/ChartTooltipCard.tsx
frontend/src/shared/ui/chart/SeriesMarker.tsx
frontend/src/shared/ui/chart/index.ts
frontend/src/shared/ui/controlStyles.ts
frontend/src/shared/ui/index.ts
frontend/src/shared/ui/scene/WindScape.tsx
frontend/src/shared/ui/scene/index.ts
frontend/src/vite-env.d.ts
frontend/src/widgets/agent-activity/index.ts
frontend/src/widgets/agent-activity/ui/AgentActivity.tsx
frontend/src/widgets/agent-activity/ui/AgentRunBadge.tsx
frontend/src/widgets/agent-activity/ui/AgentStepItem.tsx
frontend/src/widgets/agent-activity/ui/StepStatusIcon.tsx
frontend/src/widgets/ai-explanation/index.ts
frontend/src/widgets/ai-explanation/model/insightTags.ts
frontend/src/widgets/ai-explanation/ui/AiExplanation.tsx
frontend/src/widgets/brand-card/index.ts
frontend/src/widgets/brand-card/ui/BrandCard.tsx
frontend/src/widgets/forecast-chart/index.ts
frontend/src/widgets/forecast-chart/ui/PowerChart.tsx
frontend/src/widgets/forecast-chart/ui/PowerForecastChart.tsx
frontend/src/widgets/forecast-controls/index.ts
frontend/src/widgets/forecast-controls/ui/ForecastControls.tsx
frontend/src/widgets/header/index.ts
frontend/src/widgets/header/model/useApiHealth.ts
frontend/src/widgets/header/ui/ApiStatus.tsx
frontend/src/widgets/header/ui/Header.tsx
frontend/src/widgets/metrics-panel/index.ts
frontend/src/widgets/metrics-panel/ui/MetricsPanel.tsx
frontend/src/widgets/sidebar/index.ts
frontend/src/widgets/sidebar/ui/Sidebar.tsx
frontend/src/widgets/turbine-summary/index.ts
frontend/src/widgets/turbine-summary/ui/ForecastSummary.tsx
frontend/src/widgets/weather-panel/index.ts
frontend/src/widgets/weather-panel/ui/WeatherChart.tsx
frontend/src/widgets/weather-panel/ui/WeatherPanel.tsx
frontend/tsconfig.json
frontend/vite.config.ts
ml/.gitattributes
ml/.gitignore
ml/README.md
ml/integration/README.md
ml/integration/backtesting.md
ml/integration/csv_backtesting.md
ml/integration/predictor.py
ml/integration/verify_adapter.py
ml/models/asof_2026-01-31/turbine_1/metadata.json
ml/models/asof_2026-01-31/turbine_1/model.cbm
ml/models/asof_2026-01-31/turbine_2/metadata.json
ml/models/asof_2026-01-31/turbine_2/model.cbm
ml/models/turbine_1/metadata.json
ml/models/turbine_1/metrics.json
ml/models/turbine_1/model.cbm
ml/models/turbine_2/metadata.json
ml/models/turbine_2/metrics.json
ml/models/turbine_2/model.cbm
ml/reports/audit_verification.json
ml/reports/completion_status.md
ml/reports/data_quality.json
ml/reports/data_quality.md
ml/reports/eda.md
ml/reports/february_backtest/24h/predictions.csv
ml/reports/february_backtest/24h/run.json
ml/reports/february_backtest/48h/predictions.csv
ml/reports/february_backtest/48h/run.json
ml/reports/february_backtest/README.md
ml/reports/figures/correlations.png
ml/reports/figures/coverage.png
ml/reports/figures/distributions.png
ml/reports/figures/power_curve.png
ml/reports/figures/power_time.png
ml/reports/figures/readme_baseline_mae.png
ml/reports/figures/readme_holdout_prediction_vs_actual.png
ml/reports/figures/readme_mae_by_wind_bin.png
ml/reports/figures/readme_power_curve.png
ml/reports/figures/seasonality.png
ml/reports/figures/temperature_power.png
ml/reports/figures/turbine_comparison.png
ml/reports/figures/wind_power.png
ml/reports/ml_audit.md
ml/reports/model_comparison.md
ml/reports/power_curve.csv
ml/reports/preprocessing.json
ml/reports/preprocessing_policy.md
ml/reports/turbine_1_validation_predictions.csv.gz
ml/reports/turbine_2_validation_predictions.csv.gz
ml/requirements-inference.txt
ml/requirements.txt
ml/scripts/verify_audit.py
ml/src/__init__.py
ml/src/analysis/__init__.py
ml/src/analysis/eda.py
ml/src/analysis/readme_figures.py
ml/src/backtesting/__init__.py
ml/src/backtesting/csv_replay.py
ml/src/backtesting/evaluate.py
ml/src/backtesting/prepare_snapshot.py
ml/src/backtesting/run.py
ml/src/config.py
ml/src/data/__init__.py
ml/src/data/audit.py
ml/src/data/load.py
ml/src/data/preprocess.py
ml/src/data/validate.py
ml/src/features/__init__.py
ml/src/features/build_features.py
ml/src/inference/__init__.py
ml/src/inference/artifacts.py
ml/src/inference/predict.py
ml/src/time_utils.py
ml/src/training/__init__.py
ml/src/training/baselines.py
ml/src/training/evaluate.py
ml/src/training/models.py
ml/src/training/train.py
ml/src/training/validation.py
ml/src/weather/__init__.py
ml/src/weather/schema.py
ml/tests/test_audit.py
ml/tests/test_backtesting.py
ml/tests/test_csv_backtest.py
ml/tests/test_models.py
ml/tests/test_predict.py
ml/tests/test_preprocess.py
ml/tests/test_timezone.py
ml/tests/test_training.py
render.yaml
reports/agent_backtest/manifest.json
reports/agent_backtest/predictions_24h.csv
reports/agent_backtest/predictions_48h.csv
reports/agent_backtest/runs.jsonl
reports/delivery_checks.json
reports/release_validation.json
reports/weather_backtest_export.md
Ветки (3)

Обсуждение 0 комментариев

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

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