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

Анализ рыночной корзины является одним из приложений изучения правил ассоциации и применяется в розничной торговле для выявления ассоциаций между различными продуктами. Рыночные корзины состоят из списка товаров, которые покупатели часто покупают за одно посещение магазинов.

2. Изучение правил ассоциации

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

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

Поддержка

Поддержка — это вероятность того, что продукты X и Y будут куплены вместе в транзакции. Стоимость поддержки можно рассчитать по следующему уравнению:

Уверенность

Значение достоверности определяется как деление общего количества транзакций, включая X и Y, на общее количество транзакций, содержащих Y. Уравнение выглядит следующим образом:

Поднять

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

Подготовка данных

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

Инструменты анализа данных

  • Совместная работа Google
  • Питон

Необходимые библиотеки

  • Панды
  • NumPy
  • Априори
  • Сиборн
  • Матплотлиб

Во-первых, важны необходимые библиотеки,

import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
%matplotlib inline
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

После импорта библиотек загрузите набор данных следующим образом:

df = pd.read_csv('online_retail.csv')
df.head()

Выход:

Затем подготовьте данные для анализа корзины:

df['Date'] = pd.to_datetime(df['Date'])
print('Time period start: {}\nTime period end: {}'.format(df.Date.min(), df.Date.max()))
#define the length of transactions to prepare basket
start_date = '2010-12-01'
end_date = '2011-02-28'
mask = (df['Date'] > start_date) & (df['Date'] <= end_date)
transaction = df.loc[mask]\
len(transaction)

Всего в наборе данных содержится 100324 транзакции. После этого подготовьте корзину следующим образом:

basket = (transaction.groupby(['Invoice', 'Product'])['Quantity']
          .sum().unstack().reset_index().fillna(0)
          .set_index('Invoice'))

#Convert the units to 1 hot encoded values
def encode_units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1
basket_sets = basket.applymap(encode_units)

#Build up frequent items with apriori model
frequent_itemsets = apriori(basket_sets, min_support=0.02, use_colnames=True)

#apply the association_rules
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
rules.tail()

Выход:

Примечание. антецедент – это элемент, найденный в данных. cконсеквент – это элемент, найденный в сочетании с антецедентом.

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

антецеденты = СЕРДЦЕ МАЛЕНЬКОЕ ПЛЕТЕНОЕ», «БОЛЬШОЕ ПЛЕТЕНОЕ СЕРДЦЕ»

следствия = БЕЛОЕ ВИСЯЩЕЕ СЕРДЦЕ T-LIGHT ДЕРЖАТЕЛЬ

поддержка = 0,024224, всего транзакций = 100324

X ∪ Y = поддержка * общее количество транзакций = 0,024224 * 100324 = 2430

Это означает, что продукты [HEART OF WICKER SMALL», «HEART OF WICKER LIG» и [WHITE HANGING HEART T-LIGHT HOLDER] были куплены 2430 раз вместе.

достоверность = 0,456410

Это означает, что 45 % клиентов покупали [WHITE HANGING HEART T-LIGHT HOLDER] каждый раз, когда они покупали [HEART OF WICKER SMALL», «HEART OF WICKER LARGE».

подъем = 3,194002

Значение подъема больше 1, поэтому эти продукты с большей вероятностью будут покупать вместе. Чем выше значение подъема, тем сильнее корреляция между продуктами.

Визуализация

sns.set(style = "whitegrid")
fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(projection = '3d')

x = rules['support']
y = rules['confidence']
z = rules['lift']

ax.set_xlabel("Support")
ax.set_ylabel("Confidence")
ax.set_zlabel("Lift")

ax.scatter(x, y, z)
ax.set_title("3D distribution of association rules")
plt.show()

Выход:

Спасибо за прочтение!