Ordinal Encoding порядковое кодирование sklearn

Ordinal Encoding – порядковое кодирование используется в подготовке признаков для кодирования текстовых категориальных в числовые, как и прямое кодирование. Принимаем какой цифрой кодируется класс, после чего значение категориального признака заменяется на числовое.

Для удобства можно воспользоваться возможностями sklearn, sklearn.preprocessing.OrdinalEncoder. Основные методы объекта OrdinalEncoder:
fit() – формирует категории, после применения этого метода можно обратиться к свойству categories_ объекта, что бы посмотреть, какие категории сформировались
transform() – непосредственная трасформация
fit_transform() – эквивалент вызова двух предыдущих методов fit(X).transform(X)

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

В целом все прошло хорошо, но хотелось бы, что бы высшей оценке и рейтингу соответствовало наибольшее числовое значение или мы хотим какой-то особенный порядок присвоения числовых значений (по умолчанию они отсортированы в лексикографическом порядке). Для этого при инициализации объекта можно передать параметр categories. Рассмотрим на примере.

В результате чего A и excellent кодируются наивысшими числовыми значениями, в данном случае 4.

В подобном примере порядковое кодирование подходит отлично, но есть и исключения, например, категориальный признака Питомец, может принимать значения: кошка, собака, попугай. Используя порядковое кодирование при вычислении, например среднего арифметического, мы можем получить закодированную собаку, тем самым дав возможность появиться неверной корреляции. Для таких случаев стоит воспользоваться прямым кодированием.