Testowanie modeli

W tym podrozdziale opisane jest, w jaki sposób testuje się modele. Dostępne są cztery różne zadania testowania, odpowiadające czterem rodzajom zadań eksploracji danych.

Dodatkowo, dostępne jest też zadanie CalculateTestResultsTask, które testuje modele klasyfikacyjne na podstawie danych scoringowych a nie modelu klasyfikacyjnego. To zadanie jest opisane na końcu tego podrozdziału.

Istota testowania modelu jest taka sama niezależnie od rodzaju zadania. Jednak mimo, że główne kroki są takie same dla różnych typów zadań, występują pewne różnice dotyczące ustawień parametrów dla poszczególnych typów zadań testujących. Z tego powodu rozdział ten jest podzielony na części, odpowiadające różnym rodzajom zadań testujących. W każdej części omówione są wszystkie kroki niezbędne do wykonania zadania testowania oraz wyniki testowania.

Uwaga

  • Zakładamy, że model odpowiedniego rodzaju już został utworzony w repozytorium. Budowa modeli jest opisana w podrozdziale Budowanie modeli.
  • Zakładamy, że użytkownik potrafi zarządzać obiektami w repozytorium metadanych. Wprowadzenie do pracy z repozytorium znajduje się w rozdziale Repozytorium metadanych.

Testowanie modeli aproksymacyjnych - ApproximationTestTask

Tworzenie zadania testowania modelu aproksymacyjnego

W przykładzie wykorzystamy zbiór danych cholesterol, który znajduje się w katalogu instalacyjnym programu AdvancedMiner w folderze ..\Client\scripts\scripts\data\approximation. Tworzenie zadania testowania składa się z następujących kroków:

  1. utworzenie obiektu PhysicalData dla danych testujących
  2. utworzenie zadanie testowania, czyli obiektu ApproximationTestTask
  3. wybranie polecenia Test z menu kontekstowego, które pokaże nam, co dalej należy zrobić. Wyświetlony zostanie spis brakujących ustawień:

Rysunek 3.18. ApproximationTestTask - brakujące ustawienia

ApproximationTestTask - brakujące ustawienia

Znaczenie poszczególnych komunikatów o błędach jest następujące:

  • No model specified - należy podać model wejściowy (który ma być przetestowany).

  • No testData specified - do zadnia testowania należy przypisać obiekt PhysicalData, który zawiera dane niezbędne do wykonania testu.

  • No testDataTargetAttributeName specified - po określeniu obiektu PhysicalData należy także podać atrybut o roli target

  • No testResults specified - należy podać nazwę modelu, w którym zostaną umieszczone wyniki testowania.

Wszystkie parametry z wyjątkiem testDataTargetAttributeName można ustawić w standardowy sposób, wybierając polecenie Add z menu kontekstowego. Parametr testDataTargetAttributeName należy ustawić w oknie Properties. W tym oknie mogą się także znajdować inne opcjonalne parametry.

Tabela 3.3. ApproximationTestTask - ustawienia

UstawienieOpiswartości dopuszczalneWartość domyślna
Cut Prc o ile kwantyli należy przyciąć każdą stronę przy obliczaniu Histogramu Błęduliczby całkowite z przedziału [0; 100]5
Number of Intervals ile przedziałów należy użyć przy obliczaniu Histogramu Błęduliczby całkowite dodatnie20
Number of Intervals XY Plot ile przedziałów należy użyć przy obliczaniu histogramu y vs yhatliczby całkowite dodatnie20
Targetnazwa zmiennej o roli targetnazwa zmiennejNULL
Liberal Execution jeśli TRUE błędy nie będą skutkować zatrzymaniem wykonowania zadania testowania. TRUE / FALSETRUE

Jeżeli wszystkie wymagane parametry zostały ustawione, zadanie może zostać wykonane.

Rysunek 3.19. ApproximationTestTask w repozytorium

ApproximationTestTask w repozytorium

Cały proces tworzenia i wykonywania zadania testowania można także przeprowadzić za pomocą skrypty w Gythonie:

att = ApproximationTestTask()                                     # utworzenie obiektu zadania testującego
att.setModelName('approximation_model')                           # o ile dany model istnieje
att.setTestDataName('cholesterol_pd')                             # określenie danych testujących
att.setTestDataTargetAttributeName('chol')                        # określenie atrybutu 'target'
#att.setNumberOfIntervals(10)                                     # ustawienie innych parametrów
att.setTestResultName('approximation_results')                    # nazwa obiektu z wynikami

save('approximation_tt', att)
execute('approximation_tt')
            

Wyniki zadania testowania modelu aproksymacyjnego

Po wykonaniu testu, w repozytorium metadanych pojawi się obiekt zawierający jego wyniki. Za jego pomocą można uzyskać szczegółowe informacje o wynikach testu: statystyki testu, widoczne w oknie Properties i składniki wyników, które są podpięte pod węzeł obiektu z wynikami w repozytorium.

Statystyki testu

Oznaczenia symboli:

  • zaobserwowana wartość zmiennej target dla -tej obserwacji:
  • przewidywana wartość zmiennej target dla -tej obserwacji:
  • błąd rezydualny dla -tej obserwacji:

Tabela 3.4. Statystyki zadania testowania modelu aproksymacyjnego

NazwaOpis
Mean Absolute Error średnia wartość bezwzględnego błędu przewidywań dla danych testowych::
Mean Actual Value średnia rzeczywistych wartości zmiennej target dla danych testowych:
Mean Predicted Value średnia przewidywanych wartości zmiennej target dla danych testowych:
RMS Error pierwiastek kwadratowy z sumy kwadratów błędów dla danych testowych:

Składniki wyników

Jako wyniki zadania testowania modelu aproksymacyjnego dostępne jest kilka tabel/histogramów. Parametry number of intervals i cut prc są ustawiane w zadaniu testującym.

  • errorHistogram - tabela z rozkładem (błędy rezydualne)
  • errorHistogramCut - histogram błędów (errorHistogram) przycięty z obu stron zgodnie z ustawieniami parametru CutPrc.
  • yHistogram - tabela zawierająca rozkład (zaobserwowane wartości zmiennej target)
  • yHistogramCut - yHistogram przycięty z obu stron zgodnie z ustawieniami parametru CutPrc.
  • yhatHistogram - tabela zawierająca rozkład (przewidywane wartości zmiennej target)
  • yhatHistogramCut - yhatHistogram przycięty z obu stron zgodnie z ustawieniami parametru CutPrc.

Testowanie Modeli Klasyfikacyjnych - ClassificationTestTask

Tworzenie zadania testowania modelu klasyfikacyjnego

W ramach przykładu wykorzystamy zbiór danych german credit, który znajduje się w folderze ..\Client\scripts\scripts\data\classification w katalogu instalacyjnym programu AdvancedMiner. Utworzenie zadania testowania składa się z następujących kroków:

  1. utworzenie obiektu PhysicalData z danymi testującymi,
  2. utworzenie zadania testującego, czyli obiektu ClassificationTestTask,
  3. wybranie polecenia Test z menu kontekstowego, które pokaże nam, co dalej należy zrobić. Wyświetlony zostanie spis brakujących ustawień:

Rysunek 3.20. ClassificationTestTask - brakujące ustawienia

ClassificationTestTask - brakujące ustawienia

Pierwsze cztery komunikaty mają takie samo znaczenie, jak w przypadku zadania testowania modelu aproksymacyjnego. Ponadto, jest także nowy komunikat:

  • No positiveTargetValue specified, while ComputeQuantiles option is set to TRUE - albo należy ustawić parametr ComputeQuantiles na FALSE, albo należy podać pozytywną kategorię zmiennej pełniącej rolę target.

Wszystkie parametry z wyjątkiem testDataTargetAttributeName i positiveTargetValue mogą zostać ustawione w standardowy sposób, wybierając polecenie Add z menu kontekstowego. Parametry testDataTargetAttributeName i positiveTargetValue należy ustawić w oknie Properties. W tym oknie mogą się także znajdować inne opcjonalne parametry.

Tabela 3.5. ClassificationTestTask - ustawienia

UstawienieOpiswartości dopuszczalneWartość domyślna
Compute Quantiles FALSE oznacza, że nie zostaną obliczone ROC oraz Lift TRUE, FALSETRUE
Liberal Execution jeśli TRUE błędy nie będą skutkować zatrzymaniem wykonywania zadania testowania. TRUE, FALSETRUE
Number of Quantiles liczba kwantyli używanych do obliczenia ROC i Lift liczby całkowite dodatnie50
Positive Binary Target Threshold próg dla pozytywnej kategorii binarnej; jeżeli prawdopodobieństwo wyliczone przez model jest większe lub równe tej wartości, to dana obserwacja zostanie zaklasyfikowana jako pozytywna. liczby z przedziału (0,1)NaN
Positive Target Value pozytywna kategoria dla zmiennej pełniącej rolę targetetykieta wybranej kategoriiNULL
Reweighting mode określa sposób przeliczenia wag obserwacji w zbiorze danych:
  • reweightCounters - wagi będą brane pod uwagę tylko przez statystyki zliczające (macierz pomyłek, lifty itp.)
  • reweightEverything - wagi będą uwzględnione wszędzie (statystyki zliczające i kwantyle w liftach),
  • noReweighting - wagi będą ignorowane
noReweighting/reweightCounters/reweightEverythingnoReweighting
Target-nazwa zmiennej pełniącej funkcję targetNULL
Weight- nazwa zmiennej przechowującej wagi. To ustawienie jest istotne tylko w przypadku, gdy Reweighting mode ma inną wartość niż noReweighting. NULL

Jeżeli wszystkie wymagane parametry są ustawione, zadanie może zostać wykonane.

Rysunek 3.21. ClassificationTestTask - repozytorium

ClassificationTestTask - repozytorium

Cały proces tworzenia i wykonywania zadania testowania można także wykonać za pomocą skryptu w Gythonie:

ctt = ClassificationTestTask()                                  # utworzenie obiektu zadania testującego
ctt.setModelName('classification_model')                        # o ile dany model istnieje
ctt.setTestDataName('german_credit_pd')                         # określenie danych testujących
ctt.setTestDataTargetAttributeName('Class')                     # określenie atrybutu 'target'
ctt.setPositiveTargetValue('bad')                               # określenie pozytywnej kategorii zmiennej 'target'
#ctt.setNumberOfQuantiles(20)                                   # ustawienie innych parametrów
ctt.setTestResultName('classification_results')                 # nazwa obiektu z wynikami

save('classification_tt', ctt)
execute('classification_tt')
            

Wyniki zadania testowania modelu klasyfikacyjnego

Po wykonaniu testu, w repozytorium metadanych pojawi się obiekt zawierający jego wyniki. Za jego pomocą można uzyskać szczegółowe informacje o wynikach testu: statystyki testu, widoczne w oknie Properties i składniki wyników, które są podpięte pod obiekt z wynikami.

Statystyki testu

Tabela 3.6. Statystyki zadania testowania modelu klasyfikacyjnego

NazwaOpis
Accuracydokładność modelu
Improperly Assigned ilość przypadków, gdy przewidywana wartość zmiennej target jest różna od wartości rzeczywistej
Properly Assigned Cases ilość przypadków, gdy przewidywana wartość zmiennej target równa wartości rzeczywistej
Total Cases całkowita ilość wszystkich przypadków

Składniki wyników

Dostępne są także następujące statystyki:

K-S Analysis

Analiza Kołmogorowa-Smirnowa składa się z dwóch wykresów: współczynnika prawdziwych obserwacji pozytywnych i współczynnika fałszywych obserwacji pozytywnych. Obie te statystyki są opisane poniżej. Im większa odległość między tymi dwiema liniami, tym lepszy model otrzymaliśmy.

Wykresowi K-S towarzyszą dodatkowe statystyki:

  • K-S Statistics - maksymalna odległość pomiędzy wykresami współczynników prawdziwych obserwacji pozytywnych i fałszywych obserwacji pozytywnych.
  • K-S Statistics Score Threshold - próg wyniku dający odpowiadający maksymalnej odległości.
ROC Analysis

ROC (receiver operating characteristic) jest alternatywną miarą jakości klasyfikatora. Ustaliwszy jedną kategorię jako pozytywną, krzywa ROC jest wykresem ilości prawdziwych obserwacji pozytywnych względem fałszywych obserwacji pozytywnych, dla każdej wartości progu dyskryminacji (prawdopodobieństwa przewidzenia kategorii pozytywnej.

Najlepszy możliwy model predykcyjny odpowiada wykresowi, który składa się z punktu w lewym górnym rogu wykresu ROC, czyli gdy wrażliwość jak i specyficzność modelu wynoszą 100%. Całkowicie losowy model daje prostą łączącą lewy dolny róg wykresu z prawym górnym (w miarę wzrostu progu przybywa tyle samo fałszywych i prawdziwych obserwacji pozytywnych). Krzywa poniżej tej prostej sugeruje, że model systematycznie daje błędne przewidywania.

Z wykresem ROC związane są dodatkowe statystyki:

  • ROC Area (AUC) - pole powierzchni pod krzywą ROC. Pole równe 1 oznacza doskonały model klasyfikacyjny, pole równe 0.5 oznacza, że przewidywania są losowe. Przyjmuje się, że pole większe niż 0.9 oznacza bardzo dobrą jakość modelu, wartości pomiędzy 0.8 i 0.9 oznaczają dobry model, a pomiędzy 0.7 i 0.8 - model przyzwoity. Pole poniżej 0.7 oznacza model kiepskiej jakości.

  • Gini Coefficient - statystyki ściśle powiązana z polem pod krzywą ROC, jest równa 2*AUC - 1.

Confusion Matrix (macierz pomyłek) i targetAnalysis

Macierz pomyłek zawiera informacji o faktycznej i przewidywanej klasyfikacji uzyskanej za pomocą zadania testowania modelu klasyfikacyjnego. wartości w poszczególnych komórkach reprezentują ilości próbek, dla których faktyczna wartość zmiennej target odpowiada wierszowi macierzy, a wartość przewidziana przez model odpowiada kolumnie. To oznacza, że liczby na diagonali macierzy pomyłek odpowiadają prawidłowej klasyfikacji, a pozostałe liczby mówią o błędach klasyfikatora.

W przykładzie poniżej liczbę 0.6 interpretujemy w następujący sposób: 6 przypadków zostało zaklasyfikowanych przez model jako "van", choć w rzeczywistości powinny zostać zaklasyfikowane jako "bus".

Rysunek 3.22. Macierz pomyłek

Macierz pomyłek

W przypadku klasyfikacji binarnych, określone są wielkości symbole TP, FN, FP, TN. Dzięki temu można zdefiniować dodatkowe statystyki, które są dostępne pod węzłem targetAnalysis.

Rysunek 3.23. Macierz pomyłek - oznaczenia

Macierz pomyłek - oznaczenia

Uwaga

W przypadku zagadnień, w których w których klasyfikacji obejmuje więcej niż 2 kategorie, jedna kategoria jest uznana za pozytywną, a pozostałe kategorie są kolektywnie uznawane za kategorię negatywną.

Lift Analysis (analiza lift-u)

Lift jest sposobem pomiaru jakości modelu klasyfikacyjnego. Jest wyznaczany i rysowany dla określonej wartości zmiennej target, traktowanej jako wartość pozytywna. Najpierw obserwacje są porządkowane rosnąco w zależności od wyniku (score) przypisanego przez model. Na osi poziomej oznaczone są za pomocą procentów posortowane obserwacje, np. 10% oznacza 10% obserwacji z największym wynikiem.

Wartość Lift-u dla danego procentu najlepszych obserwacji jest ilorazem gęstości pozytywnych wartości zmiennej target wśród tych obserwacji i gęstości pozytywnych wartości w całej populacji. Dzięki temu można zobaczyć, jak dany model różni się od najprostszego modelu (losowy wybór z całej populacji, wtedy Lift jest zawsze 1) lub od innych modeli.

Zazwyczaj wartość Lift-u jest obliczana dla dyskretnych porcji danych zwanych kwantylami, np. jeżeli lift ma być obliczony dla 10 kwantyli, to pierwszy kwantyl składa się z 10% najlepszych obserwacji, drugi kwantyl to obserwacje gorsze niż najgorsza z pierwszych 10%, ale lepsze od najlepszej spośród najgorszych 80% obserwacji, itd. Ostatni kwantyl to 10% najgorszych obserwacji.

Oprócz KSAnalyzis, ROCAnalysis i liftAnalysis dostępne są także następujące ogólne statystyki:

  • Maximal Score - maksymalny wynik przypisany obserwacji przez model
  • Minimal Score - minimalny wynik przypisany obserwacji przez model
  • Positive Cases - ilość pozytywnych obserwacji w zbiorze danych
  • Cases - całkowita ilość obserwacji w zbiorze danych

Uwaga

ROC i Lift są obliczane, jeżeli ustawienie Compute Quantiles jest włączone.

Testowanie modelu przeżycia - SurvivalTestTask

Tworzenie zadania testowania modelu przeżycia

W tym przykładzie wykorzystany jest zbiór danych 'HIV', który można znaleźć w folderze ..\Client\scripts\scripts\examples\datamining w katalogu instalacyjnym programu AdvancedMiner. Utworzenie zadania testowania składa się z następujących kroków:

  1. utworzenie obiektu PhysicalData z danymi testującymi,
  2. utworzenie zadania testującego, czyli obiektu SurvivalTestTask

    Uwaga

    SurvivalTestTask może być utworzony tylko dla modelu Cox-a.

  3. wybranie polecenia Test z menu kontekstowego, które pokaże nam, co dalej należy zrobić. Wyświetlony zostanie spis brakujących ustawień:

Rysunek 3.24. SurvivalTestTask - brakujące ustawienia

SurvivalTestTask - brakujące ustawienia

Komunikaty mają takie samo znaczenie, jak w przypadku zadania testowania modelu aproksymacyjnego. Ponadto, jest także dodatkowy komunikat:

  • No censoredCategory specified - należy podać nazwę kategorii cenzorowanej.

Wszystkie parametry z wyjątkiem Censored Category można ustawić w standardowy sposób, wybierając polecenie Add z menu kontekstowego węzła utworzonego obiektu testującego. Parametr Censored Category należy ustawić w oknie Properties obiektu testującego. W tym oknie mogą się także znajdować inne dodatkowe parametry.

Tabela 3.7. SurvivalTestTask - ustawienia

UstawienieOpiswartości dopuszczalneWartość domyślna
Censor Name - nazwa cenzorowanej zmiennej NULL
Censored Category kategoria (wartość cenzorowanej zmiennej) wskazująca na to, że dany element ma być cenzorowany etykieta wybranej kategoriiNULL
First Time Point Dolne ograniczenie przedziału czasowego w którym obliczane będą wartości funkcji przeżycia. liczby całkowiteNULL
Last Time Point Górne ograniczenie przedziału czasowego w którym obliczane będą wartości funkcji przeżycia. liczby całkowiteNULL
Liberal Execution jeśli TRUE błędy nie będą skutkować zatrzymaniem wykonywania zadania testowania. TRUE / FALSETRUE
Number of Lift Quantiles ile kwantyli należy użyć przy obliczaniu Lift-u liczby całkowite dodatnie50
Number of Time Points liczba punktów czasowych, w których obliczana będzie funkcja przeżycia liczby całkowite dodatnie10
Target- nazwa zmiennej pełniącej funkcję targetNULL

Jeżeli wszystkie wymagane parametry są ustawione, zadanie może zostać wykonane.

Rysunek 3.25. SurvivalTestTask - repozytorium

SurvivalTestTask - repozytorium

Cały proces tworzenia i wykonywania zadania testowania można także przeprowadzić za pomocą skryptu w Gythonie:

stt = SurvivalTestTask()                                        # utworzenie obiektu testującego
stt.setModelName('survival_model')                              # o ile model istnieje
stt.setTestDataName('HIV_pd')                                   # określenie zbioru danych testujących
stt.setTestDataTargetAttributeName('days')                      # okreslenia zmiennej 'target'
stt.setCensorName('censor')                                     # określenie zmiennej cenzorowanej
stt.setCensoredCategory('Y')                                    # określenie kategorii cenzorowanej
#stt.setFirstTimePoint(25)                                      # ustawienie dodatkowych opcji
stt.setTestResultName('survival_results')                       # określenie nazwy obiektu z wynikami testowania

save('survival_tt', stt)
execute('survival_tt')
            

Wyniki zadania testowania modelu przeżycia

Po wykonaniu testu, w repozytorium metadanych pojawi się obiekt zawierający jego wyniki. Za jego pomocą można uzyskać szczegółowe informacje o wynikach testu: statystyki testu, widoczne w oknie Properties i składniki wyników, które są podpięte pod obiekt z wynikami.

Statystyki testu

Dostępne są wykresu Lift-u w każdym punkcie czasowym, wraz z powiązanymi statystykami (zob. analiza lift-u).

Zadanie testowania modelu szeregu czasowego

Tworzenie zadania testowania modelu szeregu czasowego

W tym przykładzie wykorzystany będzie zbiór danych 'stock_market', który można znaleźć w folderze ..\Client\scripts\scripts\data\time w katalogu instalacyjnym programu AdvancedMiner. Utworzenie zadania testowania składa się z następujących kroków:

  1. utworzenie obiektu PhysicalData z danymi testującymi,
  2. utworzenie zadania testowania: TimeSeriesTestTask
  3. wybranie polecenia Test z menu kontekstowego, które pokaże nam, co dalej należy zrobić. Wyświetlony zostanie spis brakujących ustawień:

Rysunek 3.26. Test Report

Test Report

Komunikaty są takie same jak w przypadku obiektu ApproximationTestTask.

Okno Properties może zawierać dodatkowe ustawienia.

Tabela 3.8. TimeSeriesTestTask - ustawienia

UstawienieOpiswartości dopuszczalneWartość domyślna
Liberal Execution jeśli TRUE błędy nie będą skutkować zatrzymaniem wykonowania zadania testowania. TRUE / FALSETRUE
Number of Time Points liczba punktów czasowych, dla których obliczone zostaną statystyki liczby całkowite dodatnie10
Target- nazwa zmiennej pełniącej funkcję targetNULL
timePointAttribute name- nazwa zmiennej pełniącej funkcję timePointNULL

Jeżeli wszystkie wymagane parametry są ustawione, zadanie może zostać wykonane.

Rysunek 3.27. TimeSeriesTestTask - repozytorium

TimeSeriesTestTask - repozytorium

Cały proces tworzenia i wykonowyania zadania testowania można także przeprowadzić za pomocą skrypty w Gythonie:

tstt = TimeSeriesTestTask()                                     # utworzenie zadania testowania
tstt.setModelName('timeseries_model')                           # o ile model istnieje
tstt.setTestDataName('stock_market_pd')                         # określenie zbioru danych testujących
tstt.setTestDataTargetAttributeName('price_change')             # określenie zmiennej 'target'
tstt.setTimePointAttributeName('time')                          # określenie zmiennej 'timePoint'
#tstt.setNumberOfTimePoints(10)                                 # ustawienie dodatkowych opcji
tstt.setTestResultName('timeseries_results')                    # określenie nazwy obiektu z wynikami

save('timeseries_tt', tstt)
execute('timeseries_tt')
            

Wyniki zadania testowania modelu szeregu czasowego

Po wykonaniu testu, w repozytorium metadanych pojawi się obiekt zawierający jego wyniki. Za jego pomocą można uzyskać szczegółowe informacje o wynikach testu: statystyki testu, widoczne w oknie Properties i składniki wyników, które są podpięte pod węzeł obiektu z wynikami.

Statystyki testu
  • Mean Absolute Error (MAE) - wartość średnia wartości bezwzględnych błędów predykcji dla danych testowych

  • Mean Actual Value (MAV) - zaobserwowana wartość średnia całego szeregu:

  • Actual Value Variance (AVV) - zaobserwowana wariancja całego szeregu:

  • Mean Predicted Variance (MPV) - wartość średnia wariancji predykcji:

  • RMS Error - uśredniony pierwiastek kwadratowy sumy kwadratów błędów predykcji dla danych testowych

  • R-Squared Error -

Powyżej to bieżąca wartość średnia szeregu, oznacza wariancję modelu dla i-tej obserwacji, oznacza wartość szeregu dla i-tej obserwacji, a N to ilość wszystkich obserwacji w szeregu.

Zadanie testowania klasyfikacji na podstawie tabeli z wynikami scoringowymi

Obiekt ClassificationTestResultTask służy do wykonania specjalnego testu klasyfikacyjnego, z wykorzystaniem tabeli scoringowej zamiast modelu klasyfikacyjnego.

Tworzenie zadania testującego

Do utworzenia tego zadania potrzebne są następujące obiekty: tabela z wynikami scoringowymi w bazie danych, obiekt PhysicalData dla tej tabeli, oraz zadanie testujące w repozytorium.

Tabela z wynikami scoringowymi musi zawierać następujące kolumny:

  • rzeczywisty target

  • klasy (kategorie) zwracane przez model

  • prawdopodobieństwo (lub wynik punktowy) zwracane przez model

Wykorzystamy przykładowe dane poniżej. Po wykonaniu tego skryptu w bazie danych pojawi się zbiór danych przykładowych i tabela z wynikami scoringowymi.

Przykład 3.1. Przygotowywania zadania wykonania testu klasyfikacyjnego

table "dane_wejsciowe":
    temp   wysokosc   Klasa
    -50    1        "dobry"
    -40    1        "dobry"
    -30    1        "dobry"
    -20    10       "dobry"
    -10    10       "dobry"
    10    10       "dobry"
    20    20       "zly"
    30    10       "dobry"
    40    10       "dobry"
    50    10       "zly"
    60    5        "dobry"
    70    20       "zly"
    80    30       "zly"
    90    1        "dobry"
    100   10       "zly"

# prosty model klasyfikacyjny
trans "dane_wynikowe"<-"dane_wejsciowe":
    wynik = temp/100.0
    nowaKlasa = "dobry"
    if wynik>0.5:
        nowaKlasa ="zly"

    

Dalej należy wykonać następujące kroki:

  1. utworzenie obiektu PhysicalData z danymi testującymi,
  2. utworzenie zadania: CalculateTestResultTask
  3. wybranie polecenia Test z menu kontekstowego, które pokaże nam, co dalej należy zrobić. Wyświetlony zostanie spis brakujących ustawień:

Rysunek 3.28. CalculateTestResultTask - Brakujące ustawienia

CalculateTestResultTask - Brakujące ustawienia

Znaczenie poszczególnych komunikatów jest następujące:

  • no physicalDataName specified - do zadania należy przypisać obiekt PhysicalData z wynikami scoringowymi.

  • no target specified - nazwa zmiennej pełniącej funkcję target

  • no predictedTarget specified - nazwa zmiennej w danych z wynikami scoringowymi zawierającej kategorie przypisane przez model.

  • no positiveTargetValue specified - należy ustawić pozytywną kategorię zmiennej target.

  • no testResultName specified - należy podać nazwę modelu, pod który zostaną podpięte wyniki testowania.

  • no score specified - należy podać nazwę zmiennej zawierającej score (lub prawdopodobieństwo) wyliczone przez model.

W standardowy sposób (za pomocą menu kontekstowego) można ustawić jedynie parametry testResultName i physicalDataName. Pozostałe parametry należy ustawić w oknie Properties. Ponieważ obiekt CalculateTestResultTask jest bardzo podobny do obiektu Classification Test Task, reszta ustawień w oknie Properties jest taka sama. (zob. Testowanie modeli klasyfikacyjnych).

Jeżeli wszystkie wymagane parametry są ustawione, zadanie może zostać wykonane.

Rysunek 3.29. CalculateTestResultTask - repozytorium

CalculateTestResultTask - repozytorium

Cały proces tworzenia i wykonywania zadania testowania można także przeprowadzić za pomocą skryptu w Gythonie:

dane_wynikowe_pd = PhysicalData('dane_wynikowe')
save('dane_wynikowe_pd',dane_wynikowe_pd)									# utworzenie PhysicalData dla danych scoringowych
ctrt = CalculateTestResultTask()                                            # utworzenie obiektu testującego
ctrt.setPhysicalDataName('dane_wynikowe_pd')                                  # okreslenia PhysicalData dla danych scoringowych
ctrt.setActualName("Klasa")                                                 # określenie zmiennej 'target'
ctrt.setPositiveTargetValue('zly')                                          # określenie pozytywnej kategorii zmiennej 'target'
ctrt.setPredictedName('nowaKlasa')                                           # określenie zmiennej z klasami przypisanymi przez model
ctrt.setScore('wynik')                                                      # określenie zmiennej z wynikami scoringowymi
#ctrt.setNumberOfQuantiles(25)                                              # ustawienie dodatkowych opcji
ctrt.setTestResultName('testresult_results')                                # określenie nazwy obiektu z wynikami

save('testresult_tt',ctrt)
execute('testresult_tt')
            

Wyniki testowania

Wyniki tego zadania testowania są dokładnie takie same jak w przypadku wyników zadania klasyfikacyjnego .