Słownik metodologiczny · Modele regresji

Krzywa decyzyjna (net benefit) – czy model predykcyjny przynosi korzyść?

Krzywa decyzyjna pokazuje korzyść netto modelu predykcyjnego w zakresie progów prawdopodobieństwa i porównuje ją z interwencją u wszystkich i u nikogo. Pokazujemy wzór, przykład w R, opis do pracy i pułapki.

Strona główna / Słownik / Krzywa decyzyjna (net benefit)
W skrócie: Krzywa decyzyjna to wykres korzyści netto modelu predykcyjnego w funkcji progu prawdopodobieństwa: NB = TP/n − FP/n · pt/(1 − pt). Model jest użyteczny w tych progach, w których jego korzyść przewyższa strategie „interwencja u wszystkich” i „u nikogo”.

Co to jest krzywa decyzyjna?

Krzywa decyzyjna (ang. decision curve analysis, DCA) pokazuje korzyść netto (net benefit) modelu predykcyjnego w zakresie progów prawdopodobieństwa i porównuje ją ze strategiami „interwencja u wszystkich” i „u nikogo”. Vickers i Elkin (2006) zaproponowali ją jako ocenę użyteczności modelu, której nie dają krzywa ROC ani AUC.

Wzór i próg

NB(pt) = TP/n − FP/n · pt/(1 − pt), gdzie TP i FP to wyniki prawdziwie i fałszywie dodatnie przy progu pt. Próg wyraża wagę szkody: pt = 20% oznacza, że jedno wykrycie jest warte czterech niepotrzebnych interwencji. Vickers i in. (2016) nazywają to kursem wymiany korzyści na szkody. Strategia „u wszystkich” ma NB = π − (1 − π) · pt/(1 − pt), gdzie π to częstość zdarzenia, a strategia „u nikogo” – zero. NB = .04 oznacza 4 trafne wykrycia na 100 osób bez fałszywych alarmów.

Przykład

Model regresji logistycznej dopasowano na połowie z 800 symulowanych osób i oceniono na drugiej połowie (n = 399, 62 zdarzenia, 15.5%). Przy progu 20% model daje 48 TP i 125 FP: NB = 48/399 − 125/399 · 0.25 = .042, a „u wszystkich” −.056. Przy progu 10% wynik to .085 wobec .062, przy 5% .116 wobec .111, a przy 30% model (−.001) nie jest lepszy od strategii „u nikogo”.

Jak opisać w pracy

W zbiorze walidacyjnym (n = 399, 15.5% zdarzeń) model dawał wyższą korzyść netto niż strategie „interwencja u wszystkich” i „u nikogo” w zakresie progów 10–20% (przy progu 20%: NB = .042 wobec −.056 i 0). Powyżej 30% korzyść modelu nie różniła się od zera.

Na co uważać

  • Zakres progów wybierz z góry. Vickers i in. (2019) zalecają model, który ma najwyższą korzyść w całym zakresie rozsądnych preferencji, a nie w jednym wybranym punkcie.
  • Dane uczące zawyżają korzyść. Licz krzywą na danych walidacyjnych albo po walidacji krzyżowej.
  • Kalibracja ma znaczenie. Przy złej kalibracji model z dobrym AUC może dawać ujemną korzyść netto.

Porównanie modeli o podobnym AUC i NRI opisuje wpis Krzywa decyzyjna (net benefit) i NRI, a walidację – Modele predykcyjne: walidacja i kalibracja.

Przykład reprodukowalny

Korzyść netto w R

Kod symuluje dane, dopasowuje regresję logistyczną na połowie próby i liczy ręcznie korzyść netto modelu oraz strategii „u wszystkich” i „u nikogo” dla pięciu progów na drugiej połowie.

Krzywa decyzyjna w punktach

Dane wejściowe: 800 osób, dwa predyktory i zdarzenie 0/1 (dane symulowane, set.seed(3931)); połowa do dopasowania modelu, połowa do oceny.

Co odczytać: liczbę osób i zdarzeń w zbiorze oceny, TP i FP przy progu 20% oraz tabelę korzyści netto: model jest użyteczny tam, gdzie jego NB przewyższa obie strategie domyślne.

R
set.seed(3931)
n <- 800
wiek <- rnorm(n)                                    # predyktor standaryzowany
marker <- rnorm(n)                                  # drugi predyktor
y <- rbinom(n, 1, plogis(-1.8 + 0.8 * wiek + 0.7 * marker))
ucz <- sample(c(TRUE, FALSE), n, replace = TRUE)    # połowa do dopasowania, połowa do oceny
m <- glm(y ~ wiek + marker, family = binomial, subset = ucz)
p <- predict(m, newdata = data.frame(wiek, marker), type = "response")[!ucz]
yt <- y[!ucz]
nb <- function(p, y, pt) {                          # korzyść netto przy progu pt
  tp <- sum(p >= pt & y == 1); fp <- sum(p >= pt & y == 0)
  tp / length(y) - fp / length(y) * pt / (1 - pt)
}
c(n = length(yt), zdarzenia = sum(yt), TP_20 = sum(p >= .2 & yt == 1), FP_20 = sum(p >= .2 & yt == 0))
progi <- c(.05, .10, .20, .30, .40)
round(data.frame(prog = progi,
  model   = sapply(progi, function(t) nb(p, yt, t)),
  wszyscy = sapply(progi, function(t) mean(yt) - (1 - mean(yt)) * t / (1 - t)),
  nikt    = 0), 3)
Wynik w R
        n zdarzenia     TP_20     FP_20 
      399        62        48       125 
  prog  model wszyscy nikt
1 0.05  0.116   0.111    0
2 0.10  0.085   0.062    0
3 0.20  0.042  -0.056    0
4 0.30 -0.001  -0.207    0
5 0.40 -0.005  -0.408    0

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i stats). W pracy podaj wersję R, której faktycznie użyto (sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/

Najczęstsze pytania

Jak wybrać zakres progów do krzywej decyzyjnej?

Z góry i merytorycznie: zapytaj, ile niepotrzebnych interwencji jest wartych jednego wykrycia. Próg 10% odpowiada dziewięciu, a 20% – czterem. Pokaż cały rozsądny zakres, a nie jeden najkorzystniejszy próg.

Czy korzyść netto może być ujemna?

Tak. Ujemna korzyść netto oznacza, że przy danym progu decyzje oparte na modelu przynoszą więcej szkody niż strategia „interwencja u nikogo”. Dotyczy to często strategii „u wszystkich” przy wysokich progach i źle skalibrowanych modeli.

Jak policzyć krzywą decyzyjną w R bez dodatkowych pakietów?

Dla każdego progu policz TP i FP: tp <- sum(p >= pt & y == 1), fp <- sum(p >= pt & y == 0), a potem tp/n - fp/n * pt/(1 - pt). Powtórz w sapply() dla wektora progów i narysuj wynik obok obu strategii domyślnych.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Vickers, A. J., & Elkin, E. B. (2006). Decision curve analysis: A novel method for evaluating prediction models. Medical Decision Making, 26(6), 565–574. https://doi.org/10.1177/0272989x06295361 ● Otwarty dostęp: pełny tekst
  2. Vickers, A. J., Van Calster, B., & Steyerberg, E. W. (2016). Net benefit approaches to the evaluation of prediction models, molecular markers, and diagnostic tests. BMJ, 352, Article i6. https://doi.org/10.1136/bmj.i6 ● Otwarty dostęp
  3. Vickers, A. J., van Calster, B., & Steyerberg, E. W. (2019). A simple, step-by-step guide to interpreting decision curve analysis. Diagnostic and Prognostic Research, 3(1), Article 18. https://doi.org/10.1186/s41512-019-0064-7 ● Otwarty dostęp

Cytowania BibTeX

@article{vickers2006decision, author={Vickers, Andrew J. and Elkin, Elena B.}, title={{Decision curve analysis: A novel method for evaluating prediction models}}, journal={Medical Decision Making}, year={2006}, volume={26}, number={6}, pages={565--574}, doi={10.1177/0272989x06295361}}
@article{vickers2016net, author={Vickers, Andrew J. and Van Calster, Ben and Steyerberg, Ewout W.}, title={{Net benefit approaches to the evaluation of prediction models, molecular markers, and diagnostic tests}}, journal={BMJ}, year={2016}, volume={352}, eid={i6}, doi={10.1136/bmj.i6}}
@article{vickers2019simple, author={Vickers, Andrew J. and van Calster, Ben and Steyerberg, Ewout W.}, title={{A simple, step-by-step guide to interpreting decision curve analysis}}, journal={Diagnostic and Prognostic Research}, year={2019}, volume={3}, number={1}, eid={18}, doi={10.1186/s41512-019-0064-7}}
R