A typical end-to-end workflow using scorecardpy follows these steps:
- Prepare Data: Load data and filter variables using
sc.var_filter. - Split Data: Use
sc.split_df to create training and testing sets. - Binning: Perform WOE binning with
sc.woebin and transform data with sc.woebin_ply. - Modeling: Train a logistic regression model (e.g., using
sklearn.linear_model.LogisticRegression) on the WOE-transformed training data. - Evaluation: Evaluate performance using
sc.perf_eva and check stability with sc.perf_psi. - Scaling: Generate a scorecard using
sc.scorecard and apply it to raw data using sc.scorecard_ply to get final credit scores.
import scorecardpy as sc
from sklearn.linear_model import LogisticRegression
# 1. Data Preparation
dat = sc.germancredit()
dt_s = sc.var_filter(dat, y="creditability")
train, test = sc.split_df(dt_s, 'creditability').values()
# 2. WOE Binning
bins_adj = sc.woebin(dt_s, y="creditability")
train_woe = sc.woebin_ply(train, bins_adj)
test_woe = sc.woebin_ply(test, bins_adj)
y_train = train_woe.loc[:,'creditability']
X_train = train_woe.loc[:,train_woe.columns != 'creditability']
y_test = test_woe.loc[:,'creditability']
X_test = test_woe.loc[:,train_woe.columns != 'creditability']
# 3. Logistic Regression
lr = LogisticRegression(penalty='l1', C=0.9, solver='saga', n_jobs=-1)
lr.fit(X_train, y_train)
# 4. Performance Evaluation
train_pred = lr.predict_proba(X_train)[:,1]
test_pred = lr.predict_proba(X_test)[:,1]
sc.perf_eva(y_train, train_pred, title = "train")
sc.perf_eva(y_test, test_pred, title = "test")
# 5. Scorecard Scaling
card = sc.scorecard(bins_adj, lr, X_train.columns)
train_score = sc.scorecard_ply(train, card, print_step=0)
test_score = sc.scorecard_ply(test, card, print_step=0)
# 6. PSI
sc.perf_psi(
score = {'train':train_score, 'test':test_score},
label = {'train':y_train, 'test':y_test}
)