def test_compute_features_import_2(self): """ Unit test compute_features_import 2 Checking classification case """ xpl = SmartExplainer() contrib1 = pd.DataFrame( [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], columns=['contribution_0', 'contribution_1', 'contribution_2', 'contribution_3'], index=[0, 1, 2] ) contrib2 = pd.DataFrame( [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]], columns=['contribution_0', 'contribution_1', 'contribution_2', 'contribution_3'], index=[0, 1, 2] ) contributions = [contrib1, contrib2] xpl.features_imp = None xpl.contributions = contributions xpl.state = xpl.choose_state(contributions) xpl._case = "classification" xpl.compute_features_import() expect1 = contrib1.abs().sum().sort_values(ascending=True) expect1 = expect1 / expect1.sum() expect2 = contrib2.abs().sum().sort_values(ascending=True) expect2 = expect2 / expect2.sum() assert expect1.equals(xpl.features_imp[0]) assert expect2.equals(xpl.features_imp[1])
def test_check_contributions_1(self): """ Unit test check contributions 1 """ xpl = SmartExplainer() xpl.contributions, xpl.x_pred = Mock(), Mock() xpl.state = Mock() xpl.check_contributions() xpl.state.check_contributions.assert_called_with(xpl.contributions, xpl.x_pred)
def test_to_pandas_1(self): """ Unit test to pandas 1 """ xpl = SmartExplainer() xpl.state = SmartState() data = {} data['contrib_sorted'] = pd.DataFrame( [[0.32230754, 0.1550689, 0.10183475, 0.05471339], [-0.58547512, -0.37050409, -0.07249285, 0.00171975], [-0.48666675, 0.25507156, -0.16968889, 0.0757443]], columns=[ 'contribution_0', 'contribution_1', 'contribution_2', 'contribution_3' ], index=[0, 1, 2]) data['var_dict'] = pd.DataFrame( [[1, 0, 2, 3], [1, 0, 3, 2], [1, 0, 2, 3]], columns=['feature_0', 'feature_1', 'feature_2', 'feature_3'], index=[0, 1, 2]) data['x_sorted'] = pd.DataFrame( [[1., 3., 22., 1.], [2., 1., 2., 38.], [2., 3., 26., 1.]], columns=['feature_0', 'feature_1', 'feature_2', 'feature_3'], index=[0, 1, 2]) xpl.data = data xpl.columns_dict = {0: 'Pclass', 1: 'Sex', 2: 'Age', 3: 'Embarked'} xpl.features_dict = { 'Pclass': 'Pclass', 'Sex': 'Sex', 'Age': 'Age', 'Embarked': 'Embarked' } xpl.x = pd.DataFrame( [[3., 1., 22., 1.], [1., 2., 38., 2.], [3., 2., 26., 1.]], columns=['Pclass', 'Sex', 'Age', 'Embarked'], index=[0, 1, 2]) xpl.x_pred = xpl.x xpl.contributions = data['contrib_sorted'] xpl.y_pred = pd.DataFrame([1, 2, 3], columns=['pred'], index=[0, 1, 2]) model = lambda: None model.predict = types.MethodType(self.predict, model) xpl.model = model xpl._case, xpl._classes = xpl.check_model() xpl.state = xpl.choose_state(xpl.contributions) output = xpl.to_pandas(max_contrib=2) expected = pd.DataFrame( [[1, 'Sex', 1.0, 0.32230754, 'Pclass', 3.0, 0.1550689], [2, 'Sex', 2.0, -0.58547512, 'Pclass', 1.0, -0.37050409], [3, 'Sex', 2.0, -0.48666675, 'Pclass', 3.0, 0.25507156]], columns=[ 'pred', 'feature_1', 'value_1', 'contribution_1', 'feature_2', 'value_2', 'contribution_2' ], index=[0, 1, 2], dtype=object) expected['pred'] = expected['pred'].astype(int) assert not pd.testing.assert_frame_equal(expected, output)
def test_check_contributions_2(self): """ Unit test check contributions 2 """ xpl = SmartExplainer() xpl.contributions, xpl.x_pred = Mock(), Mock() mock_state = Mock() mock_state.check_contributions.return_value = False xpl.state = mock_state with self.assertRaises(ValueError): xpl.check_contributions()
def test_check_model_2(self): """ Unit test check model 2 """ xpl = SmartExplainer() df1 = pd.DataFrame([1, 2]) df2 = pd.DataFrame([3, 4]) xpl.contributions = [df1, df2] xpl.state = xpl.choose_state(xpl.contributions) model = lambda: None model._classes = np.array([1, 2]) model.predict = types.MethodType(self.predict, model) model.predict_proba = types.MethodType(self.predict_proba, model) xpl.model = model xpl._case, xpl._classes = xpl.check_model() assert xpl._case == 'classification' self.assertListEqual(xpl._classes, [1, 2])
def test_compute_features_import_1(self): """ Unit test compute_features_import 1 Checking regression case """ xpl = SmartExplainer() contributions = pd.DataFrame( [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], columns=['contribution_0', 'contribution_1', 'contribution_2', 'contribution_3'], index=[0, 1, 2] ) xpl.features_imp = None xpl.contributions = contributions xpl.state = xpl.choose_state(contributions) xpl._case = 'regression' xpl.compute_features_import() expected = contributions.abs().sum().sort_values(ascending=True) expected = expected / expected.sum() assert expected.equals(xpl.features_imp)