Инструменты

RFM-Анализ в действии: как повысить лояльность и увеличить выручку

RFM-анализ (от англ. RecencyFrequencyMonetary ) является мощным инструментом для анализа и оптимизации маркетинговых стратегий на основе потребительского поведения. Этот метод позволяет оценить ценность клиентов и классифицировать их с учетом трех ключевых параметров: недавней активности (Recency), частоты покупок (Frequency) и суммы потраченных денег (Monetary). Анализируя эти аспекты, компании могут более эффективно настраивать свои маркетинговые кампании, улучшать обслуживание клиентов и оптимизировать процессы удержания клиентов.

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

Введение в RFM-анализ

RFM-анализ представляет собой метод сегментации клиентов на основе трех ключевых показателей:

  1. Recency — последняя активность: показатель отражает последнюю активность клиента или дату последней покупки. Чем ближе клиент к моменту последней активности, тем выше его рейтинг по этому показателю. Это позволяет идентифицировать клиентов, которые недавно проявили интерес к продуктам или услугам компании.
  2. Frequency — частота: показатель оценивает, насколько часто клиент совершает покупки. Чем больше покупок сделал клиент, тем выше его рейтинг по этому параметру. Это помогает выявить наиболее лояльных клиентов, часто возвращающихся за покупками.
  3. Monetary — сумма потраченных денег: показатель отражает общую сумму денег, которую клиент потратил в компании за определенный период времени. Клиенты, которые потратили больше, получают более высокий рейтинг по этому параметру.

Исходя из общепринятой практики, для более детального и точного RFM-анализа показатели RecencyFrequencyи Monetary обычно разделяют на 3 ступеней.

Recency:

  1. Низкая (Low) – клиенты, которые несколько месяцев не совершали покупок.
  2. Средняя (Medium) – клиенты, которые совершали покупки в последние несколько месяцев.
  3. Высокая (High) – клиенты, которые совершали покупки недавно.

Frequency:

  1. Низкая (Low) – клиенты, совершившие небольшое количество покупок.
  2. Средняя (Medium) – клиенты, совершившие умеренное количество покупок.
  3. Высокая (High) – клиенты, совершившие много покупок.

Monetary:

  1. Низкие (Low) – клиенты, потратившие небольшую сумму денег.
  2. Средние (Medium) – клиенты, потратившие среднюю сумму денег.
  3. Высокие (High) – клиенты, потратившие большую сумму денег.

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

Зачем нужен RFM-анализ?

RFM-анализ в корне основан на принципе Парето, который подчеркивает, что 20% усилий приводят к 80% результатов, в то время как остальные 80% усилий приносят лишь 20% результатов. Переводя это на язык маркетинга, это означает, что 80% выручки компании обычно генерируются от 20% постоянных и лояльных клиентов. Следовательно, ключевой задачей для бизнеса является выявление и сосредоточивание внимания на этой важной группе покупателей. Именно для этой цели и используется RFM-сегментация потребителей.

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

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

RFM-сегментация важна для эффективного взаимодействия с потребителями, увеличения ROI и LTV. По итогам RFM-анализа вы будете знать, кому и какую рекламу показывать, какую email-рассылку планировать и какие бонусы предлагать.

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

Какие условия необходимы для проведения RFM-анализа?

Для успешного проведения RFM-анализа следует учесть следующие условия:

— Высокая регулярность покупок: RFM-анализ эффективен, когда у вас есть клиенты, совершающие покупки с некоторой регулярностью. Этот метод помогает выявить различия в поведении клиентов, что позволяет оптимизировать маркетинговые усилия.

— Возможность собирать данные о покупках для каждого отдельного клиента: Для успешной реализации RFM-анализа необходимо иметь доступ к данным о каждой покупке каждого клиента, включая дату покупки, количество и сумму покупки. Эти данные позволяют создать RFM-метрики для каждого клиента.

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

Преимущества RFM-анализа

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

RFM-анализ охотно ответит вам на такие вопросы, как

  • Кто – мои лучшие клиенты?
  • Кто из моих клиентов на грани потери?
  • Кого потенциально можно перевести в более платящий сегмент?
  • Кто – мои потерянные клиенты, на которых нужно обратить особое внимание?
  • Кого из клиентов необходимо удерживать всеми силами?
  • Кто из моих клиентов наиболее лоялен к моему бренду?
  • Какой сегмент клиентов наиболее хорошо откликается на текущие рекламные кампании?

Недостатки RFM-анализа

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

  1. Ограниченность данных: RFM-анализ основан на исторических данных о покупках клиентов, и если у компании нет достаточного объема данных или данные устарели, анализ может быть менее точным и информативным.
  2. Упрощенный взгляд: RFM-анализ учитывает только три фактора – давность, частоту и сумму покупок, что может не учитывать другие важные аспекты поведения клиентов, такие как сезонные колебания или изменения в предпочтениях.
  3. Не учитывает контекст: RFM-анализ не учитывает контекст и специфику отрасли или бизнеса. Он может пропустить важные нюансы, которые влияют на поведение клиентов.
  4. Ограниченность сегментации: RFM-анализ создает сегменты на основе числовых значений RFM, что может привести к тому, что клиенты в одной группе будут слишком похожи между собой, и не учтены будут индивидуальные особенности.
  5. Отсутствие предсказательной способности: RFM-анализ описывает прошлое поведение клиентов, но не предсказывает будущие действия или потенциальные изменения в поведении клиентов.
  6. Не учитывает качество: RFM-анализ не учитывает качество покупок или удовлетворенность клиентов, что может быть также важным фактором для успеха бизнеса.
  7. Не всегда применим: RFM-анализ может быть менее полезным для бизнесов, которые имеют ограниченное количество клиентов или работают в узкой нише, где поведение клиентов сильно различается от общепринятых моделей.

Реализация RFM-анализа на Python

Теперь мы рассмотрим процесс реализации RFM-анализа сначала пошагово, а затем с использованием библиотеки “RFM”, с помощью языка программирования Python на основе данных из набора Online Retail, доступного на платформе Kaggle.

Для начала импортируем стандартные библиотеки для работы с датасетом

Python
import pandas as pd
import numpy as np

# Загрузка датасета (предварительно скачайте его с Kaggle и укажите правильный путь)
data = pd.read_csv('OnlineRetail.csv', encoding='unicode_escape')
  1. InvoiceNo: Это уникальный номер для каждой транзакции или заказа. Каждая транзакция или заказ имеет свой уникальный InvoiceNo.
  2. StockCode: Это код (или номер) продукта или товара, который был включен в заказ. Каждый продукт имеет свой собственный уникальный StockCode.
  3. Description: Это описание продукта или товара, связанное с соответствующим StockCode: Оно представляет собой текстовое описание товара.
  4. Quantity: Это количество товаров, включенных в заказ. Это показывает, сколько единиц товара было заказано в данной транзакции.
  5. InvoiceDate: Это дата и время, когда была сделана транзакция. Обычно это дата и время размещения заказа.
  6. UnitPrice: Это цена за одну единицу товара в местной валюте.
  7. CustomerID: Это уникальный идентификационный номер клиента, который разместил заказ. Этот номер позволяет связать заказ с определенным клиентом.
  8. Country: Это страна, в которой находится клиент, разместивший заказ.

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

Далее, подготовим данные для проведения RFM-анализа, а именно колонку InvoiceDate преобразуем из строкового формата в формат datetime. 

Python
# Преобразование 'InvoiceDate' в формат datetime
data['InvoiceDate'] = pd.to_datetime(data['InvoiceDate'])

Также выполним очистку данных от недопустимых значений. Для этого удаляются строки, в которых есть пропущенные значения (NaN), а также строки, в которых количество товаров (Quantity) или цена за единицу товара (UnitPrice) меньше или равны нулю. Это позволяет исключить ошибочные или некорректные записи из анализа.

Python
# Очистка данных
data = data.dropna()
data = data[data['Quantity'] > 0]
data = data[data['UnitPrice'] > 0]

Далее необходимо добавить новую колонку TotalPrice, в которой вычисляется общая сумма заказа как произведение количества товаров (Quantity) на цену за единицу товара (UnitPrice). Это позволит учесть монетарную стоимость каждой транзакции.

Python
# Создание колонки с общей суммой заказа
data['TotalPrice'] = data['Quantity'] * data['UnitPrice']

Группируем данные по клиентам и вычисляем RFM-метрики

Данные группируются по уникальным идентификаторам клиентов (CustomerID). Для каждого клиента вычисляются следующие RFM-метрики:

  • Recency (R): Количество дней с момента последней транзакции клиента. Это значение вычисляется с использованием разницы между максимальной датой транзакции во всем датасете и датой последней транзакции клиента.
  • Frequency (F): Количество транзакций клиента, то есть сколько раз клиент совершил покупки.
  • Monetary (M): Общая монетарная стоимость, потраченная клиентом на покупки.
Python
# Группировка данных по клиентам и вычисление RFM-метрик
rfm_data = data.groupby('CustomerID').agg({
    'InvoiceDate': lambda x: (data['InvoiceDate'].max() - x.max()).days,
    'InvoiceNo': 'count',
    'TotalPrice': 'sum'
}).reset_index()

# Переименование столбцов
rfm_data.rename(columns={'InvoiceDate': 'Recency',
                         'InvoiceNo': 'Frequency',
                         'TotalPrice': 'Monetary'}, inplace=True)

Давайте рассмотрим динамику Recency, то есть, сколько дней прошло с момента последней покупки. Можно заметить, что в самом начале наблюдается интенсивная активность, которая достигает своего пика в первые 30-40 дней, после чего уровень активности снижается, но остается на стабильном уровне.

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

На графике Monetary мы наблюдаем пик в диапазоне 300-350 y.e., и график характеризуется некоторой непостоянной флуктуацией. Это может указывать на наличие сезонных влияний, что подразумевает, что разделение данных на равные промежутки или по квартилям может быть не самым оптимальным решением. Этот подход не учитывает колебания и другие факторы.

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

Сегментация клиентов

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

Для достижения этой цели мы создали три функции:  recency(),  frequency() и monetary(), которые будут отвечать за фактическое разделение клиентов на соответствующие сегменты.

Python
def recency(data):
    if data <= 30:
        return 3
    elif (data > 30) and (data <= 100):
        return 2
    else:
        return 1
    
def frequency(data):
    if data <= 3:
        return 3
    elif (data > 3) and (data <= 12):
        return 2
    else:
        return 1
    
def monetary(data):
    if data <= 400:
        return 1
    elif (data > 400) and (data <= 1000):
        return 2
    else:
        return 3

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

Python
rfm_data['R'] = rfm_data['Recency'].apply(recency)
rfm_data['F'] = rfm_data['Frequency'].apply(frequency)
rfm_data['M'] = rfm_data['Monetary'].apply(monetary)

Соединяем RFM-сегменты в одну общую метку:

Python
rfm_data['RFM_Segment'] = rfm_data['R'].astype(str) + rfm_data['F'].astype(str) + rfm_data['M'].astype(str)

Следующий этап нашего анализа заключается в вычислении RFM-Суммы (RFM-Score) для каждого клиента. Эта сумма является итоговым числовым показателем, полученным путем сложения значений метрик R (Recency), F (Frequency) и M (Monetary) для каждого клиента. RFM-Сумма позволяет количественно оценить клиентов на основе их активности и ценности для бизнеса.

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

  • Клиенты с RFM-Суммой 7 и выше считаются “High Value” (высокая ценность).
  • Клиенты с RFM-Суммой от 4 до 6 включительно считаются “Medium Value” (средняя ценность).
  • Клиенты с RFM-Суммой 3 и ниже считаются “Low Value” (низкая ценность).
Python
# Определение сегментов на основе заданных интервалов
def segment_name(score):
    if score >= 7:
        return 'High Value'
    elif 4 <= score <= 6:
        return 'Medium Value'
    else:
        return 'Low Value'

# Создание новой колонки 'Segment Name' на основе RFM_Score
rfm_data['Segment Name'] = rfm_data['RFM_Score'].apply(segment_name)

Визуализация результата

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

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

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

Библиотека RFM

Установка библиотеки RFM

Для начала установите библиотеку RFM с помощью pip:

Python
pip install rfm

Создайте объект RFM

Создайте объект RFM, указав параметры:

  1. customer_id: имя столбца с уникальными идентификаторами клиентов.
  2. transaction_date: имя столбца с датой транзакции.
  3. amount: имя столбца с суммой транзакции.
Python
r = RFM(data, customer_id='CustomerID', transaction_date='InvoiceDate', amount='TotalPrice')

Получите результаты RFM-анализа

Вы можете получить таблицу RFM с оценками и таблицу с сегментами клиентов:

Python
# Получите таблицу RFM
rfm_table = r.rfm_table

# Получите таблицу с сегментами клиентов
segment_table = r.segment_table

Визуализируйте результаты

Используйте методы библиотеки RFM для визуализации результатов анализа:

Python
# Постройте гистограммы для Recency, Frequency и Monetary
r.plot_rfm_histograms()
Python
# Постройте распределение заказов по числу клиентов
r.plot_rfm_order_distribution()
Python
# Постройте scatter plot двух выбранных столбцов (например, recency и monetary_value)
r.plot_versace_plot(column1='recency', column2='monetary_value')
Python
# Постройте распределение выбранного столбца по сегментам
r.plot_distribution_by_segment(column='recency', take='median')
Python
# Постройте распределение сегментов по количеству клиентов
r.plot_segment_distribution()

Сегментация клиентов

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

Python
# Найдите клиентов в сегменте "Champions"
champions_customers = r.find_customers('Champions')
champions_customers

Заключение

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

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

Скачать Jupiter Notebook 🚀

Пред.
Дисперсия: путь к пониманию разброса данных

Дисперсия: путь к пониманию разброса данных

Содержание Show Дисперсия: What it is?

След.
Руководство по установке и настройке Apache Airflow на сервер с использованием Docker

Руководство по установке и настройке Apache Airflow на сервер с использованием Docker

Содержание Show Шаг 1