Архитектура используется для регулярного тестирования сотен моделей прогнозирования в Uber.

Недавно я запустил образовательный информационный бюллетень, посвященный ИИ, у которого уже более 125 000 подписчиков. TheSequence — это информационный бюллетень, ориентированный на машинное обучение, без BS (то есть без шумихи, без новостей и т. д.), чтение которого занимает 5 минут. Цель состоит в том, чтобы держать вас в курсе проектов машинного обучения, научных работ и концепций. Пожалуйста, попробуйте, подписавшись ниже:



Бэктестинг — невероятно важный аспект жизненного цикла моделей машинного обучения. Любая организация, использующая несколько моделей прогнозирования, нуждается в механизме для регулярной оценки ее эффективности и устранения ошибок. Актуальность ретроспективного тестирования экспоненциально растет с количеством моделей машинного обучения, используемых в данной среде. Несмотря на свою важность, ретроспективное тестирование по-прежнему игнорируется по сравнению с другими аспектами жизненного цикла машинного обучения, такими как обучение модели или ее развертывание. Недавно Uber представила новый сервис, полностью созданный с нуля для тестирования моделей машинного обучения в масштабе.

Uber управляет одной из крупнейших инфраструктур машинного обучения в мире. В нескольких своих объектах Uber использует тысячи моделей прогнозов в различных областях, таких как планирование поездок или управление бюджетом. Обеспечить точность этих моделей прогноза далеко не просто. Количество моделей и масштаб вычислений делают среду Uber относительно непрактичной для большинства сред тестирования на истории. Даже сам Uber создал предыдущие фреймворки для тестирования на истории, такие как Omphalos, которые доказали свою эффективность для некоторых конкретных случаев использования, но не могут масштабироваться вместе с работой Uber.

О каком масштабе идет речь? Для сравнения: Uber потребовалось провести около 10 миллионов бэктестов для разных моделей прогнозирования. В дополнение к масштабу, работа Uber имеет разные особенности, когда дело доходит до тестирования на истории, которое в конечном итоге склонило чашу весов в пользу создания службы тестирования на истории для клиентов.

Понимание бэктестинга в стиле Uber

Не все бэктесты одинаковы. Разные организации полагаются на разные векторы для тестирования моделей, которые отражают специфичный для предметной области характер их бизнеса. В случае с Uber транспортному гиганту необходимо было учитывать такие элементы, как количество городов или окно тестирования, чтобы эффективно проводить ретроспективное тестирование моделей. Модели, которые хорошо работают для одного города, не обязательно хорошо работают для другого. Точно так же некоторые модели нужно было тестировать в реальном времени, в то время как другие могут позволить себе большие окна. Учитывая все обстоятельства, Uber определил четыре ключевых вектора, которые были важны для тестирования моделей прогнозирования.

· Количество периодов тестирования

· Количество городов

· Количество параметров модели

· Количество моделей прогнозов

Комбинация четырех векторов привела к масштабу, который был неуправляем большинством основных сервисов тестирования на исторических данных.

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

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

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

Собрав воедино эти три элемента: векторы бэктестинга, окна бэктестинга и показатели ошибок, Uber настроился на создание новой службы бэктестинга, которая могла бы упростить операции прогнозирования во всей организации.

Служба тестирования Uber на истории

За прошедшие годы Uber разработала различные запатентованные технологии, которые помогают упростить управление жизненным циклом моделей машинного обучения. Новая служба ретроспективного тестирования смогла воспользоваться преимуществами этой сложной инфраструктуры, используя такие технологии, как Data Science Workbench, интерактивный набор инструментов Uber для анализа данных и машинного обучения, а также Michelangelo, платформу машинного обучения Uber.

С точки зрения архитектуры новый сервис тестирования на исторических данных состоит из библиотеки Python и сервиса, написанного на Go. Библиотека Python действует как клиент Python. Поскольку многие модели машинного обучения в Uber в настоящее время написаны на Python, было легко использовать эту платформу для службы обратного тестирования, которая позволяет пользователям беспрепятственно подключать, тестировать и повторять свои модели. Сервис Go написан как серия рабочих процессов Cadence. Cadence — это механизм оркестрации с открытым исходным кодом, написанный на Go и созданный Uber для выполнения асинхронной долговременной бизнес-логики масштабируемым и устойчивым образом. На высоком уровне модели машинного обучения загружаются через Data Science Workbench, а запросы на ретроспективное тестирование данных модели отправляются с использованием библиотеки Python, которая передает запрос в сервис Backtesting Go. После расчета измерения ошибки оно либо сохраняется в хранилище данных, либо сразу же обрабатывается группами специалистов по обработке и анализу данных, которые используют эти ошибки прогнозирования для оптимизации моделей машинного обучения при обучении.

Если углубиться в детали, рабочий процесс тестирования на исторических данных состоит из четырех этапов. На этапе 1 модель либо записывается локально в Data Science Workbench (DSW), либо загружается на платформу машинного обучения, которая возвращает уникальный идентификатор модели. DSW запускает бэктест через нашу службу Go, которая затем возвращает UUID в DSW. На этапе 2 служба Go извлекает данные обучения и тестирования, сохраняет их в хранилище данных и возвращает набор данных. На этапе 3 набор данных для ретроспективного тестирования обучается на платформе машинного обучения, а результаты прогнозирования генерируются и возвращаются в службу Go. На этапе 4 результаты обратного тестирования сохраняются в хранилище данных, откуда пользователи могут получить их с помощью DSW.

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