Как специалисты по обработке данных, мы должны решить, какие функции использовать в той или иной задаче машинного обучения. Мы часто берем каждую функцию, которая у нас есть, и создаем другие из истории лагов или интуитивно понятных комбинаций необработанных переменных и помещаем их все в модель, чтобы после обучения увидеть, каков вклад каждой функции (с некоторой метрикой вклада переменной), и принять решение. Если бы эти функции были доступны в первую очередь, это было бы хорошей идеей.

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

Все графики, примеры и методы визуализации, показанные в этой статье, доступны вам для использования и просмотра в этом пакете, который можно установить с помощью pip:

Гистограммы признаков, разделенные переменной ответа

Для задачи двоичной классификации существует естественное двоичное разделение нашего набора данных, подмножество, где y = 1, и подмножество, где y = 0 . Имея это в виду, для каждой функции F, у нас есть ее распределение в подмножестве, где y = 1 и y = 0, что в математической записи можно сформулировать так:

Если мы построим эти две плотности распределения вместе на одном графике, мы сможем увидеть, изменится ли функция F соответствующим образом, когда мы изменим значение переменной ответа (изменим раздел)

Если функция F не актуальна, мы увидим такой график (второй показанный график - это кумулятивное распределение):

Если функция F актуальна, мы можем увидеть следующий график:

или вот так:

Этот последний случай нечасто встречается при анализе реальных данных, если только у нас нет какой-либо утечки данных. Отметим, что простой классификатор пошаговых функций почти идеален, если такая функция доступна в нашем наборе данных.

Можем ли мы измерить эту релевантность количественно?

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

  • Если M1 - это среднее значение D1 и M2 - среднее значение M2, которое мы можем вычислить
    | M1-M2 | как показатель релевантности
  • Мы можем вычислить KL-расхождение между D1 и D2
  • Мы можем вычислить расстояние Вассерштейна между D1 и D2

Как математик, я лично предпочитаю третий вариант из-за его свойств надежности. Расстояние Вассерштейна является правильной математической метрикой расстояния и имеет удобную, настраиваемую и простую реализацию на scipy.

Итак, если у нас есть список функций F_j, мы можем отсортировать их по релевантности R_j, а затем построить гистограммы. (как в приведенных выше примерах), чтобы лучше понять зависимость между функциями и переменными отклика.

Но есть небольшая загвоздка, поскольку функции F_j могут иметь разные масштабы, необходимые для выполнения нормализации min-max, поэтому R_j сопоставимы

Приведенные выше примеры имеют отношение 0,005 , 0.11, и 0,86 соответственно.

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

Для категориального признака F, мы следуем той же логике с той разницей, что показатель релевантности должен вычисляться другим способом.
В этом случае мы используем общее расстояние вариации, которое представляет собой не что иное, как расстояние L1 весов (по категориям), связанных с распределениями. Формула выглядит так:

Пример с реальными данными

Мы используем набор данных штрихов от Kaggle, чтобы продемонстрировать эти методы.

Этот набор данных используется для прогнозирования вероятности инсульта у пациента на основе входных параметров, таких как пол, возраст, различные заболевания и статус курения.

Числовые характеристики

Посмотрим, что мы получим, если возьмем 3 числовых параметра: возраст, avg_gluosis_level и bmi.

Используя эту строку кода:

Мы получаем графики (отсортированные по релевантности) и фрейм данных с этими релевантностями (расстояниями):

Во-первых, мы получили возраст. Совершенно очевидно, что чем больше возраст, тем выше вероятность инсульта:

из кумулятивного графика распределения мы можем быстро получить представление об этих двух популяциях, используя интерактивность библиотеки plotly

Затем мы получили avg_gluosis_level

И наконец, мы получили bmi

Категориальные особенности

Аналогично случаю числовой функции мы можем использовать этот фрагмент кода:

И получите фрейм данных релевантности:

Мы видим, что ever_married является наиболее актуальной функцией, вероятно, из-за высокой корреляции с функцией возраст. Мы действительно можем увидеть эту корреляцию, используя эту строку кода:

Для полноты картины мы показываем вторую по значимости и наименее релевантную гистограмму категориальных признаков (гипертония и пол соответственно).

Наконец, мы продемонстрируем два немного разных использования этого инструмента.

Во-первых, мы увидим различия в распределениях bmi для разных типов работы, используя эту строку кода:

Во-вторых, мы можем сравнивать распределения, используя разные запросы условий, закодированные в словаре запросов. Здесь мы сравним avg_gluosis_level для разных возрастов.

Теперь мы перейдем к немного другой технике визуализации данных.

Графики квантильной и средней зависимости

Когда цель числовая (регрессия)

Предположим, у нас есть задача регрессии с целевой переменной y, и мы хотим узнать, какова зависимость от y какая-то особенность F. Для этого мы преобразовываем в двоичную форму функцию F в ячейках B_i, а затем вычисляем статистику (например, среднее или медиана или какой-либо другой квантиль) y для каждого бина, а затем постройте результат, чтобы увидеть эту зависимость. Мы вызовем y [B_i] статистики, вычисленной для корзины B_i:

Построив функцию y [B_i], мы можем получить представление об этой зависимости:

Показанный выше пример был создан с использованием следующих строк кода:

В качестве реального примера данных мы исследуем взаимосвязь между возрастом и bmi в наборе данных об гребке, используя эту строку кода:

Математически / статистически то, что мы пытаемся оценить здесь, - это статистика при условной вероятности P (· | F = x) для различных значений x функции F. Например, в случае средней статистики мы пытаемся оценить функцию, показанную ниже:

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

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

В следующей строке кода мы можем увидеть связь между work_type и bmi:

Когда цель категорична (классификация)

Для задачи классификации (с целевой переменной y) мы должны видеть в каждой ячейке долю точек данных, имеющих определенный целевой класс c. Итак, для средней статистики мы вычисляем следующее значение

В этом случае, чтобы получить представление о доверительном интервале вычисленной выше доли, нам нужно проделать немного больше работы, чем в случае задачи регрессии (где нам нужно было только вычислить некоторые нижние и верхние квантили). Чтобы получить этот доверительный интервал, мы моделируем статистику пропорции как биномиальную случайную величину (где n = | B_i | и p = y [B_i] в приведенной выше формуле), а затем оцените доверительный интервал для доли, используя метод this, который дает более широкие интервалы, если n меньше (меньше уверенности для оценки пропорции).

Давайте посмотрим на этот метод на практике с нашим набором данных штрихов.

Сначала мы исследуем взаимосвязь возраста и категориальной цели удара, используя эти строки кода (мы установили уровень достоверности 0,95).

Получаем такой сюжет:

Точно так же для категориального признака work_type мы можем использовать следующие строки:

Вывод

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

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