Na tych zajęciach zajmiemiy się nad problemem wzorców zakupowych występujących w koszykach zakupów. Analizujemy własności algorytów Apriori i FP-Growth i sprawdzamy, jak parametry minimalnego wsparcia (minsup) i minimalnej ufności (minconf) wpływają na uzyskiwane wyniki.

Rapid Miner

  • Uruchom narzędzie Rapid Miner 6.5
  • Utwórz nowy przepływ. Użyj operatora Read CSV aby załadować plik marketbasket.csv. Jako separator między kolumnami wskaż znak przecinka. Zaznacz także, że pierwszy wiersz w pliku zawiera nazwy atrybutów. Po załadowaniu pliku uruchom przepływ i obejrzyj metadane.
  • Dodaj do przepływu operator Numerical to Binominal aby zamienić każdy atrybut na atrybut binarny. Następnie umieść na przepływie operator FP-Growth, ustal liczbę poszukiwanych zbiorów częstych na 100 (parametr find min number of itemsets), a wartość progu minimalnego wsparcia ustaw na min support=0.1. Uruchom przepływ i obejrzyj wyniki. Porównaj wyniki z sytuacją, w której wyłączysz parametr find min number of itemsets.
  • Ustaw próg minimalnego wsparcia na min support=0.01
  • Dodaj do przepływu operator Create Association Rules, wskazując jako kryterium selekcji reguł miarę ufności (ang.confidence) z wartością progową 0.8. Uruchom przepływ. Obejrzyj znalezione reguły asocjacyjne, uruchom wizualizację reguł (zakładka Graph View), porównaj kilka sposobów wyświetlania reguł. Znajdź reguły tłumaczące, dlaczego ludzie kupują jajka i biały chleb.
  • Zapoznaj się z miarami oceny reguł.
  • Utwórz nowy przepływ i załaduj przykładowy zbiór danych Iris. Zapoznaj się z charakterystyką tego zbioru. Wykorzystaj operator Discretize do dyskretyzacji wszystkich atrybutów numerycznych na trzy przedziały o równej szerokości.
  • Użyj operatora Map do zamiany nazw przedziałów na wartości mało, średnio, dużo.
  • Włącz opcję umożliwiającą generowanie reguł asocjacyjnych w odniesieniu do zmiennej zależnej. Dodaj operator Set Role którego zadaniem będzie włączenie atrybutu label do procesu eksploracji (zmień rolę tego atrybutu na zwykły atrybut).
  • Dokonaj konwersji atrybutów nominalnych na atrybuty binarne.
  • Umieść w przepływie operatoy FP-Growth i Create Association Rules. Skonfiguruj je w następujący sposób:
    • minimalna liczba reguł do znalezienia: 100
    • użyta miara oceny reguł: ufność
    • próg minimalnej ufności: 50%
    • próg minimalnego wsparcia: 10%
  • Twój przepływ powinien wyglądać następująco: rm-apriori.png

Oracle Data Mining

  • Zaloguj się do bazy danych: iSQLPlus Identyfikator połączenia to DBLAB01.
  • Utwórz perspektywy które będą zawierały dane do eksploracji. Posłuż się tabelami SALES i PRODUCTS w schemacie przykładowego użytkownika SH.
SET PAGESIZE 1000
 
CREATE OR REPLACE VIEW MARKET_BASKET_DATA AS 
SELECT id, prod_name, 1 has_it 
FROM (SELECT a.cust_id || a.time_id AS id, b.prod_name 
      FROM SH.SALES a, SH.PRODUCTS b 
      WHERE a.prod_id = b.prod_id AND a.cust_id BETWEEN 1 AND 50)
GROUP BY id, prod_name ;
CREATE OR REPLACE VIEW MARKET_BASKET_DATA_AR AS 
SELECT D.ID, CAST(MULTISET( SELECT DM_Nested_Numerical(SUBSTR(C.PROD_NAME, 1, 30), has_it) 
                                 FROM MARKET_BASKET_DATA C 
                                 WHERE C.ID = D.ID ) AS DM_Nested_Numericals) CUSTPRODUS 
FROM MARKET_BASKET_DATA D
GROUP BY D.ID;
  • Porównaj format pionowy i poziomy bazy danych
SELECT * FROM MARKET_BASKET_DATA WHERE id = '698/08/22';
 
SELECT * FROM MARKET_BASKET_DATA_AR WHERE id = '698/08/22';
  • Oracle Data Mining nie jest produktem certyfikowanym na języki inne niż angielski. Ustaw zmienne środowiskowe które spowodują, że separator dziesiętny będzie poprawnie rozpoznawany.
ALTER SESSION SET NLS_LANGUAGE = english;
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,";
  • Jeżeli wcześniej wykonywa(e)łeś to ćwiczenie, to usuń model eksploracji z repozytorium.
BEGIN
  DBMS_DATA_MINING.DROP_MODEL('Associations');
END;
  • Utwórz tabelę do przechowywania parametrów algorytmu odkrywania reguł asocjacyjnych
DROP TABLE settings;
CREATE TABLE settings (
  setting_name VARCHAR2(30),
  setting_value VARCHAR2(128) 
);
  • Wypełnij tabelę parametrami dla algorytmu Apriori. Ogranicz maksymalną długość znajdowanych reguł do 4 produktów, ustaw minsup=5% i minconf=75%
BEGIN
  INSERT INTO settings VALUES (dbms_data_mining.asso_max_rule_length,4);
  INSERT INTO settings VALUES (dbms_data_mining.asso_min_support,0.05);
  INSERT INTO settings VALUES (dbms_data_mining.asso_min_confidence,0.75);
  COMMIT; 
END;
  • Zbuduj model, który będzie zawierał znalezione reguły asocjacyjne
BEGIN
  DBMS_DATA_MINING.CREATE_MODEL(
    model_name          => 'Associations',
    mining_function     => DBMS_DATA_MINING.ASSOCIATION,
    data_table_name     => 'market_basket_data_ar',
    case_id_column_name => 'id',
    settings_table_name => 'settings' );
END;
  • Wyświetl ustawienia modelu, tzn. odczytaj z repozytorium wartości parametrów z jakimi model został zbudowany
SELECT * FROM TABLE (
  DBMS_DATA_MINING.GET_MODEL_SETTINGS('Associations'))
ORDER BY setting_name;
  • Wyświetl znalezione zbiory częste
SELECT * FROM TABLE (DBMS_DATA_MINING.GET_FREQUENT_ITEMSETS('Associations'));
SELECT t.itemset_id, i.attribute_subname AS item, t.support, t.number_of_items
FROM TABLE (DBMS_DATA_MINING.GET_FREQUENT_ITEMSETS('Associations')) t, TABLE (t.items) i
GROUP BY t.itemset_id, i.attribute_subname, t.support, t.number_of_items
ORDER BY t.itemset_id, i.attribute_subname, t.support, t.number_of_items;
 
  • Wyświetl znalezione reguły asocjacyjne
SELECT * FROM TABLE (DBMS_DATA_MINING.GET_ASSOCIATION_RULES('Associations'));
SELECT t.rule_id, t.rule_support, t.rule_confidence, a.attribute_subname AS antecedent, c.attribute_subname AS consequent
FROM TABLE (DBMS_DATA_MINING.GET_ASSOCIATION_RULES('Associations')) t, 
     TABLE (t.antecedent) a, TABLE (t.consequent) c
ORDER BY t.rule_id, t.rule_support DESC, t.rule_confidence;
  • Istnieje także możliwość znalezienia zbiorów częstych (jedynie zbiorów, nie reguł) bez odwoływania się do poziomu PL/SQL, bezpośrednio z języka SQL. W tym celu utwórz typ, który posłuży do reprezentacji poszukiwanych zbiorów i uruchom właściwą funkcję z pakietu DBMS_FREQUENT_ITEMSET. W poniższym przykładzie wartość minsup została ustalona na 2.5%, minimalna licznośc zbioru częstego to 2 elementy, maksymalna licznośc zbioru częstego to 5 elementów, poszukiwane zbiory muszą zawierać produkt Mouse Pad i jednocześnie nie mogą zawierać produktu Standard Mouse (jeśli dwa ostatnie ograniczenia nie mają być narzucone, to w ich miejsce należy wpisać NULL).
CREATE TYPE fi_products AS TABLE OF VARCHAR2(100);
CREATE TABLE mbd AS SELECT * FROM market_basket_data;
SELECT CAST(itemset AS FI_PRODUCTS) itemset, support, LENGTH, total_tranx
FROM TABLE(DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL(
  CURSOR(SELECT id, prod_name FROM mbd), 
  0.025, 
  2, 
  5, 
  CURSOR(SELECT * FROM TABLE(FI_PRODUCTS('Mouse Pad'))),
  CURSOR(SELECT * FROM TABLE(FI_PRODUCTS('Standard Mouse')))
  ))
ORDER BY support DESC;

Manuskrypty i księgi

manuscript

obowiązkowe

opcjonalne