====== Laboratorium 11 -- Reguły asocjacyjne ====== //Reguły asocjacyjne przypominają reguły decyzyjne omawiane na poprzednim wykładzie. Tym razem jednak decyzja (prawa strona implikacji) nie jest z góry określona, tzn. nie wiemy, na którym atrybucie ma się opierać. Jest to przykład nauki bez nauczyciela: algorytm nie ma określonej z góry prawidłowej odpowiedzi, zamiast tego ma opisać wewnętrzne zależności między atrybutami.// ===== Analiza koszykowa ===== ==== Dane ==== Mamy dane następujące informacje o transakcjach w jednym z hipermarketów: ^Numer paragonu ^ Kupione produkty ^ |1000 | Jabłka, Seler, Pieluchy | |2000 | Piwo, Seler, Jajka | |3000 | Jabłka, Jajka, Seler, Piwo | |4000 | Piwo, Jajka | Zadaniem algorytmu odkrywającego reguły asocjacyjne będzie odpowiedź napytanie: //Jakie są zależności pomiędzy kupowanymi produktami?// **Pytanie** Patrząc na zbiór uczący w tabeli powyżej wypisz reguły które będą określać jakie produkty są kupowane najczęściej razem. ==== Support i Confidence ==== Z powyższego zbioru uczącego możemy łatwo wywnioskować następujące reguły: if Piwo then Jajka if Jajka then Piwo if Jabłka then Seler if Seler then Jabłka Pozostałe reguły intuicyjnie odrzuciliśmy ponieważ ich //częstotliwość// w zbiorze uczącym jest niewielka, i w związku z tym mamy małą //pewność// co do ich prawdziwości. W celu automatycznego określenia tych parametrów stosuje się dwa wskaźniki: **support** (wsparcie) i **confidence** (wiarygodność) ===Support=== Wskaźnik ten określa częstotliwość (prawdopodobieństwo) danej reguły w stosunku do wszystkich transakcji. Innymi słowy jest to stosunek ilości transakcji zawierających dane elementy wchodzące w skład reguły do wszystkich transakcji. Dla przykładu z tabeli powyżej, //support// reguły If Piwo then Jajka jest równy $\frac{3}{4}=75\%$, ponieważ 3 transakcje zawierają Piwo i Jajka, natomiast ilość wszystkich transakcji jest równa 4. **Pytanie** Jaki jest //support// dla reguły poniżej? if Jabłka then Seler ===Confidence=== Wskaźnik ten określa siłę implikacji w regule. Innymi słowy jest on definiowany jako stosunek ilości transakcji zawierających wszystkie elementy wchodzące w skład reguły do transakcji zawierających elementy z części warunkowej reguły. Dla przykładu z tabeli powyżej, //confidence// reguły If Piwo then Jajka jest równy $\frac{3}{3}=100\%$, ponieważ 3 transakcje zawierają Piwo i Jajka, natomiast ilość transakcji zawierających elementy z części warunkowej tej reguły (czyli w tym wypadku Piwo) jest także równa 3. **Pytanie** Jaki jest //confidence// dla reguł poniżej? if Seler then Jabłka if Jabłka then Seler ===== Frequent Itemsets ===== Patrząc na przykłady powyżej odnalezienie dobrych reguł asocjacyjnych sprowadza się tak naprawdę do wykonania dwóch kroków * wyszukania zbiorów elementów które mają //support// większy lub równy jakiemuś zadanemu //supportowi progowemu// - są tak zwanymi zbiorami częstymi (//frequent itemsets//) * wybrania spośród nich tych konfiguracji, których //confidence// przekracza jakiś zadany //confidence progowy//. W przypadku reguł asocjacyjnych, zbiory które zawierają //k// elementów nazywane są k-zbiorami (//k-temsets//). **Pytanie** Zakładając, ze bazujemy na danych z tabeli z początku strony, wyznacz wszystkie //1-zbiory// i policz dla nich //support//. Przyjmując, że //support progowy// jest równy 50%, wyznacz 1-zbiór częsty. ===== Apriori ===== Na zasadzie opisanej powyżej działa najpopularniejszy algorytm wyszukujący reguły asocjacyjne - algorytm Apriori. Wykonuje on następujace krok: - znajdź wszystkie 1-zbiory (//1-itemsets//) - znajdź pośród wygenerowanych //1-zbiorów//, //częste 1-zbiory// (//frequent 1-itemsets// $L_1$) - czyli takie, których support jest $\geq \epsilon$ - bazując na $L_1$ wygeneruj //2-zbiory// (//2-itemsets//) - znajdź pośród wygenerowanych //2-zbiorów//, //częste 2-zbiory// $L_2$ - Powtarzaj proces, do momentu aż ostatni wygenerowany zbiór $L_{k-1}=\o$ Poniżej znajduje się bardziej formalny opis algorytmu: $$\begin{align} & \mathrm{Apriori}(T,\epsilon)\\ &\qquad L_1 \gets \{ \mathrm{1-item sets} \} \\ &\qquad k \gets 2\\ &\qquad\qquad \mathrm{\textbf{while}}~ L_{k-1} \neq \ \emptyset \\ &\qquad\qquad\qquad C_k \gets \{ a \cup \{b\} \mid a \in L_{k-1} \land b \in \bigcup L_{k-1} \land b \not \in a \}\\ &\qquad\qquad\qquad L_k \gets \{ c \mid c \in C_k \land ~ \mathit{support}[c] \geq \epsilon \}\\ &\qquad\qquad\qquad k \gets k+1\\ &\qquad\qquad \mathrm{\textbf{return}}~\bigcup_k L_k \end{align}$$ ===== Weka ===== - Na podstawie wiedzy zdobytej na poprzednich laboratoriach przygotuj plik //arff// dla weki, opisujący dane z tabeli z początku strony. Jak powinien wyglądać plik? Spróbuj pomóc sobie patrząc na plik //shopping.arff// ze zbioru danych: {{:pl:dydaktyka:ml:data.tar.gz|}} - Po wczytaniu pliku do weki, przejdź do zakładki //Associate// i uruchom algorytm z domyślnymi parametrami. Jakie wyniki otrzymałeś(aś)? Dlaczego? - Wczytaj plik //shopping.arff// i przeprowadź na nim wyszukiwanie reguł asocjacyjnych. Pobaw się parametrami algorytmu ===== Orange ===== - Zainstaluj Orange: [[https://orange.biolab.si/download/linux/|HWOTO]] - Uruchom: orange-canvas - Zainstaluj Add-on o nazwie Associate - Przejrzyj tutorial: [[https://blog.biolab.si/2016/04/25/association-rules-in-orange/|Association rule mining with Orange]]