## Предобработка и генерация признаков с учетом особенностей моделей --- ## План лекции 1. Мотивация и введение 2. Числовые признаки 3. Категориальные признаки 4. Признаки с особенной структурой 5. Пропуски 6. Отбор признаков --- ## Мотивация и введение ### Что бывает в данных ![](https://i.imgur.com/GJDlZx2.png) --- ## Мотивация и введение ### А еще там бывают * ошибки * выбросы * пропуски * категории * дубликаты --- ## Мотивация и введение ![](https://i.imgur.com/s1Cqcei.jpg) --- ## Мотивация и введение ### Особенности моделей ![](https://i.imgur.com/msMiGcI.png) --- ## Мотивация ### Особенности моделей ![](https://i.imgur.com/YNDMskt.png) --- ## Мотивация и введение ### Особенности моделей ![](https://i.imgur.com/2crOrNx.png) --- ## Мотивация и введение ### Особенности моделей ![](https://i.imgur.com/1ei5Bez.png) --- ## Числовые признаки ### Масштабирование * Стандартизация (sklearn.preprocessing.StandardScaler) * Нормировка на отрезок [0, 1] (sklearn.preprocessing.MinMaxScaler) --- ## Числовые признаки ### Выбросы #### Природа выбросов * ошибка в данных (возраст 336 лет) * особенность данных (зарплата директора) --- ### Выбросы * В таргете * В признаках --- #### Работа с выбросами * Винсоризация (когда выброс - действительно очень большое значение) * Генерация фичей (когда выброс - означает событие которое может быть важным) * Восстановление истиных значений (когда возможно) * Удаление объектов * Rank rank([-100, 0, 1e5]) == [0, 1, 2] rank([1000, 1, 10]) = [2, 0, 1] --- ## Числовые признаки ### Немонотонные преобразования * Rank: rank([-100, 0, 1e5]) == [0,1,2] rank([1000,1,10]) = [2,0,1] * Логарифмирование: np.log(1 + x) * Возведение в степень <1: np.sqrt(x + 2/3) --- ## Числовые признаки Взаимодействия: складываем, перемножаем итд --- # Категориальные и порядковые признаки --- ## Категориальные и порядковые признаки * Оставить как есть * LabelEncoding * One-hot-encoding * Кодирование частотой * Кодирование числовым признаком * Кодирование целевой переменной --- ## Категориальные и порядковые признаки ### На что обратить внимание * Новые категории * Количество категорий в признаке * Мелкие категории --- # Признаки с особенной структурой --- ## Временные признаки * Периодичность Номер дня в неделе, месяц, сезон, год, секунда, минута, час * Сколько времени прошло/осталось * С одного момента для всех данных * Момент зависит от выбора объекта (сколько дней осталось до выходных) * Разница между моментами времени * Использование для генерации признаков со скользящим окном --- ## Пространственная структура * Соседние («интересные») объекты * из обучающей выборки * из дополнительных данных * Агрегаты и статистики * Преобразования базиса [https://www.openstreetmap.org](https://) --- ## Пространственная структура ![](https://i.imgur.com/Dn8mTdc.jpg) --- ## Пропуски Как могут выглядеть пропуски в даннх ![](https://i.imgur.com/o2eNwFX.png) --- ## Пропуски ### Природа пропусков * Значение просто пропущено (человек не указал в анкете образование) * Значения не определено (результат деления на ноль) * Значение не существует (возраст ребенка для человека у которого нет детей) --- ## Пропуски ### Работа с пропусками * оставить как есть * восстановить значение * заполнить средним, медианой * заполнить значением -999 --- ## Пропуски ### На что обратить внимание * Бывает полезно добавить признак был ли пропуск * Пропуски заполняем только после того как сгенерировали признаки --- # Отбор признаков --- ## Отбор признаков ### Зачем отбирать признаки? * улучшить качество модели * сделать модель более устойчивой * упростить вычисления --- ## Отбор признаков ### Методы отбора * Статистические критерии (хи-квадрат) * Перебор * С помощью моделей * Перестановки --- ## Отбор признаков ### Жадный отбор - чередовани добавления и удаления ![](https://i.imgur.com/U4lVo8w.png) > mlxtend.feature_selection.SequentialFeatureSelector --- ## Отбор признаков ### С помощью моделей Берем признаки, которые некоторая модель посчитала важными > sklearn.feature_selection.SelectFromModel --- ## Отбор признаков ### Перестановки Анализ важности с помощью Permutation: 1. Перемешаем значения признака в тестовом наборе данных 2. Сделаем предсказание и посчитаем, насколько ухудшилась целевая метрика 3. Затем будем отбирать признаки с помощью полученных оценок важности. > eli5.sklearn.PermutationImportance > boruta.BorutaPy ---
{"metaMigratedAt":"2023-06-15T01:05:31.736Z","metaMigratedFrom":"Content","title":"Категориальные и порядковые признаки","breaks":true,"contributors":"[{\"id\":\"6045d9a3-720e-430a-aedb-7786a9a0f1cc\",\"add\":4855,\"del\":339}]"}
    529 views