Статья написана в соавторстве с Олегом Бекузаровым, руководителем группы аналитиков GlowByte (@olegbekuzarov).

В последние годы компании с достаточной зрелостью процессов целевого маркетинга ставят перед собой задачу оценивать эффективность не отдельных кампаний, а всех кампаний в совокупности по всем клиентам на продолжительном отрезке времени. Это связано с тем, что сети часто пытаются максимизировать выручку и прибыль лишь на горизонте действия целевой кампании, не учитывая, что может произойти каннибализация будущей выручки. Помимо этого, при активной контактной политике некоторые компании могут отправлять сразу несколько коммуникаций на клиента в один период времени. Если не учесть это при оценке кампаний, эффект будет дублироваться. В данной статье мы, команда Retail Solution компании GlowByte, планируем раскрыть основные сложности и особенности, с которыми придется столкнуться при разработке и внедрении методики оценки эффективности CRM. Результаты получены нами на проекте с одним из ведущих ритейлеров страны.

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

Первый, подготовительный этап

Включает в себя:

  • Определение целевой метрики и параметров стратификации

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

  • Определение сегментов клиентов для оценки 

Сегментация объединяет клиентов с одинаковым покупательским поведением. У каждого сегмента может быть своя цель воздействия, в связи с этим отличаются и метрики оценки эффективности CRM. В разных кампаниях сегменты определяются по разным параметрам.  Как правило, имеют значение такие характеристики клиента, как давность покупки, дата регистрации, количество и сумма покупок. Чаще всего клиентов делят на активных, новичков и отток. При определении сегментов стоит учитывать их потенциальный размер: чем меньше сегмент, тем больше мощности потребуется для проведения статистического теста.

  • Фильтрацию выбросов, другими словами, очищение базы от аномальных клиентов

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

Выбросы определяются с помощью трех сигм. Метод предполагает, что 99,7% значений распределены в интервале трех стандартных отклонений (сигм) от среднего:

Правило 3-х сигм
Правило 3-х сигм

Таким образом, выбросами считаются значения, отклоняющиеся от среднего больше, чем на три сигмы.

  • Определение оптимальной доли контрольной группы для каждого сегмента

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

Для расчета минимального допустимого объема контрольной группы (КГ) используется метод интервальной оценки предполагаемой разницы между удельными тратами контрольной и целевой групп. Другими словами, в каком диапазоне будет лежать дельта удельных трат в отчетном периоде при заданной доле контрольной группы и ожидаемом эффекте.

Формула доверительного интервала для дельты удельных трат
Формула доверительного интервала для дельты удельных трат

Для тестирования полученной доли КГ используется синтетический A/B-тест, который оценивает, насколько возможно при разных долях контрольной группы зафиксировать статистически значимый результат. Синтетический A/B-тест оценивает вероятность ошибки второго рода, то есть вероятность не заметить ожидаемый эффект. Он моделирует результаты отчетного периода с учетом потенциальной доли клиентов с покупками и ожидаемого минимального эффекта. 

Пример функции синтетического A/B-теста:

#sample_share=1 - доля клиентов с покупками
def test_ab(table, 
            effect = 1.005, # минимальный ожидаемый эффект
            num_experiments=1000, # количество выборок
            sample_share=1, # доля клиентов с покупками
            p=0.05, # alpha
            parameter='m'): # целевой параметр
  
  grp_data_0=table[table['ctrl_flg']==0][parameter]*effect # ожидаемые значения целевого параметра в целевой группе
  grp_data_1=table[table['ctrl_flg']==1][parameter] # значения целевого параметра в контрольной группе
  data = []
  
  p_values = []
  p_values_boot = []
  means=[]

  for i in range(num_experiments):
    # выборка клиентов целевой группы
    bootstrap_sample_0 = grp_data_0.sample(n = int(grp_data_0.shape[0]*sample_share), replace = True, random_state = None)
    bootstrap_sample_0=bootstrap_sample_0.append(pd.Series([0]*(int(grp_data_0.shape[0]*(1-sample_share)))))
    # выборка клиентов контрольной группы
    bootstrap_sample_1 = grp_data_1.sample(n = int(grp_data_1.shape[0]*sample_share), replace = True, random_state = None)
    bootstrap_sample_1=bootstrap_sample_1.append(pd.Series([0]*(int(grp_data_1.shape[0]*(1-sample_share)))))
    bootstrap_sample_1_mean = round(bootstrap_sample_1.mean(),2)
    
    # тест Стьюдента для синтетических выборок
    p_value = ttest_ind(bootstrap_sample_0, bootstrap_sample_1, equal_var = False)[1]
    p_values.append(p_value)
    means.append(bootstrap_sample_1_mean)

  share = round(sum(np.array(p_values) < p)/num_experiments,4) 
  cg_mean=mean(means)
    
  return share, cg_mean

Второй, ключевой этап

На данном шаге проводится стратификация – разделение клиентов на целевую и контрольную группы. Разделение необходимо осуществить таким образом, чтобы клиенты контрольной и целевой групп до воздействия на них коммуникациями не имели статистически значимых различий по определенным ранее показателям (первый этап). 

Как было упомянуто ранее, атрибуты стратификации составляют метрики KPI  (например, траты клиента) и параметры, по которым клиенты отбираются в целевые кампании (например, частота и давность покупки). Таким образом, до воздействия контрольная и целевая группа не отличаются целевой метрикой и имеют одинаковую вероятность участия в маркетинговых кампаниях. 

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

Для проверки сопоставимости контрольной и целевой группы проводится t-тест Стьюдента. Кроме этого, для главной метрики (траты) моделируется синтетический АА-тест. Из целевой (tg) и контрольной группы (cg) методом bootstrap рандомно n раз формируются выборки такого же размера (tg1 и cg1). В результате получается n пар выборок tg1 и cg1. Каждая пара проверяется на наличие статистически значимого различия, далее определяется доля таких случаев. Она может варьироваться в зависимости от выбранного уровня значимости: например, 5% является допустимой для 95% уровня значимости.

Пример функции синтетического АА-теста:

def test_aa(table, 
            num_experiments=1000, # кол-во выборок
            p=0.05, # alpha
            parameter='m'): # целевой параметр
  
  grp_data_0=table[table['ctrl_flg']==0][parameter] # распределение целевого параметра в целевой группе
  grp_data_1=table[table['ctrl_flg']==1][parameter] # распределение целевого параметра в контрольной группе
  data = []
  
  p_values = []

  for i in range(num_experiments):
    # выборка клиентов целевой группы
    bootstrap_sample_0 = grp_data_0.sample(n = grp_data_0.shape[0], replace = True, random_state = None)
    # выборка клиентов контрольной группы
    bootstrap_sample_1 = grp_data_1.sample(n = grp_data_1.shape[0], replace = True, random_state = None)
    
    p_value = ttest_ind(bootstrap_sample_0, bootstrap_sample_1, equal_var = False)[1] # тест Стьюдента для синтетических выборок
    p_values.append(p_value)

  share = round(1-sum(np.array(p_values) < p)/num_experiments, 4) # доля экспериментов, когда стат. значимое различие не обнаружено
    
  return share

Еще один подводный камень данного этапа заключается в периоде заморозки. Со временем контрольная и целевая группы могут начать различаться по естественным причинам при отсутствии воздействия. В данном случае для проверки стратификации можно провести ретроспективный АА-тест, который позволит определить, через какой период группы становятся не сопоставимы. 

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

Третий этап

В завершение фиксируются результаты воздействия на целевую группу. Совокупный эффект от коммуникаций складывается из эффектов по каждому из сегментов. Для сегментов, где достаточно клиентов с покупкой (например, активные и новички), эффект вычисляется по дельте удельных трат между целевой и контрольной группами. 

Для статистической достоверности группы сравниваются на наличие значимых различий с помощью t-критерия Стьюдента. Для сегментов с небольшой долей клиентов с покупками (отток, ушедшие) эффект оценивается по чистому отклику, другими словами, по тому, насколько больше клиентов совершили покупку в целевой группе, чем в контрольной. Статистический тест проводится с помощью z-критерия. Не статистически значимые результаты обнуляются. Кроме этого, применяется поправка на множественное тестирование гипотез. 

Таким образом, основные инструменты, которые используются для оценки работы CRM:

  • сегментация – распределение клиентов в зависимости от покупательской активности. Оценка эффекта производится внутри каждого сегмента по отдельности;

  • стратификация – равномерное распределение клиентов между контрольной и целевой группами;

  • синтетический A/B-тест – моделирование A/B-теста путем искусственного увеличения среднего целевой группы. Используется для определения оптимальной доли контрольной группы, а также для оценки вероятности детектировать ожидаемый эффект;

  • синтетический АА-тест – сравнение целевой и контрольной группы до воздействия в целях проверки их сопоставимости;

  • статистические критерии для проверки результатов на значимость.

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

Комментарии (0)