/** * Submits a request to the rule unit executor and the model gets applied * NOTE: The results of previous submissions will be overwritten * @param request * @return * @throws InvalidParameterException * @throws IllegalStateException */ public synchronized PMML4Result submitRequest(PMMLRequestData request) throws InvalidParameterException, IllegalStateException { return submitRequest(request,null); }
public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources) { return new PMML4ExecutionHelper(modelName, content, kieBaseConf, includeMiningDataSources); }
protected List<String> calculatePossiblePackageNames() { return calculatePossiblePackageNames(modelName, possiblePackageNames.toArray(new String[]{})); }
.addParameter("validLicense", true, Boolean.class) .build(); PMML4Result resultHolder = helper.submitRequest(request); helper.getResultData().forEach(rd -> { assertEquals("OK",rd.getResultCode()); assertEquals(request.getCorrelationId(),rd.getCorrelationId()); for (Iterator<SegmentExecution> iter = helper.getChildModelSegments().iterator(); iter.hasNext(); ) { SegmentExecution cms = iter.next(); assertEquals(request.getCorrelationId(), cms.getCorrelationId());
@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 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 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 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 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 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); }
.addParameter("validLicense", true, Boolean.class) .build(); helper.addPossiblePackageName("org.drools.scorecards.example"); PMML4Result resultHolder = helper.submitRequest(request);
ruleUnitClass = getStartingRuleUnit(startingRuleName);
.addParameter("validLicense", true, Boolean.class) .build(); PMML4Result resultHolder = helper.submitRequest(request); helper.getResultData().forEach(rd -> { assertEquals(request.getCorrelationId(),rd.getCorrelationId()); assertEquals("OK",rd.getResultCode()); for (Iterator<SegmentExecution> iter = helper.getChildModelSegments().iterator(); iter.hasNext(); ) { SegmentExecution cms = iter.next(); assertEquals(request.getCorrelationId(), cms.getCorrelationId());
@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 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); } }); } }
.addParameter("fld3r", "x", String.class) .build(); PMML4Result resultHolder = helper.submitRequest(request); helper.getResultData().forEach(rd -> { assertEquals(request.getCorrelationId(),rd.getCorrelationId()); assertEquals("OK",rd.getResultCode()); for (Iterator<SegmentExecution> iter = helper.getChildModelSegments().iterator(); iter.hasNext(); ) { SegmentExecution cms = iter.next(); assertEquals(request.getCorrelationId(), cms.getCorrelationId());
null); PMMLRequestData requestData = new PMMLRequestDataBuilder("123", helper.getModelName()) .addParameter("param1", 4, Integer.class) .addParameter("param2", "optA", String.class) .build(); PMML4Result resultHolder = helper.submitRequest(requestData); requestData.addRequestParam("param1", 5); requestData.addRequestParam("param2", "optA"); resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); requestData.addRequestParam("param1", -5); requestData.addRequestParam("param2", "optC"); resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get(); requestData.addRequestParam("param1", -5); requestData.addRequestParam("param2", "optA"); resultHolder = helper.submitRequest(requestData); Assertions.assertThat(resultHolder).isNotNull(); score = resultHolder.getResultValue("ScoreCard", "score", Double.class).get();
@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 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); }
public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources) { return new PMML4ExecutionHelper(modelName, resource, kieBaseConf, includeMiningDataSources); }