Пример #1
0
 protected List<Rule> createRuleList(PMML pmmlDocument) {
   List<Rule> ruleList = new ArrayList<Rule>();
   for (Object obj : pmmlDocument.getAssociationModelsAndBaselineModelsAndClusteringModels()) {
     if (obj instanceof Scorecard) {
       Scorecard scorecard = (Scorecard) obj;
       Characteristics characteristics = getCharacteristicsFromScorecard(scorecard);
       createInitialRule(ruleList, scorecard);
       for (org.dmg.pmml.pmml_4_1.descr.Characteristic c : characteristics.getCharacteristics()) {
         int attributePosition = 0;
         for (org.dmg.pmml.pmml_4_1.descr.Attribute scoreAttribute : c.getAttributes()) {
           String name =
               formRuleName(
                   pmmlDocument, scorecard.getModelName().replaceAll(" ", ""), c, scoreAttribute);
           Rule rule = new Rule(name, 99, 1);
           String desc =
               ScorecardPMMLUtils.getExtensionValue(scoreAttribute.getExtensions(), "description");
           if (desc != null) {
             rule.setDescription(desc);
           }
           attributePosition++;
           populateLHS(rule, pmmlDocument, scorecard, c, scoreAttribute);
           populateRHS(rule, pmmlDocument, scorecard, c, scoreAttribute, attributePosition);
           ruleList.add(rule);
         }
       }
       createSummationRules(ruleList, scorecard);
     }
   }
   return ruleList;
 }
Пример #2
0
  protected void createInitialRule(List<Rule> ruleList, Scorecard scorecard) {
    if (scorecard.getInitialScore() > 0 || scorecard.isUseReasonCodes()) {
      String objectClass = scorecard.getModelName().replaceAll(" ", "");
      String ruleName = objectClass + "_init";
      Rule rule = new Rule(ruleName, 999, 1);
      rule.setDescription("set the initial score");

      Condition condition = createInitialRuleCondition(scorecard, objectClass);
      rule.addCondition(condition);
      if (scorecard.getInitialScore() > 0) {
        Consequence consequence = new Consequence();
        // consequence.setSnippet("$sc.setInitialScore(" + scorecard.getInitialScore() + ");");
        consequence.setSnippet(
            "insertLogical(new InitialScore(\""
                + objectClass
                + "\","
                + scorecard.getInitialScore()
                + "));");
        rule.addConsequence(consequence);
      }
      if (scorecard.isUseReasonCodes()) {
        for (Object obj : scorecard.getExtensionsAndCharacteristicsAndMiningSchemas()) {
          if (obj instanceof Characteristics) {
            Characteristics characteristics = (Characteristics) obj;
            for (Characteristic characteristic : characteristics.getCharacteristics()) {
              String field = ScorecardPMMLUtils.extractFieldNameFromCharacteristic(characteristic);
              Consequence consequence = new Consequence();
              if (characteristic.getBaselineScore() == null
                  || characteristic.getBaselineScore() == 0) {
                consequence.setSnippet(
                    "insertLogical(new BaselineScore(\""
                        + objectClass
                        + "\",\""
                        + field
                        + "\","
                        + scorecard.getBaselineScore()
                        + "));");
                // consequence.setSnippet("$sc.setBaselineScore(\"" + field +
                // "\","+scorecard.getBaselineScore()+");");
              } else {
                consequence.setSnippet(
                    "insertLogical(new BaselineScore(\""
                        + objectClass
                        + "\",\""
                        + field
                        + "\","
                        + characteristic.getBaselineScore()
                        + "));");
                // consequence.setSnippet("$sc.setBaselineScore(\"" + field +
                // "\","+characteristic.getBaselineScore()+");");
              }
              rule.addConsequence(consequence);
            }
          }
        }
        if (scorecard.getReasonCodeAlgorithm() != null) {
          Consequence consequence = new Consequence();
          if ("pointsAbove".equalsIgnoreCase(scorecard.getReasonCodeAlgorithm())) {
            // TODO: ReasonCode Algorithm
            consequence.setSnippet(
                "//$sc.setReasonCodeAlgorithm(DroolsScorecard.REASON_CODE_ALGORITHM_POINTSABOVE);");
          } else if ("pointsBelow".equalsIgnoreCase(scorecard.getReasonCodeAlgorithm())) {
            consequence.setSnippet(
                "//$sc.setReasonCodeAlgorithm(DroolsScorecard.REASON_CODE_ALGORITHM_POINTSBELOW);");
          }
          rule.addConsequence(consequence);
        }
      }
      ruleList.add(rule);
    }
  }