Лекція 11. Пошук асоціативних правил. Алгоритми Apriori та Eclat
Огляд
У Лекції 9 та Лекції 10 ми розв’язували задачі кластеризації — це вже було навчання без учителя (англ. unsupervised learning): даним не приписано жодної цільової позначки, і метод сам шукає в них структуру. Пошук асоціативних правил належить до тієї самої родини, але шукає структуру іншого типу: не групи схожих об’єктів, а сталі спільні появи ознак — набори елементів, що систематично трапляються разом, і залежності «якщо є одне — імовірно, є й інше».
Класичний приклад — аналіз ринкового кошика (англ. market basket analysis): за чеками супермаркету знайти, які товари купують укупі. Правило «хто бере пелюшки, часто бере й пиво» — не прогноз для конкретного покупця (як у класифікації), а виявлена закономірність усієї бази транзакцій. У цій лекції ми означимо асоціативне правило, уведемо чотири міри інтересовності (підтримка, достовірність, підйом, переконливість), навчимося відбирати цікаві правила й розберемо два алгоритми пошуку частих наборів — Apriori (горизонтальний, з відсіванням кандидатів) та Eclat (вертикальний, на перетинах tid-множин).
Практичний бік. Підтримку, достовірність і підйом ви обчислюватимете «руками» й виконаєте Apriori вручну, а потім реалізуєте пошук правил програмою в Лабораторній роботі 11.
Наскрізний приклад лекції — маленька транзакційна база невеликого магазину: шість чеків над п’ятьма товарами.
| Транзакція | Товари (набір елементів) |
|---|---|
| Хліб, Молоко, Яйця | |
| Хліб, Масло | |
| Хліб, Молоко, Масло, Яйця | |
| Молоко, Масло | |
| Хліб, Молоко, Масло | |
| Хліб, Молоко, Яйця, Кава |
Тут транзакцій, а множина всіх товарів — .

11.1 Задача пошуку асоціативних правил
Означення (пошук асоціативних правил). Пошук асоціативних правил (англ. association rule mining) — це напрям машинного навчання, присвячений знаходженню в даних сталих залежностей у формі правил «якщо , то », де і — набори елементів (подій), що часто трапляються разом.
Три риси відрізняють цю задачу від класифікації (Лекції 6–8):
- Немає виділеної цільової ознаки. Будь-який елемент може опинитися як у лівій, так і в правій частині правила; ми не передбачаємо один стовпець за іншими, а шукаємо всі помітні зв’язки одразу.
- Результат — описовий, а не прогнозний. Правило описує закономірність наявних даних, а не виносить вирок про новий об’єкт.
- Зв’язок — не причинність. «Якщо , то » означає лише, що поява супроводжується появою частіше за випадкову; це не твердження, що спричиняє .
11.2 Сфери застосування
Задача виникає всюди, де дані природно подаються як набори одночасних подій.
- Аналіз ринкового кошика. Товари з одного чеку — для розкладки на полицях, рекомендацій («з цим товаром купують…») та акцій.
- Медична діагностика. Симптоми, результати аналізів і діагнози, що стало супроводжують певне захворювання.
- Аналіз веб-сторінок. Сторінки одного сеансу чи переходи за посиланнями — для навігації та перелінкування.
- Біоінформатика. Гени, що спільно експресуються, чи мутації, що трапляються разом; асоціації генотипу й фенотипу.
- Кібербезпека. Ознаки мережевих подій, що разом характеризують атаку, — для сигнатур систем виявлення вторгнень.
11.3 Транзакційна база даних
Означення (транзакційна база). Транзакційна (операційна) база даних — це множина транзакцій над скінченною множиною елементів (англ. items) . Кожна транзакція — це набір елементів, що трапилися разом. Набором (англ. itemset) називають будь-яку підмножину ; набір із елементів — це -набір.
На відміну від таблиці «об’єкт ознаки» з попередніх лекцій, транзакції можуть мати різну довжину (у чеку буває один товар, а буває десять), а порядок елементів у транзакції несуттєвий.
Два способи задання
Ту саму базу можна зберігати двома рівносильними способами — і вибір між ними визначає, який алгоритм зручніший.
Горизонтальний формат (транзакція набір елементів) — це саме таблиця з §Огляд: рядок — транзакція, у ньому перелічено її елементи. Так дані надходять природно (чек, сеанс, історія хвороби).
Вертикальний формат (елемент множина транзакцій) — для кожного елемента зберігають tid-множину (англ. tid-set, від transaction identifier) — множину номерів транзакцій, що його містять:
| Елемент | tid-множина |
|---|---|
| Хліб | |
| Молоко | |
| Масло | |
| Яйця | |
| Кава |
Вертикальний формат зручний тим, що підтримку набору (скільки транзакцій його містять) можна дістати як перетин tid-множин його елементів — на цьому й побудовано алгоритм Eclat (§11.8).
11.4 Асоціативне правило
Означення (асоціативне правило). Асоціативне правило — це вираз
де — непорожні набори елементів, що не перетинаються (). Набір називають умовою (антецедентом, англ. antecedent), а — наслідком (консеквентом, англ. consequent).
Читається правило як «транзакції, що містять , схильні містити й ». Наприклад, означає «до молока часто беруть яйця».
Саме собою правило нічого не варте, доки ми не виміряли, наскільки воно надійне й наскільки цікаве. Для цього слугують чотири числові міри.
11.5 Міри інтересовності
Підтримка
Означення (підтримка). Підтримка (англ. support) набору — це частка транзакцій, що містять :
Підтримка показує, наскільки поширений набір. Підтримкою правила називають підтримку об’єднання — частку транзакцій, де є і , і .
Приклад 11.1 (підтримка наборів). У наскрізній базі ():
Молоко з яйцями трапляються разом у транзакціях , тож . Це ж число — підтримка правила .
Достовірність
Підтримка симетрична й не відрізняє «якщо , то » від «якщо , то ». Напрямок правила вимірює достовірність.
Означення (достовірність). Достовірність (англ. confidence) правила —
Це умовна частка: серед транзакцій, що містять , яка частина містить ще й . Достовірність — емпіричний аналог умовної ймовірності .
Приклад 11.2 (достовірність). Для :
Тобто покупців молока беруть і яйця. Натомість для зворотного напрямку :
бо всі три транзакції з яйцями містять молоко. Підтримка обох правил однакова (), а достовірність — різна: достовірність напрямлена.
Типова помилка (висока достовірність без урахування поширеності наслідку). Достовірність здається ідеальною, але сама собою може ввести в оману. Якщо наслідок і так є майже в кожній транзакції, то «підтвердиться» після будь-якого — правило достовірне, але беззмістовне. Саме цю ваду виправляє підйом.
Підйом
Означення (підйом). Підйом (англ. lift) правила — це відношення його достовірності до підтримки наслідку:
Підйом порівнює, наскільки частіше з’являється разом з , ніж якби і були незалежні. Три випадки:
- — позитивний зв’язок: і притягуються (поява підвищує шанс );
- — незалежність: нічого не каже про ;
- — негативний зв’язок: і відштовхуються.
Із другої формули видно, що підйом симетричний: — на відміну від достовірності.
Приклад 11.3 (підйом). Для (, ):
тобто молоко підвищує шанс яєць на — слабкий, але позитивний зв’язок. Порівняймо з :
Достовірність висока (), але підйом менший за одиницю: хліб і молоко з’являються разом навіть трохи рідше, ніж за незалежності, — просто обидва дуже поширені. Це саме та пастка, від якої застерігала виноска вище: висока достовірність без підйому оманлива.
Переконливість
Підйом симетричний і не бачить напрямку. Ще одна міра, переконливість, відновлює напрямок і зосереджується на тому, як часто правило помиляється.
Означення (переконливість). Переконливість (англ. conviction) правила —
Чисельник — частка транзакцій без узагалі; знаменник — частка «порушень» правила (є , немає ). Отже, переконливість — відношення очікуваної частоти порушень за незалежності до фактичної. Тлумачення:
- — правило змістовне: порушень менше, ніж було б випадково (що більше, то краще);
- — незалежність ( і не пов’язані);
- , коли — правило ніколи не порушується.
Приклад 11.4 (переконливість). Для (, ):
— правило змістовніше за випадкове. А для маємо , тож знаменник обертається на нуль і : у нашій базі це правило не має жодного винятку.
Зведемо всі чотири міри для трьох правил (усі числа перевірено обчисленням):
| Правило | ||||
|---|---|---|---|---|

11.6 Відбір цікавих правил
Правил, які можна виписати з бази, надзвичайно багато (для елементів — експоненційно). Переважна більшість — випадковий шум або тривіальності. Тому задають два пороги й лишають правила, що долають обидва.
Означення (цікаве правило). Задано мінімальну підтримку і мінімальну достовірність . Правило вважають цікавим, якщо
Поріг підтримки відсіює рідкісні набори (випадкові збіги, статистично ненадійні); поріг достовірності відсіює ненадійні напрямки. Підйом і переконливість застосовують додатково — уже до правил, що пройшли обидва пороги, — щоб упорядкувати їх за силою зв’язку й прибрати оманливо-достовірні (з ).

Пошук цікавих правил природно розпадається на два кроки:
- Знайти всі часті набори — набори з . Це обчислювально важка частина; їй присвячено Apriori та Eclat.
- Згенерувати правила з кожного частого набору: набір розбивають на і усіма способами й лишають ті, де . Цей крок дешевий, бо всі потрібні підтримки вже пораховано на кроці 1.
Граф правил
Набір відібраних правил зручно подати графом: вершини — елементи (або набори), орієнтоване ребро означає правило , а його товщину чи колір пов’язують із мірою (підтримкою, достовірністю, підйомом). Так стають видимими центральні товари (багато вихідних ребер), взаємні пари й ізольовані елементи. Такий граф цікавих правил — стандартний спосіб подати результат аналізу замовникові.

11.7 Алгоритм Apriori
Перебирати всі наборів неможливо. Apriori різко скорочує перебір, спираючись на одну структурну властивість частоти.
Властивість Apriori (антимонотонність). Усі підмножини частого набору — часті; рівносильно, будь-яка надмножина нечастого набору — нечаста.
Обґрунтування. Якщо , то кожна транзакція, що містить , містить і , тож . Отже, коли , то й .
Практичний наслідок: щойно набір виявився нечастим, усі його надмножини можна відкинути не рахуючи — саме це економить роботу.
Кроки алгоритму
Apriori(транзакції D, мінімальна підтримка s_min):
L1 <- усі 1-набори з підтримкою >= s_min # часті 1-набори
k <- 2
доки L(k-1) не порожня:
Ck <- apriori_gen(L(k-1)) # кандидати k-наборів
для кожної транзакції t із D: # один прохід по базі
для кожного кандидата c ⊆ t: лічильник[c]++
Lk <- { c ∈ Ck : лічильник[c]/N >= s_min } # часті k-набори
k <- k + 1
повернути об'єднання всіх Lk
apriori_gen(L(k-1)): # генерація кандидатів
# з'єднання: два (k-1)-набори зі спільними першими (k-2) елементами
Ck <- { p ∪ q : p,q ∈ L(k-1), різняться лише останнім елементом }
# відсів: викинути кандидата, якщо якась його (k-1)-підмножина ∉ L(k-1)
для кожного c ∈ Ck:
якщо існує (k-1)-підмножина s ⊂ c така, що s ∉ L(k-1):
викинути c
повернути Ck
Ключова ідея — генерація кандидатів у два підкроки: з’єднання будує потенційні -набори з частих -наборів, а відсів заздалегідь викидає тих кандидатів, чия якась -підмножина нечаста (за властивістю Apriori вони не можуть бути частими). Лише те, що пережило відсів, коштує проходу по базі для підрахунку підтримки.
Приклад 11.5 (Apriori вручну)
Візьмемо наскрізну базу й поріг , тобто набір частий, коли він є принаймні у з транзакцій (лічильник ).
Крок 1 — часті 1-набори. Порахуємо підтримку кожного елемента:
| 1-набір | Лічильник | Підтримка | Часті? |
|---|---|---|---|
| 5 | так | ||
| 5 | так | ||
| 4 | так | ||
| 3 | так | ||
| 1 | ні |
Кава відпадає (і більше ніколи не з’явиться в жодному кандидаті — властивість Apriori). Лишаються чотири часті 1-набори.
Крок 2 — кандидати й часті 2-набори. З’єднання чотирьох частих 1-наборів дає кандидатів; усі їхні 1-підмножини часті, тож відсів нікого не викидає. Рахуємо підтримку:
| 2-набір | Лічильник | Підтримка | Часті? |
|---|---|---|---|
| 4 | так | ||
| 3 | так | ||
| 3 | так | ||
| 3 | так | ||
| 3 | так | ||
| 1 | ні |
Часті всі, крім (вони разом лише в ).
Крок 3 — кандидати й часті 3-набори. Тепер працює відсів. З’єднавши часті 2-набори, дістаємо чотири потенційні 3-набори; перевіримо їхні 2-підмножини:
| Кандидат | 2-підмножини | Рішення відсіву |
|---|---|---|
| усі три часті | лишити, рахувати | |
| усі три часті | лишити, рахувати | |
| містить — нечасту | відсіяти | |
| містить — нечасту | відсіяти |
Два кандидати відсіяно без підрахунку — у цьому й економія. Рахуємо лише два, що лишилися:
Отже, єдиний частий 3-набір — . З’єднати його нема з чим — часті 4-набори відсутні, алгоритм зупиняється.


Генерація правил (Приклад 11.6)
Візьмемо частий 3-набір () і порог . Розіб’ємо на умову й наслідок усіма способами й порахуємо достовірність :
| Правило | ? | |||
|---|---|---|---|---|
| так | ||||
| так | ||||
| так | ||||
| так | ||||
| ні | ||||
| ні |
Чотири правила проходять поріг достовірності; усі мають — зв’язки справжні. Найсильніше (за підйомом ) — : додавши до кошика хліб і молоко, покупець у раза частіше бере яйця.
Типова помилка (плутати пороги підтримки й достовірності). Підтримку перевіряють для набору (крок 1, спільна для всіх правил цього набору), а достовірність — для напрямку (крок 2, різна для кожного розбиття). Занизький породжує лавину випадкових наборів; зависокий — втрачає рідкісні, але цінні правила. Це компроміс, який підбирають під конкретну задачу.
11.8 Алгоритм Eclat
Apriori працює з горизонтальним форматом і на кожному рівні робить окремий прохід по всій базі, щоб порахувати підтримку кандидатів. Eclat (Equivalence Class Transformation) працює з вертикальним форматом і уникає повторних проходів: підтримку він дістає перетином tid-множин.
Ключова ідея Eclat. Для будь-яких наборів
Підтримку набору дає потужність перетину tid-множин його частин — без звертання до вихідних транзакцій.
Eclat будує префіксне дерево наборів: корінь — порожній набір, кожен вузол додає до батьківського набору один елемент, а його tid-множину дістають перетином tid-множини батька з tid-множиною нового елемента. Гілки з нечастим набором не розгалужують (та сама властивість Apriori: надмножина нечастого — нечаста).
Eclat(префікс P, список пар <набір, tidset>, s_min):
для кожного елемента i зі списку:
вивести P ∪ i.набір з підтримкою |i.tidset| / N # частий набір
нащадки <- порожній список
для кожного j зі списку, що йде після i:
T <- i.tidset ∩ j.tidset # перетин tid-множин
якщо |T| / N >= s_min:
додати < i.набір ∪ j.набір, T > до нащадки
якщо нащадки не порожні:
Eclat(P ∪ i.набір, нащадки, s_min) # заглиблення в дерево
Приклад 11.7 (Eclat вручну)
Той самий поріг (лічильник ). Часті 1-набори з їхніми tid-множинами (Кава відпала, ):
Гілка «Хліб». Перетинаємо tid-множину хліба з наступними:
Усі три 2-набори з хлібом часті. Заглиблюємось у під-гілку з tid-множиною і перетинаємо її з рештою під-гілок цього вузла:
Це той самий частий 3-набір, що його знайшов Apriori, — але дістали ми його перетином множин, а не проходом по базі. Гілка «Масло» одразу дає (потужність ) — нечастий 2-набір, який не розгалужують.

Apriori проти Eclat. Обидва знаходять ті самі часті набори; різниця — у способі рахувати підтримку. Apriori (горизонтальний, «завширшки») робить прохід по базі на кожному рівні — простий і ощадливий за пам’яттю. Eclat (вертикальний, «завглибшки») зводить підрахунок до перетинів tid-множин — швидший, коли ці множини малі, але тримає їх у пам’яті. На щільних базах tid-множини великі, і Eclat програє за пам’яттю; на розріджених — виграє за швидкістю.
Застосування в аналітиці даних
- Рекомендаційні системи й розкладка. Правила «з беруть » — основа підказок «з цим товаром купують…», кросселінгу, розкладки на полицях і «якорів» акцій; підйом відсіває тривіальні пари поширених товарів.
- Виявлення аномалій і атак. У кібербезпеці правила над ознаками подій дають сигнатури; порушення сталого правила — привід для тривоги.
- Медичні та біологічні асоціації. Спільні симптоми/діагнози чи гени, що експресуються разом; підйом і переконливість відрізняють справжній зв’язок від збігу через поширеність.
- Скорочення простору пошуку. Властивість Apriori — загальний прийом «якщо частина не підходить, ціле теж ні» — застосовний і поза асоціативними правилами (пошук частих підграфів, послідовностей).
Підсумок
- Пошук асоціативних правил — навчання без учителя, що шукає сталі спільні появи у формі «якщо , то »; це зв’язок, а не причинність.
- Дані — транзакційна база над елементами ; її задають горизонтально (транзакція набір) або вертикально (елемент tid-множина).
- Асоціативне правило будують для наборів, що не перетинаються ().
- Чотири міри: підтримка (поширеність); достовірність (надійність напрямку); підйом (сила зв’язку, симетрична; — притягання); переконливість (частота порушень; при ).
- Цікаві правила долають пороги і ; підйом і переконливість упорядковують їх і прибирають оманливо-достовірні.
- Apriori спирається на антимонотонність (надмножина нечастого — нечаста): будує кандидатів з’єднанням частих -наборів, відсіває тих, у кого є нечаста підмножина, і лише решту рахує проходом по базі. У наскрізному прикладі () єдиний частий 3-набір — .
- Eclat дає ті самі набори, але рахує підтримку перетином tid-множин у префіксному дереві завглибшки; вигідний на розріджених базах.
Вправи
Для розігріву
- За наскрізною базою обчисліть і , а тоді достовірність правила .
- Поясніть різницю між достовірністю й підйомом. Чому правило з достовірністю може мати підйом менший за ? Наведіть приклад із лекції.
- Сформулюйте властивість Apriori двома рівносильними способами (через підмножини частого набору й через надмножини нечастого) і поясніть, як вона економить перебір.
Стандартні
- Для правила обчисліть усі чотири міри (підтримку, достовірність, підйом, переконливість). Порівняйте підйом і переконливість із правилом з Прикладу 11.4: яке правило змістовніше?
- Виконайте Apriori на наскрізній базі з порогом (лічильник ). Які нові часті 2- і 3-набори з’являться порівняно з Прикладом 11.5? Чи стане частим ?
- Побудуйте tid-множини й методом Eclat перевірте, що частий за , а — ні, не рахуючи транзакцій безпосередньо.
Підвищеної складності
- Доведіть симетричність підйому: — виходячи з формули через підтримки. Чому достовірність цієї симетрії не має?
- Покажіть, що для правила з фіксованою умовою підйом і переконливість досягають максимуму одночасно з достовірністю. Що відбувається з переконливістю, коли , і як це тлумачити?
- Оцініть, скільки кандидатів довелося б порахувати «в лоб» (усі 2- і 3-набори над п’ятьма елементами) без відсіву, і скільки насправді порахував Apriori у Прикладі 11.5. У скільки разів відсів скоротив роботу на рівні 3-наборів? Запропонуйте також, як подати результат Прикладу 11.6 графом цікавих правил: які вершини й ребра, чим кодувати підтримку та підйом.