prediction-explainer

explain GLM models

Usage no npm install needed!

<script type="module">
  import predictionExplainer from 'https://cdn.skypack.dev/prediction-explainer';
</script>

README

Javascript Prediction Explainer

Provides functions to explain predictions

Predicting

Predict on a person or population:

function predict(
    link: string,
    intercept: number,
    coefficients: number[],
    featureValues: number[]
): number

Note: In case of a population, featureValues are the averages(empirical means) of each feature in that population.

Calculate relative prediction between two predictions:

function predict_relative(
    link: string,
    intercept: number,
    coefficients: number[],
    featureValues1: number[],
    featureValues2: number[]
): number[]

This returns an array of 3 elements: prediction1, prediction2, relative_prediction

Feature Contributions

Get feature contributions for a person or population:

function calculate_feature_contributions(
    link: string,
    intercept: number,
    coefficients: number[],
    featureValues: number[]
): number[]

Compare feature contributions between two predictions:

function compare_feature_contributions(
    link: string,
    featureContributions1: number[],
    featureContributions2: number[]
): number[]

Get a json structure when comparing feature contributions between two predictions:

function compare_feature_contributions_json(
    link: string,
    intercept: number,
    coefficients: number[],
    featureValues1: number[],
    featureValues2: number[],
    featureNames: string[],
    oheFeatureNames: string[],
    maxFeatures: number,
    collapseOheFeatures: boolean
): PredictionExplanationItem[]

The PredictionExplanationItem structure is:

interface PredictionExplanationItem {
    feature_name: string;
    ohe_feature_name: string;
    population_contribution: number;
    row_contribution: number;
    value: number;
    relative_contribution: number;
}

Example reply:

[
    {
        feature_name: 'sex_ohe_male',
        ohe_feature_name: 'sex',
        population_contribution: 1.410004327,
        relative_contribution: 0,
        row_contribution: 1.410004327,
        value: 1
    },
    {
        feature_name: 'sex_ohe_female',
        ohe_feature_name: 'sex',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_1',
        ohe_feature_name: 'age',
        population_contribution: 7.66672495444632,
        relative_contribution: 0,
        row_contribution: 7.66672495444632,
        value: 1
    },
    {
        feature_name: 'age_ohe_2',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_3',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_4',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_5',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_6',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_7',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_8',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_9',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_10',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_11',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    },
    {
        feature_name: 'age_ohe_12',
        ohe_feature_name: 'age',
        population_contribution: 0,
        relative_contribution: 0,
        row_contribution: 0,
        value: 0
    }
]

Install

Requires node 8.16.0

once node is installed, install the package

npm install

Test

npm run test

Build

npm run build