Skip to content

Kogr83/Homeworks

Repository files navigation

HW_1_MLDS_2022

  1. Что было сделано (помимо базового задания из ноутбука):
  • удалено 1,159 дублей (train)

  • количественные признаки стандартизированы

  • у четырех признаков найдено 186 пропущенных значений (~ 3% от выборки), все пропуски заменены на среднее 5 ближайших соседей, вес каждого соседа учтен индивидуально, в зависимости от расстояния до миссинга, использовалась модель KNN Imputer

  • проведена работа по созданию новых признаков:

    • распарсены mileage, engine, max_power, чтобы избавиться от текстовых значений и выделить числовые
    • распарсен признак name и создано 2 новых признака: car_brand (марка), car_brand_model (модель)
    image
    • от признака car_brand_model (модель) отказался, так как много моделей в единственном экземпляре, а их общее число - более 200 -> оставляю только car_brand_model (модель)
    image
    • далее есть смысл разбить все марки на 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 кластеров.

    image
  • доли сегментов на train

    image
  • перенес модель кластерного решения на test - получил 4 кластера, информация о принадлежности к сегменту добавлена в test, доля сегментов не отличается от train

    image
  1. Подготовлено 5 моделей:
  • baseline (только на вещественных признаках без feature-engineering)
  • только на количественных признаках после feature-engineering
  • на всех признаках по итогам feature-engineering
  • удалены признаки, которые в наименьшей степени связаны с таргетом
  • на всех признаках по итогам feature-engineering + polynomial features

Все расчеты проводились на модели Lasso(), чтобы занулить неважные признаки и в целях сравнимости результатов. Для подбора гиперпараметров регуляризации использовался GridSearch.

  1. Baseline показала самое низкое качество на test (R2 = 0.59) и самое низкое по бизнес-метрике (0.189)

image

image

  1. Модель только на количественных признаках (после FE) увеличила как R2 (0.63), так и бизнес-метрику: 0.189 -> 0.218

image

image

  1. У Модели на всех признаках (после FE) - высокий R2 (0.69) и бизнес-метрика: 0.189 -> 0.259

image

image

При создании модели столкнулся с проблемой - часть признаков присутствует в train, но отсутствует в test (и наоборот). Это приведет к проблемам в расчетах (размерность/ состав train и test не совпадут).

image

Признаки, в которых есть несовпадения.

image

Решение:

  • кластер под номером 3 в train'е - явный "выброс" (всего 2 наблюдения), им можно пренебречь
  • не совпадающие автомобильные бренды крайне малочисленны, их также можно удалить
  • в итоге, добились одинаковой размерности обоих датасетов

image

  1. Модель на сокращенном перечне признаков (после FE)

Предпосылка: 49 признаков - это много, а что если найти и удалить ненужные. Для этого воспользуюсь метрикой PPS_Score. Это аналог корреляции Пирсона, но со своими преимуществами:

  • хорошо работает с номинальными и порядковыми признаками
  • находит как линейные, так и НЕлиненые взаимосвзи

9 признаков имеют низкий PPS Score с таргетом (в нижней части таблицы)

image

Однако, их удаление практически не повлияло на результат

image

  1. Последняя модель: используются все признаках после feature-engineering + polynomial features во 2-й степени. Это модель-чемпион по всем показателям R2 (0.94),бизнес-метрика: 0.189 -> 0.354!

image

image

  1. Дальнейшие шаги по улучшению модели:
  • поиграть с признаками - убрать сильно скоррелированные
  • распарсить torque (момент двигателя) и включить в аналитческий пул
  • возможно, все же стоило поработать с моделями автомобилей
  • логарифмировать некоторые признаки
  • не добавлять в модель признаки, которые сравнивают текущее значение с медианой/ средним по выборке, так как это учитывается самой моделью (на такой вывод натолкнули результаты PPS_Score)

About

Homework for Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published