Недавно у меня появилась возможность поработать над проектом на основе анализа корзины, и здесь я делюсь своим опытом.
Что такое анализ рыночной корзины?
Анализ рыночной корзины - один из фундаментальных методов, используемых крупными розничными торговцами для выявления связи между товарами. Другими словами, это позволяет розничным продавцам определять взаимосвязь между товарами, которые чаще покупаются вместе.
Правила ассоциации:
Правила ассоциации широко используются для анализа данных о розничной корзине или транзакциях и предназначены для выявления строгих правил, обнаруженных в данных транзакций, с использованием показателей интересных показателей, основанных на концепции строгих правил.
Пример правил связывания
- Предположим, что есть 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)])
ЗАКЛЮЧЕНИЕ:
Из вышеприведенного вывода мы видим, что верхние ассоциации не вызывают удивления, поскольку один вкус предмета приобретается с другим вкусом из того же семейства предметов. Как уже упоминалось, одно из распространенных применений интеллектуального анализа ассоциативных правил - это рекомендуемые системы. После того, как пары товаров будут идентифицированы как имеющие положительные отношения, покупателям можно будет дать рекомендации по увеличению продаж. И, надеюсь, попутно познакомьте клиентов с вещами, которые они никогда раньше не пробовали или даже не могли себе представить!