10 · Praktyka · 3 min czytania · Interaktywne · aktualizacja
Na czym polega łączenie modeli (ensembling) i stacking?
W skrócie
Zespół modeli uśrednia lub łączy predykcje kilku modeli. Działa, gdy modele mylą się w różnych miejscach, a stacking uczy się wag na predykcjach out-of-fold.
Co to jest
Zespół modeli (ensemble) to model złożony z kilku modeli bazowych, których predykcje są łączone: przez głosowanie, uśrednianie prawdopodobieństw albo przez model drugiego poziomu. Stacking (stacked generalization, Wolpert 1992) to ta ostatnia wersja: meta-model uczy się, jak najlepiej połączyć predykcje modeli bazowych.
Las losowy i gradient boosting to też zespoły, tylko zbudowane z drzew jednego typu. Tutaj chodzi o łączenie modeli różnych rodzin — na przykład regresji logistycznej, lasu, boostingu i SVM — co jest standardowym ostatnim krokiem w konkursach i częstym sposobem na stabilniejsze predykcje w produkcji.
Mechanizm — dlaczego tak działa
Uśrednianie zmniejsza wariancję błędu. Jeśli k modeli ma błędy o tej samej wariancji σ² i korelacji ρ, wariancja ich średniej wynosi ρσ² + (1−ρ)σ²/k. Przy ρ = 0 spada k-krotnie, przy ρ = 1 nie spada wcale. To jest cała teoria w jednym wzorze: zespół pomaga tylko w takim stopniu, w jakim modele mylą się w różnych miejscach. Dziesięć kopii tego samego modelu daje to samo co jeden model.
Dlatego liczy się różnorodność: różne rodziny algorytmów (liniowe, drzewiaste, oparte na odległości), różne cechy, różne przetwarzanie. Model słabszy, ale inny, bywa cenniejszym członkiem zespołu niż kolejny mocny model podobny do już obecnych.
Stacking idzie krok dalej: zamiast równych wag meta-model uczy się, któremu modelowi ufać. Kluczowy szczegół techniczny: meta-model musi uczyć się na predykcjach out-of-fold, czyli takich, które każdy model bazowy dał dla obserwacji niewidzianych przy własnym uczeniu. Gdyby użyć predykcji na danych uczących, meta-model nauczyłby się ufać najbardziej przeuczonemu modelowi, bo ten na danych uczących jest „najlepszy”.
Ograniczenia są realne. Zespół jest wolniejszy, trudniejszy do wdrożenia i do wyjaśnienia. Zysk zależy od skali danych i różnorodności modeli: na małych zbiorach z silnym pojedynczym sygnałem modele mylą się w tych samych miejscach i zespół niewiele dodaje.
Na przykładzie
Titanic, 5-krotna walidacja krzyżowa powtórzona 5 razy (25 ocen na model), każdy model w tym samym pipelinie przetwarzania. Pojedyncze modele: regresja logistyczna 80,0%, k najbliższych sąsiadów 79,9%, gradient boosting 81,9%, las losowy 82,0%, SVM 82,5%. Miękkie głosowanie (średnia prawdopodobieństw) daje 82,3%, stacking z regresją logistyczną jako meta-modelem 82,4%.
Uczciwy wniosek: zespół przebił średni pojedynczy model (81,2%), ale nie najlepszy — stacking wygrał z SVM w 13 z 25 foldów, średnio był o 0,09 punktu gorszy. Powód widać w predykcjach out-of-fold: korelacje prawdopodobieństw między modelami wynoszą od 0,89 do 0,96, a pary modeli różnią się twardą decyzją tylko dla 3,5–10,2% pasażerów. Wszystkie modele uczą się głównie tej samej reguły „płeć i klasa”. Zaleta zespołu jest tu inna: nie trzeba zgadywać z góry, który pojedynczy model okaże się najlepszy.
Dane: Titanic
W praktyce
- Głosowanie:
VotingClassifier(estimators, voting='soft')— wymagapredict_proba(wSVCustawprobability=True). - Stacking:
StackingClassifier(estimators, final_estimator=LogisticRegression(), cv=5); scikit-learn sam liczy predykcje out-of-fold. - Ręcznie:
cross_val_predict(model, X, y, cv=cv, method='predict_proba')dla każdego modelu, potem prosty meta-model na tych kolumnach. - Najpierw sprawdź korelację predykcji OOF; modele z korelacją bliską 1 niewiele dodadzą.
- Meta-model trzymaj prosty (regresja logistyczna, średnia ważona); złożony meta-model łatwo się przeucza.
- Typowy błąd: dobór wag zespołu na zbiorze testowym lub rankingu publicznym.
Najczęstsze pytania
- Czym różni się bagging, boosting i stacking?
- Bagging uczy wiele modeli tego samego typu na losowych próbkach bootstrapowych i uśrednia je (las losowy). Boosting uczy modele po kolei, każdy poprawia błędy poprzednich. Stacking łączy modele różnych typów za pomocą meta-modelu uczonego na predykcjach out-of-fold.
- Ile modeli powinien mieć zespół?
- Zysk szybko maleje, bo kolejne modele są coraz bardziej skorelowane z już obecnymi. Często 3–5 różnorodnych modeli daje prawie cały efekt; dziesiątki modeli to domena konkursów, gdzie liczy się każda dziesiąta część punktu.
- Czy zespół zawsze jest lepszy od najlepszego pojedynczego modelu?
- Nie. Jest zwykle co najmniej tak dobry jak przeciętny członek i bywa bardziej stabilny, ale przy silnie skorelowanych modelach — jak na Titanicu — może wypaść na poziomie najlepszego albo minimalnie poniżej.
Źródła
- Wolpert D. H. „Stacked generalization”, Neural Networks 5(2), 1992.
- Breiman L. „Stacked regressions”, Machine Learning 24, 1996.
- Dietterich T. G. „Ensemble Methods in Machine Learning”, Multiple Classifier Systems (MCS 2000), LNCS 1857, Springer 2000.
- Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., 2009, rozdz. 8.8 (Model Averaging and Stacking) i rozdz. 16.
- Dokumentacja scikit-learn: „Ensembles”, https://scikit-learn.org/stable/modules/ensemble.html