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_filter_7(self): """ Unit test filter 7 """ xpl = SmartExplainer() contributions = [ pd.DataFrame( data=[[0.5, 0.4, 0.3], [0.9, 0.8, 0.7]], columns=['Col1', 'Col2', 'Col3'] ), pd.DataFrame( data=[[0.3, 0.2, 0.1], [0.6, 0.5, 0.4]], columns=['Col1', 'Col2', 'Col3'] ) ] xpl.data = {'var_dict': 1, 'contrib_sorted': contributions, 'x_sorted': 3} xpl.state = MultiDecorator(SmartState()) xpl.filter(threshold=0.5, max_contrib=2) expected_mask = [ pd.DataFrame( data=[[True, False, False], [True, True, False]], columns=['contrib_1', 'contrib_2', 'contrib_3'] ), pd.DataFrame( data=[[False, False, False], [True, True, False]], columns=['contrib_1', 'contrib_2', 'contrib_3'] ) ] assert len(expected_mask) == len(xpl.mask) test_list = [pd.testing.assert_frame_equal(e, m) for e, m in zip(expected_mask, xpl.mask)] assert all(x is None for x in test_list) expected_masked_contributions = [ pd.DataFrame( data=[[0.0, 0.7], [0.0, 0.7]], columns=['masked_neg', 'masked_pos'] ), pd.DataFrame( data=[[0.0, 0.6], [0.0, 0.4]], columns=['masked_neg', 'masked_pos'] ) ] assert len(expected_masked_contributions) == len(xpl.masked_contributions) test_list = [pd.testing.assert_frame_equal(e, m) for e, m in zip(expected_masked_contributions, xpl.masked_contributions)] assert all(x is None for x in test_list) expected_param_dict = { 'features_to_hide': None, 'threshold': 0.5, 'positive': None, 'max_contrib': 2 } self.assertDictEqual(expected_param_dict, xpl.mask_params)
def test_filter_6(self): """ Unit test filter 6 """ xpl = SmartExplainer() mock_data = {'var_dict': 1, 'contrib_sorted': 2, 'x_sorted': 3} xpl.data = mock_data mock_state = Mock() xpl.state = mock_state xpl.filter() mock_state.init_mask.assert_called() mock_state.hide_contributions.assert_not_called() mock_state.cap_contributions.assert_not_called() mock_state.sign_contributions.assert_not_called() mock_state.combine_masks.assert_called() mock_state.cutoff_contributions.assert_not_called() assert hasattr(xpl, 'mask') mock_state.compute_masked_contributions.assert_called() assert hasattr(xpl, 'masked_contributions')
def test_filter_1(self, mock_check_features_name): """ Unit test filter 1 Parameters ---------- mock_check_features_name : [type] [description] """ xpl = SmartExplainer() mock_check_features_name.return_value = [1, 2] mock_data = {'var_dict': 1, 'contrib_sorted': 2, 'x_sorted': 3} xpl.data = mock_data mock_state = Mock() xpl.state = mock_state xpl.filter(features_to_hide=['X1', 'X2']) mock_state.init_mask.assert_called() mock_state.hide_contributions.assert_called() mock_state.cap_contributions.assert_not_called() mock_state.sign_contributions.assert_not_called() mock_state.combine_masks.assert_called() mock_state.cutoff_contributions.assert_not_called() assert hasattr(xpl, 'mask') mock_state.compute_masked_contributions.assert_called() assert hasattr(xpl, 'masked_contributions')