Machine Learning Workflow cz 3 – testowanie modelu

testowanie modelu

Jak zwykle zacznę od przypomnienia poszczególnych kroków w przepływie pracy w uczeniu maszynowym:

  1. Przygotowanie modelu.
  2. Trenowanie modelu.
  3. Testowanie modelu.

Dzisiaj będę pisał o ostatnim kroku – testowaniu modelu – kluczowym by właściwie ocenić nasz model i na tej podstawie podjąć decyzję o kierunku zmian w kolejnej iteracji pracy. Testowanie jakie takie składa się z dwóch etapów. Pierwszy to wykorzystanie danych testowych dla przewidywania wyników, a drugi  na obliczeniu pewnych wartości pozwalających na ocenę skuteczności modelu. W tym wpisie skupie się przede wszystkim na opisaniu kilku podstawowych metryk,  jeżeli  natomiast chodzi o wykorzystanie danych testowych to trzeba pamiętać, żeby podczas trenowania modelu wykorzystać maksymalnie 70-80% danych, a pozostałą część zostawić do testów. Gdybyśmy do testowania użyli danych które posłużyły do trenowania, otrzymalibyśmy fałszywy i zawyżony, wynik bo nasz mechanizm już te dane “zna”. Przejdźmy do miar skuteczności naszego modelu.

False Positives i True Negatives

Na początek zastanówmy się jakie stany, przez pryzmat poprawności, może przyjąć pojedynczy wynik oszacowania – dla uproszczenia przyjmujemy, że przewidywana wartość jest typu logicznego:

  • True Positives (TP) – Wartość poprawnie przewidziana jako True.
  • False Positives (FP) – Wartość niepoprawnie przewidziana jako True
  • True Negatives (TN) – Wartość poprawnie przewidziana jako False.
  • False Negatives (FN) – Wartość niepoprawnie przewidziana False.

Dokładność

  • Accuracy = (TP + TN) / (TP + TN + FP + FN)

Podstawowym miernikiem wydajności naszego modelu jest Accuracy, czyli dokładność. Jest to stosunek ilości poprawnie przewidzianych wartości do łącznej liczby wierszy w zbiorze testowym. Przykładowo mamy w zbiorze testowym 1000 wierszy, a nasz model poprawnie wskazał 650. w tym wypadku dokładność wynos 0.65, czyli innymi słowy 65%.

Niestety accuracy nie wystarczy w przypadku problemów związanych z klasyfikacją, gdzie dane w zbiorze nie są rozłożone symetrycznie między wszystkie klasy.

Precyzja

  • PositivePrecision = TP / (TP + FP)
  • NegativePrecision = TN /(TN + FN)

Precision odpowiada na pytanie: “Jeżeli model przewidział że wartość należy do klasy P(true) to jakie jest prawdopodobieństwo, że te predykcja jest poprawna?”.  Analogicznie wygląda to dla klasy N. Przykładowo załóżmy, że w zbiorze testowym mamy 1000 wierszy, z czego 300 należy do klasy P.  Nasz model przewiduje, że do klasy P należy 450, z czego wszystkie 300 wskazał poprawnie a 150 oszacował źle. W tym wypadku precyzja wynosi 0,667, czyli prawie 67%. Dokładność wynosiłaby tutaj 85% i jak widać byłby to wynik znacznie zawyżony.

Czułość:

  • Recall = TP / (TP + FN)

Recall może być interpretowane jako prawdopodobieństwo, że model właściwie przewidzi wynik dla określonej klasy. Tutaj pytanie można sformułować tak: “Jakie jest prawdopodobieństwo, że model przewidzi iż wartość należy do klasy P, gdy faktycznie ta wartość do niej należy”. Dla powyższego przykładu recall dla klasy P wynosi 100% bo wszystkie 300 wartości ocenił poprawnie. Natomiast dla klasy N sprawa wygląda inaczej bo 150 elementów należących do N przypisał do P. Więc dla klasy N recall wynosi:  78.5%.

Confusion Matrix

Confusion matrix jest macierzą o rozmiarze N x N, gdzie N to liczba klas. Stosuje się ją do wizualizacji wydajności modelu (problemy klasyfikacyjne w uczeniu z nadzorem). Każda kolumna reprezentuje przewidzianą klasę, a wiersz klasę rzeczywistą.

Klasa P

Klasa N

Klasa P

12

5

Klasa N

3

13

Powyższa tabela mogłaby być macierzą błędów w modelu z dwoma klasami P i N. Pamiętając że czytając wierszami mówimy o klasach prawdziwych a kolumnami o klasach przewidzianych przez model możemy odczytać wiele informacji. Na przykład to, że nasza próbka danych zawiera 17 elementów klasy P i 16 klasy N. Widać też, że model przewidział poprawnie 12 elementów klasy P, natomiast 5 przypisał błędnie do klasy N, której 13 elementów przypisał poprawnie a 3 nieprawidłowo sklasyfikował do klasy P.

W narzędziach takich jak scikit-learn można łatwo otrzymać confusion matrix, a jak mam nadzieję widać, jest to pomocne narzędzie.


Wydaje mi się, że zrozumienie powyższych miar stanowi solidne fundamenty pod zagadnienie testowania modelu. W najbliższym tygodniu postaram się opisać jak można testować model (a zwłaszcza odczytywać opisane w tym poście wartości) w bibliotece scikit-learn.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *