Восстановление пропущенных значений в датасете

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

    Что же делать с некорректными ячейками в таблице?

    Рассмотрим несколько простых способов обработки пропусков.
Способы, основанные на удалении:
        1. Удаление строки или объекта.
        2. Удаление столбца. Столбец удаляется в случае, если большая часть ячеек данного признака заполнена некорректно, либо пропущена.
    Данный способ подходит в случае, когда пустых ячеек достаточно мало по отношению к исходным размерам датафрейма. Иначе можно получить датафрейм маленьких размеров, изучение которого не приведет к значительным результатам.

Также существуют способы изменения ячеек:
      Замена значения или пропуска ячейки средним или медианным значением столбца признака. Но такой способ подходит только в случае вещественных признаков. 

А что же делать с категориальными признаками?

    1. Замена пропущенного значения наиболее встречающимся значением признака.
    2. Генерация случайного признака из присутствующих с учетом вероятности.
К примеру, есть признак "Промежуток возраста" со строковыми значениями '10-18' и '18-30'. Зная, количество значений в признаке, можно определить их вероятности. Затем сгенерировать значение, учитывая вероятность.
Если из 5 заполненных ячеек 2 из них равны 
 '10-18', а остальные '18-30', то при генерации 2/5 пропущенных ячеек заполняются значениями '10-18', остальные '18-30'.
    3. Если значений достаточно мало, и их можно соотнести с числовым значением, то можно применить к нему методы соотвествующие числовым признакам. К примеру, признак "Cостояние голода" со значениями 'сыт', 'голоден', 'переел' можно свести к 0, 1, 2 и восстановить их с помощью медианного значения. Но стоит быть аккуратными, т.к. можно получить вещественное значение 0.7, а данное значение не соотносится ни с одним из 0, 1 и 2.

Метрики

Существуют более сложные методы восстановления данных. Такие методы используют понятие метрики - близости объектов друг к другу. Для этого надо знать, как вычислить метрику близости объектов. Идея заключается в следующем:
    Можно найти объект наиболее похожий к текущему на основе корректных значений признаков. С помощью значения близкого признака восстановить каким-то методом значение пропущенного признака исходного объекта.

    Метрика - это расстояние между объектами.
    Рассмотрим 3 вида метрик.
        1. Евклидова метрика. Данная метрика основана на геометрическом понятии расстояния.

        2. Метрика Манхеттена. 
 
Данная метрика названа из-за особенностей постройек Манхеттена. Улицы и переулки расположены строго параллельно и перпендикулярно по отношению друг к другу. Ходить по диагонали сквозь зданий нельзя. Можно ходить только по улицам и переулкам.
На рисунке ниже зеленым изображена Евклидова метрика, все остальные метрики Манхеттена.

        3. Max-метрика.
            
    
        Также можно использовать и другие метрики для анализа данных и их достаточно много.

Основная идея при использовании подхода с метриками:
    Для начала рассчитывается расстояние от объекта A до всех остальных объектов датасета. Затем находятся наиболее близко расположенные объекты и значение пропущенного признака вычисляется на основе значений признака ближащих объектов.

    От выбора метрики зависит значение признака, а ,значит, и качество обучения.

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