Всем привет! На связи Рома Клочко, аналитик в Доставке 📦
Обучение ML-модели и оптимизация её метрик — это очень ресурсоёмко, увлекательно и благородно.
Но гораздо больше вызовов ждут нас на проде, когда по загадочным причинам качество модели значительно отличается от того, что мы видели на обучении. В невыгодную для нас сторону, конечно же 🙂
Хочу рассказать, с какими вызовами я столкнулся, когда доводил до прода ML-модели, и какие ошибки возникали там, где, как казалось, их быть не может.
🧠 Секреты успешного внедрения модели на прод:
1. У модели на проде актуальные значения фичей.
2. На проде фичи считаются абсолютно так же, как при обучении.
3. Алгоритм перевода предсказаний модели в принятие решения должен быть таким же, как при оценке качества при обучении.
✍️ Давайте приведу примеры ошибок, которые я допускал в каждом из этих пунктов.
1️⃣ При тестировании мы не смогли обнаружить, что в сервис попадает неактуальная версия витрины с фичами для модели.
Проблема возникала по двум причинам: во-первых, при тестировании мы проверили, что данные попадают в сервис, но не проверили, что они в точности соответствуют тем, что ожидаются. Тут табличка и там табличка, разве недостаточно? Оказалось, нет.
Во-вторых, при тестировании мы использовали витрину не такой структуры, как на проде, и это сделало ошибку менее очевидной.
2️⃣ Мы внедряли одну модель и заметили, что её качество значительно хуже, чем мы ожидали. Мы не залогировали каждое срабатывание, поэтому найти причину низкого качества было тяжело, и на это ушло несколько дней.
В итоге мы увидели, что при обучении модели некоторые фичи считались, подглядывая в будущее: учитывались данные, которые ещё не должны были доехать в DWH к моменту расчёта.
Мы пересчитали фичи и переобучили модель, но если бы на этапе тестирования залогировали все события, гораздо быстрее узнали бы, что фичи считаются некорректно.
3️⃣ Мы тестировали одну из моделей на проде и обнаружили аномальное поведение продуктовых метрик. Убедились, что фичи на сервисе актуальные, а модель выдаёт то же предсказание, что и в офлайне. Казалось, что происходит какая-то магия.
Анализ показал, что произошла мискоммуникация с разработкой, и положительный класс модели был воспринят на проде как отрицательный.
Модель буквально работала в обратную сторону: хорошие события отсеивала, а нежелательные оставляла. Если честно, более комичную ситуацию я не могу себе представить.
💡 Вывод таков: тестировать нужно настолько душно, насколько позволяют ресурсы. Каждое непроверенное звено может обернуться срочной задачей, которая внесёт коррективы в ваши выстроенные процессы планирования спринта.
Всем желаю не только пресижна и рекола, но и их воспроизведения в реальности!
#РомаК
Post #97
2.17K

- 🔥 36
- ❤ 11
- 👍 11
- ❤🔥 1
- 🏆 1