25.04

2014

Jak poprawnie ocenić zdolność‡ prognostyczną… modelu?

Autor: adam

Ocena dokładności prognoz (zdolności predykcyjnej/prognostycznej modelu) jest nieodzownym etapem budowy każdego modelu. W praktyce porównujemy skuteczność prognoz, aby: 1) wybrać najbardziej efektywną metodę dla danych, 2) znaleźć optymalny podzbiór cech (zmiennych objaśniających) lub 3) dobrać optymalne parametry dla stosowanej metody.

Schematy oceny skuteczności modelu (takie jak np.: random split, cross-validation (CV) czy bootstrap) są powszechnie znane i względnie łatwe do zastosowania. Nierzadko jednak zdarza się, że są one stosowane nieprawidłowo, szczególnie w sytuacji, kiedy budowę właściwego modelu poprzedzają dodatkowe przekształcenia danych. Może to prowadzić do zbyt optymistycznej oceny skuteczności modelu, a w skrajnym przypadku nawet do uznania za dobry model, taki, którego rzeczywista skuteczność jest niewiele lepsza niż przysłowiowe rzucanie monetą.

Konsekwencje błędnej oceny dokładności prognostycznej modelu mogą być znaczące. Niewłaściwa ocena ryzyka towarzyszącego skonstruowanym prognozom może prowadzić do nieoptymalnych decyzji, a nawet może oznaczać poważne straty finansowe dla firmy. Z podobną sytuacją spotykamy się w przypadku badań naukowych, gdzie niewłaściwa ocena dokładności prognostycznej modelu może prowadzić do fałszywych odkryć. Nawet w uznanych czasopismach naukowych w dalszym ciągu zdarzają się publikacje ,,istotnych odkryć” (np. w obszarze medycyny), które później okazują się jedynie konsekwencją błędów metodologicznych popełnionych przez badaczy.

Przykładem wspomnianej sytuacji z obszaru medycyny może być praca E.Skafidas et al. (2012), Predicting the diagnosis of autism spectrum disorder using gene pathway analysis, Molecular Psychiatry. Autorzy obwieścili (bardzo optymistyczną) wiadomość o odkryciu genetycznych markerów, umożliwiających skuteczne prognozowanie wystąpienia autyzmu. Okazało się jednak, że wyglądające na przełomowe odkrycie było jedynie konsekwencją błędów metodologicznych. W szczególności, autorzy niefortunnej publikacji w pierwszej kolejności przeprowadzili wybór cech (feature selection) na bazie kompletnych danych, aby następnie podzielić te same dane na część uczącą i testową, w celu oceny skuteczności wybranego zestawu cech (markerów). W konsekwencji, uzyskano optymistyczną ocenę zdolności diagnostycznych, które w rzeczywistości okazały się niewiele lepsze niż losowe. Więcej szczegółów można znaleźć np. na stronie Genetic Test for Autism Refuted

Dzisiaj postaram się przybliżyć, jak prawidłowo zastosować schemat typu cross-validation (CV), aby ocenić trafność prognostyczną modelu. Oczywiście nie będzie to kompletna dyskusja zagadnienia, ale raczej prosty przykład, ilustrujący do czego może prowadzić błędne stosowanie procedury walidacyjnej. Przykład przedstawia typową sytuację, gdy przed budową modelu (tutaj: modelu klasyfikacyjnego) wybierany jest optymalny podzbiór cech (zmiennych objaśnianych). Wpis jest częściowo zainspirowany przykładem przedstawionym w książce T.Hastie, R.Tibshirani i J.Friedman, The elements of statistical learning (rozdział: The Wrong and Right Way to Do Cross-validation). Do przeprowadzenia wszystkich symulacji wykorzystane będą narzędzia dostępne w pakiecie R.

1 Wprowadzenie

  • Pierwszym etapem w budowie modelu predykcyjnego, a w szczególności klasyfikatora, jest często wybór najlepszych cech (zmiennych).
  • W literaturze anglojęzycznej etap ten jest znany pod nazwą feature selection.
  • Typowa analiza przebiega najczęściej zgodnie ze schematem:
    • Krok 1. Wybieramy podzbiór najlepszych cech,
    • Krok 2. Stosujemy schemat cross-validation (lub podobny), aby oszacować oczekiwany błąd klasyfikacji/predykcji.
  • Takie podejście nie odzwierciedla jednak prawidłowo, w jaki sposób skonstruowany model jest wykorzystywany do wyznaczenia prognoz dla nowych (niezależnych) próbek.
  • Konsekwencją może być błędna (zbyt optymistyczna) ocena dokładności!
  • Przeanalizujemy dokładniej ten problem na przykładzie danych symulowanych…

2 Generujemy dane

  • Generujemy n=50 próbek z dwóch równolicznych klas (etykietki klas: ’0′ i ’1′).
  • Każda próbka zawiera p=1000 zmiennych, wygenerowanych z rozkładu normalnego N(0,1) i całkowicie nieskorelowanych ze zmienną grupującą (klasą).
  • Teoretyczny błąd klasyfikacji w tym przypadku wynosi więc 50% (mamy klasyfikację czysto losową).

3 Błędnie zastosowany schemat cross-validation

  • Wyznaczymy błąd klasyfikacji dla klasyfikatora 5-NN (algorytm 5-najbliższych sąsiadów).
  • Do obliczenia błędu wykorzystamy schemat 5-fold cross-validation.
  • Przed zastosowaniem CV wybierzemy podzbiór najlepszych cech wykorzystując klasyczny test t-Studenta.
  • Wybrane zostaną cechy, dla których p-wartość < 0.05.
  • Oczywiście zamiast testu t-Studenta moglibyśmy zastosować inne metody, np. wybrać cechy najsilniej skorelowane ze zmienną grupującą.
  • Wyniki przedstawiają się następująco:
## [1] "Wybrano 44 zmiennych"
## [1] "Blad klasyfikacji: 0.16"
  • Widzimy, że błąd klasyfikacji jest znacznie zaniżony w stosunku do prawdziwej wartości (tzn. 50%).
  • Problem ten jest związany z wybieraniem zmiennych na bazie wszystkich próbek, a więc także tych, dla których konstruowane są później prognozy.
  • Takie postępowanie nie odzwierciedla prawidłowo zastosowania klasyfikatora dla całkowicie niezależnego zbioru testowego!

4 Poprawnie zastosowany schemat cross-validation

  • Jak zatem poprawnie uwzględnić wybór cech w procedurze oceny dokładności modelu?
  • Prawidłowe zastosowanie schematu K-fold cross-validation mogłoby wyglądać następująco:
    • Krok 1. Dzielimy losowo wszystkie próbki na K rozłącznych podzbiorów.
    • Krok 2. Dla k-tego podzbioru (k = 1, 2,…,K) powtarzamy:
      • znajdujemy zestaw najlepszych cech wykorzystując próbki we wszystkich podzbiorach poza k-tym,
      • budujemy klasyfikator dla wybranych cech i na bazie tych samych podzbiorów, jak w poprzednim punkcie),
      • wyznaczamy prognozowane etykietki klas dla k-tego podzbioru (zbiór testowy).
    • Krok 3. Uśredniamy wyniki (błędy klasyfikacji) dla wszystkich podzbiorów uzyskując oszacowanie błędu klasyfikatora.
  • Spójrzmy więc na wyniki:
## [1] "Wybrano 48 zmiennych"
## [1] "Wybrano 49 zmiennych"
## [1] "Wybrano 47 zmiennych"
## [1] "Wybrano 42 zmiennych"
## [1] "Wybrano 47 zmiennych"
## [1] "Blad klasyfikacji: 0.55"
  • Oszacowanie błędu klasyfikacji tym razem jest zbliżone do teoretycznego błędu klasyfikacji (50%) i prawidłowo odzwierciedla skuteczność skonstruowanego klasyfikatora.

5 Porównanie dla większej liczby powtórzeń

  • Aby dokładniej zbadać różnice w uzyskanych oszacowaniach błędu klasyfikacji (stosując ZŁYPOPRAWNY schemat cross-validation), powtórzymy powyższe analizy M=50 razy (począwszy od generowania danych, itd).
  • Następnie, przyjrzymy się błędom klasyfikacji wykorzystując wykresy pudełkowe (patrz Rysunek 1).
Rysunek 1: Porównanie błędów klasyfikacji dla POPRAWNIE i ŹLE zastosowanego schematu cross-validation

Rysunek 1: Porównanie błędów klasyfikacji dla POPRAWNIE i ŹLE zastosowanego schematu cross-validation

  • Uzyskane wyniki (Rys.1) potwierdzają wnioski uzyskane dla pojedynczego powtórzenia.
  • Otrzymujemy znacznie zaniżone wartości błędu klasyfikacji w przypadku nieprawidłowo zastosowanego schematu cross-validation.

6 Podsumowanie

  • Nieprawidłowe zastosowanie schematu walidacyjnego może prowadzić do błędnych wniosków dotyczących trafności prognoz.
  • W rozważanym przykładzie pomimo klasyfikatora czysto losowego (błąd = 50%) uzyskaliśmy oszacowania dla błędów na poziomie 10%. Mozna oczekiwać, że błąd byłby jeszcze mniejszy dla większej liczby cech (p).
  • Jeżeli procedura budowy modelu obejmuje dodatkowe przekształcenia danych, aby uzyskać wiarygodną ocenę skuteczności powinniśmy odpowiednio uwzględnić je w zastosowanym schemacie walidacyjnym.
  • W szczególności, dotyczy to sytuacji, kiedy budowę modelu poprzedza wybór cech (feature selection).
  • Wyjątkiem mogą być wstępne przekształcenia danych (preprocessing), które nie wykorzystują informacji o przynależności próbek do poszczególnych klas/grup (np. takie przekształcenia jak standaryzacja lub odfiltrowanie zmiennych o zbyt małej wariancji).

Spróbuj ponownie