class SkorchRegressorTests(unittest.TestCase): def setUp(self): model, X, y = get_skorch_regressor() self.explainer = RegressionExplainer(model, X, y) def test_preds(self): self.assertIsInstance(self.explainer.preds, np.ndarray) def test_permutation_importances(self): self.assertIsInstance(self.explainer.get_permutation_importances_df(), pd.DataFrame) def test_shap_base_value(self): self.assertIsInstance(self.explainer.shap_base_value(), (np.floating, float)) def test_shap_values_shape(self): self.assertTrue(self.explainer.get_shap_values_df().shape == ( len(self.explainer), len(self.explainer.merged_cols))) def test_shap_values(self): self.assertIsInstance(self.explainer.get_shap_values_df(), pd.DataFrame) def test_mean_abs_shap(self): self.assertIsInstance(self.explainer.get_mean_abs_shap_df(), pd.DataFrame) def test_calculate_properties(self): self.explainer.calculate_properties(include_interactions=False) def test_pdp_df(self): self.assertIsInstance(self.explainer.pdp_df("col1"), pd.DataFrame)
class ExtraTreesRegressorTests(unittest.TestCase): def setUp(self): X_train, y_train, X_test, y_test = titanic_fare() self.test_len = len(X_test) train_names, test_names = titanic_names() _, self.names = titanic_names() model = ExtraTreesRegressor() model.fit(X_train, y_train) self.explainer = RegressionExplainer( model, X_test, y_test, cats=[{ 'Gender': ['Sex_female', 'Sex_male', 'Sex_nan'] }, 'Deck', 'Embarked'], idxs=test_names, units="$") def test_preds(self): self.assertIsInstance(self.explainer.preds, np.ndarray) def test_permutation_importances(self): self.assertIsInstance(self.explainer.get_permutation_importances_df(), pd.DataFrame) def test_shap_base_value(self): self.assertIsInstance(self.explainer.shap_base_value(), (np.floating, float)) def test_shap_values_shape(self): self.assertTrue(self.explainer.get_shap_values_df().shape == ( len(self.explainer), len(self.explainer.merged_cols))) def test_shap_values(self): self.assertIsInstance(self.explainer.get_shap_values_df(), pd.DataFrame) def test_mean_abs_shap(self): self.assertIsInstance(self.explainer.get_mean_abs_shap_df(), pd.DataFrame) def test_calculate_properties(self): self.explainer.calculate_properties(include_interactions=False) def test_pdp_df(self): self.assertIsInstance(self.explainer.pdp_df("Age"), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Gender"), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Deck"), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Age", index=0), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Gender", index=0), pd.DataFrame)
class LinearRegressionTests(unittest.TestCase): def setUp(self): X_train, y_train, X_test, y_test = titanic_fare() self.test_len = len(X_test) train_names, test_names = titanic_names() _, self.names = titanic_names() model = LinearRegression() model.fit(X_train, y_train) self.explainer = RegressionExplainer( model, X_test, y_test, shap='linear', cats=[{ 'Gender': ['Sex_female', 'Sex_male', 'Sex_nan'] }, 'Deck', 'Embarked'], idxs=test_names, units="$") def test_explainer_len(self): self.assertEqual(len(self.explainer), self.test_len) def test_int_idx(self): self.assertEqual(self.explainer.get_idx(self.names[0]), 0) def test_random_index(self): self.assertIsInstance(self.explainer.random_index(), int) self.assertIsInstance(self.explainer.random_index(return_str=True), str) def test_preds(self): self.assertIsInstance(self.explainer.preds, np.ndarray) def test_pred_percentiles(self): self.assertIsInstance(self.explainer.pred_percentiles(), np.ndarray) def test_permutation_importances(self): self.assertIsInstance(self.explainer.get_permutation_importances_df(), pd.DataFrame) def test_metrics(self): self.assertIsInstance(self.explainer.metrics(), dict) self.assertIsInstance(self.explainer.metrics_descriptions(), dict) def test_mean_abs_shap_df(self): self.assertIsInstance(self.explainer.get_mean_abs_shap_df(), pd.DataFrame) def test_top_interactions(self): self.assertIsInstance(self.explainer.top_shap_interactions("Age"), list) self.assertIsInstance( self.explainer.top_shap_interactions("Age", topx=4), list) def test_contrib_df(self): self.assertIsInstance(self.explainer.get_contrib_df(0), pd.DataFrame) self.assertIsInstance(self.explainer.get_contrib_df(0, topx=3), pd.DataFrame) def test_shap_base_value(self): self.assertIsInstance(self.explainer.shap_base_value(), (np.floating, float)) def test_shap_values_shape(self): self.assertTrue(self.explainer.get_shap_values_df().shape == ( len(self.explainer), len(self.explainer.merged_cols))) def test_shap_values(self): self.assertIsInstance(self.explainer.get_shap_values_df(), pd.DataFrame) def test_mean_abs_shap(self): self.assertIsInstance(self.explainer.get_mean_abs_shap_df(), pd.DataFrame) def test_calculate_properties(self): self.explainer.calculate_properties(include_interactions=False) def test_pdp_df(self): self.assertIsInstance(self.explainer.pdp_df("Age"), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Gender"), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Deck"), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Age", index=0), pd.DataFrame) self.assertIsInstance(self.explainer.pdp_df("Gender", index=0), pd.DataFrame)