Привет, Хабр!

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

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

Сбор и интеграция омниканальных данных

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

Источники данных: от веб-трафика до офлайн-посещений

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

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

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

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

  4. Call-центры и офлайн-данные: Не стоит забывать и о традиционных методах взаимодействия с клиентами. Звонки в колл-центр и визиты в физические магазины - это тоже важные источники данных. Важно уметь объединять эти данные с онлайн-информацией, чтобы создать действительно целостное представление о клиенте.

Методы сбора данных: API, CRM, и не только

Сбор данных - это далеко не просто процесс сохранения информации в базу данных. Это стратегия, где используются разные инструменты и подходы.

  1. Автоматизированные системы: Использованиеинструментов, которые автоматически собирают данные, может существенно облегчить процесс. Например, системы веб-аналитики, которые позволяют автоматически отслеживать поведение пользователей на сайте и собирать ключевые метрики.

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

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

Интеграция данных

Теперь, когда данные собраны, начинается интеграция. Здесь важно не просто объединить данные, но и нормализовать их, чтобы они говорили на одном языке.

  1. Объединение данных: Этот этап включает в себя сбор всех данных в одно место, где они могут быть проанализированы. Важно правильно настроить идентификацию пользователей, чтобы данные из разных каналов связывались с одним и тем же клиентом. Например, один и тот же пользователь может взаимодействовать с брендом через веб-сайт, мобильное приложение и колл-центр. Чтобы правильно объединить эти данные, нужно подключать различные идентификаторы.

  2. Нормализация данных: Данные из разных источников часто имеют разный формат. Например, одно и то же действие в веб-аналитике и CRM может называться по-разному. Задача нормализации заключается в приведении всех данных к единому формату, чтобы их можно было анализировать совместно.

  3. Создание единого профиля клиента: После того, как данные объединены и нормализованы, на их основе создается единый профиль клиента. Этот профиль включает в себя все взаимодействия клиента с брендом, его предпочтения, поведение и историю покупок.

Методы анализа данных

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

  1. Когортный анализ

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

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

  2. Сегментация

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

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

  3. Персонализация

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

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

  4. Создание моделей поведения

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

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

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

Пример анализа

Создадим абстрактный набор данных

Начнем с создания рандомного набора данных:

import pandas as pd
import numpy as np

# генерация данных клиентов
np.random.seed(42)
num_customers = 2000
customer_ids = np.arange(1, num_customers + 1)

# базовая информация о клиентах
customers = pd.DataFrame({
    'customer_id': customer_ids,
    'signup_date': pd.to_datetime(np.random.choice(pd.date_range(start='2022-01-01', end='2022-12-31'), num_customers)),
    'age': np.random.randint(18, 65, size=num_customers),
    'gender': np.random.choice(['Male', 'Female'], size=num_customers),
    'location': np.random.choice(['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'], size=num_customers),
    'income_level': np.random.choice(['Low', 'Medium', 'High'], size=num_customers)
})

# генерация данных о взаимодействии с каналами
num_interactions = 20000
interactions = pd.DataFrame({
    'interaction_id': np.arange(1, num_interactions + 1),
    'customer_id': np.random.choice(customer_ids, num_interactions),
    'channel': np.random.choice(['website', 'mobile_app', 'call_center', 'physical_store'], num_interactions),
    'interaction_date': pd.to_datetime(np.random.choice(pd.date_range(start='2023-01-01', end='2023-07-31'), num_interactions)),
    'interaction_type': np.random.choice(['view_product', 'add_to_cart', 'purchase', 'customer_support', 'visit_store'], num_interactions),
    'amount': np.where(np.random.rand(num_interactions) > 0.7, np.round(np.random.uniform(10.0, 1000.0, num_interactions), 2), 0)
})

# объединение данных клиентов и взаимодействий
data = pd.merge(interactions, customers, on='customer_id')

# вычисление дополнительных метрик
data['days_since_signup'] = (data['interaction_date'] - data['signup_date']).dt.days
data['product_views_before_purchase'] = data.groupby('customer_id')['interaction_type'].apply(lambda x: (x == 'view_product').cumsum())
data['average_time_between_interactions'] = data.groupby('customer_id')['days_since_signup'].diff().fillna(0)

Анализ с когортным методом

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

# определение когорт на основе месяца регистрации
data['signup_month'] = data['signup_date'].dt.to_period('M')

# анализ активности по когортам
cohort_data = data.groupby(['signup_month', 'days_since_signup', 'interaction_type']).agg({
    'interaction_id': 'count',
    'amount': 'sum'
}).rename(columns={'interaction_id': 'num_interactions', 'amount': 'total_spent'})

cohort_data.reset_index(inplace=True)
print(cohort_data.head())

# вычисление конверсии по когортам
cohort_conversion = cohort_data[cohort_data['interaction_type'] == 'purchase'].copy()
cohort_conversion['conversion_rate'] = cohort_conversion['num_interactions'] / cohort_data.groupby('signup_month')['num_interactions'].transform('sum')
print(cohort_conversion.head())

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

Сегментируем клиентов

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

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# выбор признаков для кластеризации
features = ['age', 'income_level', 'product_views_before_purchase', 'average_time_between_interactions', 'total_spent']
data_for_clustering = data.groupby('customer_id').agg({
    'age': 'mean',
    'product_views_before_purchase': 'sum',
    'average_time_between_interactions': 'mean',
    'total_spent': 'sum',
    'income_level': lambda x: x.mode()[0] if len(x.mode()) > 0 else np.nan
}).dropna()

# преобразование категориальных данных
income_map = {'Low': 0, 'Medium': 1, 'High': 2}
data_for_clustering['income_level'] = data_for_clustering['income_level'].map(income_map)

# масштабирование данных
scaler = StandardScaler()
scaled_features = scaler.fit_transform(data_for_clustering)

# применение K-means кластеризации
kmeans = KMeans(n_clusters=4, random_state=42)
data_for_clustering['cluster'] = kmeans.fit_predict(scaled_features)

print(data_for_clustering.head())

Выбрали несколько признаков, которые характеризуют клиентов, и провели кластеризацию с использованием K-means. В результате получаем несколько кластеров, которые представляют различные группы клиентов.

Применим ML

Теперь, когда есть сегменты клиентов, можно создать модель, которая будет предсказывать вероятность покупки на основе характеристик клиентов:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# подготовка данных для машинного обучения
X = data_for_clustering.drop(columns=['cluster'])
y = data_for_clustering['cluster']

# разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# обучение модели
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# предсказание на тестовой выборке
y_pred = model.predict(X_test)

# оценка модели
print(classification_report(y_test, y_pred))

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

Визуализируем

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

import matplotlib.pyplot as plt
import seaborn as sns

# визуализация кластеров клиентов
plt.figure(figsize=(12, 6))
sns.scatterplot(data=data_for_clustering, x='age', y='total_spent', hue='cluster', palette='viridis')
plt.title('Кластеры клиентов по возрасту и сумме потраченных средств')
plt.xlabel('Возраст')
plt.ylabel('Сумма потраченных средств')
plt.show()

# визуализация конверсии по когортам
plt.figure(figsize=(12, 6))
sns.lineplot(data=cohort_conversion, x='days_since_signup', y='conversion_rate', hue='signup_month')
plt.title('Конверсия по когортам')
plt.xlabel('Дни с момента регистрации')
plt.ylabel('Конверсия')
plt.legend(title='Месяц регистрации')
plt.show()

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


Больше практических навыков по аналитике вы можете получить в рамках практических онлайн-курсов от экспертов отрасли.