Быстрая демонстрация бизнес-консалтинга с помощью Data Science

Аудитория

Целевая аудитория этого сообщения в блоге - маркетологи, которые прочитали предыдущий пост о пятиэтапной структуре консалтинга в области науки о данных и хотят узнать больше о фактической реализации таких проектов. Мы будем использовать пакет caret в R в качестве быстрой демонстрации.

Обзор

Набор данных можно загрузить из UCI Machine Learning Repository. Он состоит из 41 188 данных клиентов о кампаниях прямого маркетинга (телефонных звонках) португальского банковского учреждения с указанными ниже переменными:

Клиент: возраст, работа, семейное положение, образование, статус по умолчанию, жилье и кредит.

Кампания: последний тип контакта, последний месяц контакта в году, последний день контакта недели и продолжительность последнего контакта.

Другое: количество контактов, выполненных в текущей кампании, количество дней, прошедших с момента последнего обращения к клиенту, количество контактов, выполненных до этой кампании, результат предыдущей кампании, а также наличие у клиента подписки на временный депозит

Шаг 1. Деловая проблема

Выручка португальского банка снизилась, и они хотели бы знать, какие меры следует предпринять. После расследования мы выяснили, что основная причина заключается в том, что их клиенты не делают депозиты так часто, как раньше. Зная, что срочные депозиты позволяют банкам удерживать депозит в течение определенного времени, банки могут инвестировать в финансовые продукты с более высокой прибылью, чтобы получить прибыль. Кроме того, у банков также больше шансов убедить клиентов срочных вкладов покупать другие продукты, такие как фонды или страхование, для дальнейшего увеличения своих доходов. В результате португальский банк хотел бы выявить существующих клиентов, у которых есть больше шансов подписаться на срочный депозит, и сосредоточить маркетинговые усилия на таких клиентах.

Шаг 2. Цель Google Analytics

Классификационный подход, позволяющий предсказать, какие клиенты с большей вероятностью подпишутся на срочные вклады.

Шаг 3. Подготовка данных

Давайте сначала посмотрим сводку нашего набора данных.

summary(mydata)
str(mydata)

Затем мы визуализируем взаимосвязь между каждой переменной в зависимости от y (независимо от того, подписан ли клиент на срочный депозит) с помощью прямоугольной диаграммы. Мы выяснили, что среди всех других переменных значение имеет только продолжительность.

p_duration <- ggplot(mydata, aes(factor(y), duration)) + geom_boxplot(aes(fill = factor(y)))

Нам также нужно будет создать фиктивные переменные, поскольку некоторые входные данные, такие как задание, являются категориальными. Мы можем сделать это вручную с помощью ifelse, как показано ниже.

for(level in unique(mydata$job)){
  mydata[paste("job", level, sep = "_")] <- ifelse(mydata$job == level, 1, 0)
}

Или мы можем сделать это с помощью функции dummyVars в вставке.

dummies <- dummyVars(y ~ ., data = mydata)

Кроме того, поскольку переменные имеют разную величину, рекомендуется масштабирование, хотя древовидные модели обычно не требуют масштабирования для достижения хорошей производительности. Однако мы должны сначала разделить набор данных на обучение и тестирование перед масштабированием, так как если мы масштабируем наборы для обучения и тестирования вместе, мы можем включить информацию из набора для тестирования, что приведет к смещенной оценке.

set.seed(1)
training_size <- floor(0.80 * nrow(mydata))
train_ind <- sample(seq_len(nrow(mydata)), size = training_size)
training <- mydata[train_ind, ]
testing <- mydata[-train_ind, ]
preProcValues <- preProcess(training, method = c("center", "scale"))
scaled.training <- predict(preProcValues, training)
scaled.testing <- predict(preProcValues, testing)

Мы можем заметить, что y сильно запутан. То есть у нас много не подписчиков; подписчики составляют лишь около 11,7% всех клиентов. В результате требуется масштабирование. Здесь мы продемонстрируем 4 популярных метода повторной выборки, в том числе недостаточную выборку, передискретизацию, сглаженную выборку и выборку с повышением по набору обучающих данных.

down_training <- downSample(x = scaled.training[, -ncol(scaled.training)], y = scaled.training$Class)
up_training <- upSample(x = scaled.training[, -ncol(scaled.training)], y = scaled.training$Class)
smote_training <- SMOTE(Class~., data = scaled.training)
rose_training <- ROSE(Class~., data = scaled.training, seed=2)$data

Наконец, мы закончили подготовку данных для обучения модели. Также обратите внимание, что для простоты мы пренебрегли некоторыми этапами предварительной обработки, такими как удаление выбросов и идентификация коррелированных переменных.

Шаг 4. Разработка модели

Мы будем обучать модель с помощью CART (дерево классификации и регрессии), так как нам нужно больше интерпретации модели вместо предсказательной силы. Здесь мы будем использовать перекрестную проверку для обучения модели, и вместо точности мы также будем использовать ROC в качестве метрики оценки (чем ближе к 1, тем лучше).

ctrl <- trainControl(method = "repeatedcv", repeats = 5,
                     classProbs = TRUE,
                     summaryFunction = twoClassSummary)
orig_fit <- train(Class~., data = training, 
                  method = "rpart",
                  metric = "ROC",
                  trControl = ctrl)

После обучения моделей на передискретизированных наборах данных мы исследуем производительность с точки зрения ROC. Замечено, что передискретизация (вверх) имеет лучшую производительность со средним ROC на уровне 0,8078530.

Мы визуализируем и интерпретируем модель CART. Замечено, что продолжительность действительно имеет наибольшее влияние на подписки.

После преобразования масштабированной продолжительности обратно в исходную мы знаем, что пороговое время вызова составляет 473 секунды, или примерно 8 минут. Другими словами, если звонок длится более 8 минут, вероятность подписки составляет 84%. Кроме того, если продолжительность звонка составляет от 205 до 473 секунд, а метод связи неизвестен, то вероятность подписки составляет 64%.

Шаг 5. Тестирование производительности

Поскольку наиболее важной переменной является продолжительность звонка, нам необходимо найти больше информации об успешных звонках, например о торговых представителях, которые проводили звонки и записанные разговоры, чтобы разработать стратегии, позволяющие продлить продолжительность звонков.

Мы могли бы также захотеть выяснить, почему метод контакта был записан как неизвестный для некоторых клиентов, а не телефон или мобильный телефон, чтобы получить более значимое понимание.

Мы также должны помнить, что корреляции не всегда являются причинно-следственными связями, и у клиента могут быть другие скрытые причины для подписки. Например, длительный срок может быть результатом того, что заинтересованные клиенты задают вопросы или создают депозиты по телефону. И поэтому нам также необходимо будет настроить небольшое A / B-тестирование, чтобы увидеть, значительно ли увеличивается стоимость подписки при увеличении продолжительности звонка.

Последние мысли

Это подводит итог сообщения в блоге, хотя в конечном итоге у нас нет действенных идей, но он все же может помочь пролить свет на то, как решать бизнес-проблемы с помощью науки о данных.

Иногда в науке о данных мы моделируем поведение (что), а не мотивацию (почему). То есть мы знаем, что поведение клиентов с более длительным разговором может привести к увеличению шансов на подписку, но мы не можем точно знать, почему и каковы их мотивы. Другими словами, в наших базах данных CRM мы записываем особенности того, что делают клиенты, а не то, что они думают.

Чтобы создать адекватные бизнес-стратегии, иногда нам все же необходимо использовать качественные исследования, такие как интервью и фокус-группы.

R-код

Вопросы, комментарии или проблемы?
[email protected]