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

Что такое анализ рыночной корзины?

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

Правила ассоциации:

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

Пример правил связывания

  • Предположим, что есть 100 клиентов
  • 10 из них купили молоко, 8 купили масло и 6 купили оба.
  • купил молоко = ›купил масло
  • поддержка = P (молоко и масло) = 6/100 = 0,06
  • уверенность = поддержка / P (масло) = 0,06 / 0,08 = 0,75
  • подъем = уверенность / P (молоко) = 0,75 / 0,10 = 7,5

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

Ключевые показатели для правил связи:

Рассмотрим этот пример:

order 1: apple, egg, milk  
order 2: carrot, milk  
order 3: apple, egg, carrot
order 4: apple, egg
order 5: apple, carrot

При оценке ассоциативных правил необходимо учитывать 4 ключевых показателя:

1.Поддержка:
Это процент заказов, содержащих набор элементов. В приведенном выше примере всего 5 заказов, и {яблоко, яйцо} встречается в 3 из них, поэтому:

support{apple,egg} = 3/5 or 60%

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

2.Уверенность:
Для двух элементов, A и B, достоверность измеряет процент раз, когда элемент B был приобретен, при условии, что этот элемент A был куплен. Это выражается как:

confidence{A->B} = support{A,B} / support{A}

Значения уверенности варьируются от 0 до 1, где 0 означает, что B никогда не покупается, когда покупается A, а 1 указывает, что B всегда покупается, когда покупается A. Обратите внимание, что мера уверенности является направленной. Это означает, что мы также можем вычислить процент покупок предмета А с учетом того, что предмет Б был куплен:

confidence{B->A} = support{A,B} / support{B}

В нашем примере процент покупок яйца с учетом того, что оно было куплено, составляет:

confidence{apple->egg} = support{apple,egg} / support{apple}
                                    = (3/5) / (4/5)
                                    = 0.75 or 75%

Значение достоверности 0,75 означает, что из всех заказов, содержащих яблоко, 75% также содержат яйца. Теперь посмотрим на показатель достоверности в противоположном направлении (например, яйцо- ›яблоко):

confidence{egg->apple} = support{apple,egg} / support{egg}
                                    = (3/5) / (3/5)
                                    = 1 or 100%

3-й подъем:

В отличие от показателя достоверности, значение которого может варьироваться в зависимости от направления (например: достоверность {A- ›B} может отличаться от достоверности {B-› A}), у подъема нет направления. Это означает, что подъемная сила {A, B} всегда равна подъемной силе {B, A}:

lift{A,B} = lift{B,A} = support{A,B} / (support{A} * support{B})

В нашем примере мы вычисляем подъемную силу следующим образом:

lift{apple,egg} = lift{egg,apple} = support{apple,egg} / (support{apple} * support{egg})
                  = (3/5) / (4/5 * 3/5) 
                  = 1.25

Таким образом, подъемная сила может принимать следующие значения:

  • Лифт = 1; подразумевает отсутствие связи между A и B (то есть, A и B встречаются вместе только случайно)
  • Лифт ›1; подразумевает, что существует положительная связь между A и B (т. е. A и B встречаются вместе чаще, чем случайным образом)
  • Лифт ‹1; подразумевает, что существует отрицательная связь между A и B (то есть, A и B встречаются вместе реже, чем случайным образом)

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

4. Убеждение:

убежденность в правиле определяется как

conv{apple,egg} = ( 1 - support{egg}) / 
                  (1 - confidence{apple-->egg})

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

Входной набор данных:

Https://github.com/stedy/Machine-Learning-with-R-datasets/blob/master/groceries.csv

Давайте посмотрим на код анализа корзины с использованием Python:

CODE :
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Data Preprocessing
dataset = pd.read_csv(‘groceries.csv’)
transactions = []
for i in range(0, 9835):
 transactions.append([str(dataset.values[i,j]) for j in range(0, 32)])
# Training Apriori on the dataset
from apyori import apriori
rules = apriori(transactions, min_support = 0.007, min_confidence = 0.5, min_lift = 3, min_length = 2)
# Visualising the results
results = list(rules)
dataset.head()
dataset.shape
OUTPUT:
(9835, 32)
CODE :
for a in results:
    print("------------------------------------------------------")
    print(a)
OUTPUT :
        RelationRecord(items=frozenset({'citrus fruit', 'other vegetables', 'root vegetables'}), support=0.010371123538383325, ordered_statistics=[OrderedStatistic(items_base=frozenset({'citrus fruit', 'root vegetables'}), items_add=frozenset({'other vegetables'}), confidence=0.5862068965517241, lift=3.0296084222733612)])
-------------------------------------------------------------------------------------------------------------
RelationRecord(items=frozenset({'tropical fruit', 'other vegetables', 'root vegetables'}), support=0.012302999491611592, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tropical fruit', 'root vegetables'}), items_add=frozenset({'other vegetables'}), confidence=0.5845410628019324, lift=3.020999134344196)])
-------------------------------------------------------------------------------------------------------------
RelationRecord(items=frozenset({'nan', 'citrus fruit', 'other vegetables', 'root vegetables'}), support=0.010269445856634469, ordered_statistics=[OrderedStatistic(items_base=frozenset({'nan', 'citrus fruit', 'root vegetables'}), items_add=frozenset({'other vegetables'}), confidence=0.5838150289017341, lift=3.0172468782178425)])
-------------------------------------------------------------------------------------------------------------
RelationRecord(items=frozenset({'tropical fruit', 'nan', 'other vegetables', 'root vegetables'}), support=0.012201321809862735, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tropical fruit', 'nan', 'root vegetables'}), items_add=frozenset({'other vegetables'}), confidence=0.5825242718446603, lift=3.010576044977527)])
-------------------------------------------------------------------------------------------------------------
RelationRecord(items=frozenset({'tropical fruit', 'whole milk', 'other vegetables', 'root vegetables'}), support=0.007015760040671073, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tropical fruit', 'whole milk', 'root vegetables'}), items_add=frozenset({'other vegetables'}), confidence=0.5847457627118644, lift=3.0220570553185424)])

ЗАКЛЮЧЕНИЕ:

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