Автор: Лео Пекелис

Мы не обсуждали, откуда в первую очередь берутся наши данные, и что мы планируем в конечном итоге делать с результатами наших моделей. - D2L

В Opendoor команда Data Science построила прогнозные модели для поддержки нескольких бизнес-приложений. В предыдущих сообщениях блога мы обсуждали оценку домов для того, чтобы делать конкурентные предложения продавцам жилья, а также прогнозирование того, сколько времени уйдет на продажу наших запасов для точной оценки риска ликвидности.

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

Dive into Deep Learning классифицирует это явление как ковариативный сдвиг и добавляет математическую основу. Представьте, что нам поручено изучить условное распределение 𝑝 (𝐲 | 𝐱) некоторых выходных данных 𝐲, учитывая некоторые другие входные данные ) 𝐱. Даже если условное распределение остается неизменным между разработкой и развертыванием, изменение входного распределения 𝑝 (𝐱) может ухудшить развернутую производительность.

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

Данные

В качестве воспроизводимого и практического примера я воспользуюсь набором данных о ценах на жилье от Kaggle, который находится в свободном доступе по адресу:

Https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data

Обучающий набор содержит 1460 цен продаж домов в Эймсе, штат Айова, за период 2006–2010 гг. Наша цель - построить модель, которая прогнозирует продажную цену с использованием других функций в наборе данных.

Автономный блокнот jupyter, воспроизводящий все результаты, показанные ниже, можно найти здесь.

Окклюзия: недостающие характеристики во время обслуживания (проблема)

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

Общая оценка качества (особенность модели, идентифицированная TotalQual) требует, чтобы технический специалист Opendoor физически осмотрел дом, оценил его и отправил свой отчет. Кроме того, у нас не всегда готов отчет технического специалиста к тому моменту, когда нам нужно сделать предложение. Это пример обслуживания окклюзии, когда нам иногда нужно делать прогнозы с функциями, отсутствующими во время обслуживания, но в конечном итоге увидим их вовремя для обучения модели.

Для модели важна функция Общее качество. Он улучшает среднюю абсолютную ошибку (MAE) нашей способности прогнозировать продажные цены на 12% при использовании вместе с 31 другой функцией. Он выполняет больше, чем полагается ему, и на самом деле является наиболее прогностическим элементом модели.

Но что происходит, когда какой-то процент значений GeneralQual недоступен?

В следующем моделировании я обучаю простую модель, которая масштабирует все функции, чтобы иметь среднее значение 0 и дисперсию 1, вменяет любые отсутствующие значения функций с помощью 0 (общее среднее значение обучающей выборки) и, наконец, соответствует регрессии Пуассона для объяснения SalePrice с 32 числовыми характеристиками. в данных. Регрессия Пуассона в основном предназначена для того, чтобы подчеркнуть, что все это работает для любой архитектуры моделирования, а также потому, что цены на дома (округленные до ближайшего 1 тыс. Долларов) примерно соответствуют распределению Пуассона. Я буду называть эту модель «наивной» оценкой.

Я провожу 100 симуляций. Для каждого из них я обучаю наивный оценщик, затем маскирую случайную часть значений TotalQual в обучающем наборе (обслуживающий набор - это обучающий набор плюс маскирование), использую его для прогнозирования SalePrice и вычисляю MAE. Графики скрипки ниже иллюстрируют распределение MAE при различной степени окклюзии. Даже если оценщик может предоставить результаты, когда объекты закрыты, это не значит, что он делает это хорошо. Фактически, если более 30% значений GeneralQual закрываются во время обслуживания, лучше вообще не включать эту функцию в наивную оценку!

Поскольку мы тренируемся на 100% видимом наборе данных, и особенно с учетом того, что мы все это время вычисляли ошибку обучения (или ошибку в выборке) (во время обучения неизвестен только, кто будет заблокирован), мы, безусловно, можем добиться большего.

Создавайте несколько моделей (одно решение)

Некоторая мотивация для улучшения возникает из-за корреляции общего качества с другими столбцами данных.

Помимо SalePrice, GeneralQual также сильно коррелирует с другими функциями, которые мы используем в качестве входных данных в модели. Например, это положительно коррелирует с YearBuilt. Однако мы наивно приписываем 0 или среднее качество всем домам, независимо от того, когда они построены, что приводит к неверным прогнозам. Что нам следует делать, так это вменять ожидаемый уровень качества с учетом других наблюдаемых нами значений характеристик. К счастью, удаление функции GeneralQual из модели делает примерно это.

Это предполагает создание двух моделей: одну с функцией CompleteQual и одну без нее. Затем во время обслуживания мы можем просто выбрать, какую модель использовать для прогнозирования в зависимости от того, доступно ли качество. Я назову это оценщиком «нескольких моделей».

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

Стекирование данных (восходящее решение)

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

Одним из модельных решений является использование стекирования данных. Во-первых, объедините две копии наших обучающих данных, но замените все значения GeneralQual во второй копии на nan (или отсутствующий индикатор по вашему выбору). Во-вторых, добавьте индикатор окклюзии: 0 для 1-й копии и 1 для 2-й копии. В-третьих, добавьте взаимодействия между индикатором и всеми другими функциями, кроме TotalQual.

Теперь у нашей модели есть оба вида примеров для изучения, закрытые и незагрязненные, и она обладает достаточной гибкостью, чтобы кодировать все различия между предсказанием, когда функция закрыта и когда она видна. Интуитивно взаимодействия позволяют функциям, коррелированным с TotalQual, вменять его, когда он отсутствует. Я назову эту модель оценщиком «суммирования данных».

На тех же 100 симуляциях окклюзии суммированный оценщик достигает почти идентичного MAE с оценщиком нескольких моделей.

Дополнительные результаты моделирования см. В приложении ниже.

Заключение

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

В Opendoor специалисты по обработке данных и инженеры работают в тесном сотрудничестве, чтобы по-настоящему решать проблемы от начала до конца. Если вас интересует этот вид работы, узнайте больше на нашей странице вакансий.

Приложение

Дополнительные результаты моделирования

Кроме того, прогнозы двух оценщиков очень похожи - 90% прогнозов отличаются друг от друга менее чем на 2500 долларов, что составляет 10% от наивной MAE. И даже коэффициенты примерно одинаковы, вплоть до произвольного масштабирования между признаком и коэффициентом - 90% значений коэффициентов имеют разницу менее 20%.

Примечание о других методах вменения

Я мог бы использовать множество других методов вменения. Многие из них значительно мощнее, чем SimpleImputer в приведенном выше наивном оценщике. Например, IterrativeImputer, включенный в sklearn, предсказывает недостающие значения характеристик из многомерной модели, подходящей для всех других функций, в циклическом режиме. Объединение его с шагом 1 стекирования данных дает результаты, очень похожие на полное стекирование данных, хотя это более сложный в вычислительном отношении метод.

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