- Что было сделано (помимо базового задания из ноутбука):
-
удалено 1,159 дублей (train)
-
количественные признаки стандартизированы
-
у четырех признаков найдено 186 пропущенных значений (~ 3% от выборки), все пропуски заменены на среднее 5 ближайших соседей, вес каждого соседа учтен индивидуально, в зависимости от расстояния до миссинга, использовалась модель KNN Imputer
-
проведена работа по созданию новых признаков:
- распарсены mileage, engine, max_power, чтобы избавиться от текстовых значений и выделить числовые
- распарсен признак name и создано 2 новых признака: car_brand (марка), car_brand_model (модель)
- от признака car_brand_model (модель) отказался, так как много моделей в единственном экземпляре, а их общее число - более 200 -> оставляю только car_brand_model (модель)
- далее есть смысл разбить все марки на 3 группы по уровню премиальности (lux/ mid/ econom)
-
созданы дополнительные КАТЕГОРИАЛЬНЫЕ признаки:
- car_dealers - объединил малораспространенные признаки в seller_type (Trustmark Dealer -> Dealer)
- car_class - создано 3 класса авто по уровню премиальности (lux/ mid/ econom) в зависимости от медианы стоимости каждого бренда
- car_region - регион производства автомобиля (Europe/ Asia/ USA/ India)
-
созданы дополнительные КОЛИЧЕСТВЕННЫЕ признаки:
- car_owners - число предыдущих владельцев (трейд-ин и 4 предыдущих владельца объединил в один код)
- car_age - возраст автомобиля в годах (относительно 2022 года)
- car_age_sq - возраст автомобиля в квадрате
- car_annual_km - средний ежегодный пробег автомобиля
- car_owner_km - сколько км. в год проезжал один владелец
- car_power_litr - мощность в пересчете на 1 литр объема (уровень "спортивности" автомобиля)
- car_diff_power - насколько мощность конкретного авто отличается от медианного значения по выборке - насколько он более мощный, чем в среднем
- car_diff_km_per_year - насколько пробег конкретного авто отличается от медианы
- car_diff_mileage - насколько экономичность конкретного авто отличается от медианы
-
В целях улучшения предсказательной силы проведен кластерный анализ KMeans на train'е. Изучалось 9 решений - на 2 -> 10 кластеров. По итогам silhouette_score выбрано решение на 5 кластеров.
-
доли сегментов на train
-
перенес модель кластерного решения на test - получил 4 кластера, информация о принадлежности к сегменту добавлена в test, доля сегментов не отличается от train
- Подготовлено 5 моделей:
- baseline (только на вещественных признаках без feature-engineering)
- только на количественных признаках после feature-engineering
- на всех признаках по итогам feature-engineering
- удалены признаки, которые в наименьшей степени связаны с таргетом
- на всех признаках по итогам feature-engineering + polynomial features
Все расчеты проводились на модели Lasso(), чтобы занулить неважные признаки и в целях сравнимости результатов. Для подбора гиперпараметров регуляризации использовался GridSearch.
- Baseline показала самое низкое качество на test (R2 = 0.59) и самое низкое по бизнес-метрике (0.189)
- Модель только на количественных признаках (после FE) увеличила как R2 (0.63), так и бизнес-метрику: 0.189 -> 0.218
- У Модели на всех признаках (после FE) - высокий R2 (0.69) и бизнес-метрика: 0.189 -> 0.259
При создании модели столкнулся с проблемой - часть признаков присутствует в train, но отсутствует в test (и наоборот). Это приведет к проблемам в расчетах (размерность/ состав train и test не совпадут).
Признаки, в которых есть несовпадения.
Решение:
- кластер под номером 3 в train'е - явный "выброс" (всего 2 наблюдения), им можно пренебречь
- не совпадающие автомобильные бренды крайне малочисленны, их также можно удалить
- в итоге, добились одинаковой размерности обоих датасетов
- Модель на сокращенном перечне признаков (после FE)
Предпосылка: 49 признаков - это много, а что если найти и удалить ненужные. Для этого воспользуюсь метрикой PPS_Score. Это аналог корреляции Пирсона, но со своими преимуществами:
- хорошо работает с номинальными и порядковыми признаками
- находит как линейные, так и НЕлиненые взаимосвзи
9 признаков имеют низкий PPS Score с таргетом (в нижней части таблицы)
Однако, их удаление практически не повлияло на результат
- Последняя модель: используются все признаках после feature-engineering + polynomial features во 2-й степени. Это модель-чемпион по всем показателям R2 (0.94),бизнес-метрика: 0.189 -> 0.354!
- Дальнейшие шаги по улучшению модели:
- поиграть с признаками - убрать сильно скоррелированные
- распарсить torque (момент двигателя) и включить в аналитческий пул
- возможно, все же стоило поработать с моделями автомобилей
- логарифмировать некоторые признаки
- не добавлять в модель признаки, которые сравнивают текущее значение с медианой/ средним по выборке, так как это учитывается самой моделью (на такой вывод натолкнули результаты PPS_Score)