Несбалансированные наборы данных распространены в реальном мире. Устранение этих дисбалансов представляет собой сложную задачу. Например, в прогнозе погашения кредита из 100 случаев может быть менее 20 неплательщиков. Когда эти данные передаются через любую модель для прогнозирования неплательщиков, точность будет очень низкой, поскольку данные смещены в сторону недефолтеров.
Чтобы справиться с такими сценариями, мы можем использовать методы повторной выборки. Ниже приведены несколько типов методов передискретизации:
- Избыточная выборка. Значения класса меньшинства увеличиваются, чтобы соответствовать подсчету класса большинства.
- При выборке. Значения класса большинства уменьшаются, чтобы соответствовать количеству класса меньшинства.
- Сочетание избыточной и недостаточной выборки: значения класса большинства уменьшаются, а значения класса меньшинства увеличиваются одновременно.
Упомянутое выше увеличение или уменьшение может быть выполнено различными способами. Пожалуйста, просмотрите этот документ, чтобы узнать больше о различных методах.
В этой статье мы постараемся понять влияние избыточной выборки с помощью KMeansSmote на этот образец данных — Данные займа.
Пожалуйста, просмотрите этот блокнот kaggle, где я выполнял базовые EDA и построение моделей.
На следующей диаграмме показано распределение данных о статусе кредита (в данном случае класс)
Когда к данным были применены логистическая регрессия и деревья решений, оценка F1 составила 0,26 и 0,28 соответственно. Давайте попробуем применить методы выборки, чтобы решить эту проблему.
Для выполнения методов Over Sampling необходимо установить следующую библиотеку.
pip install imbalanced-learn==0.6.2
Из этой библиотеки мы можем импортировать KMeansSmote, как показано ниже:
from imblearn.over_sampling import KMeansSMOTE
Мы можем применить KMeansSmote, как показано ниже:
#X is the entire dataset except the class(i.e. loan_status) #y is the class column (loan_status) X = df_model.drop([‘loan_status’],axis=1) y = df_model[‘loan_status’] smote = KMeansSMOTE(sampling_strategy='auto') #X_sm and y_sm is the resampled data X_sm, y_sm = smote.fit_sample(X, y)
Когда к данным с повторной выборкой были применены логистическая регрессия и деревья решений, показатель F1 увеличился до 0,72 и 0,74 соответственно.
Я надеюсь, что это могло помочь вам с базовым пониманием влияния техники передискретизации. Мы все еще можем повысить точность путем настройки гиперпараметров.
Пожалуйста, найдите блокнот здесь для справки — блокнот kaggle
Не стесняйтесь комментировать ниже.
Спасибо :)