Может ли дисбаланс в соотношении классов в обучающем и тестовом наборе вызвать низкую точность проверки?
Я участвую в хакатоне, где мы должны предсказать, заинтересован ли пользователь в работе с учетом таких особенностей, как пол, город, часы обучения, опыт, текущая компания и т. Д.
В обучающем наборе около 90% не заинтересованы в работе, а только 10%. Но в общедоступном тестовом наборе, который они выпустили, есть 50% каждого из этих двух классов, и моя точность проверки не превышает 55%, в то время как точность обучения составляет 99%.
И данные тестирования и обучения имеют пропущенные значения, и я вменяю их, используя RBM.
Мой вопрос:
Точность валидации ужасна из-за дисбаланса в соотношении классов или из-за неправильного определения пропущенных значений?
1 ответ
Объяснение:
Хорошо, я думаю, что вам нужно сначала повторить выборку ваших данных, потому что ваш алгоритм узнает, что большинство людей не заинтересованы в работе, и это правда, если мы просто посмотрим на распределение ваших обучающих данных (90% не заинтересованы, 10% заинтересованы). Ваш алгоритм просто предполагает, что ответ всегда "не заинтересован". Вот почему вы достигаете высокой точности на тренировочном наборе.
В ваших тестовых данных распределение изменилось до 50%:50%. Ваш алгоритм все еще предполагает, что все люди "не заинтересованы", и не может предсказать заинтересованных. (Ваша точность уменьшается на тестовом наборе примерно до 50%)
Как решить эту проблему:
Измените данные тренировки на соответствие 50%: 50% в наборе тренировок. Существуют разные методы передискретизации. Вот некоторые примеры:
- Под-Sampling
- Передискретизации
- Техника избыточной выборки синтетических меньшинств (SMOTE)
Недостаточная выборка: уменьшает выборку большинства классов, удаляя элементы. В вашем случае это будет (10% интересуются и 10% не пересекаются). Недостатком является то, что вы будете просто учиться на 20% доступных данных обучения.
Чрезмерная выборка: повышается выборка класса меньшинства путем добавления избыточных точек. Преимущество: вы бы использовали все свои данные. Недостаток: может привести к переоснащению.
SMOTE: более сложный метод передискретизации, который добавляет синтетические образцы.
Я бы попробовал начать использовать простой оверрайт и проверить, решает ли это вашу проблему.
Для python вы можете использовать так называемый пакет imbalanced-learn, который содержит все заявленные здесь методы.