Examples

Building a scoring card

Example 40.1. Building scoring card

# 1st stage: data preparation
input_data_name = 'german_credit'

if not tableExists(input_data_name):
 raise "Table "+input_data_name+" does not exists. Please run "+input_data_name+".gy script from data directory first"

pd = PhysicalData(input_data_name)
save(input_data_name+'_physical_data', pd)
ld = LogicalData(pd)
save(input_data_name+'_logical_data', ld)

# 2nd stage: modeling
# --- Building regression model---

logRegFunSett = ClassificationFunctionSettings()
logRegFunSett.setLogicalData(ld)
logRegFunSett.getAttributeUsageSet().getAttribute('Class').setUsage(UsageOption.target)
regressionAlgorithmSett = LogisticRegressionSettings()

logRegFunSett.setAlgorithmSettings(regressionAlgorithmSett)
save('logisticRegressionFunctionSettings',logRegFunSett)

logRegBuildTask = MiningBuildTask()
logRegBuildTask.setBuildDataName(input_data_name+'_physical_data')
logRegBuildTask.setFunctionSettingsName('logisticRegressionFunctionSettings')
logRegBuildTask.setModelName('scoringCardRegressionModel')
save('logisticRegreesionBuildTask',logRegBuildTask)
execute('logisticRegreesionBuildTask')

#--- building the scoring card ---

scrCardSett = ScoringCardSettings()
scrCardSett.setLogicalData(ld)
scrCardSett.setRegressionModelName('scoringCardRegressionModel')
scrCardSett.getAttributeUsageSet().getAttribute('Class').setUsage(UsageOption.target)
save('scoringCardFunctionSettings',scrCardSett)

scrCardBuildTask = MiningBuildTask()
scrCardBuildTask.setBuildDataName(input_data_name+'_physical_data')
scrCardBuildTask.setFunctionSettingsName('scoringCardFunctionSettings')
scrCardBuildTask.setModelName('scoringCardModel')
save('scoringCardBuildTask',scrCardBuildTask)
execute('scoringCardBuildTask')

model = load('scoringCardModel')
cardData = model.getModelStatistics().getCardData()
cardCat = cardData.getAttribute('age').getCategories()
print "Levels for 'age' attribute:"
print "%-20s%-20s%-15s%-15s%-15s" % ("'Category Name'", "'Custom Points'", "'Points'", "'Weight'", "'Being good'")
for category in cardCat:
        print "%-20s%-20.2f%-15.2f%-15.2f%-15.2f" % (category, category.getExpertPoints(),category.getBasePoints(),category.getWeightOfEvidence(),category.getChanceOfBeingGood())
    

Output:

Levels for 'age' attribute:
'Category Name'     'Custom Points'     'Points'       'Weight'       'Being good'   
( -Infinity; 26.000 )0.00                21.00          0.53           1.70           
< 26.000; 30.000 )  0.00                18.00          0.07           1.07           
< 30.000; 36.000 )  0.00                15.00          -0.09          0.91           
< 36.000; 45.000 )  0.00                10.00          -0.27          0.76           
< 45.000; Infinity )0.00                0.00           -0.26          0.77           
No Information      0.00                13.00          ?              ?              
No Answer           0.00                0.00           ?              ?              
    

Testing a scoring card

Example 40.2. Testing a scoring card

classTestTask = ClassificationTestTask()
classTestTask.setTestResultName("scoringCardTestResult")
classTestTask.setModelName("scoringCardModel") 
classTestTask.setTestDataName("german_credit_physical_data")
classTestTask.setPositiveBinaryTargetThreshold(92)
classTestTask.setPositiveTargetValue("good")
classTestTask.setTestDataTargetAttributeName("Class")

save('classTestTaskForScoringCard',classTestTask)
execute('classTestTaskForScoringCard')

scrCardTestRes = load('scoringCardTestResult')
print scrCardTestRes.getConfusionMatrix()
    

Output:

bad good 
bad 0.0 300.0 
good 0.0 700.0 
    

Applying a scoring card

Example 40.3. Applying scoring card

apply_pd = PhysicalData('german_credit_apply_result')
save('german_credit_apply_pd', apply_pd )

scrCardAppTask = MiningApplyTask()
scrCardAppTask.modelName = 'scoringCardModel'
scrCardAppTask.sourceDataName = 'german_credit_physical_data'
scrCardAppTask.targetDataName = 'german_credit_apply_pd'
scrCardAppTask.replaceExistingData = TRUE

directMapping = java.util.ArrayList()
directMapping.add( ApplySourceItem('Class','real_target') )
scrCardAppTask.setDirectMapping(directMapping)

scrCardAppOutput = ClassificationApplyOutput()
scrCardAppOutput.item.add(ClassificationRankItem('predicted_target',ClassificationOutputType.\
predictedCategory , 0))

scrCardAppOutput.item.add(ClassificationCategoryItem('score',ClassificationOutputType.\
probability , 'good'))


scrCardAppTask.applyOutput = scrCardAppOutput

save('scrCard_apply_task',scrCardAppTask)
execute('scrCard_apply_task')

print "Printing first 10 rows of 'german_credit_apply_result' table"
strFormat = "%-20s%-20s%-20s"
print strFormat % ("real_target","predicted_target", "score");
counter = 0
trans None <- 'german_credit_apply_result':
    print $strFormat %( real_target,predicted_target, score)
    $counter+=1
    if ($counter == 10):
        __exit__ = 1
    

Output:

Printing first 10 rows of 'german_credit_apply_result' table
real_target         predicted_target    score               
good                good                394.0               
bad                 bad                 569.0               
good                good                372.0               
good                bad                 482.0               
bad                 bad                 615.0               
good                bad                 496.0               
good                good                414.0               
good                bad                 514.0               
good                good                340.0               
bad                 bad                 621.0