Applicazioni pratiche di machine learning/Approvazione carte di credito: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
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))