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)
Exemple #2
0
 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)
Exemple #3
0
 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')
Exemple #4
0
 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')