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

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



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

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

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

Понимание Backtesting the Uber Way

Не все бэктесты одинаковы. Разные организации полагаются на разные векторы для тестирования моделей на исторических данных, которые отражают предметно-ориентированный характер их бизнеса. В случае с 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 в ближайшем будущем открыть исходный код стека сервисов бэктестинга.