I tried developing a scorecard to assess creditworthiness using the "Scorecard" package on R. The problem I encountered is when I scale the card and calculate the points for each attribute of each characteristic: when I calculate the score through the package I get one score, but when I do the scaling myself and calculate the score manually I get another score. I'm not sure if the package uses a different methodology or if I did something wrong.
Here's the code of the calculation done through the package:
library(scorecard) # load germancredit data data("germancredit") summary(germancredit) # filter attributes: filtered_data = var_filter(germancredit, y="creditability") # breaking data into train and test by creating two sub-objects "Train" and "Test" using the split function dt_list = split_df(filtered_data, y="creditability", ratio = 0.6, seed = 30) #Storing the two sub-objects created by last function in separate variables train = dt_list$train test = dt_list$test # Automatic Optimal WoE binning binned_data = woebin(filtered_data, y="creditability") #adjusting breaks breaks_adj = list( age.in.years=c(26, 35, 40), other.debtors.or.guarantors=c("none", "co-applicant%,%guarantor")) bins_adj = woebin(filtered_data, y="creditability", breaks_list=breaks_adj) # Converting train and test into WoE values: all values of each attributes # are replaced by their respective WoE values already calculated train_woe = woebin_ply(train, bins_adj) test_woe = woebin_ply(test, bins_adj) # Logistic Regression applied to the training data that we converted to WoE values: m1 = glm( creditability ~ ., family = binomial(), data = train_woe) # Show estimated coefficients and significance level of each attribute: summary(m1) # Scorecard Scaling & final card: card = scorecard(bins = binned_data, m1, points0 = 600, odds0 = 50, pdo = 20)
But when I calculate the score manually for example for the attribute "Rent" of the "Housing" characteristic as such (following Siddiqi (2006), Credit Risk Scorecards):
#for rent attribute: Housing_coeff = 0.120110 rent_woe = 0.4044452 intercept = -0.9419 num_of_charac = 14 pdo = 20 factor = pdo/log(2) offset = 600 - (factor*log(50)) #Score rent (Housing_coeff*rent_woe + (intercept/num_of_charac) ) * factor + (offset/num_of_charac)
I have a way different score than the one given by the package. Also some of the scores given by the package are negative and I don't know if that's supposed to be.