@Test public void testScorecardWithComplexPartialScore() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("ComplexPartialScoreScorecard", ResourceFactory.newClassPathResource(SOURCE_COMPLEX_PARTIAL_SCORE_SCORECARD), null); PMMLRequestData requestData = new PMMLRequestDataBuilder("123", helper.getModelName()) .addParameter("param", 5.0, Double.class) .build(); PMML4Result resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); double score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); Assertions.assertThat(score).isEqualTo(20); requestData = new PMMLRequestData("123", "ComplexPartialScoreScorecard"); requestData.addRequestParam("param", 40.0); resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); Assertions.assertThat(score).isEqualTo(150); requestData = new PMMLRequestData("123", "ComplexPartialScoreScorecard"); requestData.addRequestParam("param", 100.0); resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); Assertions.assertThat(score).isEqualTo(205); }
@Test public void testScorecardWithSimpleSetPredicateWithSpaceValue() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SimpleSetScorecardWithSpaceValue", ResourceFactory.newClassPathResource(SOURCE_SIMPLE_SET_SPACE_VALUE_SCORECARD), null); PMMLRequestData requestData = new PMMLRequestDataBuilder("123", helper.getModelName()) .addParameter("param", "optA", String.class) .build(); PMML4Result resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); double score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); Assertions.assertThat(score).isEqualTo(13); }
@Test public void testScorecardWithSimpleSetPredicate() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SimpleSetScorecard", ResourceFactory.newClassPathResource(SOURCE_SIMPLE_SET_SCORECARD), null);
@Test public void testScorecard() throws Exception { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("Sample Score", ResourceFactory.newClassPathResource(source1), null);
Resource res = ResourceFactory.newClassPathResource(source1); KieBase kbase = new KieHelper().addResource(res, ResourceType.PMML).build(); PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SampleMine", kbase,true); PMMLRequestData request = new PMMLRequestDataBuilder("1234","SampleMine") .addParameter("fld1", 45.0, Double.class)
@Test public void testMissingTree() throws Exception { Resource res = ResourceFactory.newClassPathResource(source2); PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("Missing", res, null); assertNotNull(helper);
@Test public void testSum() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SampleMiningModelSum", ResourceFactory.newClassPathResource(SUMMED), null, true); PMMLRequestData request = new PMMLRequestDataBuilder("1234", helper.getModelName()) .addParameter("petal_length", 6.45, Double.class) .addParameter("petal_width", 1.75, Double.class) .addParameter("sepal_width", 1.23, Double.class) .build(); PMML4Result resultHolder = helper.submitRequest(request); Double sepal_length = resultHolder.getResultValue("Sum_Sepal_length", "value",Double.class).orElse(null); Double total_length = 0.0; for (Iterator<PMML4Result> iter = helper.getResultData().iterator(); iter.hasNext();) { PMML4Result res = iter.next(); if (res.getSegmentationId() != null) { Double segSepalLength = res.getResultValue("Sepal_length", "value", Double.class).orElse(null); if (segSepalLength != null) { total_length += segSepalLength; } } } assertEquals(total_length, sepal_length, 1e-6); } }
@Test public void testSimpleModelChain() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SampleModelChainMine", ResourceFactory.newClassPathResource(source5), null, true); PMMLRequestData request = new PMMLRequestDataBuilder("1234", "SampleModelChainMine") .addParameter("age", 33.0, Double.class) .addParameter("occupation", "TEACHER", String.class) .addParameter("residenceState", "TN", String.class) .addParameter("validLicense", true, Boolean.class) .build(); PMML4Result resultHolder = helper.submitRequest(request); assertEquals("OK",resultHolder.getResultCode()); Map<String,Object> resultVars = resultHolder.getResultVariables(); assertNotNull(resultVars); assertTrue(resultVars.containsKey("QualificationLevel")); assertTrue(resultVars.containsKey("OverallScore")); String qual = resultHolder.getResultValue("QualificationLevel", "value",String.class).orElse(null); Double oscore = resultHolder.getResultValue("OverallScore", "value", Double.class).orElse(null); assertNotNull(qual); assertNotNull(oscore); assertEquals("Well",qual); assertEquals(56.345,oscore,1e-6); }
@Test public void testSimpleScorecard() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SimpleScorecard", ResourceFactory.newClassPathResource(SOURCE_SIMPLE_SCORECARD), null); PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("123", helper.getModelName()) .addParameter("param1", 10.0, Double.class) .addParameter("param2", 15.0, Double.class); PMML4Result resultHolder = helper.submitRequest(rdb.build()); double score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); Assertions.assertThat(score).isEqualTo(40.8); Map<String,Double> rankingMap = (Map<String, Double>) resultHolder.getResultValue("ScoreCard", "ranking"); Assertions.assertThat(rankingMap.get("reasonCh1")).isEqualTo(5); Assertions.assertThat(rankingMap.get("reasonCh2")).isEqualTo(-6); PMMLRequestDataBuilder rdb2 = new PMMLRequestDataBuilder("123", "SimpleScorecard") .addParameter("param1", 51.0, Double.class) .addParameter("param2", 12.0, Double.class); resultHolder = helper.submitRequest(rdb2.build()); score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); Assertions.assertThat(score).isEqualTo(120.8); rankingMap = (Map<String, Double>) resultHolder.getResultValue("ScoreCard", "ranking"); Assertions.assertThat(rankingMap.get("reasonCh1")).isEqualTo(-75); Assertions.assertThat(rankingMap.get("reasonCh2")).isEqualTo(-6); }
@Test public void testSelectFirstSegmentFirst() { Resource res = ResourceFactory.newClassPathResource(source1); PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SampleMine",res,null,true); PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", "SampleMine") .addParameter("fld1", 30.0, Double.class) .addParameter("fld2", 60.0, Double.class) .addParameter("fld3", "false", String.class) .addParameter("fld4", "optA", String.class); PMMLRequestData request = rdb.build(); PMML4Result resultHolder = helper.submitRequest(request); Collection<?> objects = ((InternalRuleUnitExecutor)helper.getExecutor()).getSessionObjects(); objects.forEach(o -> {System.out.println(o);}); helper.getMiningModelPojo().forEach(mmp -> {System.out.println(mmp);}); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals(request.getCorrelationId(),rd.getCorrelationId()); if (rd.getSegmentationId() == null) { assertEquals("OK",rd.getResultCode()); assertNotNull(rd.getResultValue("Fld5", null)); String value = rd.getResultValue("Fld5", "value", String.class).orElse(null); assertEquals("tgtY",value); } }); }
@Test public void testMiningModelSelectFirstRegression() { final Resource res = ResourceFactory.newClassPathResource(PMML_SOURCE); final PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper(MINING_MODEL, res, null, true); final PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", MINING_MODEL); input1.ifPresent(x -> rdb.addParameter(INPUT1_FIELD_NAME, x, Double.class)); input2.ifPresent(x -> rdb.addParameter(INPUT2_FIELD_NAME, x, Double.class)); input3.ifPresent(x -> rdb.addParameter(INPUT3_FIELD_NAME, x, Double.class)); PMMLRequestData request = rdb.build(); helper.submitRequest(request); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals(request.getCorrelationId(), rd.getCorrelationId()); if (rd.getSegmentationId() == null) { assertEquals("OK",rd.getResultCode()); double value = rd.getResultValue(OUTPUT_FIELD_NAME, "value", Double.class).orElse(null); assertNotNull(value); assertEquals(result, value, COMPARISON_DELTA); } }); } }
@Test public void testMiningModelSumRegression() { final Resource res = ResourceFactory.newClassPathResource(PMML_SOURCE); final PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper(MINING_MODEL, res, null, true); final PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", MINING_MODEL) .addParameter(INPUT1_FIELD_NAME, input1, Double.class) .addParameter(INPUT2_FIELD_NAME, input2, Double.class) .addParameter(INPUT3_FIELD_NAME, input3, Double.class); PMMLRequestData request = rdb.build(); helper.submitRequest(request); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals(request.getCorrelationId(), rd.getCorrelationId()); if (rd.getSegmentationId() == null) { assertEquals("OK",rd.getResultCode()); double value = rd.getResultValue(OUTPUT_FIELD_NAME, "value", Double.class).orElse(null); assertNotNull(value); assertEquals(result, value, COMPARISON_DELTA); } }); } }
@Test public void testMiningModelSumRegression() { final Resource res = ResourceFactory.newClassPathResource(PMML_SOURCE); final PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper(MINING_MODEL, res, null, true); final PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", MINING_MODEL); input1.ifPresent(x -> rdb.addParameter(INPUT1_FIELD_NAME, x, Double.class)); input2.ifPresent(x -> rdb.addParameter(INPUT2_FIELD_NAME, x, Double.class)); input3.ifPresent(x -> rdb.addParameter(INPUT3_FIELD_NAME, x, Double.class)); PMMLRequestData request = rdb.build(); helper.submitRequest(request); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals(request.getCorrelationId(), rd.getCorrelationId()); if (rd.getSegmentationId() == null) { assertEquals("OK",rd.getResultCode()); double value = rd.getResultValue(OUTPUT_FIELD_NAME, "value", Double.class).orElse(null); assertNotNull(value); assertEquals(result, value, COMPARISON_DELTA); } }); } }
@Test public void testMiningModelWeightedAverageRegression() { final Resource res = ResourceFactory.newClassPathResource(PMML_SOURCE); final PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper(MINING_MODEL, res, null, true); final PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", MINING_MODEL); input1.ifPresent(x -> rdb.addParameter(INPUT1_FIELD_NAME, x, Double.class)); input2.ifPresent(x -> rdb.addParameter(INPUT2_FIELD_NAME, x, Double.class)); input3.ifPresent(x -> rdb.addParameter(INPUT3_FIELD_NAME, x, Double.class)); PMMLRequestData request = rdb.build(); helper.submitRequest(request); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals(request.getCorrelationId(), rd.getCorrelationId()); if (rd.getSegmentationId() == null) { assertEquals("OK",rd.getResultCode()); double value = rd.getResultValue(OUTPUT_FIELD_NAME, "value", Double.class).orElse(null); assertNotNull(value); assertEquals(result, value, COMPARISON_DELTA); } }); } }
@Test public void testMiningModelSelectFirstTree() { final Resource res = ResourceFactory.newClassPathResource(PMML_SOURCE); final PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper(MINING_MODEL, res, null, true); final PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", MINING_MODEL); input1.ifPresent(x -> rdb.addParameter(INPUT1_FIELD_NAME, x, Double.class)); input2.ifPresent(x -> rdb.addParameter(INPUT2_FIELD_NAME, x, Double.class)); input3.ifPresent(x -> rdb.addParameter(INPUT3_FIELD_NAME, x, String.class)); PMMLRequestData request = rdb.build(); helper.submitRequest(request); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals(request.getCorrelationId(), rd.getCorrelationId()); if (rd.getSegmentationId() == null) { assertEquals("OK",rd.getResultCode()); String value = rd.getResultValue(OUTPUT_FIELD_NAME, "value", String.class).orElse(null); assertNotNull(value); assertEquals(output, value); } }); } }
@Test public void testScorecardOutputs() throws Exception { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SampleScorecard", ResourceFactory.newClassPathResource(source2), null); PMMLRequestData requestData = new PMMLRequestDataBuilder("123", helper.getModelName()) .addParameter("cage", "engineering", String.class) .addParameter("age", 25, Integer.class) .addParameter("wage", 500.00, Double.class) .build(); PMML4Result resultHolder = helper.submitRequest(requestData); assertEquals("OK",resultHolder.getResultCode()); assertEquals(6,resultHolder.getResultVariables().size()); assertNotNull(resultHolder.getResultValue("OutRC1", null)); assertNotNull(resultHolder.getResultValue("OutRC2", null)); assertNotNull(resultHolder.getResultValue("OutRC3", null)); assertEquals("RC2",resultHolder.getResultValue("OutRC1", "value")); assertEquals("RC1",resultHolder.getResultValue("OutRC2", "value")); assertEquals("RC1",resultHolder.getResultValue("OutRC3", "value")); }
@Test public void testMiningModelSelectAllRegression() { final Resource res = ResourceFactory.newClassPathResource(PMML_SOURCE); final PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper(MINING_MODEL, res, null, true); final PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder("1234", MINING_MODEL) .addParameter(INPUT1_FIELD_NAME, input1, Double.class) .addParameter(INPUT2_FIELD_NAME, input2, Double.class) .addParameter(INPUT3_FIELD_NAME, input3, Double.class); PMMLRequestData request = rdb.build(); helper.submitRequest(request); final Map<String, Double> expected = expectedResults(input1, input2, input3); final Map<String, Double> executedSegments = new HashMap<>(); for (Iterator<SegmentExecution> iter = helper.getChildModelSegments().iterator(); iter.hasNext(); ) { SegmentExecution cms = iter.next(); executedSegments.put(cms.getSegmentId(), cms.getResult().getResultValue(OUTPUT_FIELD_NAME, "value", Double.class).orElse(null)); } compareMaps(expected, executedSegments); }
@Test public void testTreeWithSurrogatePredicate() { Resource res = ResourceFactory.newClassPathResource(treeWithSurrogate); PMML4ExecutionHelper helper = PMML4ExecutionHelper.PMML4ExecutionHelperFactory .getExecutionHelper("SampleMine", res, null, false); helper.initModel(); PMMLRequestDataBuilder rdb = new PMMLRequestDataBuilder(correlationId, "SampleMine"); temperature.ifPresent( t -> rdb.addParameter("temperature", t, Double.class)); humidity.ifPresent( h -> rdb.addParameter("humidity", h, Double.class)); PMMLRequestData request = rdb.build(); helper.submitRequest(request); helper.getResultData().iterator().forEachRemaining(rd -> { assertEquals("OK",rd.getResultCode()); assertEquals(correlationId,rd.getCorrelationId()); String value = rd.getResultValue("Decision", "value", String.class).orElse(null); assertEquals(decision, value); }); } }
@Test public void testWeightedAverage() { PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("SampleMiningModelAvg", ResourceFactory.newClassPathResource(WEIGHTED_AVG), null, true); PMMLRequestData request = new PMMLRequestDataBuilder("1234", helper.getModelName()) .addParameter("petal_length", 6.45, Double.class) .addParameter("petal_width", 1.75, Double.class) .addParameter("sepal_width", 1.23, Double.class) .build(); PMML4Result resultHolder = helper.submitRequest(request); Double sepal_length = resultHolder.getResultValue("Sepal_length", "value",Double.class).orElse(null); assertEquals(7.1833385,sepal_length,1e-6); Double weight = resultHolder.getResultValue("Sepal_length", "weight", Double.class).orElse(null); assertEquals(1.00, weight, 1e-2); }
@Test public void testMissingTreeWeighted1() throws Exception { Resource res = ResourceFactory.newClassPathResource(source2); PMML4ExecutionHelper helper = PMML4ExecutionHelperFactory.getExecutionHelper("Missing", res, null); assertNotNull(helper); PMMLRequestData requestData = new PMMLRequestData("123","Missing"); requestData.addRequestParam(new ParameterInfo<>("123","fld1", Double.class, -1.0)); requestData.addRequestParam(new ParameterInfo<>("123","fld2", Double.class, -1.0)); requestData.addRequestParam(new ParameterInfo<>("123","fld3", String.class, "optA")); PMML4Result resultHolder = helper.submitRequest(requestData); AbstractTreeToken missingTreeToken = (AbstractTreeToken) resultHolder.getResultValue("MissingTreeToken", null); assertNotNull(missingTreeToken); assertEquals(0.8, missingTreeToken.getConfidence(), 0.0); assertEquals("null", missingTreeToken.getCurrent()); assertEquals(50.0, missingTreeToken.getTotalCount(), 0.0); Object fld9 = resultHolder.getResultValue("Fld9", null); assertNotNull(fld9); String value = (String)resultHolder.getResultValue("Fld9", "value"); assertNotNull(value); assertEquals("tgtX",value); }