def test_check_label_dict_2(self): """ Unit test check label dict 2 """ xpl = SmartExplainer() xpl._case = 'regression' xpl.check_label_dict()
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_validate_contributions_1(self): """ Unit test validate contributions 1 """ xpl = SmartExplainer() contributions = [ np.array([[2, 1], [8, 4]]), np.array([[5, 5], [0, 0]]) ] model = Mock() model._classes = np.array([1, 3]) model.predict = types.MethodType(self.predict, model) model.predict_proba = types.MethodType(self.predict_proba, model) xpl.model = model xpl._case = "classification" xpl._classes = list(model._classes) xpl.state = xpl.choose_state(contributions) xpl.x_init = pd.DataFrame([[1, 2], [3, 4]], columns=['Col1', 'Col2'], index=['Id1', 'Id2']) expected_output = [ pd.DataFrame([[2, 1], [8, 4]], columns=['Col1', 'Col2'], index=['Id1', 'Id2']), pd.DataFrame([[5, 5], [0, 0]], columns=['Col1', 'Col2'], index=['Id1', 'Id2']) ] output = xpl.validate_contributions(contributions) assert len(expected_output) == len(output) test_list = [ pd.testing.assert_frame_equal(e, m) for e, m in zip(expected_output, output) ] assert all(x is None for x in test_list)
def test_check_label_dict_1(self): """ Unit test check label dict 1 """ xpl = SmartExplainer(label_dict={1: 'Yes', 0: 'No'}) xpl._classes = [0, 1] xpl._case = 'classification' xpl.check_label_dict()
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_add_2(self): """ Unit test add 2 """ xpl = SmartExplainer() xpl._classes = [0, 1] xpl._case = "classification" xpl.add(label_dict={0: 'Zero', 1: 'One'}) assert xpl.label_dict[0] == 'Zero' assert xpl.label_dict[1] == 'One'
def test_check_model_1(self): """ Unit test check model 1 """ model = lambda: None model.predict = types.MethodType(self.predict, model) xpl = SmartExplainer() xpl.model = model xpl._case, xpl._classes = xpl.check_model() assert xpl._case == 'regression' assert xpl._classes is None
def test_adapt_contributions_2(self): """ Unit test 1 adapt_contributions Classification with one contribution pd.DataFrame """ xpl = SmartExplainer() contrib = 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._case = "regression" output = xpl.adapt_contributions(contrib) pd.testing.assert_frame_equal(contrib, output)
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)
def test_adapt_contributions_1(self): """ Unit test 1 adapt_contributions Classification with one contribution pd.DataFrame """ xpl = SmartExplainer() contrib = 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]) model = Mock() model._classes = np.array([1, 3]) 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() output = xpl.adapt_contributions(contrib) assert isinstance(output, list) assert len(output) == 2