Сияй ярко, как бриллиант

Использование случайной лесной регрессии для прогнозирования цен на набор данных R алмазов

Когда я шел по улице посреди ночи, из уголка моего глаза вырвался сияющий свет. Я был временно ослеплен его яркостью. Я посмотрел на землю и наклонился, чтобы поднять предмет. Когда я увидел объект, в моем сознании возник шквал вопросов. Был ли это осколок стекла? Нет. Это была разбитая лампочка? Нет. Был ли это кусок упавшей звезды? Конечно, нет! Я взял этот драгоценный мерцающий объект домой для дальнейшего осмотра. После того как я спросил нескольких человек, что это такое, мой друг сказал мне: «Вы держите в руках один из самых элегантных подарков, когда-либо подаренных человечеству: прекрасный кусок бриллианта».

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

Чтобы полностью понять, как работает система ценообразования на бриллианты, необходимо было собрать данные об особенностях, учитываемых при установлении цен на бриллианты, а также их ценах. Затем набор данных был дополнительно проанализирован для построения графиков, отражающих важные качества бриллианта. Наконец, была создана прогностическая модель для прогнозирования цен на бриллианты.

Сбор данных

После загрузки пакета tidyverse на R можно было получить доступ к набору данных diamonds и проверить первые десять строк набора данных, используя следующий код:

head(diamonds, 10)

Исследование данных

Сканирование набора данных дало много идей о том, как исследовать их особенности. Одна из первых построенных диаграмм была направлена ​​на то, чтобы выяснить, какая огранка может обеспечить наилучшую четкость. Различные значения чистоты алмаза: I1, SI2, SI1, VS2, VS1, VVS2, VVS1, IF. I1 — худший, а IF — лучший в этом порядке.

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

Еще два графика были созданы для отображения распределения цен и каратов по огранке.

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

Согласно ценовому графику, по мере роста цены преобладали лучшие качества огранки бриллиантов. Однако для графика каратности было замечено обратное: очень хорошая, премиальная и идеальная огранки перекрывались по мере увеличения каратности.

Моделирование

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

Первый этап конвейера касался преобразования некоторых столбцов. Столбцы, содержащие строки (слова), были преобразованы в целые числа (числа), а столбцы, содержащие непрерывные числовые значения, были нормализованы.

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

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

ord2 = OrdinalEncoder(categories = [["Fair", "Good", "Very Good",
"Premium", "Ideal"],
                                    ['D', 'E', 'F', 'G', 'H', 'I',                    'J'],
                                    ['I1', 'SI2', 'SI1', 'VS2',     'VS1', 'VVS2', 'VVS1', 'IF']])
std = StandardScaler()
column_pipeline = ColumnTransformer([("ordinal", ord2, ["cut", "color", "clarity"]), ("std", std, ["carat","x", "y", "z"])])
rfe = RFECV(Ridge(alpha = 1.0), cv = 5)
forest = RandomForestRegressor()
full_pipeline = Pipeline([("col", column_pipeline),("rid", rfe),("reg", forest)])

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

param_grid = [{"reg__n_estimators" : np.arange(1,50), "reg__max_features":np.arange(1,6)}]
grid_search = GridSearchCV(full_pipeline, param_grid, cv = 5)

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

model = grid_search.best_estimator_
model.fit(x_train, y_train)

Оценка

Было важно оценить производительность модели, чтобы проверить ее на переоснащение и точность. Это было сделано путем применения модели к данным тестирования. Результаты показали, что переобучения не было, поскольку R-квадрат обучающих данных был примерно таким же, как R-квадрат данных тестирования. Оба из них имели показатель R-квадрата 0,98. Модель также имела среднеквадратичную ошибку 525.

Вывод

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

Вот забавный бриллиантовый мем, который я наткнулся во время серфинга в Интернете. Хорошего дня!

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

Спасибо за чтение!