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