Пример анализа с использованием сомнительных зон в наивной байесовской модели.

Джинна Гомес
с Грегом Пейджем

Сомнительные зоны: обзор

Обычно, когда мы измеряем эффективность моделей классификации, мы делаем это, используя все записи в каком-то конкретном наборе данных. Мы могли бы сказать, например, что модель достигла «71% точности относительно обучающего набора и 68,4% точности относительно проверочного набора», или что модель имеет «уровень чувствительности 81,2% относительно обучающего набора». Однако нет требования, чтобы мы учитывали все наши записи при прогнозировании.

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

Скажем, например, что у нас работает служба подписки и что мы построили модель для прогнозирования продления подписки клиентов. Вместо того, чтобы просто сосредоточиться на категориальных прогнозируемых результатах «Да» или «Нет», мы могли бы вместо этого сосредоточить внимание на вероятности продления для каждого потребителя в нашей базе данных. Чтобы сконцентрировать нашу энергию наиболее эффективным образом, мы могли бы игнорировать клиентов, чей прогноз обновления меньше 0,20 (возможно, они проиграли дело), ​​и тех, чьи вероятности выше 0,80 (они кажутся «замком» для обновления). . Направляя нашу энергию на людей, вероятность которых находится между 0,20 и 0,80, мы можем наиболее эффективно использовать наши маркетинговые ресурсы.

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

В статье Прикладное прогнозное моделирование Кун и Джонсон описывают использование «сомнительной или неопределенной зоны», в которой классификация просто не предсказывается. Например, для задачи с двумя классами разработчик модели может просто пометить образцы с вероятностью предсказания от 0,40 до 0,60 как «сомнительные» или «неопределенные», а вместо этого использовать остальные образцы для расчетов и более подробного анализа. 1

Подержанные автомобили в Беларуси: подготовка данных и построение модели

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

Используемый лицензионный набор данных CC0 по автомобилям, созданный специалистом по данным Кирилла Лепченкова, загруженный с Kaggle, содержит 38 145 наблюдений.

Чтобы загрузить лицензионный набор данных общедоступного домена CC0, перейдите по ссылке: https://www.kaggle.com/lepchenkov/usedcarscatalog

Переменные

Manufacturer_name: Название производителя автомобиля. Существует более 50 категорийных вариантов, таких как Acura, Alfa Romeo, Audi, BMW, Buick, Chevrolet, Mercedes-Benz, Nissan, Volvo и другие.

трансмиссия: механическая или автоматическая трансмиссия.

color: Цвет экстерьера автомобиля, 12 уникальных уровней.

year_produced: год выпуска автомобиля. Эта переменная была числовой, но мы преобразовали ее в коэффициент. «Старые» автомобили - это те, которые построены до медианного года, а «новые» - это те, которые построены в течение или после медианного года.

engine_fuel: тип топлива, используемого в автомобиле (дизельное, электрическое или газовое).

engine_has_gas: оборудован ли двигатель пропановым баллоном и трубками.

engine_capacity: Объем двигателя - это числовая переменная, измеряемая в литрах, но мы преобразовали ее в категориальную переменную с 5 уровнями: самый низкий объем двигателя, немного ниже среднего объема двигателя, средний объем двигателя, немного выше среднего. объем двигателя и максимальный объем двигателя.

body_type: Кузов автомобиля. Эта переменная имеет 12 уровней, включая кабриолет, купе, лимузин, пикап, седан, универсал, внедорожник и другие.

has_warranty: есть ли еще действующая гарантия на автомобиль.

состояние: Эта переменная содержит три уровня: новый, собственный и аварийный. Авария означает, что автомобиль получил повреждения, иногда серьезные.

drive_train: имеет ли автомобиль передний, задний или полноприводный привод.

is_exchangeable: готов ли владелец обменять этот автомобиль на другой с небольшой дополнительной оплатой или без нее.

location_region: Категория с шестью уровнями, каждый из которых представляет разные части Беларуси.

duration_listed: сколько дней автомобиль находится в каталоге, измеряется в днях. Переменная была числовой, но мы преобразовали ее в две категории: короче и длиннее.

number_of_photos: Количество фотографий автомобиля, размещенных в каталоге. Эта переменная была числовой, но мы преобразовали ее в две категории: выше и ниже.

price_USD: указанная в каталоге цена автомобиля в долларах США. Эта переменная была числовой, но мы преобразовали ее в категориальную переменную с тремя ячейками: дешевле, умеренно и дорого.

Во-первых, нам нужно загрузить все библиотеки, которые мы будем использовать для анализа, и загрузить набор данных в среду. read_csv2 () используется здесь, потому что набор данных содержит некоторые кириллические символы, а также потому, что он содержит разделитель «;» между столбцами.

Исходный набор данных содержал серию из 10 других функциональных переменных с логическими значениями. Значение этих переменных было нам неясно, и мы исключили их из набора данных.

Нам нужно объединить переменную price_usd, чтобы ее можно было использовать в качестве категориального результата в наивной байесовской модели.

Сначала мы идентифицировали 386 записей, для которых отсутствовали значения price_usd, и удалили эти записи из набора данных:

С помощью функции quantile (), как показано ниже, мы разбиваем записи на три сбалансированные группы, помеченные как «дешевые», «умеренные» и «дорогие».

Вот три группы категорий результатов с почти одинаковым количеством записей в каждой:

Измененный набор данных будет переименован в carsMod.

Затем мы преобразовали символьные переменные и логические переменные в факторы.

Переменная engine_capacity была числовой, поэтому мы преобразовали ее в четыре категориальных бина, как показано ниже:

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

Переменные year_produced, number_of_photos, up_counter, и duration_listed были разделены на две группы результатов на основе их соответствующих средних значений. Эти преобразования были выполнены следующим образом:

Наконец, как показано ниже, наши переменные были полностью преобразованы в факторы:

Затем мы разделили эти данные, случайным образом назначив 60 процентов записей обучающему набору, а остальные 40 процентов - набору проверки. Начальное значение 699 используется здесь для воспроизводимости кода.

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

Основываясь на этих графиках, мы решили исключить duration_listed и is_exchangeable, поскольку различные уровни этих переменных не оказывают значительного влияния на цену.

Мы также исключили Manufacturer_name и model_name, которые содержали 55 и 1116 уникальных уровней соответственно.

Затем мы запустили наивную модель классификации Байеса:

Затем мы сгенерировали следующую матрицу путаницы, используя данные обучающего набора:

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

Изменение игры: сужаем фокус

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

Во-первых, мы используем функцию predic () с аргументом type = "raw", который возвращает процентную вероятность членства в классе, которую наша модель назначает каждой записи. (Для краткости мы не будем объяснять весь процесс, с помощью которого генерируются эти числа, но мы рекомендуем этот учебник YouTube для разбивки того, как генерируются вероятности классов).

После присоединения прогнозов вероятности итогового класса к набору проверки мы можем использовать функцию организовать () из dplyr для сортировки записей по вероятности предсказанного класса. Например, первая строка кода ниже дает нам 500 автомобилей из набора для проверки, которые, скорее всего, принадлежат к группе «дешевых» результатов; строка непосредственно под ней создает таблицу, которая показывает фактические классы результатов для этих 500 записей.

Из этой группы мы видим, что 89,2% автомобилей попадают в группу «дешевых» результатов. Если бы мы специально стремились идентифицировать автомобили, цены на которые неизвестны, но предполагается, что они попадут в этот диапазон, такой процесс имел бы огромную практическую ценность - на каждые 10 автомобилей, которые мы решили более внимательно осмотреть, девять были бы оценены в пределах нашего целевого диапазона.

Мы можем использовать аналогичный процесс с другими классами результатов:

И, наконец, мы можем повторить процесс для группы «дорогих» результатов:

Когда мы просеиваем модель, чтобы найти 500 записей, которые наша модель наиболее сильно предсказывает как «дорогие», мы почти всегда определяем дорогие автомобили.

Но подождите, разве это не обман?

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

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

Однако в деловом мире модели не строятся для хакатонов или публикаций. Напротив, они созданы с учетом практических целей, и устранение записей «сомнительной зоны» из больших групп записей может принести очень важные практические преимущества. Для ответов на бизнес-вопросы, например, продлит ли клиент подписку, совершит ли потенциальный покупатель покупку или перейдет ли текущий клиент на премиальный план, вероятности, лежащие в основе прогнозов классификации модели, могут предложить чрезвычайно информативные подсказки о том, где находятся предприятия. 'усилия должны быть сконцентрированы для получения максимально возможной рентабельности инвестиций (ROI). Признание того, что вероятность 51% и вероятность 99% существенно различаются - даже при том, что они приводят к одному и тому же прогнозируемому категориальному результату - является огромным шагом к созданию максимально возможной рентабельности инвестиций из любой модели классификации.

Ссылки

  1. Кун, Макс и Кьелл Джонсон. Прикладное прогнозное моделирование. Springer, 2013: с. 254.
  2. Кирилл Лепченков. (2019, 2 декабря). Лицензированный набор данных каталога подержанных автомобилей CC0 в открытом доступе. Получено из Kaggle. Https://www.kaggle.com/lepchenkov/usedcarscatalog