Explicarea prognozelor din serii temporale cu valori Shapley exacte (ahead::dynrmf cu regresori externi aplicați scenariilor)

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Valorile Shapley constituie o modalitate larg adoptată de a atribui contribuția fiecărei caracteristici (variabilă explicativă) la predicția unui model. Folosit în cea mai mare parte în învățarea supravegheată, această postare ilustrează un exemplu de utilizare a acestora pentru a explica previziunile serii de timp, cu valori Shapley exacte și pe baza ahead::dynrmf model cu regresori externi.

Codul de mai jos folosește ahead pachet pentru a calcula valorile exacte Shapley pentru o prognoză în serie de timp. Acesta folosește ahead::dynrmf_shap pentru a calcula valorile Shapley și ahead::plot_dynrmf_shap_waterfall funcția de a le reprezenta grafic.

Mai întâi, instalați pachetul:

devtools::install_github("Techtonique/ahead")

Apoi, rulați următorul cod (aplică valorile Shapley la dynrmf model, pentru diferite scenarii). Eu folosesc uschange set de date (modificări trimestriale ale variabilelor macroeconomice din SUA) din fpp2 pachet. Variabila seriei temporale țintă este Consumption; regresorii sunt Income, Savingsși Unemployment (la scară).

library(fpp2); library(ahead); library(e1071); library(misc)
library(ggplot2); library(patchwork)

y       <- fpp2::uschange(, "Consumption")
xreg    <- scale(fpp2::uschange(, c("Income", "Savings", "Unemployment")))
split   <- misc::splitts(y, split_prob = 0.9)
xreg_train <- window(xreg, start = start(split$training), end = end(split$training))
xreg_test <- window(xreg, start = start(split$testing),  end = end(split$testing))

shap <- ahead::dynrmf_shap(
  y            = split$training,
  xreg_fit     = xreg_train,
  xreg_predict = xreg_test,
  fit_func     = e1071::svm
)

p1 <- ahead::plot_dynrmf_shap_waterfall(shap, title = "Baseline scenario")

xreg_pess <- xreg_test
xreg_pess(,"Income") <- -1;
xreg_pess(,"Savings") <- -0.5

shap_pess <- dynrmf_shap(
  y            = split$training,
  xreg_fit     = xreg_train,
  xreg_predict = xreg_pess,
  fit_func     = e1071::svm
)

p2 <- ahead::plot_dynrmf_shap_waterfall(shap_pess, title = "Pessimistic scenario")

xreg_opt  <- xreg_test
xreg_opt(,"Income")  <-  2;
xreg_opt(,"Savings")  <-  0.5

shap_opt <- dynrmf_shap(
  y            = split$training,
  xreg_fit     = xreg_train,
  xreg_predict = xreg_opt,
  fit_func     = e1071::svm
)

p3 <- ahead::plot_dynrmf_shap_waterfall(shap_opt, title = "Optimistic scenario")

xreg_ovr  <- xreg_test
xreg_ovr(,"Income")  <-  2.5;
xreg_ovr(,"Savings") <-  0.75

shap_ovr <- ahead::dynrmf_shap(
  y            = split$training,
  xreg_fit     = xreg_train,
  xreg_predict = xreg_ovr,
  fit_func     = e1071::svm
)

p4 <- plot_dynrmf_shap_waterfall(shap_ovr, title = "Overly optimistic scenario")

(p1 + p2)/(p3 + p4)

imagine-titlu-aici

O verificare, care este întotdeauna o practică bună atunci când se utilizează valorile Shapley, este de a vedea dacă suma valorilor Shapley este egală cu diferența dintre predicție și prognoza de bază (prognoza modelului când fiecare regresor este înlocuit cu media coloanei setului de antrenament). Este cazul în parcelele de mai sus.

Este demn de menționat că valorile exacte Shapley pot fi calculate în acest context, deoarece există doar câțiva regresori externi. Acest lucru rămâne fezabil pentru un număr mic de regresori (mai puțin de 15, ceea ce, din nou, în acest context, nu este absurd de luat în considerare).

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.