W drugiej części laboratorium studentki i studenci zapoznają się z metodami tworzenia drzew decyzyjnych w środowisku Oracle Data Mining a także poznają rolę macierzy kosztów w budowie modeli oraz porównują ze sobą modele przy użyciu krzywej ROC.

RapidMiner

  • Uruchom narzędzie RapidMiner i załaduj zbiór fertility.csv. Zapoznaj się z opisem zbioru danych.
  • Utwórz przepływ w którym za pomocą walidacji krzyżowej ocenisz jakość modelu drzewa decyzyjnego. Jako miarę oceny podziału przyjmij miarę gini_index. Obejrzyj uzyskany model i macierz pomyłek. Czy model dobrze radzi sobie z rozpoznawaniem nietypowych próbek?
  • Przyjmij, że klasą pozytywną są normalne próbki nasienia. Umieść operator Decision Tree wewnątrz operatora Meta Cost i zbuduj macierz kosztów, w którym błąd false positive będzie dwukrotnie droższy niż błąd false negative. Obejrzyj uzyskaną macierz pomyłek.
  • Postaraj się uzyskać rozwiązanie, w którym czułość klasy “O” (ang. recall) przekroczy 50%. Co dzieje się z ogólną dokładnością klasyfikatora?
  • Zamień operator Decision Tree na Random Tree i skonfiguruj operator w taki sposób, aby w każdej iteracji dysponował połową atrybutów do wyboru. Ponownie postaraj się tak skonfigurować macierz kosztów, aby uzyskać czułośc klasy “O” powyżej 50% przy jak najwyższej ogólnej dokładności modelu.
  • Zamień operator Meta Cost na operator Tree to Rules pozostawiając wewnątrz indukcję drzewa decyzyjnego przy użyciu miary gini_index. Obejrzyj uzyskany model regułowy.
dt2-1.png

Orange Data Mining

  • Uruchom narzędzie Orange Data Mining. Załaduj zbiór danych contraceptives.tab i zapoznaj się z opisem zbioru danych.
  • Prześlij dane do operatora Test Learners i skonfiguruj operator w taki sposób, aby ocena modeli odbywała się na podstawie walidacji krzyżowej.
  • Wykorzystaj jednocześnie: głosowanie większościowe, naiwny klasyfikator Bayesa, drzewo decyzyjne i klasyfikator regułowy. Obejrzyj tablicę z sumarycznymi wynikami. Czym różnią się od siebie poszczególne klasyfikatory?
  • Wyślij wszystkie klasyfikatory do operatora ROC i obejrzyj uzyskane krzywe.

Orange Data Mining - dodatkowe informacje

  • Zaloguj się do bazy danych: iSQLPlus korzystając z konta EDXX. Identyfikator połączenia to DBLAB01.
  • Utwórz w swoim schemacie tabele MARKETING, MARKETING_TEST i MARKETING_NEW kopiując tabele ze schematu MIKOLAJM
CREATE TABLE marketing AS SELECT * FROM mikolajm.marketing;
CREATE TABLE marketing_test AS SELECT * FROM mikolajm.marketing_test;
CREATE TABLE marketing_new AS SELECT * FROM mikolajm.marketing_new;
  • 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 = ".,";
  • Usuń tabele do przechowywania ustawień oraz kosztów
DROP TABLE settings;
DROP TABLE cost;
  • Utwórz na nowo tabelę do przechowywania ustawień.
CREATE TABLE settings (
  setting_name  VARCHAR2(30),
  setting_value VARCHAR2(30));
  • Wstaw do tabeli parametry budowania drzewa decyzyjnego.
BEGIN
INSERT INTO settings VALUES (dbms_data_mining.algo_name, dbms_data_mining.algo_decision_tree);
INSERT INTO settings VALUES (dbms_data_mining.clas_cost_table_name, 'cost');
  -- miara czystosci wezla wewnetrznego drzewa
INSERT INTO settings VALUES (dbms_data_mining.tree_impurity_metric, 'TREE_IMPURITY_ENTROPY');
  -- maksymalna glebokosc wygenerowanego drzewa
INSERT INTO settings VALUES (dbms_data_mining.tree_term_max_depth, 5);
  -- minimalna liczba rekordow w wezle przed podzialem wezla
INSERT INTO settings VALUES (dbms_data_mining.tree_term_minrec_split, 5);
  -- minimalny procent rekordow w wezle przed podzialem
INSERT INTO settings VALUES (dbms_data_mining.tree_term_minpct_split, 0.01);
  -- minimalna liczba rekordow w wezle/lisciu
INSERT INTO settings VALUES (dbms_data_mining.tree_term_minrec_node, 5);
  -- minimalny procent rekordow w wezle/lisciu
INSERT INTO settings VALUES (dbms_data_mining.tree_term_minpct_node, 0.005);
COMMIT;
END;
  • Utwórz tabelę kosztów i wypełnij ją danymi, wskaż, że błąd typu false negative jest pięciokrotnie droższy od błędu typu false positive
CREATE TABLE cost (
  actual_target_value           NUMBER,
  predicted_target_value        NUMBER,
  cost                          NUMBER);
INSERT INTO cost VALUES (0,0,0);
INSERT INTO cost VALUES (0,1,1);
INSERT INTO cost VALUES (1,0,5);
INSERT INTO cost VALUES (1,1,0);
COMMIT;
  • Jeśli już wykonywała(e)ś wcześniej to ćwiczenie, usuń stary model klasyfikatora z repozytorium
BEGIN 
  DBMS_DATA_MINING.DROP_MODEL('DecisionTree');
EXCEPTION 
  WHEN OTHERS THEN NULL; 
END;
  • Zbuduj model klasyfikatora wykorzystując do tego celu zbiór danych MARKETING
BEGIN
  DBMS_DATA_MINING.CREATE_MODEL(
    model_name          => 'DecisionTree',
    mining_function     => dbms_data_mining.classification,
    data_table_name     => 'marketing',
    case_id_column_name => 'cust_id',
    target_column_name  => 'affinity_card',
    settings_table_name => 'settings');
END;
  • Wyświetl ustawienia i sygnaturę modelu
SELECT setting_name, setting_value
  FROM TABLE(DBMS_DATA_MINING.GET_MODEL_SETTINGS('DecisionTree'))
ORDER BY setting_name;
 
SELECT attribute_name, attribute_type
  FROM TABLE(DBMS_DATA_MINING.GET_MODEL_SIGNATURE('DecisionTree'))
ORDER BY attribute_name;
  • Wyświetl predykcję proponowaną przez model w odniesieniu do tabeli MARKETING_TEST
SELECT affinity_card AS actual_target_value, 
       PREDICTION(DecisionTree USING *) AS predicted_target_value,
       PREDICTION_PROBABILITY(DecisionTree, 0 USING *) AS negative_class_probability,
       PREDICTION_PROBABILITY(DecisionTree, 1 USING *) AS positive_class_probability
FROM marketing_test;
  • Porównaj predykcję w przypadku korzystania z pełnego modelu i predykcję w przypadku dysponowania niepełną informacją o klientach
SELECT affinity_card AS actual_target_value,
       PREDICTION(DecisionTree USING *) AS full_model_prediction,
       PREDICTION(DecisionTree USING age, cust_gender, cust_marital_status) AS partial_model_prediction,
       PREDICTION_PROBABILITY(DecisionTree, 0 USING *) AS negative_full_model,
       PREDICTION_PROBABILITY(DecisionTree, 0 USING age, cust_gender, cust_marital_status) AS negative_partial_model
FROM marketing_test;
  • Wyświetl macierz pomyłek dokonywanych przez model, nie uwzględniając macierzy kosztów. Zwróć uwagę na wykorzystanie specjalizowanych funkcji języka SQL.
SELECT affinity_card AS actual_target_value, 
       PREDICTION(DecisionTree USING *) AS predicted_target_value,
       COUNT(*) AS VALUE
FROM marketing_test
GROUP BY affinity_card, PREDICTION(DecisionTree USING *)
ORDER BY actual_target_value,predicted_target_value;
  • Wyświetl macierz pomyłek dokonywanych przez model, tym razem uwzględniając macierz kosztów.
SELECT affinity_card AS actual_target_value, 
       PREDICTION(DecisionTree COST MODEL USING *) AS predicted_target_value,
       COUNT(*) AS VALUE
FROM marketing_test
GROUP BY affinity_card, PREDICTION(DecisionTree COST MODEL USING *)
ORDER BY actual_target_value, predicted_target_value;
  • Znajdź 10 klientów z Argentyny dla których koszt przekonania ich do korzystania z karty lojalnościowej jest najmniejszy
WITH
cust_argentina AS (
  SELECT cust_id, PREDICTION_COST(DecisionTree, 1 COST MODEL USING *) AS cost
  FROM marketing_new
  WHERE country_name = 'Argentina'
  ORDER BY PREDICTION_COST(DecisionTree, 1 COST MODEL USING *) ASC, 1
)
SELECT cust_id, cost
FROM cust_argentina
WHERE ROWNUM <= 10;
  • Znajdź liczbę i średni wiek klientów, którzy mogą być zainteresowani używaniem karty lojalnościowej. Weź pod uwagę macierz kosztów wykorzystaną do budowy modelu. Przy ocenie prawdopodobieństwa korzystania z karty lolajnościowej wykorzystaj tylko atrybuty CUST_MARITAL_STATUS, EDUCATION i HOUSEHOLD_SIZE. Wyświetl wyniki z podziałem na płeć klientów
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM marketing_new
WHERE PREDICTION(DecisionTree COST MODEL USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender;
  • Dla wszystkich klientów z Brazylii wyświetl ich identyfikatory oraz ich prawdopodobieństwo i koszt zakupu lub odmowy zakupu karty kredytowej.
SELECT T.cust_id, S.prediction, S.probability, S.cost
FROM (SELECT cust_id, PREDICTION_SET(DecisionTree COST MODEL USING *) AS pset
      FROM marketing_new
      WHERE country_name = 'Brazil') T, TABLE(T.pset) S
ORDER BY cust_id, S.prediction;

Zadanie samodzielne