Applicazioni pratiche di machine learning/Approvazione carte di credito: differenze tra le versioni
Nuova pagina: == Caricamento librerie == <syntaxhighlight lang="rsplus"> library(dplyr) library(caret) library(h2o) </syntaxhighlight> == Parte 1 : Dati == Una banca per decidere se emetter... |
(Nessuna differenza)
|
Versione delle 08:41, 4 ott 2020
Caricamento librerie
library(dplyr)
library(caret)
library(h2o)
Parte 1 : Dati
Una banca per decidere se emettere una carta di credito ad un cliente può valutare l'entità del rischio utilizzando un algoritmo di machine learning . I datasets credit_record.csv e application_record.csv scaricabili da qui : https://www.kaggle.com/rikdifos/credit-card-approval-prediction possono essere utilizzati per prevedere se un candidato è un cliente "buono" o "cattivo" al fine di ricevere la carta di credito.
I dati relativi al cliente sono contenuti in application_record.csv :
- ID: numero identificativo cliente
- CODE_GENDER: Sesso
- FLAG_OWN_CAR: Ha una macchina
- FLAG_OWN_REALTY: Ha proprietà
- CNT_CHILDREN: Numero di bambini
- AMT_INCOME_TOTAL: Reddito annuo
- NAME_INCOME_TYPE: Tipo di reddito
- NAME_EDUCATION_TYPE: Livello di istruzione
- NAME_FAMILY_STATUS: Stato civile
- NAME_HOUSING_TYPE: Stile di vita
- DAYS_BIRTH: Numero di giorni indietro fino al compleanno (0), -1 significa ieri
- DAYS_EMPLOYED: Numero di giorni indietro fino alla data di inizio del rapporto di lavoro .Giorno corrente = 0. Se il numero è positivo, indica la persona attualmente disoccupata viceversa se negativo indica che la persona è occupata.
- FLAG_MOBIL: Ha un telefono cellulare
- FLAG_WORK_PHONE: Ha un proprio telefono a lavoro
- FLAG_PHONE: Ha un telefono fisso
- FLAG_EMAIL: Ha un'e-mail
- OCCUPATION_TYPE: Tipo di lavoro
- CNT_FAM_MEMBERS: Dimensione della famiglia
Il dataset credit_record.csv contiene dati relativi a prestiti e crediti fatti al cliente:
- ID: numero identificativo cliente
- MONTHS_BALANCE: Numero di mesi all'indietro rispetto al mese corrente che è 0 , -1 è il mese precedente e così via ...
- STATUS:
- 0: da 1-29 giorni in ritardo nel pagamento
- 1: da 30-59 giorni in ritardo nel pagamento
- 2: da 60-89 giorni in ritardo nel pagamento
- 3: da 90-119 giorni in ritardo nel pagamento
- 4: da 120-149 giorni in ritardo nel pagamento
- 5: Crediti scaduti o inesigibili, cancellazioni per più di 150 giorni
- C: pagato quel mese
- X: Nessun prestito per il mese
Caricamento dati::
credit_record <- read.csv("credit_record.csv")
application_record <- read.csv("application_record.csv")
#Eliminazione records duplicati:
application_record <- unique(application_record, by="ID")
Si stabilisce che chi non paga un credito da più di 60 giorni non è un buon cliente e non merita la carta di credito , per cui (target=1). Invece chi è in ritardo nel pagamento da meno di 60 giorni è un buon cliente e merita la carta di credito (target=0):
# Si crea una nuova variabile target e la si aggiunge al dataset credit_record :
n<-nrow(credit_record)
target <- rep(NA,n)
target[which(credit_record$STATUS=="2")]<- 1
target[which(credit_record$STATUS=="3")]<- 1
target[which(credit_record$STATUS=="4")]<- 1
target[which(credit_record$STATUS=="5")]<- 1
target[which(credit_record$STATUS=="1")]<- 0
target[which(credit_record$STATUS=="0")]<- 0
target[which(credit_record$STATUS=="C")]<- 0
target[which(credit_record$STATUS=="X")]<- 0
credit_record <- cbind(credit_record,target)
Si uniscono i due datasets in un unico dataset df:
df <- merge(application_record,credit_record, by.x = "ID")
df$target <- as.factor(df$target)
Non ci sono valori mancanti nel dataset df :
colSums(is.na(df))