Омниченнел — омниченнел?

На конференциях только и разговоров, что об омниканальном маркетинге. Правда, до реальных данных редко когда доходит: слишком сложно идентифицировать одного и того же покупателя в разных каналах. Поэтому мы разработали свой алгоритм R46 Identifier (читайте статью) — он помогает получить самые точные данные о поведении покупателей в омниканальном ритейле.

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

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

На первый взгляд

Возьмем поведенческую историю за последние 7 дней — доля пользователей, посещавших ритейлера с более, чем одного устройства:

Здесь и далее вы можете пропускать куски кода, если они вам неинтересны.

data = EventCl.where(shop_id: shop.id).where('date >= ?', date).pluck(:client_id, :stream).uniq; nil
users = {}
data.each do |row|
  users[row[0]] = [] unless users.key?(row[0])
  users[row[0]] << row[1]
end; nil
total = users.keys.count
more_than_1_devices = users.select { |k, v| v.count > 1 }.count
share = more_than_1_devices.to_f / total.to_f * 100
puts "Visitors: #{ helper.number_with_delimiter total }"
puts "More than 1 devices: #{ helper.number_with_delimiter more_than_1_devices }"
puts "Share: #{ helper.number_to_percentage share, precision: 2 }"

Результат:

Visitors: 619,131
More than 1 devices: 8,813
Share: 1.42%

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

data = EventCl.where(shop_id: shop.id).where('date >= ?', date).where(client_id: EventCl.select(:client_id).where(shop_id: shop.id).where('date >= ?', date).where(event: 'purchase')).pluck(:client_id, :stream).uniq; nil
users = {}
data.each do |row|
  users[row[0]] = [] unless users.key?(row[0])
  users[row[0]] << row[1]
end; nil
total = users.keys.count
more_than_1_devices = users.select { |k, v| v.count > 1 }.count
share = more_than_1_devices.to_f / total.to_f * 100
puts "Purchasers: #{ helper.number_with_delimiter total }"
puts "More than 1 devices: #{ helper.number_with_delimiter more_than_1_devices }"
puts "Share: #{ helper.number_to_percentage share, precision: 2 }"

Результат:

Purchasers: 19,262
More than 1 devices: 2,223
Share: 11.54%

Как видим, кросс-девайс среди покупателей в 8 раз более востребован, чем среди обычных посетителей. Уже что-то интересное.

А если взять данные за год?

date = 1.year.go.to_date
data = EventCl.where(shop_id: shop.id).where('date >= ?', date).where(client_id: EventCl.select(:client_id).where(shop_id: shop.id).where('date >= ?', date).where(event: 'purchase')).pluck(:client_id, :stream).uniq; nil
users = {}
data.each do |row|
  users[row[0]] = [] unless users.key?(row[0])
  users[row[0]] << row[1]
end; nil
total = users.keys.count
more_than_1_devices = users.select { |k, v| v.count > 1 }.count
share = more_than_1_devices.to_f / total.to_f * 100
puts "Purchasers: #{ helper.number_with_delimiter total }"
puts "More than 1 devices: #{ helper.number_with_delimiter more_than_1_devices }"
puts "Share: #{ helper.number_to_percentage share, precision: 2 }"

Получаем еще более значимые результаты:

Purchasers: 289,401
More than 1 devices: 55,672
Share: 19.24%

Любопытства ради посмотрим, сколько покупателей пользуется тремя и более устройствами:

more_than_2_devices = users.select { |k, v| v.count > 2 }.count
share = more_than_2_devices.to_f / total.to_f * 100
puts "Purchasers: #{ helper.number_with_delimiter total }"
puts "More than 2 devices: #{ helper.number_with_delimiter more_than_2_devices }"
puts "Share: #{ helper.number_to_percentage share, precision: 2 }"

Результат:

Purchasers: 289,401
More than 2 devices: 431
Share: 0.15%

Да, этим кейсом можно пренебречь.

RFM

Теперь посмотрим, какую роль играют кросс-девайсные покупатели в RFM-сегментах:

cross_devicers = users.select { |k, v| v.count > 1 }.keys; nil
rfm_segments = shop.segments.where(segment_type: Segment::TYPE_RFM); nil
by_segments = Hash[rfm_segments.pluck(:id).map { |s| [s, []] }]; nil
cross_devicers.each do |client_id|
  segment_ids = SegmentJoin.where(join_id: client_id, segment_id: by_segments.keys).pluck(:segment_id)
  segment_ids.each do |id|
    by_segments[id] << client_id
  end
end; nil
by_segments.sort_by { |k, v| v.count }.reverse.each do |row|
  count_in_segment = row[1].count
  share = count_in_segment.to_f / more_than_1_devices.to_f  * 100
  puts "Segment '#{Segment.find(row[0]).name}': #{helper.number_to_percentage share, precision: 2}%"
end; nil

Результат:

Segment 'POTENTIAL_LOYALIST': 27.20%
Segment 'LOYAL_CUSTOMERS':    12.10%
Segment 'PROMISING':          9.77%
Segment 'ABOUT_TO_SLEEP':     9.58%
Segment 'RECENT_CUSTOMERS':   9.34%
Segment 'CHAMPIONS':          8.14%
Segment 'LOST':               1.73%
Segment 'ATTENTION_NEEDED':   1.00%
Segment 'HIBERNATING':        0.31%
Segment 'AT_RISK':            0.21%
Segment 'CANT_LOSE_THEM':     0.06%

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

Средний чек

Зависит ли средний чек от количества устройств, с которых лояльный клиент делает покупки? Из расчета исключаем отмененные и возвращенные заказы. Берем заказы за последние 6 месяцев.

single_devicers  = users.select { |k, v| v.count == 1 }.keys; nil
cross_devicers  = users.select { |k, v| v.count > 1 }.keys; nil
single_devicers_orders = []
cross_devicers_orders = []
single_devicers.each_slice(500) do |ids|
  single_devicers_orders += Order.where(shop_id: shop.id).where('date >= ?', date).where(client_id: ids).where('status != 2').pluck(:value)
end; nil
cross_devicers.each_slice(500) do |ids|
  cross_devicers_orders += Order.where(shop_id: shop.id).where('date >= ?', date).where(client_id: ids).where('status != 2').pluck(:value)
end; nil
puts "Single device AOV: #{single_devicers_orders.sum.to_i / single_devicers_orders.count}"
puts "Cross device AOV: #{cross_devicers_orders.sum.to_i / cross_devicers_orders.count}"

Результат:

Single device AOV: 1612
Cross device AOV: 1603

Как видно, не зависит. В данном конкретном магазине. Возможно, в других магазинах по-другому. Это мы посмотрим в одном из будущих исследований.

LTV

Сейчас принято много говорить об LTV. Оценим эту метрику для пользователей с одним и несколькими устройствами. Берем заказы за последние 6 месяцев:

ltv_single = []
ltv_cross = []
single_devicers.each do |id|
  ltv_single << Order.where(shop_id: shop.id).where('only_date >= ?', 6.month.ago.to_date).where(client_id: id).where('status != 2').pluck(:value).sum.to_i
end; nil
cross_devicers.each do |id|
  ltv_cross << Order.where(shop_id: shop.id).where('only_date >= ?', 6.month.ago.to_date).where(client_id: id).where('status != 2').pluck(:value).sum.to_i
end; nil
puts "LTV one device: #{ltv_single.sum / ltv_single.count}"
puts "LTV cross device: #{ltv_cross.sum / ltv_cross.count}"

Результаты:

LTV one device: 6023
LTV cross device: 9455

Ожидаемо. Но попробуем взять заказы за 12 месяцев:

LTV one device: 7461
LTV cross device: 11799

Интересно. Получается, что lifetime кросс-девайсных клиентов больше, чем тех, кто покупает с одного устройства.

Выводы

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

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

Интересно?

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

Если вы профессионал в постановке гипотез и проведении исследований и хотите анализировать наши данные, приходите к нам работать. Вместе мы будем создавать подобные материалы из данных, которых больше ни у кого нет. Пишите на mk@rees46.com

Подпишитесь на рассылку

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