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:
Wczytanie danych:
load("C:/Users/Dell/Documents/dysk_wymienny/zajęcia/data_mining/credit.RData")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")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")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")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")