Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
Запись мониторинга модели через Prometheus и Grafana: качество, дообучение, дрейф данных
Translation pending
DataPython · DockerfileGitHub @bestmark1OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Мониторинг ML-модели: Prometheus + Grafana, дообучение на потоке, дрейф признаков (PSI), алерты. FastAPI, scikit-learn, Docker Compose
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Живой дашборд Grafana: model-monitoring.185.79.138.118.nip.io — модель работает на сервере, поток идёт непрерывно, вход не нужен. Запись полного прогона по всему датасету: bestmark1.github.io/model-monitoring. Деплой: docs/deployment.md. Модель предсказывает, вырастет ли цена на электроэнергию относительно среднего за сутки, получает поток запросов, после каждого прогноза узнаёт истинный ответ и регулярно дообучается. Prometheus собирает метрики качества, дообучения, дрейфа данных и самого сервиса, Grafana показывает их на дашборде.Read the full README ↗
Живой дашборд Grafana: model-monitoring.185.79.138.118.nip.io — модель работает на сервере, поток идёт непрерывно, вход не нужен. Запись полного прогона по всему датасету: bestmark1.github.io/model-monitoring. Деплой: docs/deployment.md.
Модель предсказывает, вырастет ли цена на электроэнергию относительно среднего за сутки, получает поток запросов, после каждого прогноза узнаёт истинный ответ и регулярно дообучается. Prometheus собирает метрики качества, дообучения, дрейфа данных и самого сервиса, Grafana показывает их на дашборде.
Прогон по всему потоку: 40 312 примеров (май 1996 — декабрь 1998), дообучение каждые 1000 размеченных примеров.
| Модель | Accuracy по потоку |
|---|---|
| Дообучаемая (live) | 74,8% |
| Первая версия без дообучения (frozen) | 70,1% |
| Всегда угадывать частый класс | 57,1% |
Дообучение дало +4,7 п.п. Главная причина видна на панели дрейфа: в обучающих данных признаки рынка Виктории (vicprice, vicdemand, transfer) были константой, а в потоке появились реальные значения. Замороженная модель этого изменения не замечает, дообучаемая подстраивается.
| Критерий задания | Где |
|---|---|
| Создана модель | SGDClassifier (логистическая регрессия) + StandardScaler, app/model.py |
| Метрики модели передаются в Prometheus | эндпоинт /metrics (prometheus_client), скрапинг каждые 5 с, prometheus/prometheus.yml |
| На дашборде отображены метрики модели | 18 панелей, источник данных и дашборд подключаются автоматически (provisioning), grafana/ |
| Модель можно дообучать | partial_fit на накопленных размеченных примерах: автоматически каждые RETRAIN_EVERY примеров или вручную POST /retrain; каждая версия сохраняется (model_v{N}.joblib) |
Сверх задания:
promtool в CI.simulator ──POST /predict──▶ model (FastAPI) ◀──scrape /metrics── Prometheus ◀── Grafana
──POST /feedback─▶ ├─ live-модель: дообучается каждые 1000 ответов
├─ frozen v1: контрольная, не меняется
└─ PSI признаков, окно качества, версии модели
simulator проигрывает датасет в хронологическом порядке: отправляет признаки в /predict, затем истинный ответ в /feedback (на реальном рынке ответ известен через полчаса).partial_fit), версия увеличивается, чекпоинт сохраняется в том models.| Метрика | Тип | Что показывает |
|---|---|---|
model_accuracy, model_f1, model_logloss {model="live"|"frozen"} | gauge | качество на последних 500 размеченных примерах |
model_errors_total, model_labels_total | counter | ошибки и размеченные примеры (из них — доля ошибок за любой интервал) |
model_predictions_total{predicted_class}, model_prediction_probability | counter, histogram | распределение прогнозов: сигнал, доступный до прихода ответов |
model_version, model_retrains_total{trigger}, model_retrain_duration_seconds, model_trained_samples, model_retrain_buffer_size | gauge, counter, histogram | жизненный цикл дообучения |
model_feature_psi{feature} | gauge | дрейф каждого признака |
model_requests_total{endpoint}, model_prediction_latency_seconds | counter, histogram | нагрузка и задержка сервиса |
Electricity (Elec2) — Harries, M. (1999), Splice-2 comparative evaluation: Electricity pricing. 45 312 получасовых записей рынка Нового Южного Уэльса (Австралия), май 1996 — декабрь 1998. Целевая переменная — выросла ли цена (UP/DOWN) относительно среднего за 24 часа. Классический датасет для моделей на потоке со сдвигом распределения. Первые 5000 записей идут на первичное обучение, остальные 40 312 — поток. Датасет скачивается при сборке Docker-образа, в репозитории не хранится.
Нужен Docker.
git clone https://github.com/bestmark1/model-monitoring.git
cd model-monitoring
docker compose up -d --build
| Сервис | Адрес |
|---|---|
| Grafana (дашборд открывается сразу, вход не нужен) | http://localhost:3000 |
| Prometheus | http://localhost:9090 |
| Модель: Swagger | http://localhost:8000/docs |
| Модель: метрики | http://localhost:8000/metrics |
Первая точка на графиках качества появится через несколько секунд, первое дообучение — меньше чем через минуту.
Параметры (переменные окружения при docker compose up):
| Переменная | По умолчанию | Смысл |
|---|---|---|
RATE | 20 | запросов в секунду от симулятора |
RETRAIN_EVERY | 1000 | дообучать после N размеченных примеров; 0 — только вручную |
WINDOW | 500 | размер окна для метрик качества |
LIMIT | 0 | остановить симулятор после N примеров; 0 — крутить поток по кругу |
GRAFANA_ADMIN_PASSWORD | admin | пароль администратора Grafana |
Ручное дообучение и проверка прогноза:
curl -X POST localhost:8000/retrain
curl -s localhost:8000/model
Обновить демо-страницу после своего прогона: python scripts/export_snapshot.py --minutes 15.
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt
ruff check . && pytest -q
python scripts/build_dashboard.py # дашборд описан кодом; JSON генерируется
/feedback; на этом датасете оно занимает миллисекунды, для тяжёлой модели его нужно вынести в фоновую задачу.ModelWorseThanFrozen.Python · scikit-learn · FastAPI · prometheus_client · Prometheus · Grafana · Docker Compose · pytest · Ruff · GitHub Actions