Простая попытка решения общей проблемы

Фон

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

Проблемы!

Как следует из вышеприведенного подзаголовка, я столкнулся с некоторыми проблемами. Вот список столбцов DataFrame:

Обратите внимание, что есть несколько очень похожих столбцов: pay_ 0–6, bill_amt 1–6 и pay_amt 1–6. Цифры показывают, в каком месяце они находятся. Когда я посмотрел на корреляции, я обнаружил следующее:

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

Количественная оценка проблемы

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

Каждая группа имеет 6 столбцов, поэтому, если бы все столбцы были независимыми (и, следовательно, имели бы 0 корреляций), сумма квадратов была бы 6, поскольку каждый столбец имеет корреляцию 1 с самим собой. Если бы все они были идентичны, то все корреляции были бы равны 1, а сумма была бы 36. Среднее значение по каждому столбцу в первом случае равно 1, а во втором - 6. Для меня интуитивно понятно, что существует 6 столбцов «ценность» информации в первом случае и 6/6 = 1 столбец «ценность» информации во втором случае.

Находя эту сумму для трех приведенных выше примеров, каждый раз делясь на 6, мы получаем:

Чтобы получить неизбыточное количество столбцов в каждой группе, мы делим общее количество столбцов в группе на это число. Это говорит о том, что группа pay_ фактически имеет 6 / 3,21 = 1,87 столбца «ценность» информации, группа bill_amt имеет 6 / 4,94 = 1,21 столбца, а группа pay_amt имеет 6 / 1,19 = 5,05 столбца. Это интуитивно понятно, поскольку столбцы bill_amt были почти идентичны, а столбцы pay_amt - нет.

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

Решение

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

Обратите внимание, что C² никогда не опускается ниже 1, как обсуждалось ранее, и составляет почти 6 для столбцов bill_amt (очень избыточно!).

Применение решения: регрессия гребня

Если вы выполняете регрессию гребня, существует штраф, который пропорционален квадрату коэффициента столбца. например если ваша модель пытается предсказать X, используя A, и вы говорите X = 2A, штраф будет (2²) λ, что составляет 4λ. λ - это набор гиперпараметров перед выполнением регрессии гребня. Теперь, если вы создадите столбец B = A, ваша модель будет X = A + B, что будет иметь штраф (2 * 1²) λ или 2λ, вдвое меньше, чем раньше. Это означает, что избыточные столбцы не подвергаются риску регрессии гребня.

Эту проблему можно решить, разделив значения в столбцах на sqrt (C²). В приведенном выше случае корреляция между A и B равна 1, поэтому C² каждого столбца будет равно 2. Если мы разделим каждый из столбцов на √2, мы получим уравнение X = √2 A + √ 2 B, что дает нам штраф в размере (2 * √2²) λ, или 4λ, как и раньше. Это означает, что наша модель не будет искажена при добавлении в новый столбец.

Отказ от ответственности: не забывайте делить после использования скейлера, а не до этого!

Применение решения: K-ближайшие соседи

Алгоритм K-ближайших соседей (KNN) пытается угадать целевую переменную, просматривая похожие точки данных. Кажется, что количество похожих точек данных равно «K», и он определяет сходство, минимизируя «расстояние».

Распространенным способом измерения расстояния является евклидово расстояние - расстояние по прямой между двумя точками. Это вычисляется путем возведения в квадрат разностей в каждом столбце, их сложения и извлечения суммы в квадрат. Например, если расстояние в столбце A равно 3, а в столбце B равно 4, евклидово расстояние равно sqrt (3² + 4²) = sqrt (25) = 5.

В приведенном выше примере, если мы определяем новый столбец X = A, расстояние в столбце X будет 3, а новое евклидово расстояние будет sqrt (2 * 3² + 4²) = sqrt (34). Это создает неоправданный уклон в сторону избыточной информации.

Это снова можно исправить, разделив оба столбца на sqrt (C²). В приведенном выше примере корреляция между A и X равна 1, поэтому, если B не зависит от A, их значения C² будут равны 2. Таким образом, после деления на sqrt (2) расстояние будет 3 / sqrt (2) в каждом столбец. Новое евклидово расстояние будет равно sqrt (2 * (3 / √2) ² + 4²) = sqrt (2 * 4,5 + 4²) = sqrt (25), как и раньше!

Примечание. Если вы используете расстояние Минковского порядка p, вы делите столбцы на (C²) ^ (1 / p). В евклидовом случае, если вы измеряете расстояние до Манхэттена, p = 1, поэтому вы делите столбцы на C².

Отказ от ответственности: не забывайте делить после использования скейлера, а не до этого!

Применение решения: случайные леса

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

Если столбцы содержат избыточную информацию, то случайный выбор смещает нас в сторону избыточной информации. На самом деле это может быть решено довольно легко, присвоив каждому столбцу вес 1 / C² при их выборе.

При выборе одного из A и B шансы 50/50. Если мы сложим X = A, то есть 2/3 шанса, что мы получим информацию от A. Поскольку A и X имеют корреляцию 1, они оба имеют оценку C² 2. Разделив на C², мы получим веса 0,5 для A, 0,5 для X и 1 для B. Это означает, что есть вероятность 25%, что мы выберем A, 25% вероятность, что мы выберем X, и 50% вероятность, что мы выберем B - обратно к 50/50.

Выводы

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