Obtain SHAP values from MOJO model

Obtaining SHAP values is possible only from H2OGBM and H2OXGBoost pipeline wrappers and for regression or binomial problems.

To get SHAP values(=contributions) from H2OXGBoost model, please do:

  • Scala
  • Python

First, let’s start Sparkling Shell as

./bin/sparkling-shell

Start H2O cluster inside the Spark environment

import org.apache.spark.h2o._
import java.net.URI
val hc = H2OContext.getOrCreate(spark)

Parse the data using H2O and convert them to Spark Frame

val frame = new H2OFrame(new URI("https://raw.githubusercontent.com/h2oai/sparkling-water/master/examples/smalldata/prostate/prostate.csv"))
val sparkDF = hc.asDataFrame(frame).withColumn("CAPSULE", $"CAPSULE" cast "string")
val Array(trainingDF, testingDF) = sparkDF.randomSplit(Array(0.8, 0.2))

Train the model. You can configure all the available XGBoost arguments using provided setters, such as the label column.

import ai.h2o.sparkling.ml.algos.H2OXGBoost
val estimator = new H2OXGBoost().setLabelCol("CAPSULE").setWithDetailedPredictionCol(true)
val model = estimator.fit(trainingDF)

The call setWithDetailedPredictionCol(true) tells Sparkling Water to create additional prediction column with additional prediction details, such as the contributions. The name of this column is by default “detailed_prediction” and can be modified via setDetailedPredictionCol setter.

Run Predictions

val predictions = model.transform(testingDF).show(false)

Show contributions

predictions.select("detailed_prediction.contribution").show()