R u bankarstvu
  • Zbirka riješenih zadataka
  • O Zbirci
  • 1. Import podataka
    • .csv & .txt
    • Microsoft Excel
    • Microsoft Access
    • SAS
    • .RData
  • 2. Manipulacije i agregacije podataka
    • str
    • ifelse & if
    • Nedostupne vrijednosti
    • %in%
    • as.Date
    • Petlje
    • Agregacije podataka
  • 3. Eksport podataka
    • .csv & .txt
    • Microsoft Excel
    • Microsoft Access
    • SAS
    • .RData
    • Eksport tabela i grafika u Microsoft PowerPoint
    • Eksport tabela i grafika u Microsoft Word
  • 4. Ostalo
    • ODBC konekcije
    • Sistemsko manipulisanje fajlovima i folderima
    • Pozivanje R funkcija i programa iz SAS-a
    • Pozivanje SAS programa iz R-a
    • Korisničke funkcije
    • Neto sadašnja vrijednost
    • Plan otplate kredita
    • Efektivna kamatna stopa
    • Moratorijum na otplatu kredita
    • Restrukturiranje kredita kroz produženje roka otplate
    • WoE & IV
    • WoE transformacije u regresionim modelima
    • Kalibracija rejting skale
    • Monotono grupisanje numeričkih risk faktora
  • Biografija
Powered by GitBook
On this page

Was this helpful?

  1. 4. Ostalo

WoE & IV

PreviousRestrukturiranje kredita kroz produženje roka otplateNextWoE transformacije u regresionim modelima

Last updated 4 years ago

Was this helpful?

"Težina dokaza" (engleski weights of evidence, WoE) i informaciona vrijednost (engleski information value, IV) predstavljaju najčešće korišćene metrike prilikom razvoja rejting modela kreditnog rizika.

Zadatak: Importovati woe_iv.csv fajl dat u prilogu, a zatim importovanom data frameu db dodati novu variablu maturity.g , definisanu na način da se vrijednosti varijable maturity grupišu u 5 (po broju observacija) približno jednakih grupa. Dalje:

  1. izračunati WoE i IV nove varijable maturity.g u odnosu na binarnu zavisnu varijablu bo ;

  2. izračunati WoE i IV nove varijable maturity.g u odnosu na neprekidnu zavisnu varijablu co .

> #naredne komande izvrsiti ukoliko paketi vec nisu instalirani
> #install.packages("Hmisc")
> #install.packages("dtplyr")
> #install.packages("dplyr")
> library(Hmisc)
> library(dtplyr)
> library(dplyr)
> 
> #importovati woe_iv.csv fajl
> db <- read.csv("woe_iv.csv", header = TRUE)
> str(db)
'data.frame':   10000 obs. of  3 variables:
 $ bo      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ co      : num  0.1361 0.0941 0.0847 0.0122 0.0122 ...
 $ maturity: int  18 9 12 12 12 10 8 6 18 24 ...
> #bo - dobar (0) / los (1) indikator
> table(db$bo)

   0    1 
9500  500 
> #kreirati grupe rocnosti kredita
> db$maturity.g <- cut2(db$maturity, g = 5)
> #kreirati data.table objekat 
> db <- lazy_dt(db)
> db
Source: local data table [10,000 x 4]
Call:   `_DT1`

     bo     co maturity maturity.g
  <int>  <dbl>    <int> <fct>     
1     0 0.136        18 [14,22)   
2     0 0.0941        9 [ 4,11)   
3     0 0.0847       12 [11,14)   
4     0 0.0122       12 [11,14)   
5     0 0.0122       12 [11,14)   
6     0 0.0122       10 [ 4,11)   
# ... with 9,994 more rows

# Use as.data.table()/as.data.frame()/as_tibble() to access results
> bo.s <- db %>% 
+   group_by(maturity.g) %>%
+   summarise(no = n(),
+ ng = sum(bo%in%0),
+ nb = sum(bo)) %>%
+   mutate(dr = nb / no) %>%
+   ungroup() %>%
+   mutate(so = sum(no),
+    sg = sum(ng),
+    sb = sum(nb), 
+    dist.g = ng / sg,
+    dist.b = nb / sb,
+    woe = log(dist.g / dist.b),
+    iv.c = (dist.g - dist.b) * woe,  
+    iv.s = sum(iv.c))
> as.data.frame(bo.s)
  maturity.g   no   ng  nb         dr    so   sg  sb    dist.g dist.b
1    [ 4,11) 2009 1961  48 0.02389248 10000 9500 500 0.2064211  0.096
2    [11,14) 2024 1942  82 0.04051383 10000 9500 500 0.2044211  0.164
3    [14,22) 2174 2058 116 0.05335787 10000 9500 500 0.2166316  0.232
4    [22,26) 1856 1772  84 0.04525862 10000 9500 500 0.1865263  0.168
5    [26,72] 1937 1767 170 0.08776458 10000 9500 500 0.1860000  0.340
          woe        iv.c      iv.s
1  0.76556984 0.084535027 0.1893244
2  0.22031542 0.008905381 0.1893244
3 -0.06853925 0.001053340 0.1893244
4  0.10460835 0.001938007 0.1893244
5 -0.60319894 0.092892637 0.1893244
> co.s <- db %>% 
+   group_by(maturity.g) %>%
+   summarise(no = n(),
+ sy = sum(co)) %>%
+   ungroup() %>%
+   mutate(po = no / sum(no),
+    py = sy / sum(sy),
+    woe = log(py / po),
+    iv.c = (py - po) * woe,
+    iv.s = sum(iv.c))
> as.data.frame(co.s)
  maturity.g   no        sy     po        py         woe          iv.c       iv.s
1    [ 4,11) 2009  78.45591 0.2009 0.1664434 -0.18815216 0.00648308977 0.03403643
2    [11,14) 2024  93.44255 0.2024 0.1982373 -0.02078092 0.00008650382 0.03403643
3    [14,22) 2174  99.95901 0.2174 0.2120619 -0.02486054 0.00013270693 0.03403643
4    [22,26) 1856  74.27521 0.1856 0.1575740 -0.16369837 0.00458780369 0.03403643
5    [26,72] 1937 125.23435 0.1937 0.2656833  0.31599443 0.02274632258 0.03403643
174KB
woe_iv.csv
woe_iv.csv