Search in sources :

Example 36 with Value

use of org.kie.kogito.explainability.model.Value in project kogito-apps by kiegroup.

the class FairnessMetricsTest method testGroupDIRTextClassifier.

@Test
void testGroupDIRTextClassifier() throws ExecutionException, InterruptedException {
    List<PredictionInput> testInputs = getTestInputs();
    PredictionProvider model = TestUtils.getDummyTextClassifier();
    Predicate<PredictionInput> selector = predictionInput -> DataUtils.textify(predictionInput).contains("please");
    Output output = new Output("spam", Type.BOOLEAN, new Value(false), 1.0);
    double dir = FairnessMetrics.groupDisparateImpactRatio(selector, testInputs, model, output);
    assertThat(dir).isPositive();
}
Also used : FeatureFactory(org.kie.kogito.explainability.model.FeatureFactory) SimplePrediction(org.kie.kogito.explainability.model.SimplePrediction) Arrays(java.util.Arrays) Predicate(java.util.function.Predicate) Feature(org.kie.kogito.explainability.model.Feature) Prediction(org.kie.kogito.explainability.model.Prediction) BiFunction(java.util.function.BiFunction) Dataset(org.kie.kogito.explainability.model.Dataset) Value(org.kie.kogito.explainability.model.Value) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) StringUtils(org.apache.commons.lang3.StringUtils) Type(org.kie.kogito.explainability.model.Type) PredictionProvider(org.kie.kogito.explainability.model.PredictionProvider) ArrayList(java.util.ArrayList) ExecutionException(java.util.concurrent.ExecutionException) Test(org.junit.jupiter.api.Test) PredictionInput(org.kie.kogito.explainability.model.PredictionInput) List(java.util.List) TestUtils(org.kie.kogito.explainability.TestUtils) Locale(java.util.Locale) Output(org.kie.kogito.explainability.model.Output) AssertionsForClassTypes.assertThat(org.assertj.core.api.AssertionsForClassTypes.assertThat) PredictionOutput(org.kie.kogito.explainability.model.PredictionOutput) PredictionInput(org.kie.kogito.explainability.model.PredictionInput) Output(org.kie.kogito.explainability.model.Output) PredictionOutput(org.kie.kogito.explainability.model.PredictionOutput) Value(org.kie.kogito.explainability.model.Value) PredictionProvider(org.kie.kogito.explainability.model.PredictionProvider) Test(org.junit.jupiter.api.Test)

Example 37 with Value

use of org.kie.kogito.explainability.model.Value in project kogito-apps by kiegroup.

the class MatrixUtilsExtensionsTest method testPOListCreation.

// test creation of matrix from list of PredictionOutputs
@Test
void testPOListCreation() {
    // use the mat 3x5 as our list of prediction outputs
    List<PredictionOutput> ps = new ArrayList<>();
    for (int i = 0; i < 3; i++) {
        List<Output> os = new ArrayList<>();
        for (int j = 0; j < 5; j++) {
            Value v = new Value(mat3X5[i][j]);
            os.add(new Output("o", Type.NUMBER, v, 0.0));
        }
        ps.add(new PredictionOutput(os));
    }
    RealMatrix converted = MatrixUtilsExtensions.matrixFromPredictionOutput(ps);
    assertArrayEquals(mat3X5, converted.getData());
}
Also used : RealMatrix(org.apache.commons.math3.linear.RealMatrix) PredictionOutput(org.kie.kogito.explainability.model.PredictionOutput) Output(org.kie.kogito.explainability.model.Output) PredictionOutput(org.kie.kogito.explainability.model.PredictionOutput) ArrayList(java.util.ArrayList) Value(org.kie.kogito.explainability.model.Value) Test(org.junit.jupiter.api.Test)

Example 38 with Value

use of org.kie.kogito.explainability.model.Value in project kogito-apps by kiegroup.

the class DecisionModelWrapper method predictAsync.

@Override
public CompletableFuture<List<PredictionOutput>> predictAsync(List<PredictionInput> inputs) {
    List<PredictionOutput> predictionOutputs = new LinkedList<>();
    for (PredictionInput input : inputs) {
        Map<String, Object> contextVariables = toMap(input.getFeatures());
        final DMNContext context = decisionModel.newContext(contextVariables);
        DMNResult dmnResult = decisionModel.evaluateAll(context);
        List<Output> outputs = new LinkedList<>();
        for (DMNDecisionResult decisionResult : dmnResult.getDecisionResults()) {
            String decisionName = decisionResult.getDecisionName();
            if (!skippedDecisions.contains(decisionName)) {
                Object result = decisionResult.getResult();
                Value value = new Value(result);
                Type type;
                if (result == null) {
                    type = Type.TEXT;
                } else {
                    if (result instanceof Boolean) {
                        type = Type.BOOLEAN;
                    } else if (result instanceof String) {
                        type = Type.TEXT;
                    } else {
                        type = Type.NUMBER;
                    }
                }
                Output output = new Output(decisionName, type, value, 1d);
                outputs.add(output);
            }
        }
        PredictionOutput predictionOutput = new PredictionOutput(outputs);
        predictionOutputs.add(predictionOutput);
    }
    return completedFuture(predictionOutputs);
}
Also used : DMNResult(org.kie.dmn.api.core.DMNResult) PredictionInput(org.kie.kogito.explainability.model.PredictionInput) DMNContext(org.kie.dmn.api.core.DMNContext) LinkedList(java.util.LinkedList) Type(org.kie.kogito.explainability.model.Type) PredictionOutput(org.kie.kogito.explainability.model.PredictionOutput) Output(org.kie.kogito.explainability.model.Output) PredictionOutput(org.kie.kogito.explainability.model.PredictionOutput) DMNDecisionResult(org.kie.dmn.api.core.DMNDecisionResult) Value(org.kie.kogito.explainability.model.Value)

Example 39 with Value

use of org.kie.kogito.explainability.model.Value in project kogito-apps by kiegroup.

the class ShapResultsTest method buildShapResults.

ShapResults buildShapResults(int nOutputs, int nFeatures, int scalar1, int scalar2) {
    Saliency[] saliencies = new Saliency[nOutputs];
    for (int i = 0; i < nOutputs; i++) {
        List<FeatureImportance> fis = new ArrayList<>();
        for (int j = 0; j < nFeatures; j++) {
            fis.add(new FeatureImportance(new Feature("f" + String.valueOf(j), Type.NUMBER, new Value(j)), i * j * scalar1));
        }
        saliencies[i] = new Saliency(new Output("o" + String.valueOf(i), Type.NUMBER, new Value(i), 1.0), fis);
    }
    RealVector fnull = MatrixUtils.createRealVector(new double[nOutputs]);
    fnull.mapAddToSelf(scalar2);
    return new ShapResults(saliencies, fnull);
}
Also used : FeatureImportance(org.kie.kogito.explainability.model.FeatureImportance) RealVector(org.apache.commons.math3.linear.RealVector) Output(org.kie.kogito.explainability.model.Output) ArrayList(java.util.ArrayList) Value(org.kie.kogito.explainability.model.Value) Saliency(org.kie.kogito.explainability.model.Saliency) Feature(org.kie.kogito.explainability.model.Feature)

Example 40 with Value

use of org.kie.kogito.explainability.model.Value in project kogito-apps by kiegroup.

the class DataUtilsTest method toCSV.

@Test
void toCSV() {
    Feature feature = mock(Feature.class);
    when(feature.getName()).thenReturn("feature-1");
    Output output = mock(Output.class);
    when(output.getName()).thenReturn("decision-1");
    List<Value> x = new ArrayList<>();
    x.add(new Value(1));
    x.add(new Value(2));
    x.add(new Value(3));
    List<Value> y = new ArrayList<>();
    y.add(new Value(4));
    y.add(new Value(5));
    y.add(new Value(4));
    PartialDependenceGraph partialDependenceGraph = new PartialDependenceGraph(feature, output, x, y);
    assertDoesNotThrow(() -> DataUtils.toCSV(partialDependenceGraph, Paths.get("target/test-pdp.csv")));
}
Also used : Output(org.kie.kogito.explainability.model.Output) Value(org.kie.kogito.explainability.model.Value) ArrayList(java.util.ArrayList) Feature(org.kie.kogito.explainability.model.Feature) PartialDependenceGraph(org.kie.kogito.explainability.model.PartialDependenceGraph) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

Value (org.kie.kogito.explainability.model.Value)80 Feature (org.kie.kogito.explainability.model.Feature)69 Output (org.kie.kogito.explainability.model.Output)59 PredictionOutput (org.kie.kogito.explainability.model.PredictionOutput)54 PredictionInput (org.kie.kogito.explainability.model.PredictionInput)49 ArrayList (java.util.ArrayList)42 PredictionProvider (org.kie.kogito.explainability.model.PredictionProvider)42 LinkedList (java.util.LinkedList)36 Type (org.kie.kogito.explainability.model.Type)36 Test (org.junit.jupiter.api.Test)35 List (java.util.List)33 Prediction (org.kie.kogito.explainability.model.Prediction)33 Random (java.util.Random)31 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)23 Arrays (java.util.Arrays)16 Map (java.util.Map)16 Optional (java.util.Optional)16 CounterfactualEntity (org.kie.kogito.explainability.local.counterfactual.entities.CounterfactualEntity)16 FeatureFactory (org.kie.kogito.explainability.model.FeatureFactory)16 Collectors (java.util.stream.Collectors)15