ВЫЯВЛЕНИЕ ОБОБЩЕННЫХ АССОЦИАТИВНЫХ ПРАВИЛ - ОПИСАНИЕ АЛГОРИТМА Введение В данной статье будет обсуждаться проблема выявления обобщенных ассоциативных правил. Здесь мы будем использовать некоторые определения и термины, которые были описаны в статье 'Введение в анализ ассоциативных правил'. Наряду с уже известными параметрами правила такими как поддержка и достоверность опишем такой параметр, как уровень интереса. Также будут приведены два алгоритма вычисления обобщенных ассоциативных правил: базовый алгоритм и улучшенный алгоритм. Основным отличием обобщенных ассоциативных правил от ассоциативных правил является то, что получаемые правила включают элементы, являющиеся предками элементов входящих во множество транзакций. Определение 1. Иерархией (таксономией) элементов называется лес направленных ациклических деревьев, листьями которых являются элементы транзакций, а внутренними узлами группы элементов. Пример иерархии товаров и товарных групп приведен на рис. 1. Имея такую иерархию, можно получить, например, такие правила: 'Если покупатель купил Сок, то он, скорее всего, захочет купить Кефир'; 'Если покупатель купил Молочные продукты, то он, скорее всего, захочет купить Минеральную воду'. То есть, в получаемых правилах, как в условии, так и в следствии могут присутствовать элементы, находящиеся на разных уровнях таксономии. Рис.1. Пример иерархии товаров и товарных групп. Введение информации о принадлежности элементов транзакций к той или иной группе может дать следующие преимущества: 1. Будут выявлены ассоциативные правила не только между отдельными элементами, но и между различными уровнями иерархии. 2. В некоторых случаях отдельные элементы могут иметь очень маленькую поддержку, однако, значение поддержки всей группы, в которую входит этот элемент, может быть больше порога минимальной поддержки. Это приводит к тому, что ранее не выявленное потенциально интересное правило, построенное на элементах нижнего уровня иерархии, может быть получено, но его элементами будут либо элементы транзакции, либо предки этих элементов. 3. Введение информации о группировке элементов может использоваться для отсечения 'неинтересных' правил. Описание задачи Пусть I={i1, i2, … im} – это множество элементов. Пусть I – это лес направленных деревьев. Дуги в I – это зависимости между элементами. Пусть элементы, принадлежащие I, расположены в некой иерархии. Если есть дуга от a к b, то говорят, что a – предок b, и b – потомок a (a – это обобщение b). Пусть имеется множество транзакций D, где каждая транзакция T – это множество элементов (событий), произошедших одновременно. Имеет место следующее утверждение: T I. Определение 2. Расширенной транзакцией называется транзакция, расширенная предками всех элементов, входящих в эту транзакцию. Определение 3. Обобщенным ассоциативным правилом называется импликация X Y, где X I, Y I и X Y = , и где ни один из элементов, входящих в набор Y, не является предком ни одного элемента, входящего в X. Правило X Y имеет поддержку s (support), если s% расширенных транзакций, содержат X Y, supp(X Y) = supp(X Y). Достоверность правила показывает, какова вероятность того, что из X следует Y. Правило X Y справедливо с достоверностью (confidence) c, если c% расширенных транзакций, содержащих X, также содержат Y, conf(X Y) = supp(X Y)/supp(X). Мы называем правило X Y обобщенным, потому что элементы, входящие в него могут находиться на любом уровне таксономии. Также будем называть x предком x и x потомком x. Задача. Пусть D – это множество транзакций, а I – множество элементов, находящихся в иерархической зависимости. Необходимо найти закономерности, которые являются обобщенными ассоциативными правилами вида X Y, причем supp(X Y) >= minsupp и conf(X Y) >= minconf. Это определение задачи имеет одну проблему. Дело в том, что при таком определении задачи, будут найдены 'излишние' обобщенные ассоциативные правила. Для решения этой проблемы рассмотрим такой параметр правила как уровень интереса. Замечания. Пусть Pr(X) – это вероятность того, что все элементы из X содержаться в одной расширенной транзакции. Тогда supp(X Y) = Pr(X Y) и conf(X Y) = Pr(Y|X). Если поддержка {x,y} больше значения минимальной поддержки, то и поддержка {x,y}, и поддержка {x,y}, и поддержка Y {x,y} будет больше порога минимальной поддержки. Однако если достоверность правила X Y гарантированно будет иметь больше минимальной достоверности, только правило X достоверность больше чем минимальная. Поддержка элемента, взятого из внутреннего уровня иерархии не равна сумме поддержек элементов, являющихся непосредственными потомками этого элемента. Определение 'интересных' правил. Многие обобщенные ассоциативные правила, которые могут быть найдены, являются потенциально не интересными (примерно 20% – 70%). Для определения того, какие правила являются 'интересными', а какие нет, определим такой параметр, как уровень интереса. Пусть Z – это предок Z, где Z и Z – множества элементов, входящих в иерархию (Z,Z I). Z является предком Z, только в том случае, если Z можно получить из Z путем подмены одного или нескольких элементов их предками. Если рассматривать иерархию на рис. 1, то примером могут быть эти два множества: Z={Сок, Кефир, Бумага}, Z={Напитки, Молочные продукты, Бумага}. Будем называть правила X Y, X Y, X Y предками правила X Y. Определение 4. Правило X такого правила X' Y', что X' Y является ближайшим предком правила X Y' – это предок X Y и X Y – это предок X' Подобные определения можно дать и для правил: X Y, X Y, если не существует Y'. Y. Y. Пусть Z = X Y. Заметим что supp(X Y) = supp(Z). Назовем Рассмотрим правило X ожидаемым значением Pr(Z) относительно Z. Пусть Z={z1, …, zn}, Z={z1, …, zj, zj+1, …, zn}, 1 <= j <= n. Тогда можно определить: Аналогично относительно X определим как ожидаемое значение достоверности правила X Y Y. Пусть Y={y1, …, yn}, Y={y1, …, yj, yj+1…, yn}, 1 <= j <= n. Тогда можно определить Определение 5. Правило X Y называется R-интересным относительно правила-предка, если поддержка правила X Y в R раз больше ожидаемой поддержки правила X Y относительно правила-предка или если достоверность правила X Y в R раз больше ожидаемой достоверности правила X Y относительно правила-предка. Определение 6. Правило называется интересным, если у него нет предков или оно является R интересным относительно всех своих ближайших предков. Определение 7. Правило называется частично интересным, если у него нет предков или оно является R-интересным относительно любого своего ближайшего предка. Пример. Пусть в результате работы алгоритмы мы получили следующие правила (табл. 1). Поддержка элементов входящих в них приведена в таблице 2. Иерархия элементов дана рис. 1. Уровень интереса R=1.3. N правила Текст правила 1 Сок Поддержка, % Молочные продукты 2 Безалкогольные напитки 3 Сок 10 Кефир Кефир 15 9 Таблица 1. Обобщенные ассоциативные правила. Элемент Поддержка, % Напитки 7 Безалкогольные напитки 5 Сок 3 Молочные продукты 6 Кефир 4 Таблица 2. Поддержка элементов. Рассмотрим правило номер 3. Определим является ли это правило интересным/частично интересным или нет. Другими словами, нам необходимо проверить неравенство Правило 2 является ближним предком правила 3, посчитаем ожидаемую поддержку. Неравенство не выполняется, следовательно, правило 3 не является интересным. Правило 1 тоже является ближним предком правила 3, посчитаем ожидаемую поддержку. Неравенство выполняется, следовательно, правило 3 не является частично интересным. Теперь с учетом написанного выше можно сформулировать задачу по новому. Пусть D – это множество транзакций, а I – множество элементов, находящихся в иерархической зависимости. Необходимо найти закономерности, которые являются обобщенными ассоциативными Y, причем поддержка правила X Y больше или равна некоему наперед правилами вида X заданному значению минимальной поддержки и достоверность больше или равна значению минимальной достоверности и правила X Y является интересными или частично интересными. Алгоритм вычисления обобщенных ассоциативных правил Как может показаться с первого взгляда, для вычисления обобщенных ассоциативных правил можно использовать любой алгоритм выявления ассоциативных правил, дополнив каждую транзакцию предками каждого элемента, входящего в транзакцию. Однако такой метод 'в лоб' очень неэффективен и использование его влечет за собой следующие проблемы: 1. Размер каждой транзакции увеличивается в зависимости от глубины дерева от нескольких десятков процентов до нескольких раз, и как следствие, увеличение времени вычисления и количества правил. 2. Появление избыточных правил, в которых в условии и в следствии находятся элемент и его предок. Примером такого правила может быть 'Если покупатель купил Кефир, то он, скорее всего, захочет купить Молочные продукты'. Совершенно ясно, что практическая ценность этого правила равна нулю при достоверности равной 100%. Для решения этой проблемы может быть использование специального алгоритма, учитывающего всю специфику обобщенных ассоциативных правил. Процесс вычисления обобщенных ассоциативных правил можно разбить на несколько этапов: 1. Поиск часто встречающихся множеств элементов, поддержка которых больше чем заданный порог поддержки (минимальная поддержка). 2. Вычисления правил на основе найденных на предыдущем этапе часто встречающихся множеств элементов. Основная идея вычисления правил на основе часто встречающихся множеств заключается в следующем: Если ABCD – это часто встречающееся множество Y (например, AB элементов, то на основе этого множества можно построить правила X CD), причем X Y = ABCD. Поддержка правила равна поддержке часто встречающегося Y) = supp(X Y) / множества. Достоверность правила вычисляется по формуле conf(X supp(X). Правило добавляется к результирующему списку правил, если достоверность этого правила больше порога minconf. 3. Из результирующего списка правил удаляются все 'неинтересные' правила. Базовый алгоритм поиска часто встречающихся множеств На первом шаге алгоритма подсчитываются 1-элементные часто встречающиеся наборы. При этом элементы могут находиться на любом уровне таксономии. Для этого необходимо 'пройтись' по всему набору данных и подсчитать для них поддержку, т.е. сколько раз встречается в базе. Следующие шаги будут состоять из двух частей: генерации потенциально часто встречающихся наборов элементов (их называют кандидатами) и подсчета поддержки для кандидатов. Описанный выше алгоритм можно записать в виде следующего псевдокода: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. L1 = { Часто встречающиеся множества элементов и групп элементов }; для( k=2; Lk-1 <> ; k++ ) { Ck = { Генерация кандидатов мощностью k на основе Lk-1 }; для всех транзакций t D { Расширить транзакцию t предками всех элементов, входящих в транзакцию; Удалить дубликаты из транзакции t; для всех кандидатов с Ck если с t то c.count++; } Lk = { с Ck | c.count >= minsupp }; // Отбор кандидатов } Результат = UkLk; Опишем функцию генерации кандидатов. Для того чтобы получить k-элементные наборы, воспользуемся (k-1)-элементными наборами, которые были определены на предыдущем шаге и являются часто встречающимися. Алгоритм генерации кандидатов будет состоять из двух шагов: 1. Объединение. Каждый кандидат Ck будет формироваться путем расширения часто встречающегося набора размера (k-1) добавлением элемента из другого (k-1)- элементного набора. Приведем алгоритм этой функции в виде небольшого SQL-подобного запроса: INSERT INTO Ck SELECT a.item2, …, a.itemk-1, b.itemk-1 a.item1, FROM a, Fk-1 b Fk-1 WHERE = b.item1, a.item1 = b.item2, … , a.item2 = b.itemk-2, a.itemk-2 a.itemk-1 < b.itemk-1 2. Удаление избыточных правил. На основании свойства анти-монотонности, следует удалить все наборы c Ck, если хотя бы одно из его (k-1) подмножеств не является часто встречающимся. Для эффективного подсчета поддержки кандидатов можно использовать хэш-дерево [5]. Хеш-дерево строится каждый раз, когда формируются кандидаты. Первоначально дерево состоит только из корня, который является листом, и не содержит никаких кандидатов-наборов. Каждый раз, когда формируется новый кандидат, он заносится в корень дерева и так до тех пор, пока количество кандидатов в корне-листе не превысит некоего порога. Как только количество кандидатов становится больше порога, корень преобразуется в хеш-таблицу, т.е. становится внутренним узлом, и для него создаются потомки-листья. И все примеры распределяются по узлам-потомкам согласно хешзначениям элементов, входящих в набор, и т.д. Каждый новый кандидат хешируется на внутренних узлах, пока он не достигнет первого узла-листа, где он и будет храниться, пока количество наборов опять же не превысит порога. Улучшенный алгоритм поиска часто встречающихся множеств К базовому алгоритму можно добавить несколько оптимизаций, которые увеличат скорость работы базового алгоритма: 1. Целесообразно единожды вычислить множества предков для каждого элемента иерархии как для элемента нижнего уровня таксономии (лист дерева), так и для элемента внутреннего уровня. 2. Необходимо удалять кандидаты, содержащие элемент и его предок. Для реализации этой оптимизации рассмотрим следующие две леммы: Лемма 1. Поддержка множества X, содержащего и элемент x и его предок x вычисляется по формуле supp(X)=supp(X-x). Принимая во внимание эту лемму, мы будем удалять кандидаты, содержащие и элемент и его предок из списка кандидатов до начала процесса подсчета поддержки. Лемма 2. Если Lk – это список часто встречающихся множеств, не содержащий множеств, включающих и элемент и его предок в одном множестве, то Ck+1 (список кандидатов, получаемых из Lk) также не будет содержать множеств, включающих и элемент и его предок. Учитывая утверждение, данное в этой лемме, мы будем удалять кандидатов, включающих и элемент и его предок, из списка кандидатов только на первой итерации внешнего цикла. 3. Нет необходимости в добавлении всех предков всех элементов, входящих в транзакцию. Если кокой-то элемент, у которого есть предок, не находится в списке кандидатов, то в списке элементов с предками он помечается как удаленный. Следовательно, из транзакции удаляются элементы, помеченные как удаленные, или производится замена этих элементов на их предков. К транзакции добавляются только не удаленные предки. 4. Не 'пропускать' транзакцию через хэш-дерево, если ее мощность меньше чем мощность элементов, расположенных в хэш-дереве. 5. Целесообразно помечать транзакции как удаленные и не использовать их при подсчете поддержки на следующих итерациях, если на текущей итерации в эту транзакцию не вошел ни один кандидат. Учитывая написанное выше, получаем следующий алгоритм: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. // Оптимизация 1 Вычислить I* множества предков элементов для каждого элемента; L1 = {Часто встречающиеся множества элементов и групп элементов}; для ( k = 2; Lk-1 <> ; k++ ) { Ck = {Генерация кандидатов мощностью k на основе Lk-1}; // Оптимизация 2 если k = 2 то удалить те кандидаты из Ck, которые содержат элемент и его предок; // Оптимизация 3 Пометить как удаленные множества предков элемента, который не содержится в списке кандидатов; для всех транзакций t D { // Оптимизация 3 для каждого элемента х t добавить всех предков х из I* к t; Удалить дубликаты из транзакции t; // Оптимизация 4,5 если (t не помечена как удаленная) и ( |t| >= k) то { для всех кандидатов с Ck если с t то c.count++; // Оптимизация 5 если в транзакцию t не вошел ни один кандидат то пометить эту транзакцию как удаленную; } } // Отбор кандидатов 30. Lk = { с >= Ck | c.count >= minsupp }; 31. } 32. Результат = UkLk; Заключение В данной статье был рассмотрен вопрос выявления обобщенных ассоциативных правил. Введение информации о группировке элементов транзакций позволило получать правила, в которых элементами являются как сами элементы транзакций, так и группы, в которые входят эти элементы. Также с вводом информации о группировке, появилась возможность отсечения 'излишних' правил, для чего был введен такой параметр как минимальный уровень интереса. Появление такого инструмента, как алгоритм поиска обобщенных ассоциативных правил значительно расширило круг задач, решаемых при помощи методов выявления стандартных шаблонов событий [3]. Примером такой задачи может служить задача нахождения зависимостей между товарами, продаваемыми некой фирмой и ее покупателями. Цель такой задачи – это найти тех покупателей на конкретные товары (например, товары, которые 'завалялись' на складе), которые их не когда не покупали, но покупали схожие. Статья опубликована в научно-практическом журнале "Exponenta Pro. Математика в приложениях" #3/2003. Сергей Ларин BaseGroup Labs Список литературы: 1. Акобир Шахиди, Введение в анализ ассоциативных правил (www.basegroup.ru/rules/intro.htm), 2002. 2. Акобир Шахиди, Apriori – масштабируемый алгоритм поиска ассоциативных правил (www.basegroup.ru/rules/apriori.htm), 2002. 3. Сергей Ларин, Применение ассоциативных правил для стимулирования продаж (www.basegroup.ru/practice/salepromotion.htm), 2003. 4. R. Srikant, R. Agrawal, Mining Generalized Association Rules, In Proc. of the 21st International Conference on VLDB, Zurich, Switzerland, 1995. 5. J.S. Park, M.-S. Chen, and S.Y. Philip, An Effective HashBased Algorithm for Mining Association Rules, In Proc. ACM SIGMOD Int’l Conf. Management of Data, ACM Press, New York, 1995. 6. R. Agrawal, R. Srikant, Fast algorithms for mining association rules, In Proc. of the VLDB Conference, Santiago, Chile, September 1994.