Обучение дерева решений против несбалансированных данных


43

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

Данные состоят из студентов, изучающих курсы, а переменная класса - это статус курса, который имеет два значения - отозванный или текущий.

  • Возраст
  • Этнос
  • Пол
  • Конечно
    ...
  • Состояние курса

В наборе данных есть намного больше экземпляров, которые являются текущими, чем снятыми. Изъятые экземпляры составляют только 2% от общего числа экземпляров.

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

У меня были похожие проблемы с деревьями решений, когда в данных преобладает один или два класса.

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


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

Ответы:


62

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

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

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

Литература по машинному обучению по этой теме в основном разработала три стратегии решения.

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

  2. В качестве альтернативы вы можете изменить затраты на неправильную классификацию, как отмечалось в предыдущем ответе, снова, чтобы предотвратить смещение.

  3. φзнак равно12(π++π-),π+π-

Точность против сбалансированной точности

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

Я был бы рад опубликовать некоторые дополнительные ссылки на литературу, если вы хотели бы продолжить.


3
Бродер - спасибо за подробную информацию. Это было действительно полезно! Сначала я попытался использовать функциональность интеллектуального анализа данных в SQL Server, однако, следуя вашим советам, я перешел на использование R. Я использовал алгоритм SMOTE, чтобы сбалансировать набор данных, и попытался использовать как деревья решений, так и SVM. DT дают сбалансированную точность 81%, и даже лучше с SVM. Один вопрос, хотя - я должен проверить модель с набором данных, который также содержит данные rebalancd? Или это должно быть проверено с данными, больше похожими на оригинал?
Крисб

2
Это приятно слышать. Относительно вашего вопроса: вы не хотите балансировать ваши тестовые данные. Это может повлиять на вашу оценку производительности, поскольку вы будете тестировать некоторые примеры дважды (в случае избыточной выборки) или не будете тестировать некоторые примеры (в случае недостаточной выборки). Таким образом, вы хотите сбалансировать свой тренировочный набор (отдельно в каждом цикле перекрестной проверки), но затем протестировать немодифицированные (потенциально несбалансированные) тестовые данные.
Кей Бродерсен

Спасибо, Бродер. Делая это ставит другую картину на вещи. Сбалансированная точность падает до 56%. На моей лучшей модели чувствительность падает до 17% (соответствует классу, который мне нужен, чтобы получить более точные прогнозы). Я предполагаю, что это имеет смысл, потому что класс с избыточной дискретизацией - это тот класс, поэтому эти примеры будут подсчитываться несколько раз. Я попытаюсь увеличить балансировку тренировочного набора данных, чтобы понять, имеет ли это какое-то значение.
Крисб

Теперь, когда он протестировал его с различными пропорциями сбалансированных данных, лучшая сбалансированная точность, которую я могу получить, - это Ada Boost с 60%. Хотя я изо всех сил пытаюсь определить, что «хорошо». Моя главная цель - предсказать студентов, которые могут отказаться от своего курса. Поскольку вывод был моим позитивным классом, я пытался максимизировать количество истинных позитивов (то есть повысить чувствительность). Перебалансировка данных делает это в ущерб количеству ложных негативов. 60% не кажутся мне намного лучше случайных, но у меня нет базовых данных о том, что является «хорошим» в данном случае.
Крисб

2
@chrisb, это немного (!) поздний комментарий. На касательной вы можете попробовать регрессию пропорциональных рисков Кокса ( cran.r-project.org/doc/contrib/Fox-Companion/… ), чтобы смоделировать выживание ваших студентов. Вам может не потребоваться пониженная или избыточная выборка.
Жубарб

8

Следующие четыре идеи могут помочь вам решить эту проблему.

  1. 2*пресяsяоN*ресaLLпресяsяоN+ресaLL

  2. Используйте параметр «предыдущий» в деревьях решений, чтобы проинформировать алгоритм о предыдущей частоте классов в наборе данных, т. Е. Если в наборе 1000 000 000 наборов данных содержится 1000 положительных значений prior = c(0.001, 0.999)(в R).

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

  4. Используйте аргумент «стоимость» в некоторых алгоритмах классификации - например, rpartв R -, чтобы определить относительные затраты для неправильной классификации истинных положительных и отрицательных сторон. Вы, естественно, должны установить высокую цену за неправильную классификацию редкого класса.

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


2

Я дал ответ в недавней теме :

Что мы делаем, это выбираем образец с разными пропорциями. В вышеупомянутом примере это будет 1000 случаев «ДА» и, например, 9000 случаев «НЕТ». Такой подход дает более стабильные модели. Тем не менее, он должен быть проверен на реальном образце (с 1 000 000 строк).

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

Вы можете искать это как «передискретизацию в статистике», первый результат довольно хорош: http://www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf


1

Добавление к ответу @Kay 1-й стратегии решения: Синтез с использованием синтетического меньшинства ( SMOTE ), как правило, дает лучшие результаты, чем при недостаточной или избыточной выборке из моего опыта, поскольку я думаю, что это как бы создает компромисс между ними. Он создает синтетические выборки класса меньшинства, используя точки данных, нанесенные на многовариантное пространство предикторов, и более или менее принимает средние точки между смежными точками в этом пространстве для создания новых синтетических точек и, следовательно, уравновешивает оба размера классов. (не уверен в средних точках, подробности алгоритма здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.