Raw

3. Аудиторні задачі з розв’язаннями

Ці задачі розбирають в аудиторії «руками». Вони показують ті самі обчислення, які потім автоматизує домашня програма (4task.md). Теорія й формули — у методичних вказівках. Дані задач відрізняються від демонстраційного прикладу у 2method.md.

Задача 1. Міри інтересовності на малій базі

Дано транзакційну базу міні-маркету (N=5N = 5 транзакцій):

Транзакція Елементи
t1t_1 Кола, Чипси
t2t_2 Кола, Чипси, Пиво
t3t_3 Кола, Горішки
t4t_4 Чипси, Пиво, Горішки
t5t_5 Кола, Чипси, Пиво, Горішки

Знайти: підтримку наборів {Кола}\{\text{Кола}\}, {Чипси}\{\text{Чипси}\}, {Пиво}\{\text{Пиво}\}, {Кола,Чипси}\{\text{Кола}, \text{Чипси}\}, {Чипси,Пиво}\{\text{Чипси}, \text{Пиво}\}; а також достовірність, підйом і переконливість правил {Чипси}{Пиво}\{\text{Чипси}\} \Rightarrow \{\text{Пиво}\}, {Пиво}{Чипси}\{\text{Пиво}\} \Rightarrow \{\text{Чипси}\} та {Кола}{Чипси}\{\text{Кола}\} \Rightarrow \{\text{Чипси}\}.

Розв’язання. Підрахуємо лічильники транзакцій.

  • Кола — у t1,t2,t3,t5t_1, t_2, t_3, t_5: лічильник 44, supp=45=0.8\operatorname{supp} = \tfrac{4}{5} = 0.8.
  • Чипси — у t1,t2,t4,t5t_1, t_2, t_4, t_5: лічильник 44, supp=45=0.8\operatorname{supp} = \tfrac{4}{5} = 0.8.
  • Пиво — у t2,t4,t5t_2, t_4, t_5: лічильник 33, supp=35=0.6\operatorname{supp} = \tfrac{3}{5} = 0.6.
  • {Кола,Чипси}\{\text{Кола}, \text{Чипси}\} — у t1,t2,t5t_1, t_2, t_5: supp=35=0.6\operatorname{supp} = \tfrac{3}{5} = 0.6.
  • {Чипси,Пиво}\{\text{Чипси}, \text{Пиво}\} — у t2,t4,t5t_2, t_4, t_5: supp=35=0.6\operatorname{supp} = \tfrac{3}{5} = 0.6.

Правило {Чипси}{Пиво}\{\text{Чипси}\} \Rightarrow \{\text{Пиво}\}:

conf=supp({Чипси,Пиво})supp({Чипси})=0.60.8=0.75,lift=0.75supp({Пиво})=0.750.6=1.25, \operatorname{conf} = \frac{\operatorname{supp}(\{\text{Чипси}, \text{Пиво}\})}{\operatorname{supp}(\{\text{Чипси}\})} = \frac{0.6}{0.8} = 0.75, \qquad \operatorname{lift} = \frac{0.75}{\operatorname{supp}(\{\text{Пиво}\})} = \frac{0.75}{0.6} = 1.25,

conv=1supp({Пиво})1conf=10.610.75=0.40.25=1.6.\operatorname{conv} = \frac{1 - \operatorname{supp}(\{\text{Пиво}\})}{1 - \operatorname{conf}} = \frac{1 - 0.6}{1 - 0.75} = \frac{0.4}{0.25} = 1.6.

Правило {Пиво}{Чипси}\{\text{Пиво}\} \Rightarrow \{\text{Чипси}\} (той самий набір, інший напрямок):

conf=0.60.6=1.0,lift=1.00.8=1.25,conv=10.811.0. \operatorname{conf} = \frac{0.6}{0.6} = 1.0, \qquad \operatorname{lift} = \frac{1.0}{0.8} = 1.25, \qquad \operatorname{conv} = \frac{1 - 0.8}{1 - 1.0} \to \infty.

Підйом обох напрямків однаковий (1.251.25), бо симетричний; достовірність — різна (0.750.75 проти 1.01.0): усі покупці пива беруть чипси, але не навпаки. Переконливість напрямку «Пиво \Rightarrow Чипси» нескінченна — у цій базі правило без винятків.

Правило {Кола}{Чипси}\{\text{Кола}\} \Rightarrow \{\text{Чипси}\}:

conf=supp({Кола,Чипси})supp({Кола})=0.60.8=0.75,lift=0.750.8=0.9375<1, \operatorname{conf} = \frac{\operatorname{supp}(\{\text{Кола}, \text{Чипси}\})}{\operatorname{supp}(\{\text{Кола}\})} = \frac{0.6}{0.8} = 0.75, \qquad \operatorname{lift} = \frac{0.75}{0.8} = 0.9375 < 1,

conv=10.810.75=0.20.25=0.8<1.\operatorname{conv} = \frac{1 - 0.8}{1 - 0.75} = \frac{0.2}{0.25} = 0.8 < 1.

Достовірність висока (0.750.75), але підйом менший за одиницю: кола й чипси з’являються разом навіть трохи рідше, ніж за незалежності (обидва просто дуже поширені). Це правило оманливо-достовірне — його відкидають за підйомом.

Відповідь: supp({Кола})=supp({Чипси})=0.8\operatorname{supp}(\{\text{Кола}\}) = \operatorname{supp}(\{\text{Чипси}\}) = 0.8, supp({Пиво})=0.6\operatorname{supp}(\{\text{Пиво}\}) = 0.6, supp({Кола,Чипси})=supp({Чипси,Пиво})=0.6\operatorname{supp}(\{\text{Кола}, \text{Чипси}\}) = \operatorname{supp}(\{\text{Чипси}, \text{Пиво}\}) = 0.6; {Чипси}{Пиво}\{\text{Чипси}\} \Rightarrow \{\text{Пиво}\}: conf=0.75\operatorname{conf} = 0.75, lift=1.25\operatorname{lift} = 1.25, conv=1.6\operatorname{conv} = 1.6; {Пиво}{Чипси}\{\text{Пиво}\} \Rightarrow \{\text{Чипси}\}: conf=1.0\operatorname{conf} = 1.0, lift=1.25\operatorname{lift} = 1.25, conv=\operatorname{conv} = \infty; {Кола}{Чипси}\{\text{Кола}\} \Rightarrow \{\text{Чипси}\}: conf=0.75\operatorname{conf} = 0.75, lift=0.9375\operatorname{lift} = 0.9375, conv=0.8\operatorname{conv} = 0.8.

Задача 2. Apriori «руками»

Дано транзакційну базу фруктової лавки (N=6N = 6):

Транзакція Елементи
t1t_1 Яблуко, Банан
t2t_2 Яблуко, Банан, Виноград
t3t_3 Яблуко, Виноград
t4t_4 Банан, Виноград
t5t_5 Яблуко, Банан, Виноград, Апельсин
t6t_6 Банан, Апельсин

Знайти всі часті 1- та 2-набори за smin=0.5s_{\min} = 0.5 (лічильник 3\ge 3) і згенерувати з них правила з достовірністю cmin=0.7\ge c_{\min} = 0.7.

Розв’язання. Крок 1 — часті 1-набори.

1-набір Лічильник Підтримка Частий?
{Яблуко}\{\text{Яблуко}\} 4 0.670.67 так
{Банан}\{\text{Банан}\} 5 0.830.83 так
{Виноград}\{\text{Виноград}\} 4 0.670.67 так
{Апельсин}\{\text{Апельсин}\} 2 0.330.33 ні

Апельсин відпадає (і не з’явиться в жодному кандидаті).

Крок 2 — часті 2-набори. З’єднання трьох частих 1-наборів дає (32)=3\binom{3}{2} = 3 кандидати; відсів нікого не викидає (усі 1-підмножини часті). Рахуємо:

2-набір Транзакції Лічильник Підтримка Частий?
{Яблуко,Банан}\{\text{Яблуко}, \text{Банан}\} t1,t2,t5t_1, t_2, t_5 3 0.50.5 так
{Яблуко,Виноград}\{\text{Яблуко}, \text{Виноград}\} t2,t3,t5t_2, t_3, t_5 3 0.50.5 так
{Банан,Виноград}\{\text{Банан}, \text{Виноград}\} t2,t4,t5t_2, t_4, t_5 3 0.50.5 так

Усі три часті. Єдиний кандидат-трійка {Яблуко,Банан,Виноград}\{\text{Яблуко}, \text{Банан}, \text{Виноград}\} (усі його пари часті, тож відсів його лишає) трапляється лише в t2,t5t_2, t_5: supp=260.33<0.5\operatorname{supp} = \tfrac{2}{6} \approx 0.33 < 0.5нечастий. Отже, частих наборів розміру 3\ge 3 немає.

Крок 3 — генерація правил (cmin=0.7c_{\min} = 0.7). З кожного частого 2-набору виходить два правила; достовірність conf=supp(пари)/supp(умови)\operatorname{conf} = \operatorname{supp}(\text{пари})/\operatorname{supp}(\text{умови}):

Правило supp(умови)\operatorname{supp}(\text{умови}) conf\operatorname{conf} 0.7\ge 0.7? lift\operatorname{lift}
{Яблуко}{Банан}\{\text{Яблуко}\} \Rightarrow \{\text{Банан}\} 4/64/6 0.750.75 так 0.900.90
{Банан}{Яблуко}\{\text{Банан}\} \Rightarrow \{\text{Яблуко}\} 5/65/6 0.600.60 ні 0.900.90
{Яблуко}{Виноград}\{\text{Яблуко}\} \Rightarrow \{\text{Виноград}\} 4/64/6 0.750.75 так 1.1251.125
{Виноград}{Яблуко}\{\text{Виноград}\} \Rightarrow \{\text{Яблуко}\} 4/64/6 0.750.75 так 1.1251.125
{Банан}{Виноград}\{\text{Банан}\} \Rightarrow \{\text{Виноград}\} 5/65/6 0.600.60 ні 0.900.90
{Виноград}{Банан}\{\text{Виноград}\} \Rightarrow \{\text{Банан}\} 4/64/6 0.750.75 так 0.900.90

Поріг достовірності проходять чотири правила. Правила з умовою «Банан» (supp=5/6\operatorname{supp} = 5/6) відпадають: банан надто поширений, тож частка його співпокупців з іншим товаром мала.

Відповідь: часті 1-набори — {Яблуко},{Банан},{Виноград}\{\text{Яблуко}\}, \{\text{Банан}\}, \{\text{Виноград}\}; часті 2-набори — {Яблуко,Банан},{Яблуко,Виноград},{Банан,Виноград}\{\text{Яблуко}, \text{Банан}\}, \{\text{Яблуко}, \text{Виноград}\}, \{\text{Банан}, \text{Виноград}\} (усі з supp=0.5\operatorname{supp} = 0.5); частих 3-наборів немає. Правила з conf0.7\operatorname{conf} \ge 0.7: {Яблуко}{Банан}\{\text{Яблуко}\} \Rightarrow \{\text{Банан}\}, {Яблуко}{Виноград}\{\text{Яблуко}\} \Rightarrow \{\text{Виноград}\}, {Виноград}{Яблуко}\{\text{Виноград}\} \Rightarrow \{\text{Яблуко}\}, {Виноград}{Банан}\{\text{Виноград}\} \Rightarrow \{\text{Банан}\} (усі conf=0.75\operatorname{conf} = 0.75).

Ґратка наборів фруктової лавки з відсіванням Apriori: усе з Апельсином відсіяно без підрахунку, а трійка Яблуко-Банан-Виноград нечаста

Задача 3. Eclat та відбір цікавих правил

Дано ту саму базу, що в Задачі 2. Перевірити результат Задачі 2 алгоритмом Eclat (через tid-множини) і відібрати справді цікаві правила серед тих, що пройшли поріг достовірності, скориставшись підйомом і переконливістю.

Розв’язання. Вертикальний формат (tid-множини):

tid(Яблуко)={1,2,3,5},tid(Банан)={1,2,4,5,6},tid(Виноград)={2,3,4,5}. \operatorname{tid}(\text{Яблуко}) = \{1,2,3,5\}, \quad \operatorname{tid}(\text{Банан}) = \{1,2,4,5,6\}, \quad \operatorname{tid}(\text{Виноград}) = \{2,3,4,5\}.

Підтримку пар дістаємо перетином, не переглядаючи транзакцій:

tid(Яблуко)tid(Виноград)={2,3,5} (=3),tid(Яблуко)tid(Банан)={1,2,5} (3), \operatorname{tid}(\text{Яблуко}) \cap \operatorname{tid}(\text{Виноград}) = \{2,3,5\} \ (|\cdot| = 3), \quad \operatorname{tid}(\text{Яблуко}) \cap \operatorname{tid}(\text{Банан}) = \{1,2,5\} \ (3),

tid(Банан)tid(Виноград)={2,4,5} (3).\operatorname{tid}(\text{Банан}) \cap \operatorname{tid}(\text{Виноград}) = \{2,4,5\} \ (3).

Усі три пари мають лічильник 33 — збіг із Задачею 2. Для трійки перетинаємо далі:

(tid(Яблуко)tid(Виноград))tid(Банан)={2,3,5}{1,2,4,5,6}={2,5} (2<3),\big(\operatorname{tid}(\text{Яблуко}) \cap \operatorname{tid}(\text{Виноград})\big) \cap \operatorname{tid}(\text{Банан}) = \{2,3,5\} \cap \{1,2,4,5,6\} = \{2,5\} \ (2 < 3),

тобто {Яблуко,Банан,Виноград}\{\text{Яблуко}, \text{Банан}, \text{Виноград}\} нечастий — знову збіг.

Відбір цікавих правил. З чотирьох правил, що пройшли cminc_{\min} (Задача 2), залишаємо ті, де lift>1\operatorname{lift} > 1, і впорядковуємо за переконливістю:

Правило conf\operatorname{conf} lift\operatorname{lift} conv\operatorname{conv} Цікаве?
{Яблуко}{Виноград}\{\text{Яблуко}\} \Rightarrow \{\text{Виноград}\} 0.750.75 1.1251.125 1.331.33 так
{Виноград}{Яблуко}\{\text{Виноград}\} \Rightarrow \{\text{Яблуко}\} 0.750.75 1.1251.125 1.331.33 так
{Яблуко}{Банан}\{\text{Яблуко}\} \Rightarrow \{\text{Банан}\} 0.750.75 0.900.90 0.670.67 ні
{Виноград}{Банан}\{\text{Виноград}\} \Rightarrow \{\text{Банан}\} 0.750.75 0.900.90 0.670.67 ні

Хоча всі чотири мають однакову достовірність 0.750.75, лише пара «Яблуко — Виноград» має lift>1\operatorname{lift} > 1 і conv>1\operatorname{conv} > 1 — це справжній позитивний зв’язок. Правила з наслідком «Банан» (lift=0.9\operatorname{lift} = 0.9) — оманливо-достовірні через велику поширеність банана.

Відповідь: Eclat підтверджує часті набори Задачі 2; єдиний цікавий зв’язок — взаємне притягання Яблуко \leftrightarrow Виноград (lift=1.125\operatorname{lift} = 1.125, conv=1.33\operatorname{conv} = 1.33).

Граф правил Задачі 3: цікавий взаємний зв'язок Яблуко-Виноград (підйом 1.125) та оманливо-достовірні ребра в Банан (підйом 0.9)

Зв’язок із домашнім завданням. Саме ці кроки — прочитати транзакції, порахувати підтримку наборів, відсіяти нечасті за smins_{\min}, згенерувати правила й відібрати цікаві за cminc_{\min}, підйомом і переконливістю — виконуватиме ваша програма для довільного файлу транзакцій (4task.md). Задача 2 — зручний тест: подайте ці шість транзакцій на вхід за smin=0.5s_{\min} = 0.5, cmin=0.7c_{\min} = 0.7 й переконайтесь, що програма повертає ті самі три часті 2-набори та чотири правила.

Laboratory/Laboratory11/3classroom.md · 13.7 KB · updated 2026-08-05 09:55