## Предобработка и генерация признаков с учетом особенностей моделей
---
## План лекции
1. Мотивация и введение
2. Числовые признаки
3. Категориальные признаки
4. Признаки с особенной структурой
5. Пропуски
6. Отбор признаков
---
## Мотивация и введение
### Что бывает в данных

---
## Мотивация и введение
### А еще там бывают
* ошибки
* выбросы
* пропуски
* категории
* дубликаты
---
## Мотивация и введение

---
## Мотивация и введение
### Особенности моделей

---
## Мотивация
### Особенности моделей

---
## Мотивация и введение
### Особенности моделей

---
## Мотивация и введение
### Особенности моделей

---
## Числовые признаки
### Масштабирование
* Стандартизация (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://)
---
## Пространственная структура

---
## Пропуски
Как могут выглядеть пропуски в даннх

---
## Пропуски
### Природа пропусков
* Значение просто пропущено (человек не указал в анкете образование)
* Значения не определено (результат деления на ноль)
* Значение не существует (возраст ребенка для человека у которого нет детей)
---
## Пропуски
### Работа с пропусками
* оставить как есть
* восстановить значение
* заполнить средним, медианой
* заполнить значением -999
---
## Пропуски
### На что обратить внимание
* Бывает полезно добавить признак был ли пропуск
* Пропуски заполняем только после того как сгенерировали признаки
---
# Отбор признаков
---
## Отбор признаков
### Зачем отбирать признаки?
* улучшить качество модели
* сделать модель более устойчивой
* упростить вычисления
---
## Отбор признаков
### Методы отбора
* Статистические критерии (хи-квадрат)
* Перебор
* С помощью моделей
* Перестановки
---
## Отбор признаков
### Жадный отбор - чередовани добавления и удаления

> 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}]"}