Cel analizy

Celem analizy jest wskazanie reguł asocjacji w zbiorze danych dotyczących kredytów bankowych. Pierwotny zbiór danych znajduje się na [stronie](https://archive.ics.uci.edu/ml/datasets/statlog+(german+credit+data).

Eksploracja reguł asocjacyjnych opiera się na tzw. modelu danych „market-basket”. Jest to zasadniczo relacja wiele-wiele między dwoma rodzajami elementów, zwanymi pozycjami (items) i koszykami (zwanymi również transakcjami).

Przykład koszyka rynkowego

Forma reguły asocjacji to {X -> Y}, gdzie {X} jest zbiorem elementów i {Y} jest elementem. Informacje te są często przedstawiane jako zbiór reguł if-then.

Dla zamieszczonego kosztyka rynkowego przykładowa reguła może mieć postać jabłko -> piwo (jeżeli dokonano zakupu jabłka, kupiono także piwo). Dla reguły tej należy określić jej:

  • wsparcie (support) - wskazuje, jak często zestaw przedmiotów pojawia się w koszykach - poziom wsparcia dla przykładowej reguły wynosi 3/8 ponieważ zestaw pozycji jabłko, piwo pojawia się w 3 z 8 koszyków;
  • zaufanie (confidence) - mówi nam, jak prawdopodobne jest kupienie przedmiotu Y, biorąc pod uwagę, że kupiono przedmiot X. Dla przykładowej reguły poziom zaufania wynosi 3/4 ponieważ piwo wystąpiło w 3 z 4 koszyków w których były także jabłka. Zaufanie jest miarą asymetryczną i zależy od kierunku reguły. Dla reguły w postaci piwo -> jabłko poziom wsparcia zaufania wynosi 3/6 ponieważ jabłka były w 3 koszykach z 6 w których było piwo.

Wczytanie danych:

load("C:/Users/Dell/Documents/dysk_wymienny/zajęcia/data_mining/credit.RData")

Przygotowanie danych

Do eksploracji i wizualizacji reguł asocjacji wykorzystane zostaną pakiety: ‘library(arules)’ i ‘library(arulesViz)’. Wymagają one przekształcenia obiektu data frame na obiekt danych transakcyjnych transaction class.

library(arules)
library(arulesViz)

reguly<-as(credit[,1:21], "transactions")

Poniżej przedstawiono “koszyki” dla pierwszych trzech “transakcji” oraz podsumowanie dotyczące wszystkich “transakcji”.

reguly<-as(credit[,1:21], "transactions")

inspect(reguly[1:3])
##     items                           transactionID
## [1] {konto_czekowe=< 0,                          
##      czas=[4,12),                                
##      historia=krytyczne,                         
##      cel=RTV,                                    
##      kwota=[250,1.55e+03),                       
##      oszczednosci=brak,                          
##      staz_pracy=>7,                              
##      rata_%doch=[2,4],                           
##      plec=M,                                     
##      poreczyciel=brak,                           
##      zamieszkanie=[2,4],                         
##      zabezpieczenie=nieruchomosc,                
##      wiek=[38,75],                               
##      inne_zobow=brak,                            
##      rodzaj_miesz=wlasne,                        
##      l_kredytow=[2,4],                           
##      kwalifikacje=wykwalifikowany,               
##      l_osob=[1,2],                               
##      telefon=tak,                                
##      obcokrajowiec=tak,                          
##      jakosc=dobry}                              1
## [2] {konto_czekowe=0-200,                        
##      czas=[24,72],                               
##      historia=istniejace_spł,                    
##      cel=RTV,                                    
##      kwota=[3.37e+03,1.84e+04],                  
##      oszczednosci=<100,                          
##      staz_pracy=1-4,                             
##      rata_%doch=[2,4],                           
##      plec=K,                                     
##      poreczyciel=brak,                           
##      zamieszkanie=[2,4],                         
##      zabezpieczenie=nieruchomosc,                
##      wiek=[19,28),                               
##      inne_zobow=brak,                            
##      rodzaj_miesz=wlasne,                        
##      l_kredytow=[1,2),                           
##      kwalifikacje=wykwalifikowany,               
##      l_osob=[1,2],                               
##      telefon=brak,                               
##      obcokrajowiec=tak,                          
##      jakosc=zly}                                2
## [3] {konto_czekowe=brak,                         
##      czas=[12,24),                               
##      historia=krytyczne,                         
##      cel=edukacja,                               
##      kwota=[1.55e+03,3.37e+03),                  
##      oszczednosci=<100,                          
##      staz_pracy=4-7,                             
##      rata_%doch=[2,4],                           
##      plec=M,                                     
##      poreczyciel=brak,                           
##      zamieszkanie=[2,4],                         
##      zabezpieczenie=nieruchomosc,                
##      wiek=[38,75],                               
##      inne_zobow=brak,                            
##      rodzaj_miesz=wlasne,                        
##      l_kredytow=[1,2),                           
##      kwalifikacje=niewykwal_rez,                 
##      l_osob=[1,2],                               
##      telefon=brak,                               
##      obcokrajowiec=tak,                          
##      jakosc=dobry}                              3
summary(reguly)
## transactions as itemMatrix in sparse format with
##  1000 rows (elements/itemsets/transactions) and
##  69 columns (items) and a density of 0.3043478 
## 
## most frequent items:
##       l_osob=[1,2]  obcokrajowiec=tak   poreczyciel=brak zamieszkanie=[2,4] 
##               1000                963                907                870 
##   rata_%doch=[2,4]            (Other) 
##                864              16396 
## 
## element (itemset/transaction) length distribution:
## sizes
##   21 
## 1000 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      21      21      21      21      21      21 
## 
## includes extended item information - examples:
##                labels     variables levels
## 1   konto_czekowe=< 0 konto_czekowe    < 0
## 2  konto_czekowe=>200 konto_czekowe   >200
## 3 konto_czekowe=0-200 konto_czekowe  0-200
## 
## includes extended transaction information - examples:
##   transactionID
## 1             1
## 2             2
## 3             3

W przypadku zmiennych ilościowych przekształcenie w dane transakcyjne polega na wydzieleniu z obszaru zmienności kilku przedziałów i przypisaniu transakcji do danego przedziału. Z podsumowania wynika, iż w przypadku zmiennej liczba osób we wszystkich 1000 koszykach wartość zmiennej mieści się w przedziale [1, 2]. Z tego względu zmienne numeryczne o małym obszarze zmienności: rata_%doch, (8), zamieszkanie (11), l_kredytow (16) oraz l_osob (18) zostały przekształcone w factor. Ponadto z dalszej analizy wyeliminowano 2 zmienne poreczyciel (10) i obcokrajowiec ze względu na to, że w ponad 90% koszyków wystąpiły “prodkukty”: obcokrajowiec=tak oraz poreczyciel=brak

Poniżej przedstawiono informacje dotyczącą transakcji po dokonaniu zmian:

credit$`rata_%doch`<-as.factor(credit$`rata_%doch`)
credit$zamieszkanie <- as.factor(credit$zamieszkanie)
credit$l_kredytow <- as.factor(credit$l_kredytow)
credit$l_osob<-as.factor(credit$l_osob)

reguly<-as(credit[,c(1:9,11:19,21)], "transactions")

summary(reguly)
## transactions as itemMatrix in sparse format with
##  1000 rows (elements/itemsets/transactions) and
##  72 columns (items) and a density of 0.2638889 
## 
## most frequent items:
##            l_osob=1     inne_zobow=brak rodzaj_miesz=wlasne        jakosc=dobry 
##                 845                 814                 713                 700 
##              plec=M             (Other) 
##                 690               15238 
## 
## element (itemset/transaction) length distribution:
## sizes
##   19 
## 1000 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      19      19      19      19      19      19 
## 
## includes extended item information - examples:
##                labels     variables levels
## 1   konto_czekowe=< 0 konto_czekowe    < 0
## 2  konto_czekowe=>200 konto_czekowe   >200
## 3 konto_czekowe=0-200 konto_czekowe  0-200
## 
## includes extended transaction information - examples:
##   transactionID
## 1             1
## 2             2
## 3             3

Informacja o etykietach poszczególnych “produktów” i wykres 15 najczęściej występujących “produktów”

itemLabels(reguly)
##  [1] "konto_czekowe=< 0"             "konto_czekowe=>200"           
##  [3] "konto_czekowe=0-200"           "konto_czekowe=brak"           
##  [5] "czas=[4,12)"                   "czas=[12,24)"                 
##  [7] "czas=[24,72]"                  "historia=brak"                
##  [9] "historia=istniejace_spł"       "historia=krytyczne"           
## [11] "historia=opoznienia"           "historia=wszystkie_spł"       
## [13] "cel=AGD"                       "cel=biznes"                   
## [15] "cel=edukacja"                  "cel=inne"                     
## [17] "cel=meble"                     "cel=przekwalifikowanie"       
## [19] "cel=remont"                    "cel=RTV"                      
## [21] "cel=sam_nowy"                  "cel=sam_uzyw"                 
## [23] "kwota=[250,1.55e+03)"          "kwota=[1.55e+03,3.37e+03)"    
## [25] "kwota=[3.37e+03,1.84e+04]"     "oszczednosci=<100"            
## [27] "oszczednosci=>1000"            "oszczednosci=100-500"         
## [29] "oszczednosci=500-1000"         "oszczednosci=brak"            
## [31] "staz_pracy=<1 rok"             "staz_pracy=>7"                
## [33] "staz_pracy=1-4"                "staz_pracy=4-7"               
## [35] "staz_pracy=bezrobotny"         "rata_%doch=1"                 
## [37] "rata_%doch=2"                  "rata_%doch=3"                 
## [39] "rata_%doch=4"                  "plec=K"                       
## [41] "plec=M"                        "zamieszkanie=1"               
## [43] "zamieszkanie=2"                "zamieszkanie=3"               
## [45] "zamieszkanie=4"                "zabezpieczenie=brak"          
## [47] "zabezpieczenie=nieruchomosc"   "zabezpieczenie=samochod"      
## [49] "zabezpieczenie=ubezpieczenie"  "wiek=[19,28)"                 
## [51] "wiek=[28,38)"                  "wiek=[38,75]"                 
## [53] "inne_zobow=bank"               "inne_zobow=brak"              
## [55] "inne_zobow=sklep"              "rodzaj_miesz=czynsz"          
## [57] "rodzaj_miesz=wlasne"           "rodzaj_miesz=za_darmo"        
## [59] "l_kredytow=1"                  "l_kredytow=2"                 
## [61] "l_kredytow=3"                  "l_kredytow=4"                 
## [63] "kwalifikacje=niewykwal_nierez" "kwalifikacje=niewykwal_rez"   
## [65] "kwalifikacje=wykwalifikowany"  "kwalifikacje=wysokie_kwal"    
## [67] "l_osob=1"                      "l_osob=2"                     
## [69] "telefon=brak"                  "telefon=tak"                  
## [71] "jakosc=dobry"                  "jakosc=zly"
itemFrequencyPlot(reguly, topN=15, xlab = "produkty", ylab = "częstotliwość wystąpień")

Graficzne przedstawienie pierwszych 150 transakcji

image(reguly[1:150], xlab="produkty", ylab = "transakcje")

Wyszukanie reguł asocjacji

Istnieją różne algorytmy wyszukiwania reguł asocjacji. W analizie wykorzystano do tego funkcję apriori, która bazuje na A-Priori Algorithm. Algorytm ten polega na zmniejszaniu liczby zestawów przedmiotów, które należy zbadać. Działa on poprzez eliminację zestawów produktów, patrząc najpierw na mniejsze zestawy i rozpoznając, że duży zestaw nie może być częsty, chyba że wszystkie jego podzbiory są częste (częste są te podzbiory, dla których poziom wsparcia jest większy od przyjętego). Mówiąc prościej, algorytm stwierdza, że jeśli zbiór produktów jest rzadki, to wszystkie jego podzbiory również muszą być rzadkie.

Oznacza to, że jeśli okaże się, że pozycja {jabłko} jest rzadka, możemy oczekiwać, że zestaw pozycji {jabłko, gruszka} będzie równie lub nawet rzadszy. Tak więc, konsolidując listę popularnych zestawów przedmiotów, nie trzeba brać pod uwagę {jabłko, gruszka} ani żadnej innej konfiguracji zestawu przedmiotów, która zawiera {jabłko}.

Algorytm A-Priori

Warunkiem wykorzystania algorytmu jest określenie minimalnego poziomu wsparcia. Dla potrzeb analizy przyjęto minimalny poziom wsparcia = 0,5, zaś poziom ufności = 0,8.

Poniżej przedstawiono wyniki przeprowadzonej analizy:

kredyt.rules <- apriori(reguly, parameter = list(support = 0.5, confidence = 0.8, 
                                                      minlen = 2))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.5      2
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 500 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[72 item(s), 1000 transaction(s)] done [0.00s].
## sorting and recoding items ... [10 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [15 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
summary(kredyt.rules)
## set of 15 rules
## 
## rule length distribution (lhs + rhs):sizes
##  2  3 
## 13  2 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   2.000   2.000   2.133   2.000   3.000 
## 
## summary of quality measures:
##     support         confidence        coverage           lift       
##  Min.   :0.5010   Min.   :0.8029   Min.   :0.5900   Min.   :0.9864  
##  1st Qu.:0.5175   1st Qu.:0.8329   1st Qu.:0.6165   1st Qu.:1.0030  
##  Median :0.5510   Median :0.8443   Median :0.6330   Median :1.0131  
##  Mean   :0.5657   Mean   :0.8424   Mean   :0.6721   Mean   :1.0143  
##  3rd Qu.:0.5905   3rd Qu.:0.8519   3rd Qu.:0.7065   3rd Qu.:1.0299  
##  Max.   :0.6980   Max.   :0.8746   Max.   :0.8450   Max.   :1.0456  
##      count      
##  Min.   :501.0  
##  1st Qu.:517.5  
##  Median :551.0  
##  Mean   :565.7  
##  3rd Qu.:590.5  
##  Max.   :698.0  
## 
## mining info:
##    data ntransactions support confidence
##  reguly          1000     0.5        0.8
##                                                                                   call
##  apriori(data = reguly, parameter = list(support = 0.5, confidence = 0.8, minlen = 2))
inspect(kredyt.rules)
##      lhs                                rhs               support confidence
## [1]  {telefon=brak}                  => {l_osob=1}        0.501   0.8406040 
## [2]  {oszczednosci=<100}             => {l_osob=1}        0.513   0.8507463 
## [3]  {kwalifikacje=wykwalifikowany}  => {inne_zobow=brak} 0.529   0.8396825 
## [4]  {kwalifikacje=wykwalifikowany}  => {l_osob=1}        0.551   0.8746032 
## [5]  {l_kredytow=1}                  => {inne_zobow=brak} 0.522   0.8246445 
## [6]  {l_kredytow=1}                  => {l_osob=1}        0.550   0.8688784 
## [7]  {plec=M}                        => {inne_zobow=brak} 0.554   0.8028986 
## [8]  {jakosc=dobry}                  => {inne_zobow=brak} 0.590   0.8428571 
## [9]  {jakosc=dobry}                  => {l_osob=1}        0.591   0.8442857 
## [10] {rodzaj_miesz=wlasne}           => {inne_zobow=brak} 0.576   0.8078541 
## [11] {rodzaj_miesz=wlasne}           => {l_osob=1}        0.607   0.8513324 
## [12] {inne_zobow=brak}               => {l_osob=1}        0.698   0.8574939 
## [13] {l_osob=1}                      => {inne_zobow=brak} 0.698   0.8260355 
## [14] {inne_zobow=brak, jakosc=dobry} => {l_osob=1}        0.503   0.8525424 
## [15] {l_osob=1, jakosc=dobry}        => {inne_zobow=brak} 0.503   0.8510998 
##      coverage lift      count
## [1]  0.596    0.9947977 501  
## [2]  0.603    1.0068003 513  
## [3]  0.630    1.0315510 529  
## [4]  0.630    1.0350333 551  
## [5]  0.633    1.0130768 522  
## [6]  0.633    1.0282584 550  
## [7]  0.690    0.9863619 554  
## [8]  0.700    1.0354510 590  
## [9]  0.700    0.9991547 591  
## [10] 0.713    0.9924498 576  
## [11] 0.713    1.0074940 607  
## [12] 0.814    1.0147856 698  
## [13] 0.845    1.0147856 698  
## [14] 0.590    1.0089259 503  
## [15] 0.591    1.0455772 503
plot(kredyt.rules, engine = "plotly")

Poniżej przedstawiono wyniki ograniczone do 10 reguł o najwyższym poziomie ufności.

podreguly<-head(kredyt.rules, n = 10, by = "confidence")

summary(podreguly)
## set of 10 rules
## 
## rule length distribution (lhs + rhs):sizes
## 2 3 
## 8 2 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     2.0     2.0     2.2     2.0     3.0 
## 
## summary of quality measures:
##     support         confidence        coverage           lift       
##  Min.   :0.5010   Min.   :0.8406   Min.   :0.5900   Min.   :0.9948  
##  1st Qu.:0.5055   1st Qu.:0.8459   1st Qu.:0.5978   1st Qu.:1.0070  
##  Median :0.5505   Median :0.8512   Median :0.6315   Median :1.0119  
##  Mean   :0.5607   Mean   :0.8534   Mean   :0.6570   Mean   :1.0176  
##  3rd Qu.:0.5907   3rd Qu.:0.8563   3rd Qu.:0.7000   3rd Qu.:1.0333  
##  Max.   :0.6980   Max.   :0.8746   Max.   :0.8140   Max.   :1.0456  
##      count      
##  Min.   :501.0  
##  1st Qu.:505.5  
##  Median :550.5  
##  Mean   :560.7  
##  3rd Qu.:590.8  
##  Max.   :698.0  
## 
## mining info:
##    data ntransactions support confidence
##  reguly          1000     0.5        0.8
##                                                                                   call
##  apriori(data = reguly, parameter = list(support = 0.5, confidence = 0.8, minlen = 2))
inspect(podreguly)
##      lhs                                rhs               support confidence
## [1]  {kwalifikacje=wykwalifikowany}  => {l_osob=1}        0.551   0.8746032 
## [2]  {l_kredytow=1}                  => {l_osob=1}        0.550   0.8688784 
## [3]  {inne_zobow=brak}               => {l_osob=1}        0.698   0.8574939 
## [4]  {inne_zobow=brak, jakosc=dobry} => {l_osob=1}        0.503   0.8525424 
## [5]  {rodzaj_miesz=wlasne}           => {l_osob=1}        0.607   0.8513324 
## [6]  {l_osob=1, jakosc=dobry}        => {inne_zobow=brak} 0.503   0.8510998 
## [7]  {oszczednosci=<100}             => {l_osob=1}        0.513   0.8507463 
## [8]  {jakosc=dobry}                  => {l_osob=1}        0.591   0.8442857 
## [9]  {jakosc=dobry}                  => {inne_zobow=brak} 0.590   0.8428571 
## [10] {telefon=brak}                  => {l_osob=1}        0.501   0.8406040 
##      coverage lift      count
## [1]  0.630    1.0350333 551  
## [2]  0.633    1.0282584 550  
## [3]  0.814    1.0147856 698  
## [4]  0.590    1.0089259 503  
## [5]  0.713    1.0074940 607  
## [6]  0.591    1.0455772 503  
## [7]  0.603    1.0068003 513  
## [8]  0.700    0.9991547 591  
## [9]  0.700    1.0354510 590  
## [10] 0.596    0.9947977 501
plot(podreguly, method = "graph",  engine = "htmlwidget")

Reguły asocjacji - kredyt “dobry”

Powyższe reguły dotyczą wszystkich “produktów” znajdujacych się w analizowanym zbiorze transakcji. Celem tej części jest wyszukanie reguł, które związane sa z jakością kredytu = “dobry”. W tym celu należy ograniczyć wyszukiwanie reguł, wskazując iż poszukiwane są takie reguły, w których po prawej stronie (następniku) znajduję się produkt jakosc=dobry.

dobry_reguly<-apriori(reguly, parameter = list(support = 0.3, confidence = 0.5),
                       appearance = list(rhs = "jakosc=dobry"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.3      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 300 
## 
## set item appearances ...[1 item(s)] done [0.00s].
## set transactions ...[72 item(s), 1000 transaction(s)] done [0.00s].
## sorting and recoding items ... [27 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 5 done [0.00s].
## writing ... [41 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
summary(dobry_reguly)
## set of 41 rules
## 
## rule length distribution (lhs + rhs):sizes
##  1  2  3  4 
##  1 11 22  7 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   2.854   3.000   4.000 
## 
## summary of quality measures:
##     support         confidence        coverage           lift       
##  Min.   :0.3030   Min.   :0.6394   Min.   :0.3300   Min.   :0.9134  
##  1st Qu.:0.3270   1st Qu.:0.6904   1st Qu.:0.4520   1st Qu.:0.9863  
##  Median :0.3610   Median :0.7206   Median :0.5130   Median :1.0295  
##  Mean   :0.3888   Mean   :0.7235   Mean   :0.5405   Mean   :1.0336  
##  3rd Qu.:0.4170   3rd Qu.:0.7494   3rd Qu.:0.5960   3rd Qu.:1.0706  
##  Max.   :0.7000   Max.   :0.9182   Max.   :1.0000   Max.   :1.3117  
##      count      
##  Min.   :303.0  
##  1st Qu.:327.0  
##  Median :361.0  
##  Mean   :388.8  
##  3rd Qu.:417.0  
##  Max.   :700.0  
## 
## mining info:
##    data ntransactions support confidence
##  reguly          1000     0.3        0.5
##                                                                                                                call
##  apriori(data = reguly, parameter = list(support = 0.3, confidence = 0.5), appearance = list(rhs = "jakosc=dobry"))
inspect(dobry_reguly)
##      lhs                                rhs            support confidence coverage      lift count
## [1]  {}                              => {jakosc=dobry}   0.700  0.7000000    1.000 1.0000000   700
## [2]  {konto_czekowe=brak}            => {jakosc=dobry}   0.348  0.8832487    0.394 1.2617839   348
## [3]  {rata_%doch=4}                  => {jakosc=dobry}   0.317  0.6659664    0.476 0.9513806   317
## [4]  {historia=istniejace_spł}       => {jakosc=dobry}   0.361  0.6811321    0.530 0.9730458   361
## [5]  {telefon=brak}                  => {jakosc=dobry}   0.409  0.6862416    0.596 0.9803452   409
## [6]  {oszczednosci=<100}             => {jakosc=dobry}   0.386  0.6401327    0.603 0.9144752   386
## [7]  {kwalifikacje=wykwalifikowany}  => {jakosc=dobry}   0.444  0.7047619    0.630 1.0068027   444
## [8]  {l_kredytow=1}                  => {jakosc=dobry}   0.433  0.6840442    0.633 0.9772060   433
## [9]  {plec=M}                        => {jakosc=dobry}   0.499  0.7231884    0.690 1.0331263   499
## [10] {rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.527  0.7391304    0.713 1.0559006   527
## [11] {inne_zobow=brak}               => {jakosc=dobry}   0.590  0.7248157    0.814 1.0354510   590
## [12] {l_osob=1}                      => {jakosc=dobry}   0.591  0.6994083    0.845 0.9991547   591
## [13] {konto_czekowe=brak,                                                                         
##       inne_zobow=brak}               => {jakosc=dobry}   0.303  0.9181818    0.330 1.3116883   303
## [14] {historia=istniejace_spł,                                                                    
##       l_kredytow=1}                  => {jakosc=dobry}   0.330  0.6903766    0.478 0.9862522   330
## [15] {historia=istniejace_spł,                                                                    
##       inne_zobow=brak}               => {jakosc=dobry}   0.312  0.6902655    0.452 0.9860936   312
## [16] {historia=istniejace_spł,                                                                    
##       l_osob=1}                      => {jakosc=dobry}   0.313  0.6774892    0.462 0.9678417   313
## [17] {rodzaj_miesz=wlasne,                                                                        
##       telefon=brak}                  => {jakosc=dobry}   0.319  0.7367206    0.433 1.0524579   319
## [18] {inne_zobow=brak,                                                                            
##       telefon=brak}                  => {jakosc=dobry}   0.350  0.7142857    0.490 1.0204082   350
## [19] {l_osob=1,                                                                                   
##       telefon=brak}                  => {jakosc=dobry}   0.349  0.6966068    0.501 0.9951526   349
## [20] {oszczednosci=<100,                                                                          
##       inne_zobow=brak}               => {jakosc=dobry}   0.327  0.6673469    0.490 0.9533528   327
## [21] {oszczednosci=<100,                                                                          
##       l_osob=1}                      => {jakosc=dobry}   0.328  0.6393762    0.513 0.9133946   328
## [22] {plec=M,                                                                                     
##       kwalifikacje=wykwalifikowany}  => {jakosc=dobry}   0.313  0.7228637    0.433 1.0326625   313
## [23] {rodzaj_miesz=wlasne,                                                                        
##       kwalifikacje=wykwalifikowany}  => {jakosc=dobry}   0.342  0.7566372    0.452 1.0809102   342
## [24] {inne_zobow=brak,                                                                            
##       kwalifikacje=wykwalifikowany}  => {jakosc=dobry}   0.387  0.7315690    0.529 1.0450986   387
## [25] {kwalifikacje=wykwalifikowany,                                                               
##       l_osob=1}                      => {jakosc=dobry}   0.390  0.7078040    0.551 1.0111486   390
## [26] {rodzaj_miesz=wlasne,                                                                        
##       l_kredytow=1}                  => {jakosc=dobry}   0.311  0.7100457    0.438 1.0143509   311
## [27] {inne_zobow=brak,                                                                            
##       l_kredytow=1}                  => {jakosc=dobry}   0.366  0.7011494    0.522 1.0016420   366
## [28] {l_kredytow=1,                                                                               
##       l_osob=1}                      => {jakosc=dobry}   0.377  0.6854545    0.550 0.9792208   377
## [29] {plec=M,                                                                                     
##       rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.390  0.7543520    0.517 1.0776458   390
## [30] {plec=M,                                                                                     
##       inne_zobow=brak}               => {jakosc=dobry}   0.417  0.7527076    0.554 1.0752965   417
## [31] {plec=M,                                                                                     
##       l_osob=1}                      => {jakosc=dobry}   0.398  0.7249545    0.549 1.0356492   398
## [32] {inne_zobow=brak,                                                                            
##       rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.443  0.7690972    0.576 1.0987103   443
## [33] {rodzaj_miesz=wlasne,                                                                        
##       l_osob=1}                      => {jakosc=dobry}   0.445  0.7331137    0.607 1.0473052   445
## [34] {inne_zobow=brak,                                                                            
##       l_osob=1}                      => {jakosc=dobry}   0.503  0.7206304    0.698 1.0294720   503
## [35] {rodzaj_miesz=wlasne,                                                                        
##       kwalifikacje=wykwalifikowany,                                                               
##       l_osob=1}                      => {jakosc=dobry}   0.303  0.7518610    0.403 1.0740872   303
## [36] {inne_zobow=brak,                                                                            
##       kwalifikacje=wykwalifikowany,                                                               
##       l_osob=1}                      => {jakosc=dobry}   0.344  0.7319149    0.470 1.0455927   344
## [37] {inne_zobow=brak,                                                                            
##       l_kredytow=1,                                                                               
##       l_osob=1}                      => {jakosc=dobry}   0.321  0.6978261    0.460 0.9968944   321
## [38] {plec=M,                                                                                     
##       inne_zobow=brak,                                                                            
##       rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.327  0.7917676    0.413 1.1310965   327
## [39] {plec=M,                                                                                     
##       rodzaj_miesz=wlasne,                                                                        
##       l_osob=1}                      => {jakosc=dobry}   0.314  0.7494033    0.419 1.0705762   314
## [40] {plec=M,                                                                                     
##       inne_zobow=brak,                                                                            
##       l_osob=1}                      => {jakosc=dobry}   0.338  0.7527840    0.449 1.0754057   338
## [41] {inne_zobow=brak,                                                                            
##       rodzaj_miesz=wlasne,                                                                        
##       l_osob=1}                      => {jakosc=dobry}   0.376  0.7565392    0.497 1.0807703   376
plot(dobry_reguly, engine = "plotly")

Poniżej przedstawiono wyniki ograniczone do 10 reguł o najwyższym poziomie ufności.

podreguly_jakosc<-head(dobry_reguly, n = 10, by = "confidence")

inspect(podreguly_jakosc)
##      lhs                                rhs            support confidence coverage     lift count
## [1]  {konto_czekowe=brak,                                                                        
##       inne_zobow=brak}               => {jakosc=dobry}   0.303  0.9181818    0.330 1.311688   303
## [2]  {konto_czekowe=brak}            => {jakosc=dobry}   0.348  0.8832487    0.394 1.261784   348
## [3]  {plec=M,                                                                                    
##       inne_zobow=brak,                                                                           
##       rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.327  0.7917676    0.413 1.131097   327
## [4]  {inne_zobow=brak,                                                                           
##       rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.443  0.7690972    0.576 1.098710   443
## [5]  {rodzaj_miesz=wlasne,                                                                       
##       kwalifikacje=wykwalifikowany}  => {jakosc=dobry}   0.342  0.7566372    0.452 1.080910   342
## [6]  {inne_zobow=brak,                                                                           
##       rodzaj_miesz=wlasne,                                                                       
##       l_osob=1}                      => {jakosc=dobry}   0.376  0.7565392    0.497 1.080770   376
## [7]  {plec=M,                                                                                    
##       rodzaj_miesz=wlasne}           => {jakosc=dobry}   0.390  0.7543520    0.517 1.077646   390
## [8]  {plec=M,                                                                                    
##       inne_zobow=brak,                                                                           
##       l_osob=1}                      => {jakosc=dobry}   0.338  0.7527840    0.449 1.075406   338
## [9]  {plec=M,                                                                                    
##       inne_zobow=brak}               => {jakosc=dobry}   0.417  0.7527076    0.554 1.075297   417
## [10] {rodzaj_miesz=wlasne,                                                                       
##       kwalifikacje=wykwalifikowany,                                                              
##       l_osob=1}                      => {jakosc=dobry}   0.303  0.7518610    0.403 1.074087   303
plot(podreguly_jakosc, method = "graph",  engine = "htmlwidget")

Reguły asocjacji - kredyt “zly”

Podobnie jak wcześniej wyszukano reguły, które związane są z jakością kredytu = “zły”. W tym celu w wyszukaniu reguł, wskazano po prawej stronie (następniku) warunek: jakosc=zly.

zly_reguly<-apriori(reguly, parameter = list(support = 0.1, confidence = 0.35),
                       appearance = list(rhs = "jakosc=zly"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##        0.35    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 100 
## 
## set item appearances ...[1 item(s)] done [0.00s].
## set transactions ...[72 item(s), 1000 transaction(s)] done [0.00s].
## sorting and recoding items ... [55 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 5 6 7 done [0.01s].
## writing ... [32 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
summary(zly_reguly)
## set of 32 rules
## 
## rule length distribution (lhs + rhs):sizes
##  2  3  4  5 
##  7 18  6  1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   3.000   3.000   3.031   3.000   5.000 
## 
## summary of quality measures:
##     support         confidence        coverage           lift      
##  Min.   :0.1010   Min.   :0.3516   Min.   :0.2190   Min.   :1.172  
##  1st Qu.:0.1060   1st Qu.:0.3623   1st Qu.:0.2730   1st Qu.:1.208  
##  Median :0.1140   Median :0.3719   Median :0.2945   Median :1.240  
##  Mean   :0.1215   Mean   :0.3923   Mean   :0.3145   Mean   :1.308  
##  3rd Qu.:0.1285   3rd Qu.:0.3890   3rd Qu.:0.3295   3rd Qu.:1.297  
##  Max.   :0.2170   Max.   :0.5205   Max.   :0.6030   Max.   :1.735  
##      count      
##  Min.   :101.0  
##  1st Qu.:106.0  
##  Median :114.0  
##  Mean   :121.5  
##  3rd Qu.:128.5  
##  Max.   :217.0  
## 
## mining info:
##    data ntransactions support confidence
##  reguly          1000     0.1       0.35
##                                                                                                               call
##  apriori(data = reguly, parameter = list(support = 0.1, confidence = 0.35), appearance = list(rhs = "jakosc=zly"))
inspect(zly_reguly)
##      lhs                                rhs          support confidence coverage     lift count
## [1]  {konto_czekowe=0-200}           => {jakosc=zly}   0.105  0.3903346    0.269 1.301115   105
## [2]  {konto_czekowe=< 0}             => {jakosc=zly}   0.135  0.4927007    0.274 1.642336   135
## [3]  {wiek=[19,28)}                  => {jakosc=zly}   0.107  0.3676976    0.291 1.225659   107
## [4]  {plec=K}                        => {jakosc=zly}   0.109  0.3516129    0.310 1.172043   109
## [5]  {kwota=[3.37e+03,1.84e+04]}     => {jakosc=zly}   0.121  0.3622754    0.334 1.207585   121
## [6]  {czas=[24,72]}                  => {jakosc=zly}   0.158  0.3816425    0.414 1.272142   158
## [7]  {oszczednosci=<100}             => {jakosc=zly}   0.217  0.3598673    0.603 1.199558   217
## [8]  {konto_czekowe=< 0,                                                                       
##       oszczednosci=<100}             => {jakosc=zly}   0.114  0.5205479    0.219 1.735160   114
## [9]  {konto_czekowe=< 0,                                                                       
##       inne_zobow=brak}               => {jakosc=zly}   0.106  0.4818182    0.220 1.606061   106
## [10] {konto_czekowe=< 0,                                                                       
##       l_osob=1}                      => {jakosc=zly}   0.114  0.5135135    0.222 1.711712   114
## [11] {wiek=[19,28),                                                                            
##       l_osob=1}                      => {jakosc=zly}   0.101  0.3620072    0.279 1.206691   101
## [12] {kwota=[3.37e+03,1.84e+04],                                                               
##       l_osob=1}                      => {jakosc=zly}   0.103  0.3772894    0.273 1.257631   103
## [13] {czas=[24,72],                                                                            
##       oszczednosci=<100}             => {jakosc=zly}   0.115  0.4872881    0.236 1.624294   115
## [14] {czas=[24,72],                                                                            
##       l_kredytow=1}                  => {jakosc=zly}   0.102  0.3984375    0.256 1.328125   102
## [15] {czas=[24,72],                                                                            
##       plec=M}                        => {jakosc=zly}   0.107  0.3519737    0.304 1.173246   107
## [16] {czas=[24,72],                                                                            
##       inne_zobow=brak}               => {jakosc=zly}   0.118  0.3597561    0.328 1.199187   118
## [17] {czas=[24,72],                                                                            
##       l_osob=1}                      => {jakosc=zly}   0.136  0.3885714    0.350 1.295238   136
## [18] {rata_%doch=4,                                                                            
##       telefon=brak}                  => {jakosc=zly}   0.110  0.3846154    0.286 1.282051   110
## [19] {oszczednosci=<100,                                                                       
##       rata_%doch=4}                  => {jakosc=zly}   0.114  0.4056940    0.281 1.352313   114
## [20] {rata_%doch=4,                                                                            
##       l_kredytow=1}                  => {jakosc=zly}   0.113  0.3791946    0.298 1.263982   113
## [21] {historia=istniejace_spł,                                                                 
##       oszczednosci=<100}             => {jakosc=zly}   0.118  0.3710692    0.318 1.236897   118
## [22] {oszczednosci=<100,                                                                       
##       telefon=brak}                  => {jakosc=zly}   0.133  0.3556150    0.374 1.185383   133
## [23] {oszczednosci=<100,                                                                       
##       kwalifikacje=wykwalifikowany}  => {jakosc=zly}   0.135  0.3688525    0.366 1.229508   135
## [24] {oszczednosci=<100,                                                                       
##       l_kredytow=1}                  => {jakosc=zly}   0.145  0.3877005    0.374 1.292335   145
## [25] {oszczednosci=<100,                                                                       
##       l_osob=1}                      => {jakosc=zly}   0.185  0.3606238    0.513 1.202079   185
## [26] {czas=[24,72],                                                                            
##       inne_zobow=brak,                                                                         
##       l_osob=1}                      => {jakosc=zly}   0.104  0.3674912    0.283 1.224971   104
## [27] {historia=istniejace_spł,                                                                 
##       oszczednosci=<100,                                                                       
##       l_kredytow=1}                  => {jakosc=zly}   0.106  0.3693380    0.287 1.231127   106
## [28] {historia=istniejace_spł,                                                                 
##       oszczednosci=<100,                                                                       
##       l_osob=1}                      => {jakosc=zly}   0.101  0.3699634    0.273 1.233211   101
## [29] {oszczednosci=<100,                                                                       
##       kwalifikacje=wykwalifikowany,                                                            
##       l_osob=1}                      => {jakosc=zly}   0.117  0.3622291    0.323 1.207430   117
## [30] {oszczednosci=<100,                                                                       
##       inne_zobow=brak,                                                                         
##       l_kredytow=1}                  => {jakosc=zly}   0.112  0.3648208    0.307 1.216069   112
## [31] {oszczednosci=<100,                                                                       
##       l_kredytow=1,                                                                            
##       l_osob=1}                      => {jakosc=zly}   0.127  0.3871951    0.328 1.290650   127
## [32] {oszczednosci=<100,                                                                       
##       inne_zobow=brak,                                                                         
##       l_kredytow=1,                                                                            
##       l_osob=1}                      => {jakosc=zly}   0.101  0.3726937    0.271 1.242312   101
plot(zly_reguly, engine = "plotly")

Poniżej przedstawiono wyniki ograniczone do 10 reguł o najwyższym poziomie ufności.

podreguly_jakosc2<-head(zly_reguly, n = 10, by = "confidence")

inspect(podreguly_jakosc2)
##      lhs                                       rhs          support confidence
## [1]  {konto_czekowe=< 0, oszczednosci=<100} => {jakosc=zly} 0.114   0.5205479 
## [2]  {konto_czekowe=< 0, l_osob=1}          => {jakosc=zly} 0.114   0.5135135 
## [3]  {konto_czekowe=< 0}                    => {jakosc=zly} 0.135   0.4927007 
## [4]  {czas=[24,72], oszczednosci=<100}      => {jakosc=zly} 0.115   0.4872881 
## [5]  {konto_czekowe=< 0, inne_zobow=brak}   => {jakosc=zly} 0.106   0.4818182 
## [6]  {oszczednosci=<100, rata_%doch=4}      => {jakosc=zly} 0.114   0.4056940 
## [7]  {czas=[24,72], l_kredytow=1}           => {jakosc=zly} 0.102   0.3984375 
## [8]  {konto_czekowe=0-200}                  => {jakosc=zly} 0.105   0.3903346 
## [9]  {czas=[24,72], l_osob=1}               => {jakosc=zly} 0.136   0.3885714 
## [10] {oszczednosci=<100, l_kredytow=1}      => {jakosc=zly} 0.145   0.3877005 
##      coverage lift     count
## [1]  0.219    1.735160 114  
## [2]  0.222    1.711712 114  
## [3]  0.274    1.642336 135  
## [4]  0.236    1.624294 115  
## [5]  0.220    1.606061 106  
## [6]  0.281    1.352313 114  
## [7]  0.256    1.328125 102  
## [8]  0.269    1.301115 105  
## [9]  0.350    1.295238 136  
## [10] 0.374    1.292335 145
plot(podreguly_jakosc2, method = "graph",  engine = "htmlwidget")