Прогнозирование оттока с помощью логистической регрессии

Машинное обучение для маркетинга на Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Введение в логистическую регрессию

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

Модель логистической регрессии

Машинное обучение для маркетинга на Python

Этапы построения модели

  1. Разделите данные на обучающую и тестовую выборки
  2. Инициализируйте модель
  3. Обучите модель на обучающих данных
  4. Предскажите значения на тестовых данных
  5. Оцените качество модели на тестовых данных
Машинное обучение для маркетинга на Python

Обучение модели

Импортируйте классификатор логистической регрессии

from sklearn.linear_model import LogisticRegression

Инициализируйте экземпляр логистической регрессии

logreg = LogisticRegression()

Обучите модель на обучающих данных

logreg.fit(train_X, train_Y)
Машинное обучение для маркетинга на Python

Метрики качества модели

Ключевые метрики:

  • Accuracy (точность) — доля правильно предсказанных меток (отток и не отток)
  • Precision (точность по классу) — доля корректно классифицированных наблюдений среди всех предсказанных моделью как отток
  • Recall (полнота) — доля корректно классифицированных наблюдений среди всех реальных случаев оттока
Машинное обучение для маркетинга на Python

Оценка точности модели

from sklearn.metrics import accuracy_score

pred_train_Y = logreg.predict(train_X) pred_test_Y = logreg.predict(test_X)
train_accuracy = accuracy_score(train_Y, pred_train_Y) test_accuracy = accuracy_score(test_Y, pred_test_Y)
print('Training accuracy:', round(train_accuracy,4)) print('Test accuracy:', round(test_accuracy, 4))
Training accuracy: 0.8108
Test accuracy: 0.8009
Машинное обучение для маркетинга на Python

Оценка precision и recall

from sklearn.metrics import precision_score, recall_score

train_precision = round(precision_score(train_Y, pred_train_Y), 4) test_precision = round(precision_score(test_Y, pred_test_Y), 4)
train_recall = round(recall_score(train_Y, pred_train_Y), 4) test_recall = round(recall_score(test_Y, pred_test_Y), 4)
print('Training precision: {}, Training recall: {}'.format(train_precision, train_recall)) print('Test precision: {}, Test recall: {}'.format(train_recall, test_recall))
Training precision: 0.6725, Training recall: 0.5736
Test precision: 0.5736, Test recall: 0.4835
Машинное обучение для маркетинга на Python

Регуляризация

  • Вводит штрафной коэффициент на этапе построения модели
  • Борется с переобучением (когда модель «запоминает» паттерны)
  • Некоторые методы регуляризации также выполняют отбор признаков, например L1
  • Делает модель более обобщаемой на новых данных
Машинное обучение для маркетинга на Python

L1-регуляризация и отбор признаков

  • LogisticRegression из sklearn по умолчанию применяет регуляризацию L2
  • L1-регуляризация (LASSO) задаётся явно и выполняет отбор признаков, сводя часть коэффициентов модели к нулю.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Параметр C необходимо подобрать для нахождения оптимального значения
Машинное обучение для маркетинга на Python

Подбор параметра L1-регуляризации

C = [1, .5, .25, .1, .05, .025, .01, .005, .0025]
l1_metrics = np.zeros((len(C), 5))
l1_metrics[:,0] = C

for index in range(0, len(C)): logreg = LogisticRegression(penalty='l1', C=C[index], solver='liblinear') logreg.fit(train_X, train_Y) pred_test_Y = logreg.predict(test_X)
l1_metrics[index,1] = np.count_nonzero(logreg.coef_) l1_metrics[index,2] = accuracy_score(test_Y, pred_test_Y) l1_metrics[index,3] = precision_score(test_Y, pred_test_Y) l1_metrics[index,4] = recall_score(test_Y, pred_test_Y)
col_names = ['C','Non-Zero Coeffs','Accuracy','Precision','Recall'] print(pd.DataFrame(l1_metrics, columns=col_names)
Машинное обучение для маркетинга на Python

Выбор оптимального значения C

Подбор параметра C для L1-регуляризации

Машинное обучение для маркетинга на Python

Выбор оптимального значения C

Подбор параметра C для L1-регуляризации

Машинное обучение для маркетинга на Python

Давайте потренируемся!

Машинное обучение для маркетинга на Python

Preparing Video For Download...