Что делать, если бизнес недоволен качеством модели, выпущенной в production?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Что делать, если бизнес недоволен качеством модели в production
Это частая ситуация. Вот пошаговый план действий.
1. Поймите, в чём конкретно проблема
Используйте метрики, которые важны бизнесу, не ML метрики. Может быть:
- Модель возвращает много false positives (пользователи раздражены)
- False negatives критичны (упускаем важные случаи)
- Предсказания медленные
- Модель работает хорошо на development, но плохо на production
Вопросы для бизнеса:
- Какие именно предсказания неправильные?
- Какой impact это имеет на KPIs?
- Когда это началось?
- Есть ли паттерны (определённые сегменты пользователей, времена)?
2. Диагностика: данные или модель?
Проверьте данные в production:
# Сравните распределение признаков между dev и prod
dev_mean = train_data['feature'].mean()
prod_mean = production_data['feature'].mean()
if abs(dev_mean - prod_mean) > threshold:
print("Data drift!")
# Проверьте пропущенные значения
print(production_data.isnull().sum())
Data drift часто — главная причина падения качества. Данные в production могут существенно отличаться от training.
Проверьте модель:
- Какой скор на training vs test vs production?
- Есть ли баги в коде?
- Правильно ли масштабируются признаки?
- Модель перестала обновляться?
3. Быстрые действия (24 часа)
Откатитесь на старую модель (если она работала лучше). Лучше работающая старая, чем сломанная новая.
# Откат версии модели
git checkout v1.2.3 -- model.pkl
# Перезагрузить сервис
sudo systemctl restart ml-service
Примените плюсник (band-aid решение):
- Повышение threshold для более консервативных предсказаний
- Фильтрация по confidence score
- Откат к более простому правилу
4. Анализ: почему упала качество
Data drift:
from scipy.stats import ks_2samp
# Тест на сдвиг распределения
statistic, p_value = ks_2samp(train_data['feature'], prod_data['feature'])
if p_value < 0.05:
print(f"Distribution shifted for feature: {p_value}")
Проверить гипотезы:
- Изменился ли бизнес-процесс?
- Конкуренты изменили поведение?
- Новые когорты пользователей?
- Сезонность?
- Баги в pipeline?
5. Долгосрочные решения
Переобучение модели:
# Используйте свежие данные
recent_data = get_data(date_from='2024-03-01')
# Переобучите
model.fit(recent_data.drop('target', axis=1), recent_data['target'])
# Валидируйте на prod-like данных
val_score = model.evaluate(recent_data_test)
print(f"Validation score: {val_score}")
Feature engineering:
- Добавьте новые признаки, которые ловят текущие паттерны
- Удалите старые признаки, которые больше не работают
Регуляризация:
- Используйте L1/L2 для уменьшения переобучения
- Усредняйте предсказания нескольких моделей (ensemble)
Мониторинг:
# Отслеживайте метрики в real-time
model_accuracy = production_data.apply(
lambda row: 1 if model.predict(row) == row['actual'] else 0, axis=1
).mean()
if model_accuracy < threshold:
trigger_alert() # Уведомить, что модель деградирует
6. Коммуникация с бизнесом
- Будьте честны: не скрывайте проблемы
- Дайте timeline: когда будет готово улучшение
- Объясните причины: в терминах бизнеса, не ML
- Докажите улучшение: сравните до/после на реальных данных
Что НЕ делать
- Не менять метрики, потому что старые плохие
- Не искать виноватого в team (focus на решение)
- Не игнорировать проблему, надеясь, что пройдёт
- Не паниковать и не менять всё сразу
Профилактика
- Unit tests для pipeline и модели
- Мониторинг data drift и model performance
- A/B тестирование перед полным запуском
- Fallback — простое правило на случай отказа модели
- Documentation — понимание assumptions и limitations
Итог
Когда модель в production не работает, главное — быстро определить причину (drift vs. bug) и откатиться, если нужно. Потом планомерно улучшать: переобучение, новые признаки, мониторинг. Важна коммуникация с бизнесом и признание проблемы, а не её отрицание.