Сегодня мы предсказываем бриллианты, не хотите присоединиться?

Это встроенный набор данных в R-studio. Мы намерены прогнозировать цены на бриллианты на основе доступных функций. В наборе данных 53940 записей. В качестве ритуала разделим данные на тест (30%) и тренировку (70%).

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

Интересная часть работы аналитика данных — это возможность учиться в разных областях, и сегодняшний день ничем не отличается. Прежде чем мы приступим к дальнейшему анализу данных, давайте разберемся, что означает каждый столбец в наборе данных. И кто нам в этом поможет? Геммологический институт Америки (GIA). Итак, давайте расшифруем каждое из 4C и другие поля в наборе данных.

  1. Вес в каратах: представляет вес бриллианта. Чем больше, тем лучше (если другие факторы остаются постоянными).

2. Чистота:относится к отсутствию включений и пятен. Чем чище бриллиант, тем лучше бриллиант, дороже бриллиант (прочие факторы остаются постоянными).

3. Цвет: цвет относится к отсутствию цвета в бриллиантах.

4. Огранка: в зависимости от различных размеров бриллианту присваивается рейтинг или класс огранки. Он варьируется от отличного до плохого. Наш набор данных имеет следующие рейтинги сокращения:

Удовлетворительно ‹ Хорошо ‹ Очень хорошо ‹ Премиум ‹ Идеально

Лучше огранка, бриллиант дороже (остальные факторы остаются неизменными).

5. Глубина, таблица, x, y, z: это физические размеры алмаза, как показано ниже:

Как они соотносятся с ценами на бриллианты? Понятия не имею, но зачем нужны данные! Давайте погрузимся.

Для начала проверим распределение нашей зависимой переменной.

Теперь, когда мы знаем, как меняется цена, давайте проверим ее связь с независимыми переменными (предикторами) в наборе данных.

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

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

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

Цена по сравнению с типом цвета. Основываясь на нашем опыте в предметной области, мы должны были бы увидеть снижение цены с типа цвета D на тип J. Но и здесь нас ждет сюрприз.

Кажется, что вес в каратах перевешивает цвет, как показано ниже:

Цена и ясность. Данные не соответствуют нашим знаниям в предметной области. Мы должны были бы увидеть рост цены по мере улучшения прозрачности, но это не кажется очевидным.

При осмотре кажется, что карат влияет на цену.

Глубина по сравнению с ценой. Для заданной глубины цены на бриллианты колеблются от высоких к низким. Возможно, между ними нет корреляции.

Таблица и цена: связь между таблицей и ценой также не заметна из-за большого разброса цены в зависимости от ширины таблицы.

x (длина), y (ширина) и z (глубина) по сравнению с ценой и весом в каратах: цены на бриллианты имеют тенденцию расти экспоненциально с увеличением размеров.

Увеличение размеров, таких как x, y или z, также влияет на вес в каратах, поэтому имеет смысл проверить коллинеарность между этими предикторами. Матрица корреляции показана ниже:

Связь между предикторами не линейная, а монотонная. Следовательно, вместо коэффициента корреляции Пирсона рассматривается коэффициент корреляции Спирмена. Поскольку x, y и z почти точно коллинеарны весу и цене в каратах, здесь они будут исключены из модели.

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

Нельзя не заметить сильную корреляцию между весом в каратах и ​​ценой, возможно, здесь стоит задуматься о базовых моделях.

Выбор базовых моделей:

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

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

Базовое среднее имеет MAPE 188% на обучающих данных. Что ж, это жалко, но давайте это исправим.

Базовая медиана имеет MAPE 110% на обучающих данных. Улучшение по сравнению с базовым средним значением, но до него еще далеко.

Думайте линейно:

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

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

Также необходимо знать, постоянна ли предсказательная сила модели в диапазоне цен на бриллианты?

Линейная модель с каратом в качестве единственного предиктора не проявляет гомоскедастичности.

Простая регрессионная модель имеет MAPE 38,3% на обучающих данных, что является шагом в правильном направлении.

Давайте теперь продолжим и включим все предикторы и построим множественную регрессию.

Все предикторы в модели значимы на уровне значимости 1%. Скорректированный R-квадрат, равный 0,917, показывает, что модель множественной линейной регрессии хорошо объясняет изменение цены бриллианта по ее среднему значению. Давайте также проверим, будет ли линейная модель иметь стабильный прогноз в диапазоне прогнозируемых значений, используя подобранный график остатка v/s.

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

Множественная линейная регрессия имеет MAPE 44,8% на обучающих данных. Чем больше, тем веселее? - Не здесь!

Деревья решений. Один мудрый человек однажды сказал, что если вы ленивы (как я), деревья решений для вас. Это означает, что если мы не знаем/не уверены в фактической взаимосвязи между нашими предикторами и переменными отклика, попробуйте деревья решений. Давайте изучим этот вариант:

Как уже было замечено в моделях EDA и регрессионных моделях, вес в каратах, по-видимому, перевешивает другие предикторы с точки зрения определения стоимости бриллианта. Это видно и по разрывам. Модель имеет MAPE 32,8% на тренировочных данных, что тоже не впечатляет.

Методы ансамбля:

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

Бэгинг. Мы начинаем наше путешествие с бэггинга. Мы создаем 10–30 бутстреп-выборок и строим дерево решений по каждому из них. Мы видим, что ошибка «не вне коробки» остается постоянной после 15 деревьев. Поэтому выбирается модель в мешках из 15 деревьев (гиперпараметр nbags = 15 после настройки, для гиков!).

Эта модель имеет MAPE 32,3%, что опять же не дает нам точных прогнозов, как ожидалось.

Случайный лес. Мы переключаемся на случайные леса, где строим ансамбль из нескольких деревьев (до 150) и видим, что ошибка нехватки места почти постоянна после 100, но мы по-прежнему выберите ансамбль Random Forest из 150 и объедините наши результаты.

Мы установили случайный лес так, чтобы он содержал 150 отдельных деревьев, и прогнозируем обучающую модель, чтобы она имела MAPE, равную 6,77%. Довольно впечатляющий!

Давайте быстро взглянем на построенный график остаточного v/s, если этот впечатляющий MAPE действительно верен.

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

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

Давайте теперь проверим все наши модели на тестовых данных (помните 30%, которые мы отложили в начале?). Результаты следующие:

Модели стабильно работают на обучающих и тестовых данных.

Сводка

Мы изучили 4C бриллианта и то, как они влияют на ценообразование.

Наша базовая модель имела MAPE 188% на обучающих данных. С помощью ряда маневров (линейный, множественный линейный, дерево решений, бэггинг) мы смогли снизить MAPE до 6,77%, используя ансамбли деревьев случайного леса. Проблема, однако, заключается в интерпретируемости случайных лесов, которая привела к снижению MAPE (лучшей модели), но не имеет интерпретируемости.

Может ли быть лучшая модель с более низким MAPE? Ад да! Но пока на этом я останавливаюсь. Я буду обновлять проект и статью по мере добавления чего-то ценного.

Исходный код проекта доступен ниже:

https://github.com/rohitTheSupplyChainGuy/Diamonds-are-precious---and-Predictable-/blob/main/aDiamondIsForever.Rmd