04 · Ocena · 6 min czytania · aktualizacja
Predykcja konformalna — jak podać przedział prognozy bez założeń o rozkładzie?
W skrócie
Predykcja konformalna ustala szerokość przedziału z błędów na odłożonych danych. Na zbiorze Diabetes przedział 90% pokrył średnio 90,4% pacjentów.
Co to jest
Predykcja konformalna (conformal prediction) to sposób, by do dowolnego modelu dołożyć przedział prognozy z gwarancją: nowa obserwacja wpadnie do niego z prawdopodobieństwem co najmniej 1 − α, np. 90%. Gwarancja nie wymaga ani rozkładu normalnego błędów, ani poprawnego modelu. Wymaga jednego: dane kalibracyjne i nowa obserwacja muszą być wymienialne (exchangeable) — z grubsza: pochodzić z tego samego źródła, w kolejności bez znaczenia.
Metodę rozwinęli Vladimir Vovk, Alex Gammerman i Glenn Shafer; jej systematyczny wykład to książka z 2005 roku. Najprostsza wersja to predykcja konformalna z podziałem (split conformal): model trenuje się na jednej części danych, a na drugiej, kalibracyjnej, mierzy, jak bardzo się myli.
Ważne rozróżnienie: przedział ufności mówi, gdzie jest parametr, np. średnia. Przedział prognozy mówi, gdzie wypadnie pojedyncza nowa obserwacja — jest dużo szerszy, bo obejmuje też jej własny szum.
Mechanizm — dlaczego tak działa
Przepis dla regresji. (1) Wytrenuj model na zbiorze treningowym. (2) Na n przykładach kalibracyjnych policz wyniki niezgodności: zwykle błąd bezwzględny |y − ŷ|. (3) Posortuj je i weź k-ty najmniejszy, gdzie k = ⌈(n + 1)(1 − α)⌉; oznacz go q. (4) Dla nowego przykładu podaj przedział ŷ ± q.
Dlaczego to działa? Jeśli nowy przykład jest wymienialny z kalibracyjnymi, jego błąd jest „jednym z n + 1” i każde miejsce w rankingu jest równie prawdopodobne. Szansa, że wypadnie wśród k najmniejszych, wynosi więc co najmniej k/(n + 1) ≥ 1 − α. Stąd poprawka n + 1 zamiast n: zwykły kwantyl 90% z n błędów jest odrobinę za ciasny. Przy ciągłych błędach bez remisów pokrycie wynosi najwyżej 1 − α + 1/(n + 1), więc przedział nie jest też niepotrzebnie szeroki.
Model nie musi być dobry. Gorszy model ma większe błędy na kalibracji, więc dostaje szerszy przedział — gwarancja pokrycia trzyma się dalej, tylko przedział mniej mówi.
Granice, które trzeba znać. Po pierwsze, pokrycie jest brzegowe (marginal), a nie warunkowe: 90% średnio po wszystkich przykładach, a nie 90% dla każdej grupy pacjentów. W jednych grupach może być 95%, w innych 85%. Dokładnego pokrycia warunkowego nie da się zagwarantować bez założeń o rozkładzie (Vovk, 2012; Lei i Wasserman, 2014); Barber, Candès, Ramdas i Tibshirani (2021) badają, jakie słabsze wersje są osiągalne. Po drugie, wymienialność: w szeregach czasowych przyszłość różni się od przeszłości, dryf danych łamie gwarancję i potrzebne są wersje adaptacyjne. Po trzecie, gwarancja dotyczy średniej po losowaniu danych kalibracyjnych i testowych; na jednym małym zbiorze testowym pokrycie zmierzone może wyjść wyraźnie poniżej 90%.
Warianty adaptacyjne. Przedział ŷ ± q ma wszędzie tę samą szerokość, choć szum bywa różny. Konformalizowana regresja kwantylowa (CQR, Romano, Patterson i Candès, 2019) uczy dwóch modeli kwantylowych (np. 5% i 95%), a kalibracja konformalna tylko je poszerza lub zwęża o wspólną poprawkę. Przedział jest wtedy szerszy tam, gdzie dane są głośniejsze, a gwarancja brzegowa zostaje.
Na przykładzie
Zbiór Diabetes z scikit-learn: 442 pacjentów, 10 cech, cel to miara postępu choroby rok później (od 25 do 346, odchylenie standardowe 77). Podział: 176 do treningu, 177 do kalibracji, 89 do testu. Model: regresja liniowa. Celujemy w 90%.
k = ⌈178 · 0,9⌉ = 161, więc q to 161. najmniejszy z 177 błędów kalibracyjnych: 89,6. Przedział ma szerokość 179,2. Na 89 pacjentach testowych pokrył 77, czyli 86,5% — poniżej 90%, ale to jeden mały zbiór testowy. Naiwny przedział ±1,645·RMSE z błędów treningowych (RMSE 52,4) ma półszerokość 86,2 i pokrył 85,4%.
Dopiero 500 losowych podziałów pokazuje, co gwarantuje metoda. Przedział konformalny pokrywa średnio 90,4% pacjentów (odch. std. 3,8 punktu procentowego; 5. percentyl 83,1%). Teoria przewiduje dokładnie 161/178 = 90,45%. Naiwny przedział z regresji liniowej: 87,3% — trochę za mało, bo błąd na danych treningowych jest optymistyczny (RMSE 52,4 wobec 55,6 na teście).
Z lasem losowym różnica jest dramatyczna. Las dopasowuje się do danych treningowych, więc jego RMSE treningowe to 38,4, a testowe 57,9. Naiwny przedział ±1,645·RMSE pokrywa średnio tylko 72,1%. Konformalny — 90,4%, bo kalibracja odbywa się na danych, których las nie widział; za to jest szerszy: średnio 193,5 zamiast 126,2.
Pokrycie warunkowe: w tych samych 500 podziałach regresji liniowej przedział obejmuje 94,6% pacjentów z niższą prognozą i tylko 86,1% z wyższą (powyżej mediany prognoz w zbiorze testowym). Dla dwóch kodowanych płci: 88,5% i 92,5%. Średnio się zgadza, w grupach już nie — to przypadek dla CQR.
Jak to policzono
- Dane:
sklearn.datasets.load_diabetes(return_X_y=True)(cechy wyśrodkowane i przeskalowane przez scikit-learn, cel w oryginalnych jednostkach), 442 obserwacje, cel od 25 do 346, odch. std. 77,1. - Podział:
train_test_split(X, y, test_size=0,2, random_state=s)daje test (89), resztę ponownietrain_test_split(..., test_size=0,5, random_state=s)na trening (176) i kalibrację (177). Przykład pojedynczy: s = 0. - Wynik niezgodności |y − ŷ|; q = k-ty najmniejszy, k = ⌈(n + 1)·0,9⌉ = 161 dla n = 177. Przedział naiwny: ŷ ± 1,645·RMSE liczone na zbiorze treningowym.
- s = 0,
LinearRegression: q = 89,59, szerokość 179,18, pokrycie testowe 77/89 = 86,5%; naiwny: 86,23, pokrycie 85,4%; zwykły kwantyl 90% błędów kalibracyjnych (numpy.quantile) 87,8. - 500 podziałów (s = 0–499),
LinearRegression: pokrycie średnio 90,40%, odch. std. 3,8 p.p., 5. i 95. percentyl 83,1% i 95,6%, minimum 78,7%, poniżej 90% w 45,8% podziałów; szerokość średnio 187,0 (odch. std. 9,6). Naiwny: 87,27% (4,2 p.p.), szerokość 172,4. RMSE treningowe 52,4, testowe 55,6. - Te same podziały,
RandomForestRegressor(n_estimators=100, min_samples_leaf=5, random_state=0): konformalny 90,43% (3,7 p.p.), szerokość 193,5; naiwny 72,08% (5,7 p.p.), szerokość 126,2; RMSE treningowe 38,4, testowe 57,9. - Pokrycie w grupach, regresja liniowa, zsumowane po 500 podziałach: prognoza poniżej lub równa mediany prognoz testowych 94,6%, powyżej 86,1%; druga cecha (płeć, kodowana) ujemna 88,5%, dodatnia 92,5%.
- Wartość teoretyczna średniego pokrycia: k/(n + 1) = 161/178 = 0,9045; górne ograniczenie 0,9 + 1/178 = 0,9056. Odchylenie pokrycia przy ustalonej kalibracji: rozkład Beta(161, 17), odch. std. 2,20 p.p.; dla n = 1000 Beta(901, 100), 0,95 p.p. Pokrycie ≤ 74/89 = 83,1% w 6,0% podziałów, < 83,1% w 3,6%.
Dane: Diabetes (progresja cukrzycy)
W praktyce
- Podziel dane na trening, kalibrację i test. Gwarancja działa przy każdej liczbie n przykładów kalibracyjnych, ale przy małym n przedział skacze między losowaniami: pokrycie dla ustalonego zbioru kalibracyjnego ma rozkład beta (Angelopoulos i Bates) o odchyleniu ok. 2,2 p.p. przy n = 177 i ok. 0,9 p.p. przy n = 1000 — z grubsza √(0,09/n).
- Nigdy nie licz błędów kalibracyjnych na danych treningowych — wtedy wracasz do naiwnego przedziału i niedoszacowania.
- Do klasyfikacji ten sam przepis daje zbiory etykiet: wynik niezgodności to np. 1 − p(prawdziwej klasy), a zbiór predykcji zawiera wszystkie klasy z wynikiem poniżej q.
- Gotowe implementacje: biblioteka
MAPIE(zgodna z scikit-learn); split conformal to jednak kilka linijek NumPy:q = np.sort(np.abs(y_cal - m.predict(X_cal)))[k - 1]. - Sprawdzaj pokrycie w ważnych podgrupach, nie tylko ogólne.
- W szeregach czasowych użyj okna kroczącego do kalibracji albo metod adaptacyjnych i licz się z brakiem gwarancji.
Najczęstsze pytania
- Czy predykcja konformalna to to samo co kalibracja modelu?
- Nie. Kalibracja dotyczy prawdopodobieństw klasyfikatora: czy „80%” znaczy 80% trafień. Predykcja konformalna zamienia dowolną prognozę na przedział lub zbiór z gwarantowanym pokryciem. Obie korzystają z danych odłożonych od treningu.
- Dlaczego przedział nie dopasowuje się do trudności przypadku?
- W wersji podstawowej q jest jedno dla wszystkich. Szerokość zależną od przypadku dają wyniki niezgodności dzielone przez przewidywaną skalę błędu albo regresja kwantylowa (CQR).
- Czy gwarancja oznacza 90% na moim zbiorze testowym?
- Nie. Oznacza 90% średnio po losowaniu danych kalibracyjnych i testowych. Na 89 pacjentach jeden podział dał 86,5%, a co dwudziesty podział dał 83,1% lub mniej, choć średnia to 90,4%.
- Co się stanie, gdy dane się zmienią?
- Gwarancja znika, bo nowe dane nie są wymienialne z kalibracyjnymi. Trzeba kalibrować na świeżych danych albo stosować wersje ważone i adaptacyjne, które jednak dają słabsze gwarancje.
Źródła
- Vovk, V., Gammerman, A., Shafer, G. (2005). Algorithmic Learning in a Random World. Springer, Nowy Jork.
- Angelopoulos, A. N., Bates, S. (2023). „Conformal Prediction: A Gentle Introduction”. Foundations and Trends in Machine Learning, 16(4), 494–591. https://doi.org/10.1561/2200000101 (wersja otwarta: arXiv:2107.07511, https://arxiv.org/abs/2107.07511)
- Lei, J., G'Sell, M., Rinaldo, A., Tibshirani, R. J., Wasserman, L. (2018). „Distribution-free predictive inference for regression”. Journal of the American Statistical Association, 113(523), 1094–1111. https://doi.org/10.1080/01621459.2017.1307116
- Vovk, V. (2012). „Conditional validity of inductive conformal predictors”. Proceedings of the Asian Conference on Machine Learning, PMLR 25, 475–490. https://proceedings.mlr.press/v25/vovk12.html
- Lei, J., Wasserman, L. (2014). „Distribution-free prediction bands for non-parametric regression”. Journal of the Royal Statistical Society: Series B, 76(1), 71–96. https://doi.org/10.1111/rssb.12021
- Barber, R. F., Candès, E. J., Ramdas, A., Tibshirani, R. J. (2021). „The limits of distribution-free conditional predictive inference”. Information and Inference, 10(2), 455–482. https://doi.org/10.1093/imaiai/iaaa017 (arXiv:1903.04684, https://arxiv.org/abs/1903.04684)
- Romano, Y., Patterson, E., Candès, E. (2019). „Conformalized quantile regression”. Advances in Neural Information Processing Systems 32, 3543–3553. https://proceedings.neurips.cc/paper/2019/hash/5103c3584b063c431bd1268e9b5e76fb-Abstract.html
- scikit-learn:
sklearn.datasets.load_diabetes, https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html
Czy to było pomocne?
Dzięki! To pomaga nam poprawiać Atlas.