Zbiór testowy (ang. test set) to wydzielona część danych, której model nie widzi podczas treningu ani podczas strojenia hiperparametrów. Używasz go tylko raz, na samym końcu, żeby zmierzyć, jak dobrze model radzi sobie na danych, których nigdy wcześniej nie spotkał. To Twój ostatni, bezstronny egzamin — sprawdza zdolność generalizacji, czyli czy model naprawdę nauczył się wzorców, czy tylko wykuł odpowiedzi na pamięć.
W klasycznym podejściu dzielisz dane na trzy kawałki: zbiór treningowy (model się na nim uczy), zbiór walidacyjny (na nim dobierasz hiperparametry i porównujesz warianty) oraz zbiór testowy (finalna ocena). Kluczowa zasada: zbiór testowy ma być nietknięty aż do końca. Jeśli zaczniesz na nim podkręcać model, przestaje być obiektywny, bo informacja o nim zaczyna „wyciekać” do procesu decyzyjnego.
Po co to całe ceregiele? Bo metryki liczone na danych treningowych prawie zawsze kłamią na korzyść modelu. Łatwo dostać 99% dokładności na treningu i 60% na realnych danych — to klasyczny overfitting. Zbiór testowy daje liczbę, którą możesz pokazać szefowi albo klientowi bez wstydu, bo odzwierciedla zachowanie na produkcji.
Przykład z praktyki
W scikit-learn podział robisz jednym wywołaniem:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Trenujesz na X_train, a na końcu liczysz metrykę raz: model.score(X_test, y_test). Typowy podział to 70/15/15 albo 80/20, ale przy ogromnych zbiorach (miliony rekordów) nawet 1% w teście wystarczy. random_state ustaw na stałą wartość — wtedy podział jest powtarzalny i koledzy dostaną te same wyniki.
Częste błędy i mity
- Data leakage — robisz normalizację albo feature engineering na całym zbiorze przed podziałem. Wtedy statystyki z testu wciekają do treningu i wyniki są zawyżone. Najpierw dziel, potem przetwarzaj (najlepiej w
Pipeline). - Strojenie pod test — jeśli sprawdzasz na teście dziesięć razy i wybierasz najlepszy wariant, zamieniasz go w zbiór walidacyjny. Od tego są osobne dane.
- Zły podział przy danych czasowych — losowy split przy szeregach czasowych pozwala modelowi „zaglądać w przyszłość”. Dziel chronologicznie.
- Niereprezentatywna próbka — przy niezbalansowanych klasach używaj stratyfikacji (
stratify=y), żeby proporcje klas były takie same w obu zbiorach.
Pojęcia powiązane: zbiór treningowy, zbiór walidacyjny, walidacja krzyżowa (cross-validation), overfitting, generalizacja, data leakage, stratyfikacja.