Несбалансированный набор данных, приводящий к высоким ложным срабатываниям после использования SMOTE - PullRequest
0 голосов
/ 18 мая 2019

Я работаю над набором маркетинговых данных для несбалансированной двоичной классификации, который имеет:

  1. Нет: Да, соотношение 88:12 (Нет - не купил продукт, да - купил)
  2. ~ 4300 наблюдений и 30 признаков (9 числовых и 21 категориальный)

Я разделил свои данные на наборы поездов (80%) и тестов (20%), а затем использовал стандартные наборы и SMOTE в наборе поездов. SMOTE сделал соотношение данных поезда: «Нет: Да» к 1: 1. Затем я запустил классификатор логистической регрессии, как показано в приведенном ниже коде, и получил рейтинг отзыва 80% на тестовых данных, а не 21% на тестовых данных, применив классификатор логистической регрессии без SMOTE.

С SMOTE увеличение отзыва велико, однако ложные срабатывания довольно высоки (см. Изображение для матрицы путаницы), что является проблемой, потому что мы в конечном итоге нацелимся на многих ложных (вряд ли купивших) клиентов. Есть ли способ снизить количество ложных срабатываний, не жертвуя при этом отзывами / истинными положительными результатами?

confusion matrix

#Without SMOTE
clf_logistic_nosmote = LogisticRegression(random_state=0, solver='lbfgs').fit(X_train,y_train)

#With SMOTE  (resampled train datasets) 
clf_logistic = LogisticRegression(random_state=0, solver='lbfgs').fit(X_train_sc_resampled, y_train_resampled)
...