Python: sprawdzanie poprawności modelu w predykcji danych

24-Paź-2018

Podczas budowania modelu predykcyjnego dane, na których model się uczy dzielone są na dane uczące (+/-80%) i dane testowe (+/-20%). Idea jest taka, aby algorytm mając do dyspozycji dane uczące „zauważył” i „nauczył” się reguł, które wpływają na powiązanie danych. Pozostałe dane testowe są na tym etapie ukryte przed algorytmem. Może się to wydawać trochę dziwne, bo przecież kiedy zależy nam na uzyskaniu możliwie najlepszego modelu, to należało by go ćwiczyć na wszystkich dostępnych danych. Jest jednak za tym ukryta pewna idea.

Dzięki danym testowym można mianowicie sprawdzić czy model jest dobry i na ile dobry. Po zakończonym ćwiczeniu modelu, należy wziąć dane testowe i sprawdzić, czy model dobrze przewiduje wartości. Ma to sens, bo przecież dane testowe zostały losowo wyłonione ze wszystkich dostępnych danych i jak by nie było są rzeczywistymi obserwacjami, które model powinien dobrze przewidywać.

Ocena modelu polega na wyznaczeniu przez model przewidywanych wartości i ich porównaniu z rzeczywistymi danymi z danych testowych. Co pozostaje problemem to miara błędu. Do dyspozycji jest:

  • Błąd średniokwadratowy, średni błąd kwadratowy (MSE, ang. Mean Squared Error) – średnia kwadratów błędów dla każdej wartości ze zbioru testowego. Dlaczego kwadratów? Bo gdzieniegdzie błąd jest dodatni, a gdzieniegdzie ujemny – jak się go podniesie do kwadratu, to otrzymana wartość będzie liczbą dodatnią. Ta miara jednak jest zależna od tego co podlega obserwacji – np. przewidywana cena samochodu z błędem +/-1000 jest całkiem niezła w porównaniu z przewidywaną ceną bukietu kwiatów +/-100 zł. Do wyznaczenia tej wartości korzystamy z sklearn.metrics.mean_squared_error
  • Średni błąd bezwzględny (MAE, ang. Mean absolute error) – podobny do MSE, ale zamiast sumy kwadratów błędów liczymy sumę wartości bezwzględnej błedu – miara bardziej oddaje wielkość błędu, ale nadal jest specyficzna dla modelu tak jak MSE. Do wyznaczenia tej wartości korzystamy z sklearn.metrics.mean_absolute_error
  • Współczynnik determinacji (coefficient of determination, R²) – Informuje o tym, jaka część zmienności zmiennej objaśnianej została wyjaśniona przez model. Wartość ta jest wyrażona przez procent, co pozwala uwolnić się od wielkości szacowanych wartości. Wynik 80% będzie więc oznaczał, że model jest godny zaufania na 80%. Im R² jest większe, tym lepiej! Przy okazji współczynnika determinacji mówi się też czasami o współczynniku zbieżności. Zależność między obiema wartościami jest dość prosta:
    współczynnik determinacji = 1 – współczynnik zbieżności
    i co za tym idzie, model jest tym lepszy i mniejszy współczynnik zbieżności. Wartość wyznaczamy korzystając z sklearn.metrics.r2_score

Umownie można przyjąć następujące znaczenie dla współczynnika determinacji:

0,0 – 0,5 – dopasowanie niezadowalające
0,5 – 0,6 – dopasowanie słabe
0,6 – 0,8 – dopasowanie zadowalające
0,8 – 0,9 – dopasowanie dobre
0,9 – 1,0 – dopasowanie bardzo dobre

 

Dodaj komentarz:

Autor: Rafał Kraik