Что такое Чёрн?

По буквальному определению из кембриджского словаря:

Коэффициент оттока (существительное): процент клиентов, которые перестали покупать продукты или услуги определенной компании, рассчитанный за определенный период времени.

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

Прогноз оттока клиентов

Анализ прогнозирования оттока клиентов — это метод прогнозирования вероятности того, что клиент будет потерян из бизнеса, или прогнозирования того, будет ли отток клиентов или нет. Затем результат используется для улучшения маркетинговых стратегий. Исследования показывают, что стоимость развития нового клиента часто выше, чем стоимость удержания старого клиента [1]. Таким образом, удержание существующих клиентов может иметь большое значение для бизнеса. Анализ прогнозирования оттока клиентов обычно основан на исторических данных, которые отслеживают поведение клиентов, например историю покупок. Анализируя эти данные, компании могут выявить закономерности, которые предполагают, что клиент рискует уйти.

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

Цели и методология

Для анализа прогнозирования оттока можно использовать несколько методов, от самого простого метода, такого как логистическая регрессия, до передовых методов машинного обучения, таких как искусственная нейронная сеть. В этом исследовании я хочу проверить прогностическую способность алгоритмов машинного обучения, применяемых для прогнозирования оттока. Random Forest, распространенный алгоритм машинного обучения, будет использоваться в качестве основного метода прогнозного анализа. Случайный лес — это алгоритм ансамбля, который объединяет несколько деревьев решений для повышения точности и уменьшения переобучения, в то время как само дерево решений представляет собой алгоритм для классификации бинарной переменной отклика. Для функций я буду использовать продукты клиентов, купленные из их записей транзакций. Поскольку эти данные представлены в текстовой форме, будут предприняты шаги предварительной обработки, чтобы преобразовать их в правильные входные данные. Результатом этого исследования будет модель прогнозирования вместе с оценкой ее эффективности с использованием таблицы матрицы путаницы.

Основной анализ

Сбор данных

Данные для этого исследования представляют собой вторичный набор данных, полученный от Kaggle. Название набора данных — Бизнес-транзакция электронной коммерции. Вы можете найти набор данных здесь. Данные относятся к набору данных о транзакциях продаж электронной коммерции в Великобритании (онлайн-торговля) за один год. Их клиенты приезжают со всего мира и обычно делают прямые покупки для себя. Есть также малые предприятия, которые покупают оптом и продают другим клиентам через каналы розничной торговли [2].

Вот краткий обзор данных:

glimpse(trx_data)
#> Rows: 536,350
#> Columns: 8
#> $ TransactionNo <chr> "581482", "581475", "581475", "581475", "581475", "58147~
#> $ Date          <date> 2019-12-09, 2019-12-09, 2019-12-09, 2019-12-09, 2019-12~
#> $ ProductNo     <chr> "22485", "22596", "23235", "23272", "23239", "21705", "2~
#> $ ProductName   <chr> "Set Of 2 Wooden Market Crates", "Christmas Star Wish Li~
#> $ Price         <dbl> 21.47, 10.65, 11.53, 10.65, 11.94, 10.65, 11.53, 12.25, ~
#> $ Quantity      <int> 12, 36, 12, 12, 6, 24, 18, 12, 12, 24, 20, 12, 20, 12, 1~
#> $ CustomerNo    <int> 17490, 13069, 13069, 13069, 13069, 13069, 13069, 13069, ~
#> $ Country       <chr> "United Kingdom", "United Kingdom", "United Kingdom", "U~

Исследование данных

Для остальной части анализа я буду использовать только успешные транзакции. Судя по описанию набора данных, отмененные транзакции можно отличить по букве «С» в номере транзакции.

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

Смелые 83,4% от общей рыночной стоимости генерируются покупками внутри страны, а остальные 16,6% - со всего мира. Большинство зарубежных продаж приходится на Нидерланды, Ирландию, Германию и Францию.

Самым покупаемым продуктом является кремовый подвесной держатель T-Light Heart, который был продан 2336 раз в течение всего года. Я нашел картинку, которая может подойти к товару, источник указан на картинке.

Предварительная обработка данных

Обозначение оттока

Процентный период составляет 3 месяца (примерно 90 дней), и любой клиент, не совершивший ни одной успешной транзакции, считается оттоком. Это не включает нового пользователя, который только что совершил свою первую транзакцию менее чем за 3 месяца по сравнению с наблюдаемым периодом (последняя дата транзакции, зарегистрированная в данных).

user_fm <- trx_data %>% 
  filter(Quantity > 0) %>% 
  group_by(CustomerNo) %>% 
  summarize(
    PurchaseFrequency = uniqueN(TransactionNo),
    TotalValue = sum(Price*Quantity)
  )

user_retention <- trx_data %>% 
  filter(Quantity > 0) %>% 
  group_by(CustomerNo) %>% 
  arrange(Date) %>% 
  summarize(
    FirstTrx = first(Date),
    LastTrx = last(Date)
  ) %>% 
  left_join(
    trx_data %>% 
      filter(Quantity > 0) %>% 
      group_by(CustomerNo) %>% 
      mutate(DateRank = frankv(Date, ties.method = "dense", order = -1)) %>% 
      filter(DateRank == 2) %>% 
      group_by(CustomerNo) %>% 
      summarize(SecondLastTrx = unique(Date)),
    by = "CustomerNo"
  ) %>% 
  mutate(
    SecondLastTrx = if_else(is.na(SecondLastTrx), FirstTrx, SecondLastTrx),
    LastObservedDate = max(trx_data$Date)
  ) %>% 
  relocate(LastTrx, .after = "SecondLastTrx") %>% 
  mutate(
    SecondLastDiff = LastTrx - SecondLastTrx,
    FirstLastObsDiff = LastObservedDate - FirstTrx
  )

user_churn <- user_fm %>% 
  left_join(user_retention, by = "CustomerNo") %>% 
  mutate(
    NewUser = if_else(FirstLastObsDiff <= 90, "yes", "no"),
    Churn = if_else((PurchaseFrequency == 1 & FirstLastObsDiff > 90) | 
                      (PurchaseFrequency > 1 & SecondLastDiff > 90), "yes", "no")
  )

Обработка текста

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

corpus_data <- Corpus(VectorSource(user_bought$ProductBought))
corpus_data <- tm_map(corpus_data, PlainTextDocument)
corpus_data <- tm_map(corpus_data, tolower)
corpus_data <- tm_map(corpus_data, textclean::replace_contraction)
corpus_data <- tm_map(corpus_data, function(x) {str_replace_all(x, "\\/", " ")})
corpus_data <- tm_map(corpus_data, removePunctuation)
corpus_data <- tm_map(corpus_data, stripWhitespace)
corpus_data <- tm_map(corpus_data, removeWords, stopwords("English"))
corpus_data <- tm_map(corpus_data, stemDocument)
dtm_data <- DocumentTermMatrix(corpus_data)
sparse_matrix <- removeSparseTerms(dtm_data, 0.995)
df_sparse <- as.data.frame(as.matrix(sparse_matrix))
colnames(df_sparse) <- make.names(colnames(df_sparse))
df_sparse$CustomerNo <- user_bought$CustomerNo

Окончательные характеристики

Этот шаг должен показать, как я объединил переменную ответа и разреженную матрицу предиктора.

feature_data <- user_churn %>% 
  filter(!is.na(CustomerNo)) %>% 
  filter(NewUser == "no") %>%
  transmute(CustomerNo, Churn = if_else(Churn == "yes", 1, 0)) %>% 
  left_join(df_sparse, by = "CustomerNo") %>% 
  column_to_rownames(var = "CustomerNo")

Случайная классификация леса

Разделение данных

Я разделил данные на данные обучения и тестирования с соотношением 80%:20% соответственно.

set.seed(1999)
sample_split <- sample.split(feature_data$Churn, SplitRatio = .8)
train_data <- subset(feature_data, sample_split == TRUE)
test_data <- subset(feature_data, sample_split == FALSE)
train_data$Churn = as.factor(train_data$Churn)
test_data$Churn = as.factor(test_data$Churn)

Настройка оптимального параметра

Чтобы найти оптимальный параметр (M), используемый в Random Forest, я использовал метод ошибки Out-of-Bag (ошибка OOB). Результат показан ниже.

tuning_model <- tuneRF(train_data[,-1], train_data[,1], ntreeTry = 500)
tuning_model

Результат:

tuning_model
#>        mtry  OOBError
#> 19.OOB   19 0.2826300
#> 37.OOB   37 0.2679097
#> 74.OOB   74 0.2741250

Окончательная оценка

Используя результат шага настройки, была получена окончательная модель предсказания. Чтобы оценить эту модель, я использую показатель точности из таблицы матрицы путаницы. Используя тестовые данные, о которых я упоминал ранее, точность прогноза составляет 74,21%. Хотя это число относительно велико, есть много возможностей для улучшения, например, для повышения частоты ложноположительных прогнозов.

#> Confusion Matrix and Statistics
#> 
#>           Reference
#> Prediction   0   1
#>          0 292 112
#>          1  85 275
#>                                           
#>                Accuracy : 0.7421          
#>                  95% CI : (0.7096, 0.7728)
#>     No Information Rate : 0.5065          
#>     P-Value [Acc > NIR] : < 2e-16         
#>                                           
#>                   Kappa : 0.4847          
#>                                           
#>  Mcnemar's Test P-Value : 0.06397         
#>                                           
#>             Sensitivity : 0.7745          
#>             Specificity : 0.7106          
#>          Pos Pred Value : 0.7228          
#>          Neg Pred Value : 0.7639          
#>              Prevalence : 0.4935          
#>          Detection Rate : 0.3822          
#>    Detection Prevalence : 0.5288          
#>       Balanced Accuracy : 0.7426          
#>                                           
#>        'Positive' Class : 0               
#> 

Полный код ищите здесь.

Выводы

Уровень оттока — важный показатель для предприятий электронной коммерции. Чтобы повысить доход и прибыльность, компании часто проводят прогнозный анализ оттока, чтобы улучшить свои маркетинговые стратегии. В этом исследовании я использовал данные о транзакциях клиентов из британской электронной коммерции, чтобы проверить прогностическую способность метода классификации случайного леса. Какие продукты купили клиенты, используется для определения того, будут ли они уходить или нет. В результате точность предсказания составляет 74,21%.

Существуют идеи будущих исследований, которые могут улучшить результаты этого исследования, такие как более точная разработка текстовых признаков и использование различных методов прогнозирования машинного обучения для дальнейшей проверки точности. Тем не менее, есть много причин, по которым клиенты уходят, одна из причин — наличие платы за доставку. В электронной коммерции плата за доставку является важным компонентом транзакции. Существует исследование, показывающее, что плата за доставку, вероятно, влияет на поведение потребителей при покупках в Интернете и принятие ими решений [3]. Но пока приберегите для следующего раза :)

Итак, к какому типу клиентов электронной коммерции вы относитесь? :)

Рекомендации

[1] X. Xiahou и Y. Harada, «Прогнозирование оттока клиентов электронной коммерции B2C на основе K-средних и SVM», Journal of Theoretical and Applied Electronic Commerce Research, vol. 17, нет. 2, стр. 458–475, 2022.

[2] Рамос Г. (2022, апрель). Бизнес-транзакция электронной коммерции. Версия 1. Получено 20 марта 2023 г. с https://www.kaggle.com/datasets/gabrielramos87/an-online-shop-business.

[3] М. Хади и С. Р. Хати, «Анализ коэффициента оттока клиентов в электронной коммерции модной одежды с использованием логистической регрессии и случайного леса», The 6th International Conference on Management in Emerging Markets (ICMEM 2021), 2021.