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

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

Каковы эти правила ассоциации?

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

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

Типы правил ассоциации

Полезные правила - ›Это те правила, которые нам нужно отфильтровать, чтобы получить полезную информацию высокого качества.

Простые правила - ›Они будут известны любому, кто знаком с этим бизнесом.

Необъяснимые правила - ›Они не имеют какого-либо относительного объяснения и не предполагают каких-либо действий.

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

В этой статье мы рассмотрим все шаги по получению правил ассоциации с алгоритмом Apriori вместе с кодом R и визуализациями.

Предположим, у вас на столе 1000 квитанций, и мы обсудим, как ответить на следующие вопросы.

✦ Какие товары продавались чаще всего?

✦ Какие товары покупатели покупают вместе?

✦ Какие товары покупатели покупают вместе с конкретным товаром (например, йогурт)?

Чтобы получить набор данных, нажмите здесь

Каждая строка представляет собой транзакцию, а каждая ячейка представляет собой элемент.

Установите и загрузите следующие библиотеки.

install.packages(“arules”)
install.packages(“arulesViz”)
library(arules)
library(arulesViz)

Считайте данные как объект транзакции.

groceries_data<-read.transactions(choose.files(),format = 'basket',sep=',')
summary(groceries_data)

Из сводки мы можем увидеть следующий результат.

Давайте углубимся в подробности приведенного выше итогового вывода.

Общее количество проданных единиц товара = количество транзакций * количество единиц товара * плотность. 9835 * 169 * 0,0260 = 43215.

Мы видим, что цельное молоко имеет наибольшее количество транзакций, за ним следуют другие овощи. Распределение длины элемента сообщает нам, сколько транзакций существует с одним элементом, двумя установленными элементами и т. Д. Есть 2159 транзакций для одной позиции и 1643 транзакции для двух позиций и так далее. Поскольку среднее значение немного выше медианы, мы наблюдаем положительный перекос в распределении данных.

Теперь мы нанесем на график 20 наиболее часто встречающихся элементов из набора данных.

library(RColorBrewer)
itemFrequencyPlot(groceries_data,topN=20,type=”absolute”,col=brewer.pal(9,’Set3'),main=’Items Frequency Plot’)

Цельное молоко занимает первое место с наибольшим количеством продаж, за ним следуют другие овощи, булочки и т. Д. Этот график помогает нам определить правила анализа корзины.

Как работает алгоритм априори?

Есть три статистических показателя, о которых следует знать, прежде чем применять эту модель.

Поддержка - ›Измеряет частоту элемента A или комбинацию частоты элементов A и B вместе в общем количестве транзакций.

Очевидно, что ItemSet 1 будет иметь большую поддержку по сравнению с ItemSet2, потому что сочетание покупки Bread и Pen встречается редко.

Уверенность - ›Этот показатель показывает, как часто элементы A и B встречаются вместе, учитывая, сколько раз встречается A.

Здесь следует отметить, что ☟

Уверенность ({Хлеб} - ›{Масло}) Уверенность ({Масло} -› {Хлеб})

Поддержка и уверенность - это два параметра гиперпонастройки в алгоритме Apriori, которые необходимо настраивать до тех пор, пока мы не получим более строгие правила.

Рост - ›Этот показатель контролирует поддержку (частоту) последующего элемента при вычислении условной вероятности появления для {Масло} данного {Хлеба}.

Реализация модели со значениями параметров по умолчанию

association.rules <- apriori(groceries_data)

По умолчанию алгоритм Apriori будет рассматривать Поддержка как 0,1, а уверенность как 0,8. Из вышеприведенного вывода видно, что правила не были написаны. Теперь пришло время настроить параметры, чтобы получить некоторые правила.

Реализация модели с разными значениями параметров

association.rules <- apriori(groceries_data, parameter = list(supp=0.001, conf=0.8,maxlen=10))

summary(association.rules)

Из сводки правил ассоциации мы видим, что 29 правил генерируются с 3 элементами (lhs + rhs), а длина 4 элементов (lhs + rhs) имеет наибольшее количество правил, т.е. 229.

Все 410 правил (включая избыточные) имеют минимальную подъемную силу 3,131 , а максимальную - 11,235. Теоретически правила с подъемником ›1 считаются хорошими правилами. Но мы проверим 15 лучших правил, в которых поднимается ›1, для дальнейшего анализа после удаления повторяющихся правил.

Удаление повторяющихся правил

subset.rules<-which(colSums(is.subset(association.rules,association.rules))>1)
length(subset.rules)
subset.asso.rules<-association.rules[-subset.rules]
summary(subset.asso.rules)

Длина повторяющихся правил - 91. Эти 91 правило можно удалить из 410 правил. После удаления повторяющихся правил остается 319 правил.

Проверка первых 15 правил из 319

inspect(subset.asso.rules[1:15])

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

Мы также можем создавать правила для конкретного элемента. Для Ex. Ниже приведен код для генерации правил только для йогурта.

yogurt.asso.rules<- apriori(groceries_data, parameter = list(supp=0.001, conf=0.8,maxlen=10),appearance = list(default = “lhs”,rhs = “yogurt”))
inspect(head(yogurt.asso.rules))

Правила визуализации

Для эффективного понимания правил и ценностей поддержки, уверенности и подъема давайте создадим несколько графиков. Здесь мы рассматриваем достоверность ›0,4 и отсортированы по параметру достоверности.

inspect(top10subRules[1:10]subRules<-subset.asso.rules[quality(subset.asso.rules)$confidence>0.4]
top10subRules <- head(subRules, n=10, by= “confidence”)
plot(top10subRules, method = “graph”, html = “htmlwidget”)

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

Ниже представлен график параллельных координат.

subRules1<-head(subRules,n=10,by=”lift”)
plot(subRules1, method = “paracoord”)

Таким образом, если у покупателя есть красное вино и ликер в корзине, есть 11,23 (подъем) шансов, что он / она тоже купит пиво.

Резюме

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

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

Вы можете получить код R из моего профиля на Github здесь.

Спасибо за чтение и удачного обучения ☺