С растущим влиянием цифрового мира компании электронной коммерции выстраивают ориентированную на клиента модель организации и управления. Компании хотят знать больше о своих клиентах и предсказывать все о клиенте, чтобы предпринять соответствующие действия, чтобы не потерять своих клиентов и увеличить количество лояльных клиентов. Таким образом, прогнозирование следующего дня покупки клиента является растущей потребностью в полном прогнозировании всего, что касается идеи клиента. Таким образом, компании могут подготовить специальные предложения для своих клиентов и сделать шаг вперед, чтобы сделать их своими постоянными клиентами, предлагая персонализированный опыт.
Прогнозирование следующего дня покупки также важно для выявления возможных клиентов, которые могут уйти в будущем. Потому что большие задержки между покупками могут быть связаны с уходом клиентов, что приведет к снижению доходов. Следовательно, такие действия, как отправка рекламных писем и уведомлений или предоставление кодов скидок или купонов этим клиентам, могут вернуть этих клиентов и повысить их лояльность.
Данные о клиентах можно разделить на четыре группы, такие как;
- Демографические: пол, возраст, семейное положение, род занятий.
- География: местоположение, регион, город/село.
- Поведение: расходы, потребительские привычки, использование продуктов/услуг, ранее приобретенный продукт.
- Психографические: социальный статус, образ жизни, личностные характеристики.
Поскольку у всех клиентов могут быть разные потребности и разные характеристики, становится очень сложно понять уникальные требования каждого клиента. Таким образом, именно здесь в игру вступает сегментация клиентов. Сегментация клиентов – это метод разделения клиентов на группы или кластеры на основе общих характеристик. Сегментация или просто группировка клиентов в соответствии с их поведением может дать возможность предпринять действия после предсказания их следующего дня покупки и предложить им персонализированные кампании.
Сегментация клиентов может быть выполнена на основе метрик RFM. RFM расшифровывается как «новизна», «частота» и «денежный». Он группирует клиентов на основе их предыдущих транзакций покупки, таких как как недавно, как часто и сколько покупатель купил.
- Недавность (R): кто недавно совершал покупки? Количество дней с момента последней покупки (наименее давность)
- Частота (F): кто часто совершал покупки? Имеется в виду общее количество покупок. (высокая частота)
- Денежная ценность (M): у кого большая сумма покупки? Это означает, что общая сумма потраченных клиентом денег (высокая денежная стоимость)
После построения показателей RFM данные о клиентах можно разделить на группы в соответствии с этими тремя параметрами RFM. Как правило, разделение выполняется с использованием квартилей, что означает разделение клиента на четыре уровня для каждого измерения.
Из таблицы видно, что каждая из трех метрик RFM состоит из четырех групп, которые дают 64 различных клиентских сегмента.
В качестве примечания можно использовать дополнительные группировки, как в [2], и группировка представлена в таблице ниже.
Поскольку метод квартилей является наилучшей практикой для RFM, можно использовать приведенную ниже группировку в соответствии с показателями RFM:
- Лучшие клиенты: клиенты, находящиеся на R-уровне-1, F-уровне-1 и M-уровне-1 (сокращенно 1-1–1), то есть, которые совершали транзакции недавно, делают это. часто и тратят больше, чем другие клиенты. Общение с этой группой должно дать им почувствовать, что их ценят и ценят.
- Новые клиенты с большими расходами. Клиенты в сегментах 1–4–1 и 1–4–2 означают, что они совершали транзакцию только один раз, но совсем недавно и тратили много. Всегда полезно тщательно «инкубировать» всех новых клиентов, но поскольку эти новые клиенты много тратят на свою первую покупку, это еще более важно.
- Активные лояльные клиенты с наименьшими расходами: клиенты в сегментах 1–1–3 и 1–1–4, что означает, что они совершали транзакции недавно и делают это часто, но тратят меньше всего. Эти постоянные клиенты активны и лояльны, но они мало тратят. Маркетологи должны создавать кампании для этой группы, которые заставят их чувствовать себя ценными.
- Лучшие клиенты, ушедшие с рынка. Клиенты в сегментах 4–1–1, 4–1–2, 4–2–1 и 4–2–2, что означает, что они часто совершали транзакции и много тратили, но давно не заключали сделки. Это ценные клиенты, которые давно прекратили транзакции.
До этого момента дается краткое введение в основную проблему. Теперь можно предоставить методологию прогнозирования следующих дней покупки. Следует отметить, что проект основан на исторических данных компании, а данные представляют собой исторические данные временного ряда.
Как и в классических проектах по науке о данных, этапы решения проблемы следующие:
- Обработка данных
- Разработка функций
- Выбор модели машинного обучения
- Настройка модели
1.1 Обработка данных
В части обработки данных предположим, что набор данных состоит из следующих функций:
- ID: уникальный идентификатор транзакции.
- CustomerID: уникальный идентификатор клиента.
- ProductID: уникальный идентификатор проданного продукта.
- Дата: дата продажи товара.
- Sold_quantity: количество проданного товара покупателю.
- Запас: запас товара на момент покупки покупателем.
- Категория: категория продукта.
- BrandID: идентификатор бренда продукта.
- Цена: цена товара.
- Устройство: заказанное устройство, например мобильный, настольный компьютер и планшет, включая IOS или Android.
Чтобы сделать прогноз о следующем дне покупки, необходимо разделить набор данных на две части, одна часть используется для прогнозирования второй части. Предположим, в наборе данных есть данные за 1 год, тогда его можно разделить на две части, например:
Используя функцию «Дата» в наборе данных, мы разделим данные на первые 9 месяцев и последние 3 месяца. Поскольку мы будем использовать данные клиентов в наборе данных df_1, важно найти уникальных клиентов в этом наборе данных и идентифицировать их в наборе данных df_2. Потому что мы будем выполнять прогноз для этих клиентов.
Используя уникальные идентификаторы клиентов в наборе данных df_1, мы найдем дату их последней транзакции и соответствующую дату первой транзакции для этих клиентов в наборе данных df_2, и мы создадим новый фрейм данных, состоящий из идентификаторов клиентов и соответствующего дневного интервала для них. Если уникальный идентификатор клиента в df_1 не существует в наборе данных df_2, дневной интервал будет рассматриваться как значение NaN, и это означает, что эти клиенты ничего не покупали за последние 3 месяца. В качестве примечания: мы можем отбросить этих клиентов или заменить значения NaN на какое-то большое значение, чтобы идентифицировать этих клиентов в процессе прогнозирования.
1.2 Разработка функций
Теперь у нас есть небольшой набор данных df_new с двумя функциями; идентификаторы клиентов и их дневной интервал для следующих покупок.
Следующий шаг — сегментация клиентов в наборе данных df_1 с помощью показателей RFM. Как мы обсуждали в части определения метрик RFM, мы будем использовать метод квартилей, и он создаст 4 класса на основе метрик RFM. Чтобы получить 4 класса, мы рассчитаем дневные интервалы между следующими четырьмя покупками. Поскольку у нас есть дневной интервал для первой покупки в наборе данных df_new, мы можем определить следующие три покупки этих уникальных клиентов в наборе данных df_1, сопоставив их с идентификаторами клиентов и даты транзакций в наборе данных df_2. Как и в первом расчете, если клиент не совершит вторую, третью или четвертую покупку в наборе данных df_2, дневной интервал для этих покупок будет NaN.
Теперь в наборе данных df_new у нас есть идентификатор клиента и 4-дневный интервал для этих клиентов. В качестве второго шага мы можем рассчитать статистические значения для этих клиентов, используя среднее значение и стандартное отклонение. Среднее значение рассчитывается как среднее значение этих 4-дневных интервалов, а стандартное отклонение также рассчитывается с использованием этих 4-дневных интервалов.
Прежде чем перемещать часть модели ML, мы должны создать наш окончательный набор данных, объединив набор данных df_1 и df_new с функцией customerID. Поскольку в нашем окончательном наборе данных у нас будут значения NaN для клиентов, совершивших менее четырех покупок, мы можем отказаться от них, и это заставит нас сосредоточиться только на покупателе, совершившем не менее четырех покупок.
1.2.1 Масштабирование категорийных функций
Поскольку у нас есть категориальные функции, такие как productID, customerID и brandID, мы должны закодировать их для модели ML. Как правило, алгоритмы обучения ожидают, что входные данные будут числовыми, что требует преобразования нечисловых признаков (называемых категориальными переменными). Одним из популярных способов преобразования категориальных переменных является использование схемы быстрого кодирования. Горячее кодирование создает «фиктивную» переменную для каждой возможной категории каждого нечислового признака. Например, предположим, что someFeature имеет три возможных записи: A, B или C. Затем мы кодируем эту функцию в someFeature_A, someFeature_B и someFeature_C.
Даже если мы можем выполнить однократное кодирование для большого набора данных, исходя из опыта, мы можем сказать, что однократное кодирование будет очень грубым методом для функций с большим количеством уникальных значений. Например, если функция имеет 1000 уникальных значений, это означает, что однократное кодирование создаст 1000 новых функций и значительно уменьшит данные.
Таким образом, мы можем сказать, что использование алгоритмов, которые отлично справляются с категориальными признаками: древовидные алгоритмы, такие как методы Random Forest или Gradient Boosting, могут быть идеальными кандидатами для такого набора данных.
С другой стороны, для линейных или нейронных моделей мы нашли лучший метод, называемый средним кодированием, который основан на группировке наблюдений по каждому уникальному значению признака и замене значений признаков средними значениями целевой переменной. для каждой группы. Однако этот метод теряет часть информации, содержащейся в признаке, однако не требует набухания набора данных. Итак, было бы хорошо наблюдать результат обеих методологий с масштабированием/без масштабирования.
1.2.2 Масштабирование числовых функций
Если мы решили использовать древовидные алгоритмы, такие как Random Forest, мы можем использовать их сразу, не выполняя никакого масштабирования. Поскольку любая древовидная модель создает M сгибов (гиперпараметр, значение по умолчанию обычно равно 256) значений, где все значения в каждом сгибе обрабатываются одинаково. Однако для функций, которые имеют большое количество уникальных значений, некоторые значения будут встречаться в одном и том же сгибе и, следовательно, получат одно и то же значение с точки зрения дерева. При этом лучше тщательно производить кодировку меток, т.к. одинаковые значения должны кодироваться одинаковыми номерами.
Однако, если мы решим использовать NN или повышающие алгоритмы, стандартизация (масштабирование) должна быть полезной, поэтому давайте выполним масштабирование для этого варианта.
Модель 1,3 ML
Перед выполнением модели ML нам нужно определить классы в соответствии со следующим днем покупки, который мы рассчитали первым в части разработки функций. Чтобы определить классы, мы можем использовать статистические функции, такие как среднее значение, стандартное отклонение, минимум, 25%, 50%, 75% и максимальное значение. Используя эти значения, мы можем создавать классы на первый взгляд, например;
- Class_1 находится в интервале минимума и 25%
- Class_2 находится в интервале 25% и 50%
- Class_3 находится в пределах 50% и максимум
- Class_4 больше максимального
После определения класса мы заменим значения дневного интервала классами.
В качестве первого шага мы можем рассчитать матрицу корреляции и наблюдать за взаимосвязью между функциями и нашей целевой меткой, которая является вычисляемым классом.
При выборе модели ML мы проведем обучение с тремя разными моделями и выберем лучшую для настройки гиперпараметров. Мы выбрали классификатор дерева решений, случайный лес и AdaBoost.
1.3.1 Дерево решений
В анализе решений одно из визуальных и явных представлений решения и процедуры принятия решения может быть выполнено с использованием деревьев решений. Дерево решений использует древовидную модель решений, такую как блок-схема, подобная древовидной структуре, в которой каждый внутренний узел узла обозначает тест, а каждая ветвь представляет результат теста, а каждый конечный узел содержит соответствующую метку класса. Дерево решений — один из самых мощных и популярных инструментов для классификации и прогнозирования.
Сильные стороны
- Деревья решений могут обрабатывать как непрерывные, так и категориальные переменные.
- Деревья решений дают четкое представление о том, какие поля наиболее важны для прогнозирования или классификации.
- Деревья решений способны генерировать понятные правила.
- Нелинейные отношения между параметрами не влияют на производительность дерева.
- Его также можно использовать на этапе исследования данных, например, мы можем создавать новые переменные/функции, которые лучше предсказывают целевую переменную.
- Он требует меньше очистки данных по сравнению с некоторыми другими методами моделирования. На него в достаточной степени не влияют выбросы и пропущенные значения.
- Это означает, что деревья решений не имеют предположений о пространственном распределении и структуре классификатора.
Слабое место
- Чрезмерная подгонка - одна из самых практических трудностей для моделей дерева решений. Эта проблема решается путем установки ограничений на параметры модели и обрезки.
- При работе с непрерывными числовыми переменными дерево решений теряет информацию, когда распределяет переменные по разным категориям.
- Деревья решений могут быть нестабильными, потому что небольшие изменения в данных могут привести к созданию совершенно другого дерева.
- Деревья решений склонны к ошибкам в задачах классификации со многими классами и относительно небольшим количеством обучающих примеров.
- Обучение дерева решений может быть дорогостоящим в вычислительном отношении. Процесс выращивания дерева решений требует значительных вычислительных ресурсов. В каждом узле каждое поле разбиения-кандидата должно быть отсортировано, прежде чем можно будет найти его наилучшее разбиение.
1.3.2 Случайный лес
RandomForest всегда является беспроигрышным выбором, поскольку они обычно имеют высокую среднюю точность в большинстве случаев и хорошо работают для сложных задач классификации.
Сильные стороны
- Быстрое масштабирование, возможность работы с несбалансированными и отсутствующими данными
- Генерирует внутреннюю несмещенную оценку ошибки обобщения по мере выполнения построения леса.
- Предоставляет экспериментальный способ обнаружения переменных взаимодействий.
Слабое место
- Менее эффективен для более объемных наборов данных с перекрывающимися классами.
- В некоторых случаях большое количество деревьев может привести к замедлению прогнозирования в реальном времени.
1.3.3 Адабуст
AdaBoost, сокращение от Adaptive Boosting, является первым практическим алгоритмом повышения, предложенным Фройндом и Шапиром в 1996 году. AdaBoost — это алгоритм построения «сильного» классификатора как линейной комбинации «простого» «слабого» классификатора. Другими словами, основной принцип работы состоит в том, чтобы преобразовать набор слабых классификаторов в сильный. Слабый классификатор описывается как ошибка менее 50% по любому распределению, а сильный классификатор представляет собой пороговую линейную комбинацию выходных данных слабого классификатора.
Сильные стороны
- Реализация алгоритма проста.
- Выполняется выбор признаков, что приводит к относительно простому классификатору.
- Можно дать хорошее обобщение.
Слабое место
- Алгоритм чувствителен к зашумленным данным и выбросам.
- Предоставленное решение может быть субоптимальным решением.
- Алгоритм может не справиться с возрастающей сложностью.
Использование Adaboost с классификатором дерева решений может повысить производительность модели.
Чтобы правильно оценить производительность каждой выбранной нами модели, важно соблюдать следующие функции:
- метрики — оценка F при тестировании при использовании 100% обучающих данных,
- время предсказания/обучения
- соответствие алгоритма данным.
В соответствии с этими тремя показателями можно выбрать лучшую модель.
1.4 Настройка модели
В приложениях машинного обучения нам необходимо оптимизировать различные гиперпараметры, такие как скорость обучения, коэффициент регуляризации и т. д. Во многих случаях мы не можем попробовать все комбинации из-за экспоненциально растущего числа комбинаций. Поэтому для решения и нахождения оптимальных точек нельзя использовать специальные процедуры оптимизации. Цель оптимизации гиперпараметров состоит в том, чтобы найти набор значений гиперпараметров, который минимизирует функцию ошибки проверки. Для каждой пары гиперпараметров нам нужно решить задачу оптимизации. Набор гиперпараметров следует выбирать тщательно, чтобы найти правильное сочетание их значений, которое может обеспечить минимальные потери/ошибки или максимальную точность в соответствии с поставленной задачей. Одним из наиболее часто используемых методов настройки гиперпараметров является Поиск по сетке.
Поиск по сетке можно определить как поиск параметров, обеспечивающих наилучшую производительность. Техника поиска по сетке основана на проверке различных наборов гиперпараметров, чтобы найти и подтвердить наилучшую производительность и точность набора данных. В наборе данных гиперпараметры определяются как параметры, которые не изучаются непосредственно в оценщиках. На первом этапе для каждого гиперпараметра алгоритм поиска по сетке исследует небольшой набор значений, а затем обучает модель для каждого набора, связанного с гиперпараметрами. Наконец, выбираются лучшие значения параметров, если процедура не повторяется. Таким образом, поиск по сетке можно использовать для оптимизации алгоритмов обучения, чтобы найти лучший классификатор для различной комбинации параметров. Для каждого набора гиперпараметров поиск по сетке оценивает функцию ошибки проверки и выбирает пару, которая дает минимальное значение функции ошибки проверки. Нет никакой гарантии, что поиск даст идеальное решение, так как он обычно находит его путем наложения псевдонимов вокруг правильного набора.
Переобучение можно назвать основной проблемой машинного обучения. Чтобы предотвратить переоснащение и использовать модель в целом, выполняется расщепление. Набор данных разделен на тестовые и обучающие данные. Тем не менее, переобучение по-прежнему представляет собой риск для моделирования. Поэтому внутри данных проверки выполняется другое разделение данных. Однако прямое разделение набора поездов на наборы поездов и валидаций уменьшит количество образцов, используемых для обучения. Чтобы сохранить свойство выборки, набор обучающих данных разбивается на k меньших наборов, процедура которых называется перекрестной проверкой. K-кратная перекрестная проверка получит набор обучающих данных и разделит их на k групп данных. И в каждой группе данных будет происходить обучение и проверка. Таким образом, при обучении и тестировании каждой группы будут использоваться разные параметры регулирования, чтобы максимизировать производительность модели. И, наконец, среднее значение этих параметров используется для оценки производительности модели. Метод сетки используется для каждой подгруппы, несмотря на общий набор данных. И процесс оптимизации можно сделать более простым способом.
Важность признаков – это важная задача при обучении под наблюдением с набором данных, таким как данные переписи, которые мы изучаем здесь, чтобы определить, какие признаки обеспечивают наибольшую прогностическую силу. Сосредоточив внимание на взаимосвязи между несколькими важными функциями и целевым ярлыком, мы упростим наше понимание явления, что в большинстве случаев полезно.
После настройки модели у нас есть окончательная модель, и мы готовы сделать прогноз о следующих днях покупки.
использованная литература
[1] https://www.optimove.com/resources/learning-center/rfm-segmentation
[2] https://www.putler.com/rfm-analysis/
[3] https://www.saksoft.com/predicting-customer-next-purchase-day/
[4] https://essay.utwente.nl/74808/1/seippel_MA_eemcs.pdf
[5] https://community.alteryx.com/t5/Alteryx-Designer-Discussions/predicting-when-next-saleswill-take-place/td-p/46524
[6] https://www.kdnuggets.com/2020/05/hyperparameter-optimization-machine-learningmodels.html