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.
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.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.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.Discretize
do dyskretyzacji wszystkich atrybutów numerycznych na trzy przedziały o równej szerokości.Map
do zamiany nazw przedziałów na wartości mało, średnio, dużo.Set Role
którego zadaniem będzie włączenie atrybutu label do procesu eksploracji (zmień rolę tego atrybutu na zwykły atrybut).FP-Growth
i Create Association Rules
. Skonfiguruj je w następujący sposób:
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;
SELECT * FROM MARKET_BASKET_DATA WHERE id = '698/08/22'; SELECT * FROM MARKET_BASKET_DATA_AR WHERE id = '698/08/22';
ALTER SESSION SET NLS_LANGUAGE = english; ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,";
BEGIN DBMS_DATA_MINING.DROP_MODEL('Associations'); END;
DROP TABLE settings;
CREATE TABLE settings ( setting_name VARCHAR2(30), setting_value VARCHAR2(128) );
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;
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;
SELECT * FROM TABLE ( DBMS_DATA_MINING.GET_MODEL_SETTINGS('Associations')) ORDER BY setting_name;
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;
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;
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;
obowiązkowe
opcjonalne