С технической точки зрения, априори (используется в анализе рыночной корзины) пытается выяснить, какие товары покупаются вместе. Таким образом, качество обслуживания клиентов можно улучшить, разместив их рядом или предложив пользователям на сайте розничных продавцов, в основном для того, чтобы клиенты покупали больше. (Помните эти предложения «Эти товары покупаются вместе» на сайтах интернет-магазинов?)
Но как это работает? Конечно, с этим связана некоторая теория, но мы будем изучать ее по мере написания кода. Итак, первое, что нам нужно, это данные, я буду использовать данные из Kaggle. который можно найти здесь (https://www.kaggle.com/shazadudwadia/supermarket#GroceryStoreDataSet.csv). Это небольшой набор данных о продуктах для завтрака, купленных в каком-то магазине.
- Предварительная обработка данных. Это самый важный шаг. Одна вещь, которую я заметил в онлайн-учебниках, заключается в том, что они начинаются с данных, представленных в этой форме (аналогично данным, которые мы используем).
Меня беспокоило то, что это никогда не является выходом какого-либо традиционного приложения, которое записывает транзакции, и когда мы пишем SQL. Итак, нам нужно изменить это в форме ниже
Это может быть достигнуто в python с помощью метода, описанного здесь https://medium.com/@sureshssarda/pandas-splitting-exploding-a-column-into-multiple-rows-b1b1d59ea12e
Шаг 1. Нам нужно разделить каждую строку и назначить одному продукту идентификатор транзакции. Для простоты вы можете сделать это и в excel
Для Apriori нам нужны данные в приведенной ниже форме, чтобы Algo мог легко извлекать информацию. Таким образом, один столбец идентификаторов транзакций и разные столбцы для продуктов .1 указывают на то, что продукт был частью этой транзакции. На изображении выше c1 включает молоко, хлеб и печенье. То же самое обозначено ниже цифрой «1».
Для этого нам нужно написать небольшой код на Python. Я нашел функцию Pivot очень полезной. Но сначала нам нужны некоторые библиотеки для запуска кода ниже. Я использую Spyder (Python 3.7). Запустите код ниже
##Import Libraries
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
Запустите «pip install mlxtend» в консоли, если вы ранее не использовали Apriori, и снова запустите приведенные выше команды.
Все готово. Загрузите данные в python. Вам нужно сохранить файл Excel, который мы подготовили на шаге 1, в формате csv как mydata.csv и выполнить команду ниже.
"##Load Data in python "
d1 = pd.read_csv("mydata.csv")
Теперь вам нужно вставить один столбец в наш фрейм данных. В этом столбце будут показаны товары, купленные за одну транзакцию по значению «1». Запустите команду ниже
"#add new column with constant value 1"
d1['value'] = d1.apply(lambda x: 1, axis=1)
Ваш фрейм данных в python должен выглядеть так, как показано ниже.
Нам нужно изменить форму, чтобы она выглядела как на рис. 1. Мы будем использовать сводную функцию Python. Запустите приведенный ниже код.
"#Reshape data to pivot form"
d2=pd.pivot_table(d1,index='id',columns='product',values='value')
Ваш фрейм данных должен выглядеть так, как показано ниже.
«нан» означает, что конкретный предмет не был частью этой частной сделки. Пример: «Bournvita» не было в c1, так что это показано «nan». Нам нужно удалить их и заменить на ноль. Запустите код ниже
"#remove 'nan' and replace it by 0"
d3=d2.fillna(0)
2. Running Algo:
Пришло время запустить Apriori Algoritham для этого фрейма данных. Запустите код ниже
"#run apriori algo"
frequent_itemsets = apriori(d3, min_support=0.2, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
Я объясню эти параметры (Поддержка и Подъем) позже. Фрейм выходных данных должен выглядеть так, как показано ниже.
3. Theory and Interpretation:
A. Есть две части a. предшественники б. последствия . Означает, что если человек покупает хлеб (предыстория), то в то же время в рамках той же транзакции тот же человек может купить молоко (последствия), согласно нашим данным.
B. Поддержка : Поддержка = появление товара / общее количество транзакций. Таким образом, поддержка антецедентов означает поддержку хлеба. Его можно рассчитать, используя приведенное выше уравнение и приведенный ниже свод наших данных (подготовленных в Excel для понимания цели)
Можете ли вы рассчитать поддержку пары Bread & Milk. Я выделяю ячейки для лучшего понимания. Обратите внимание, что выделенные ячейки находятся в паре, что означает, что они покупаются вместе.
Возможно, теперь вы поняли порог поддержки, который мы ввели в наш алгоритм Apriori ( frequent_itemsets = apriori(d3, min_support=0.2, use_colnames=True)
. По сути, мы отфильтровали другие менее частые транзакции.
C. Надежность: это число показывает, сколько раз товары покупались вместе по сравнению с разовыми покупками. Таким образом, если предмет, купленный вместе, вместе меньше, чем один раз, то возникновение может быть незначительным. Таким образом, более высокое значение Уверенности означает более высокие шансы на покупку вместе по сравнению с отдельными товарами. Надежность = (Поддержка товаров, купленных вместе)/(Поддержка товаров, купленных по отдельности)
Пример. Доверие к молоку и хлебу, купленным вместе, = 0,2/0,6 на основе наших предыдущих расчетов, т. е. 0,30769 согласно выходному коду на рис. 2.
D. Подъем: указывает силу любого правила, т. е. мы пришли к выводу, что молоко и хлеб покупаются вместе, но насколько сильна эта связь? Номер лифта говорит нам именно об этом. Лифт = (Поддержка предмета, купленного вместе)/ (Поддержка одного предмета)* (Поддержка другого предмета). Обратите внимание, что в Confidence мы разделяем поддержку комбинирования на любую поддержку одного элемента. Здесь мы делим умножение обоих элементов поддержки.
Ex Lift (молочный хлеб) = поддержка Milk-Bread (0,25) /(Support for Bread (0,65))* (Support for Milk (0,25)) = 1,23077 так же, как наш вывод python
Таким образом, более высокий подъем указывает на более высокие шансы купить эти предметы вместе, чем по отдельности. Есть несколько других параметров для анализа этих результатов, но Support , Confidence и Lift являются наиболее важными и поддающимися интерпретации . Также обратите внимание, что Apriori предоставит вам все эти числа, как показано выше, но нам также нужно понять, как их интерпретировать. Вот почему я попытался объяснить это подробно с объяснением
Ниже приведен полный код для вашей справки
"##Import Libraries "
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
"##Load Data in python "
d1 = pd.read_csv("mydata.csv")
"#add new column with constant value 1"
d1['value'] = d1.apply(lambda x: 1, axis=1)
"#Reshape data to pivot form"
d2=pd.pivot_table(d1,index='id',columns='product',values='value')
"#remove 'nan' and replace it by 0"
d3=d2.fillna(0)
"#run apriori algo"
frequent_itemsets = apriori(d3, min_support=0.2, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
Я думаю, что тот же алгоритм можно использовать для анализа текста, например, отзывов клиентов (два слова произносятся вместе). Что вы думаете ? .
Дайте мне знать ваши предложения и отзывы. Рад помочь .