Аналитика данных
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 содержит результаты ассоциативного анализа.

Вот, как это можно было бы использовать:

  1. Использовать ассоциативные правила для рекомендации связанных товаров клиентам. Если клиент купил, например, "хлеб", "яйца" и "молоко", вы можете рекомендовать "масло", так как есть ассоциация между этими товарами.
  2. Создавать маркетинговые акции, предлагая скидки на товары, которые часто покупают вместе. Это может стимулировать покупателей к покупке большего количества товаров.
  3. Размещать связанные товары близко друг к другу на полках магазина, чтобы увеличить вероятность их совместной покупки.
  4. Установить скидки на товары, которые часто покупают вместе, для стимулирования продаж и т. д.