Beispiel #1
0
 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()
Beispiel #2
0
 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()
Beispiel #3
0
 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)
Beispiel #6
0
 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])
Beispiel #7
0
 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)