This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

# Reading into data frames and loading required packages
library(dplyr)
library(ggplot2)
library(rpart)
setwd("/home/ankit/loan_pred/")
train <- read.csv("train_u6lujuX_CVtuZ9i.csv",na.strings = c("","NaN"," "))
test <- read.csv("test_Y3wMUE5_7gLdaTN.csv",na.strings = c("","NaN"," "))
test$Loan_Status <- as.factor("NA")
#Combining training and test set 
df.loan <- rbind(train[,2:13],test[,2:13])
#Missing values Summary
Variable <- colnames(df.loan)
NA_count <- sapply(df.loan, function(x) sum(is.na(x)))
miss_summ <- data.frame(Variable,NA_count,row.names = NULL)
miss_summ %>%
  arrange(desc(NA_count))
#Treatment of missing values
df.loan$Self_Employed[is.na(df.loan$Self_Employed)] = as.factor("No")
#Treatment of missing values in Loan Amount Term
df.loan$Loan_Amount_Term[is.na(df.loan$Loan_Amount_Term)] = 360
df.loan %>%
  group_by(Education,Self_Employed) %>%
  summarise(GroupMedian = mean(LoanAmount,na.rm = TRUE))
#imputing missing loan amount using sub categories
ind <- which(is.na(df.loan$LoanAmount))
df.loan[ind,]$LoanAmount[df.loan[ind,]$Education == "Graduate" & df.loan[ind,]$Self_Employed == "No"] <- 145.82
df.loan[ind,]$LoanAmount[df.loan[ind,]$Education == "Graduate" & df.loan[ind,]$Self_Employed == "Yes"] <- 174.24
df.loan[ind,]$LoanAmount[df.loan[ind,]$Education == "Not Graduate" & df.loan[ind,]$Self_Employed == "No"] <- 116.7
df.loan[ind,]$LoanAmount[df.loan[ind,]$Education == "Not Graduate" & df.loan[ind,]$Self_Employed == "Yes"] <- 131.56
#Credit History is a high impact variable
df.loan$Credit_History = as.character(df.loan$Credit_History)
df.loan$Credit_History[is.na(df.loan$Credit_History)] = "Not Available"
df.loan$Credit_History = as.factor(df.loan$Credit_History)
#Married Missing Values
df.loan$Married[is.na(df.loan$Married)] = as.factor("Yes")
#Gender Missing Values
df.loan$Gender[is.na(df.loan$Gender)] = as.factor("Male")
#Dependents Missing Values
df.loan$Dependents[is.na(df.loan$Dependents)] = as.factor("0")
cat("There are total", sum(is.na(df.loan)), "missing values in the dataset")
There are total 0 missing values in the dataset
#Feature Engineering
df.loan$TotalIncome <- log(df.loan$ApplicantIncome + df.loan$CoapplicantIncome)
df.loan$TotalIncomeLoanRatio = log(((df.loan$ApplicantIncome + df.loan$CoapplicantIncome)/df.loan$LoanAmount)*(as.numeric(df.loan$Loan_Amount_Term)/360))
df.loan$LoanAmount <- log(df.loan$LoanAmount)
df.loan <- df.loan[,!(names(df.loan)) %in% c("ApplicantIncome","CoapplicantIncome")]
#Applying Logistic Regression Model
train_up<- df.loan[1:614,]
test <- df.loan[615:981,]
model <- glm(train_up$Loan_Status~.,family = binomial(link = 'logit'),data = train_up, maxit = 100)
summary(model)

Call:
glm(formula = train_up$Loan_Status ~ ., family = binomial(link = "logit"), 
    data = train_up, maxit = 100)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.4183  -0.3598   0.5282   0.7127   2.5599  

Coefficients:
                             Estimate Std. Error z value Pr(>|z|)    
(Intercept)                  0.716037   2.579441   0.278 0.781324    
GenderMale                  -0.059115   0.299718  -0.197 0.843644    
MarriedYes                   0.578602   0.253580   2.282 0.022505 *  
Dependents1                 -0.458598   0.294184  -1.559 0.119024    
Dependents2                  0.262808   0.342942   0.766 0.443479    
Dependents3+                -0.040294   0.415204  -0.097 0.922691    
EducationNot Graduate       -0.385218   0.261564  -1.473 0.140819    
Self_EmployedYes            -0.003002   0.318704  -0.009 0.992484    
LoanAmount                   1.039985   0.939875   1.107 0.268504    
Loan_Amount_Term            -0.007592   0.004689  -1.619 0.105438    
Credit_History1              3.951997   0.422452   9.355  < 2e-16 ***
Credit_HistoryNot Available  3.771899   0.532372   7.085 1.39e-12 ***
Property_AreaSemiurban       0.927540   0.270537   3.429 0.000607 ***
Property_AreaUrban           0.206313   0.260248   0.793 0.427921    
TotalIncome                 -1.312866   0.936333  -1.402 0.160875    
TotalIncomeLoanRatio         1.358687   0.872269   1.558 0.119317    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 762.89  on 613  degrees of freedom
Residual deviance: 558.03  on 598  degrees of freedom
AIC: 590.03

Number of Fisher Scoring iterations: 5
#Fitting the Model
fitted_results <- predict(model, newdata=test, type="response")
fitted_results <- ifelse(fitted_results > 0.5,"Y","N")
test_up <- read.csv("test_Y3wMUE5_7gLdaTN.csv", stringsAsFactors = TRUE)
submit <- data.frame(Loan_ID = test_up$Loan_ID, Loan_Status = fitted_results)
write.csv(submit,"/home/ankit/loan_pred/1405_sub_1.csv",row.names = FALSE)

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

LS0tCnRpdGxlOiAiTG9hbiBQcmVkaWN0aW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpUaGlzIGlzIGFuIFtSIE1hcmtkb3duXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vay4gV2hlbiB5b3UgZXhlY3V0ZSBjb2RlIHdpdGhpbiB0aGUgbm90ZWJvb2ssIHRoZSByZXN1bHRzIGFwcGVhciBiZW5lYXRoIHRoZSBjb2RlLiAKClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDdHJsK1NoaWZ0K0VudGVyKi4gCgpgYGB7cn0KIyBSZWFkaW5nIGludG8gZGF0YSBmcmFtZXMgYW5kIGxvYWRpbmcgcmVxdWlyZWQgcGFja2FnZXMKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHJwYXJ0KQpzZXR3ZCgiL2hvbWUvYW5raXQvbG9hbl9wcmVkLyIpCnRyYWluIDwtIHJlYWQuY3N2KCJ0cmFpbl91Nmx1anVYX0NWdHVaOWkuY3N2IixuYS5zdHJpbmdzID0gYygiIiwiTmFOIiwiICIpKQp0ZXN0IDwtIHJlYWQuY3N2KCJ0ZXN0X1kzd01VRTVfN2dMZGFUTi5jc3YiLG5hLnN0cmluZ3MgPSBjKCIiLCJOYU4iLCIgIikpCnRlc3QkTG9hbl9TdGF0dXMgPC0gYXMuZmFjdG9yKCJOQSIpCgoKYGBgCgoKYGBge3J9CiNDb21iaW5pbmcgdHJhaW5pbmcgYW5kIHRlc3Qgc2V0IApkZi5sb2FuIDwtIHJiaW5kKHRyYWluWywyOjEzXSx0ZXN0WywyOjEzXSkKCiNNaXNzaW5nIHZhbHVlcyBTdW1tYXJ5ClZhcmlhYmxlIDwtIGNvbG5hbWVzKGRmLmxvYW4pCk5BX2NvdW50IDwtIHNhcHBseShkZi5sb2FuLCBmdW5jdGlvbih4KSBzdW0oaXMubmEoeCkpKQptaXNzX3N1bW0gPC0gZGF0YS5mcmFtZShWYXJpYWJsZSxOQV9jb3VudCxyb3cubmFtZXMgPSBOVUxMKQptaXNzX3N1bW0gJT4lCiAgYXJyYW5nZShkZXNjKE5BX2NvdW50KSkKCmBgYAoKCmBgYHtyfQojVHJlYXRtZW50IG9mIG1pc3NpbmcgdmFsdWVzCmRmLmxvYW4kU2VsZl9FbXBsb3llZFtpcy5uYShkZi5sb2FuJFNlbGZfRW1wbG95ZWQpXSA9IGFzLmZhY3RvcigiTm8iKQoKI1RyZWF0bWVudCBvZiBtaXNzaW5nIHZhbHVlcyBpbiBMb2FuIEFtb3VudCBUZXJtCmRmLmxvYW4kTG9hbl9BbW91bnRfVGVybVtpcy5uYShkZi5sb2FuJExvYW5fQW1vdW50X1Rlcm0pXSA9IDM2MAoKZGYubG9hbiAlPiUKICBncm91cF9ieShFZHVjYXRpb24sU2VsZl9FbXBsb3llZCkgJT4lCiAgc3VtbWFyaXNlKEdyb3VwTWVkaWFuID0gbWVkaWFuKExvYW5BbW91bnQsbmEucm0gPSBUUlVFKSkKCiNpbXB1dGluZyBtaXNzaW5nIGxvYW4gYW1vdW50IHVzaW5nIHN1YiBjYXRlZ29yaWVzCmluZCA8LSB3aGljaChpcy5uYShkZi5sb2FuJExvYW5BbW91bnQpKQpkZi5sb2FuW2luZCxdJExvYW5BbW91bnRbZGYubG9hbltpbmQsXSRFZHVjYXRpb24gPT0gIkdyYWR1YXRlIiAmIGRmLmxvYW5baW5kLF0kU2VsZl9FbXBsb3llZCA9PSAiTm8iXSA8LSAxMzAKZGYubG9hbltpbmQsXSRMb2FuQW1vdW50W2RmLmxvYW5baW5kLF0kRWR1Y2F0aW9uID09ICJHcmFkdWF0ZSIgJiBkZi5sb2FuW2luZCxdJFNlbGZfRW1wbG95ZWQgPT0gIlllcyJdIDwtIDE1MApkZi5sb2FuW2luZCxdJExvYW5BbW91bnRbZGYubG9hbltpbmQsXSRFZHVjYXRpb24gPT0gIk5vdCBHcmFkdWF0ZSIgJiBkZi5sb2FuW2luZCxdJFNlbGZfRW1wbG95ZWQgPT0gIk5vIl0gPC0gMTE3CmRmLmxvYW5baW5kLF0kTG9hbkFtb3VudFtkZi5sb2FuW2luZCxdJEVkdWNhdGlvbiA9PSAiTm90IEdyYWR1YXRlIiAmIGRmLmxvYW5baW5kLF0kU2VsZl9FbXBsb3llZCA9PSAiWWVzIl0gPC0gMTMwCgojQ3JlZGl0IEhpc3RvcnkgaXMgYSBoaWdoIGltcGFjdCB2YXJpYWJsZQpkZi5sb2FuJENyZWRpdF9IaXN0b3J5ID0gYXMuY2hhcmFjdGVyKGRmLmxvYW4kQ3JlZGl0X0hpc3RvcnkpCmRmLmxvYW4kQ3JlZGl0X0hpc3RvcnlbaXMubmEoZGYubG9hbiRDcmVkaXRfSGlzdG9yeSldID0gIk5vdCBBdmFpbGFibGUiCmRmLmxvYW4kQ3JlZGl0X0hpc3RvcnkgPSBhcy5mYWN0b3IoZGYubG9hbiRDcmVkaXRfSGlzdG9yeSkKCiNNYXJyaWVkIE1pc3NpbmcgVmFsdWVzCmRmLmxvYW4kTWFycmllZFtpcy5uYShkZi5sb2FuJE1hcnJpZWQpXSA9IGFzLmZhY3RvcigiWWVzIikKCiNHZW5kZXIgTWlzc2luZyBWYWx1ZXMKZGYubG9hbiRHZW5kZXJbaXMubmEoZGYubG9hbiRHZW5kZXIpXSA9IGFzLmZhY3RvcigiTWFsZSIpCgojRGVwZW5kZW50cyBNaXNzaW5nIFZhbHVlcwpkZi5sb2FuJERlcGVuZGVudHNbaXMubmEoZGYubG9hbiREZXBlbmRlbnRzKV0gPSBhcy5mYWN0b3IoIjAiKQoKYGBgCmBgYHtyfQoKCmNhdCgiVGhlcmUgYXJlIHRvdGFsIiwgc3VtKGlzLm5hKGRmLmxvYW4pKSwgIm1pc3NpbmcgdmFsdWVzIGluIHRoZSBkYXRhc2V0IikKCmBgYAoKCgoKYGBge3J9CiNGZWF0dXJlIEVuZ2luZWVyaW5nCmRmLmxvYW4kVG90YWxJbmNvbWUgPC0gbG9nKGRmLmxvYW4kQXBwbGljYW50SW5jb21lICsgZGYubG9hbiRDb2FwcGxpY2FudEluY29tZSkKZGYubG9hbiRUb3RhbEluY29tZUxvYW5SYXRpbyA9IGxvZygoKGRmLmxvYW4kQXBwbGljYW50SW5jb21lICsgZGYubG9hbiRDb2FwcGxpY2FudEluY29tZSkvZGYubG9hbiRMb2FuQW1vdW50KSooYXMubnVtZXJpYyhkZi5sb2FuJExvYW5fQW1vdW50X1Rlcm0pLzM2MCkpCmRmLmxvYW4kTG9hbkFtb3VudCA8LSBsb2coZGYubG9hbiRMb2FuQW1vdW50KQpkZi5sb2FuIDwtIGRmLmxvYW5bLCEobmFtZXMoZGYubG9hbikpICVpbiUgYygiQXBwbGljYW50SW5jb21lIiwiQ29hcHBsaWNhbnRJbmNvbWUiKV0KCmBgYAoKCmBgYHtyfQojQXBwbHlpbmcgTG9naXN0aWMgUmVncmVzc2lvbiBNb2RlbAp0cmFpbl91cDwtIGRmLmxvYW5bMTo2MTQsXQp0ZXN0IDwtIGRmLmxvYW5bNjE1Ojk4MSxdCm1vZGVsIDwtIGdsbSh0cmFpbl91cCRMb2FuX1N0YXR1c34uLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAnbG9naXQnKSxkYXRhID0gdHJhaW5fdXAsIG1heGl0ID0gMTAwKQpzdW1tYXJ5KG1vZGVsKQpgYGAKCmBgYHtyfQojRml0dGluZyB0aGUgTW9kZWwKZml0dGVkX3Jlc3VsdHMgPC0gcHJlZGljdChtb2RlbCwgbmV3ZGF0YT10ZXN0LCB0eXBlPSJyZXNwb25zZSIpCmZpdHRlZF9yZXN1bHRzIDwtIGlmZWxzZShmaXR0ZWRfcmVzdWx0cyA+IDAuNSwiWSIsIk4iKQp0ZXN0X3VwIDwtIHJlYWQuY3N2KCJ0ZXN0X1kzd01VRTVfN2dMZGFUTi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSkKc3VibWl0IDwtIGRhdGEuZnJhbWUoTG9hbl9JRCA9IHRlc3RfdXAkTG9hbl9JRCwgTG9hbl9TdGF0dXMgPSBmaXR0ZWRfcmVzdWx0cykKd3JpdGUuY3N2KHN1Ym1pdCwiL2hvbWUvYW5raXQvbG9hbl9wcmVkLzE0MDVfc3ViXzEuY3N2Iixyb3cubmFtZXMgPSBGQUxTRSkKCmBgYAoKQWRkIGEgbmV3IGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqSW5zZXJ0IENodW5rKiBidXR0b24gb24gdGhlIHRvb2xiYXIgb3IgYnkgcHJlc3NpbmcgKkN0cmwrQWx0K0kqLgoKV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuCg==