Несбалансированные наборы данных распространены в реальном мире. Устранение этих дисбалансов представляет собой сложную задачу. Например, в прогнозе погашения кредита из 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

Не стесняйтесь комментировать ниже.

Спасибо :)