Максимизация прибыли и снижение затрат на масштабные маркетинговые кампании

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

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

Моделирование подъема — это метод, который помогает определить увеличение вероятности того, что клиент, получивший маркетинговые предложения, купит продукт.

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

В моделях подъема есть 4 группы, в том числе:

  1. Респонденты обращения (TR):клиенты будут покупать, потому что они получают предложение. (положительный подъем)
  2. Лица, не ответившие на лечение (TN):клиенты не будут покупать, независимо от того, получили ли они маркетинговое предложение. (нулевой подъем)
  3. Контрольные респонденты (CR):клиенты будут покупать независимо от того, получили ли они маркетинговое предложение или нет. (нулевой подъем)
  4. Контроль неответивших (CN):клиенты не будут покупать, потому что они получили предложение. (отрицательный подъем)

Нашей целью будут Респонденты обращения (TR), которыеявляются клиентами, которые не будут покупать, если вы не предложите рекламную акцию, поэтому мы будем ориентироваться на этих клиентов в рекламных кампаниях. И наоборот, мы не будем отправлять предложение неответчикам на лечение (TN), контрольным нереспондерам (CN) и контрольным респондерам (CR), чтобы уменьшить затраты на маркетинг и максимизировать рентабельность инвестиций (ROI).

Следовательно, сегодня мы используем модели подъема и классификатор для определения вероятности того, что клиент купит продукт. После этого мы можем настроить таргетинг на тех, кто определен как ответчики на лечение (TR) в маркетинговой кампании.

▹Шаг 1: Маркировка клиентов и прогнозирование вероятности попадания клиентов в каждую группу.

▹Шаг 2: Расчет оценки повышения. Более высокий балл означает более высокий подъем.

Uplift Score = P(TR)/P(T) + P(CN)/P(C) - P(TN)/P(T) - P(CR)/P(C)

★ Шаг 1. Прогнозирование вероятности попадания клиентов в каждую группу с помощью Kmeans и классификатора XGBoost.

Мы маркируем клиентов на основе их покупательского поведения. Если клиент никогда не получает рекламного предложения и не покупает продукт, он помечается как «1», CR: контрольные респонденты. Другими словами, клиент покупает без предложения.

После этого разделите данные на 4 группы на основе истории покупок клиентов с помощью Kmeans, а затем с помощью XGBoost Classifierпредсказать вероятность попадания в каждую группу.

# load data
df = pd.read_csv('data.csv')
# label for classifier
df['campaign_group'] = 'treatment'
df.loc[df.offer == 'No Offer', 'campaign_group'] = 'control'
#0 = CN: Control Non-Responders
df['target_class'] = 0
#1 = CR: Control Responders
df.loc[(df.campaign_group == 'control') & (df.conversion > 0),'target_class'] = 1
#2 = TN: Treatment Non-Responders
df.loc[(df.campaign_group == 'treatment') & (df.conversion == 0),'target_class'] = 2
#3 = TR: Treatment Responders
df.loc[(df.campaign_group == 'treatment') & (df.conversion > 0),'target_class'] = 3
#creating clusters
kmeans = KMeans(n_clusters=4)
kmeans.fit(df[['history']])
df['history_cluster'] = kmeans.predict(df[['history']]) 
#dropping unnecessary columns
df_model = df.drop(['offer','campaign_group','conversion'],axis=1) 
df_model = pd.get_dummies(df_model)
#create feature set and labels
X = df_model.drop(['target_class'],axis=1)
y = df_model.target_class#splitting train and test groups
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)
#fitting the model and predicting the probabilities
xgb_model = xgb.XGBClassifier().fit(X_train, y_train)
class_probs = xgb_model.predict_proba(X_test)

★ Шаг 2: Расчет оценки повышения по следующей формуле:

proba = xgb_model.predict_proba(df_model.drop(['target_class'],axis=1))
df_model['proba_CN'] = proba[:,0] 
df_model['proba_CR'] = proba[:,1] 
df_model['proba_TN'] = proba[:,2] 
df_model['proba_TR'] = proba[:,3]
#calculate uplift score for customers
df_model['uplift_score'] = df_model.eval('\
    proba_CN/(proba_CN+proba_CR) \
    + proba_TR/(proba_TN+proba_TR) \
    - proba_TN/(proba_TN+proba_TR) \
    - proba_CR/(proba_CN+proba_CR)')
#assign it back to main dataframe
df['uplift_score'] = df_model['uplift_score']

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

QINI, значение подъема, рассчитывается по формуле

QINI = TR - [(CR*T)/C]
# Normalizing the QINI
QINI = (TR/T) - (CR/C)
where 
T denotes the total treated population (TR + TN), and 
C denotes the total untreated population (CR + CN)

На основе кривой QINI модель подъема работает лучше, чем случайная модель.

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

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

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

Подъем подразумевает увеличение вероятности исхода с лечением по сравнению с исходом без лечения.

Основное внимание уделяется эффективности лечения и поиску убедительных аргументов.

Примените модель Uplift к различным вариантам использования:

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

Дополнительные темы оптимизированной маркетинговой кампании:

Полное руководство по A/B-тестированию в Python

Ваши аплодисменты побудят меня написать больше статей. Если у вас есть какие-либо вопросы или что-то, что нужно улучшить, напишите комментарий в разделе комментариев или отправьте мне письмо по электронной почте — [email protected]

Jupyter Notebook обновляется в Github