def test_choose_state_2(self, mock_multi_decorator): """ Unit test choose state 2 Parameters ---------- mock_multi_decorator : [type] [description] """ xpl = SmartExplainer() xpl.choose_state([1, 2, 3]) mock_multi_decorator.assert_called()
def test_choose_state_1(self, mock_smart_state): """ Unit test choose state 1 Parameters ---------- mock_smart_state : [type] [description] """ xpl = SmartExplainer() xpl.choose_state('contributions') mock_smart_state.assert_called()
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_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_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)