Аналитика данных
October 5, 2023
Как выявить скрытые закономерности в данных с помощью методов обнаружения ассоциативных правил?
Разберём, как можно выявить скрытые закономерности в данных с помощью методов обнаружения ассоциативных правил, используя пример связи покупки товаров.
Определение задачи:
В данном случае мы хотим выявить ассоциативные правила, которые показывают связи между покупкой определенных товаров.
Сбор данных:
Сначала нам нужно собрать данные о покупках. Это может быть список транзакций, где каждая транзакция представляет собой список купленных товаров.
- Транзакция 1: Хлеб, молоко, яйца
- Транзакция 2: Хлеб, масло
- Транзакция 3: Хлеб, яйца, масло
- и так далее...
Обработка данных:
Теперь мы можем использовать алгоритмы обнаружения ассоциативных правил, например, алгоритм Apriori.
Если у вас не установлен Apriori, то вы можете его установить следующим образом:
pip install apyori
Пример кода (Python) для использования алгоритма Apriori:
from apyori import apriori # Подготовка данных transactions = [ ['хлеб', 'молоко', 'яйца'], ['хлеб', 'масло'], ['хлеб', 'яйца', 'масло'], # Добавьте сюда остальные транзакции ] # Параметры для алгоритма Apriori min_support = 0.2 # Минимальная поддержка min_confidence = 0.5 # Минимальная уверенность # Применение алгоритма Apriori association_rules = apriori(transactions, min_support=min_support, min_confidence=min_confidence) # Вывод результатов for rule in association_rules: print(rule)
RelationRecord(items=frozenset({'масло'}), support=0.6666666666666666, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'масло'}), confidence=0.6666666666666666, lift=1.0)]) RelationRecord(items=frozenset({'хлеб'}), support=1.0, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'хлеб'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'яйца'}), support=0.6666666666666666, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'яйца'}), confidence=0.6666666666666666, lift=1.0)]) RelationRecord(items=frozenset({'масло', 'хлеб'}), support=0.6666666666666666, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'масло', 'хлеб'}), confidence=0.6666666666666666, lift=1.0), OrderedStatistic(items_base=frozenset({'масло'}), items_add=frozenset({'хлеб'}), confidence=1.0, lift=1.0), OrderedStatistic(items_base=frozenset({'хлеб'}), items_add=frozenset({'масло'}), confidence=0.6666666666666666, lift=1.0)]) RelationRecord(items=frozenset({'масло', 'яйца'}), support=0.3333333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'масло'}), items_add=frozenset({'яйца'}), confidence=0.5, lift=0.75), OrderedStatistic(items_base=frozenset({'яйца'}), items_add=frozenset({'масло'}), confidence=0.5, lift=0.75)]) RelationRecord(items=frozenset({'хлеб', 'молоко'}), support=0.3333333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'молоко'}), items_add=frozenset({'хлеб'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'яйца', 'молоко'}), support=0.3333333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'молоко'}), items_add=frozenset({'яйца'}), confidence=1.0, lift=1.5), OrderedStatistic(items_base=frozenset({'яйца'}), items_add=frozenset({'молоко'}), confidence=0.5, lift=1.5)]) RelationRecord(items=frozenset({'яйца', 'хлеб'}), support=0.6666666666666666, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'яйца', 'хлеб'}), confidence=0.6666666666666666, lift=1.0), OrderedStatistic(items_base=frozenset({'хлеб'}), items_add=frozenset({'яйца'}), confidence=0.6666666666666666, lift=1.0), OrderedStatistic(items_base=frozenset({'яйца'}), items_add=frozenset({'хлеб'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'масло', 'яйца', 'хлеб'}), support=0.3333333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'масло'}), items_add=frozenset({'яйца', 'хлеб'}), confidence=0.5, lift=0.75), OrderedStatistic(items_base=frozenset({'яйца'}), items_add=frozenset({'масло', 'хлеб'}), confidence=0.5, lift=0.75), OrderedStatistic(items_base=frozenset({'масло', 'хлеб'}), items_add=frozenset({'яйца'}), confidence=0.5, lift=0.75), OrderedStatistic(items_base=frozenset({'масло', 'яйца'}), items_add=frozenset({'хлеб'}), confidence=1.0, lift=1.0), OrderedStatistic(items_base=frozenset({'яйца', 'хлеб'}), items_add=frozenset({'масло'}), confidence=0.5, lift=0.75)]) RelationRecord(items=frozenset({'яйца', 'хлеб', 'молоко'}), support=0.3333333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'молоко'}), items_add=frozenset({'яйца', 'хлеб'}), confidence=1.0, lift=1.5), OrderedStatistic(items_base=frozenset({'яйца'}), items_add=frozenset({'хлеб', 'молоко'}), confidence=0.5, lift=1.5), OrderedStatistic(items_base=frozenset({'хлеб', 'молоко'}), items_add=frozenset({'яйца'}), confidence=1.0, lift=1.5), OrderedStatistic(items_base=frozenset({'яйца', 'молоко'}), items_add=frozenset({'хлеб'}), confidence=1.0, lift=1.0), OrderedStatistic(items_base=frozenset({'яйца', 'хлеб'}), items_add=frozenset({'молоко'}), confidence=0.5, lift=1.5)])
- Мы используем библиотеку
apyori
, которая предоставляет реализацию алгоритма Apriori. transactions
- это наши данные в формате транзакций.min_support
- минимальная поддержка, задает порог для ассоциативных правил.min_confidence
- минимальная уверенность, задает порог для уверенности в ассоциативных правилах.association_rules
содержит результаты ассоциативного анализа.
Вот, как это можно было бы использовать:
- Использовать ассоциативные правила для рекомендации связанных товаров клиентам. Если клиент купил, например, "хлеб", "яйца" и "молоко", вы можете рекомендовать "масло", так как есть ассоциация между этими товарами.
- Создавать маркетинговые акции, предлагая скидки на товары, которые часто покупают вместе. Это может стимулировать покупателей к покупке большего количества товаров.
- Размещать связанные товары близко друг к другу на полках магазина, чтобы увеличить вероятность их совместной покупки.
- Установить скидки на товары, которые часто покупают вместе, для стимулирования продаж и т. д.