Узнайте, как мы помогаем нашим Mitra получать максимальную прибыль

Онлайн-офлайн (O2O) коммерция бизнес-стратегия использования онлайн-каналов для стимулирования офлайн-продаж. По сути, O2O переносит офлайн-бизнес на интернет-платформы и использует эти платформы для продвижения традиционного офлайн-бизнеса (Xiao et al, 2019). Применительно к электронной коммерции это означает, что клиенты могут покупать продукты, которые они видят на онлайн-платформе, на более близких оффлайн каналах, таких как домашние киоски (warung).

В этом контексте мы гордимся тем, что Bukalapak является одной из первых компаний, внедривших бизнес-модель в Индонезии. Мы материализовали бизнес-модель в рамках программы под названием Mitra Bukalapak, которую мы запустили еще в 2017 году. Наши партнеры (Mitra) в этой программе - warungs, хорошо известные организации, которые продвигают большинство розничных транзакций по всей Индонезии ( Цитируется из Kr-Asia; согласно отчету Nielsen, опубликованному в 2018 году, продажи розничных товаров FMCG в Индонезии достигли 700 триллионов индонезийских рупий (47,5 миллиарда долларов США), при этом warungs способствует примерно 72% этих транзакций) . В настоящее время мы сотрудничаем с более чем шестью миллионами варунгов по всей Индонезии - и их количество продолжает расти! -, что делает Bukalapak лидером рынка в отрасли.

Что касается схемы O2O, Bukalapak предоставляет товары для продажи в warungs (действительно, по более низкой цене), которые можно приобрести в Интернете через приложения Mitra Bukalapak. После того, как владельцы заранее сделают заказ, мы доставим купленный товар прямо к их порогу. Таким образом, они могут сэкономить время на что-нибудь еще, вместо того, чтобы лично ходить на рынок / в продуктовые магазины, чтобы пополнить запасы своих товаров (как они делали раньше). Кроме того, мы даем им возможность расти, расширяя ассортимент своих продуктов, предоставляя также семейство основных виртуальных продуктов, таких как Pulsa (мобильный баланс), токены на электроэнергию, и даже покупать онлайн-продукты через Bukalapak.

Максимизация прибыли Warung с помощью рекомендаций

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

Одним из распространенных методов построения рекомендательной системы является анализ рыночной корзины (MBA). На высоком уровне MBA ищет комбинации элементов, которые часто встречаются вместе в транзакциях. Другими словами, он позволяет розничным продавцам определять отношения между товарами, которые покупают люди. В этой статье мы обсудим MBA, начиная с того, что такое анализ рыночной корзины и почему мы его используем, а затем каково влияние внедрения анализа рыночной корзины для бизнеса Bukalapak, особенно для бизнеса O2O.

Анализ рыночной корзины 101

Анализ рыночной корзины (также известный как интеллектуальный анализ ассоциативных правил) - полезный метод выявления моделей покупок клиентов путем извлечения ассоциаций или совпадений из транзакционных баз данных магазинов (Chen et al., 2005). Другими словами, этот метод используется для определения отношения между одним элементом и другим. Зная такую ​​информацию, связанные заинтересованные стороны (продавцы) могут оптимизировать свои продажи, выполняя перекрестные продажи своим существующим клиентам.

В нашем случае мы можем использовать знания, полученные от MBA, разными способами, в том числе:

  1. Перекрестные продажи: продажа товаров из других независимых категорий, которые могут быть интересны покупателю. Например, человек, покупающий подгузники, скорее всего, имеет ребенок, и его могут интересовать детские вещи, такие как молоко, детская одежда или другие предметы, такие как игрушки.
  2. Up-Sell: продажа дополнительных товаров, дополняющих купленные. Если человек покупает кофе, подорожает сахар, чай или молоко.
  3. Интернет-магазины: рекомендуют связанные продукты, которые часто покупаются вместе, т. е. под фразой «Клиенты, купившие этот продукт, также просматривали этот продукт…»
  4. Маркетинговые предложения: кампании, ориентированные на клиентов и побуждающие их покупать похожие товары для товаров, которые они недавно купили.

Знание желаний и ситуаций клиента, а также дополнительные / перекрестные продажи дополнительных товаров - легкие деньги для любого бизнеса. Если мы можем предсказать список покупок клиентов, то мы можем порекомендовать товары нашему владельцу Mitra / warung, чтобы они могли продавать свои товары намного дороже.

«Больше продаж - больше прибыли»

Концепции MBA

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

Начнем с правил ассоциации. Правило ассоциации между двумя наборами элементов определяется в форме импликации, подобной приведенной ниже:

{Кофе} → {Сахар}

Приведенное выше правило гласит следующее. Если кофе покупается, покупатели также покупают сахар (за одну транзакцию). Чтобы дать вам больше концепций, {coffee} в приведенном выше примере называется антецедентом или левой частью (LHS), а {Sugar} называется консеквентной или правой частью (RHS). Так получилось, что у нас может быть несколько элементов в качестве предшествующих и / или последовательных. Например:

{Кофе, Молоко} → {Чай, Сахар}

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

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

Показатели

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

В приведенной ниже таблице показано 10 транзакций с 4 различными продуктами: яблоком, бананом, сыром и молоком.

Служба поддержки

Поддержка правила - это относительная частота появления правила в базе данных. Этот показатель используется для измерения количества или частоты (часто интерпретируемой как значимость или важность) набора элементов в базе данных.

Из приведенной выше формулы мы знаем, что значение любой поддержки находится в диапазоне от 0 до 1 (включительно). Поддержка равна нулю, если правило не встречается во всех данных, то есть нет транзакции, которая содержит оба элемента A и C вместе. Это наоборот, если поддержка равна 1.

Приведем пример! Поддержка ({Milk} → {Cheese}) составляет 5/10, так как молоко и сыр присутствуют в 5 транзакциях из 10 транзакций в таблице.

Уверенность

Уверенность - это показатель надежности правила. Он измеряет, насколько следствие (элемент) зависит от антецедента (элемента). Мы можем вычислить уверенность, используя следующую формулу

Мы видим, что диапазон достоверности также составляет [0,1]. Более того, читатели, знакомые с теорией вероятностей, подумают об имеющейся здесь форме условной вероятности.

Продолжая наш пример, уверенность ({Milk} → {Cheese}) составляет 5/7, поскольку молоко и сыр встречаются в 5 транзакциях, в то время как Только молоко существует в 7 транзакциях.

Поднимать

Рост (также называемый улучшением или воздействием) - это отношение наблюдаемой поддержки к ожидаемой, если бы эти два правила были независимыми. Это значение, которое говорит нам, насколько вероятно, что предметы из C будут куплены вместе с предметами из A. Подъем математически определяется следующим образом.

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

Чтобы вычислить подъемную силу ({Milk} → {Cheese}), нам сначала нужно вычислить каждую опору ({Milk}) и опору ({Cheese}). И поддержка ({Milk}), и поддержка ({Cheese}) - 7/10, поскольку каждое из молока и сыра существует в 7 транзакциях по всей таблице. Поскольку мы вычислили поддержку ({Milk} → {Cheese}), которая равна 5/10, таким образом, подъем ({Milk} → {Cheese}) = (5/10) / ((7/10) x (7/10) ) = 50/49.

Учебное пособие по анализу рыночной корзины (MBA)

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

На приведенной ниже блок-схеме показаны этапы нашего анализа.

1. Данные

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

Import pandas as pd
df = pd.read_excel('/dataset/online_retail.xlsx')
df.head(10)

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

  • Дата счета:

Диапазон дат этого набора данных начинается с 2010–12–01 до 2011–12–09,, и если мы увидим гистограмму ниже, мы можем сделать вывод, что транзакции относительно неактивны. до середины сентября 2011 года время начала транзакции увеличивается.

  • Страна доставки

Оказывается, большинство транзакций приходилось отправлять в Соединенное Королевство. Что ж, в этом есть смысл, поскольку электронная коммерция на самом деле происходит из Великобритании.

2. Предварительная обработка

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

  • InvoiceNo: уникальный идентификатор каждой транзакции.
  • Описание: наиболее вероятное название продукта (ниже я объясню, почему мы используем описание вместо StockCode).
  • Количество: общее количество продуктов, купленных пользователем.

Но сначала нам нужно очистить наши данные, есть несколько вещей, которые нужно сделать:

  • Очистите столбец описания, так как в нем есть символы пробела.
  • Отбросьте строки, в которых нет номеров счетов-фактур, и, поскольку нам нужны только законные транзакции, нам нужно удалить отмененные транзакции (номера счетов, содержащие символ «C»).
  • Мы используем Описание вместо StockCode, потому что я обнаружил, что несколько StockCode имеют другое описание.

df['Description'] = df['Description'].str.strip()
df.dropna(axis=0, subset=['InvoiceNo'], inplace=True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
df = df[~df['InvoiceNo'].str.contains('C')]

3. Сгенерируйте правила ассоциации

После очистки данных нам нужно объединить элементы в одну транзакцию на строку с каждым продуктом 1 горячая кодировка. Также в этом руководстве я хочу использовать транзакции, которые создаются только в Великобритании (поскольку в стране самая высокая частота транзакций ›90%). Тем не менее, мы можем попытаться сравнить некоторые результаты правил ассоциации в зависимости от страны - например, Германия и EIRE (но мы не делаем этого здесь).

basket = (df[df['Country'] =="United Kingdom"].groupby(['InvoiceNo','Description'])['Quantity'].sum().unstack().reset_index().fillna(0).set_index('InvoiceNo'))

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

def encode_units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1
basket_sets = basket.applymap(encode_units)
basket_sets.drop('POSTAGE', inplace=True, axis=1)

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

from mlxtend.frequent_patterns import association_rules, apriori
frequent_itemsets = apriori(basket_sets, min_support=0.03, use_colnames=True)

Последний шаг - создание ассоциативных правил. Мы можем установить, какую метрику использовать для получения результатов; но здесь мы просто будем использовать только показатели поддержки, уверенности и подъема. Что касается уверенности, я использую показатель с min_threshold 2%.

rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.02)

Вуаля! Вот примеры результатов:

Вот и все! Мы часто создаем элементы, используя apriori, а затем создаем правила с помощью association_rules.

Теперь мы покажем, как можно визуализировать ассоциативные правила анализа рыночной корзины с помощью тепловой карты. Во-первых, нам нужно подсчитать наши предшествующие элементы и назвать их левой стороной (элементы LHS).

rules['lhs items'] = rules['antecedents'].apply(lambda x:len(x) )

Затем мы показываем все правила следующим образом.

# Import seaborn under its standard alias
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
# Replace frozen sets with strings
rules['antecedents_'] = rules['antecedents'].apply(lambda a: ','.join(list(a)))
rules['consequents_'] = rules['consequents'].apply(lambda a: ','.join(list(a)))
# Transform the DataFrame of rules into a matrix using the lift
# metric
pivot = rules.pivot(index = 'antecedents_',
columns = 'consequents_', values= 'lift')
# Generate a heatmap with annotations on and the colorbar off
sns.heatmap(pivot, annot = True)
plt.yticks(rotation=0)
plt.xticks(rotation=90)
plt.show()

На приведенной выше тепловой карте показан рост соответствующей пары строка-столбец. Пример того, как это читать, выглядит следующим образом. Обратите внимание на значение «13» в первой строке, оно гласит: Будильник, похожий на бакелитовый зеленый и Будильник, бакелитовый красный, в 13 раз чаще будут куплены вместе чем покупается отдельно.

Используя результаты, показанные на тепловой карте, мы можем порекомендовать торговой платформе как минимум две стратегии:

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

Резюме

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

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

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

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

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

Ссылка

Сяо, Л., Чжан, Ю., Фу, Б. (2019). Изучение модераторов и причинного процесса передачи доверия в онлайн-торговле. Журнал бизнес-исследований 98. 214–226.

Чен, Ю.Л., Тан, К., Шен, Р.Дж., Ху Ю.Х. (2005). Анализ рыночной корзины в среде с несколькими магазинами. Системы поддержки принятия решений 40. 339–354

Https://predictivehacks.com/a-tutorial-about-market-basket-analysis-in-python/

Кредит

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