示例#1
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])
示例#2
0
 def test_check_contributions_1(self):
     """
     Unit test check contributions 1
     """
     xpl = SmartExplainer()
     xpl.contributions, xpl.x_pred = Mock(), Mock()
     xpl.state = Mock()
     xpl.check_contributions()
     xpl.state.check_contributions.assert_called_with(xpl.contributions, xpl.x_pred)
 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)
示例#4
0
 def test_check_contributions_2(self):
     """
     Unit test check contributions 2
     """
     xpl = SmartExplainer()
     xpl.contributions, xpl.x_pred = Mock(), Mock()
     mock_state = Mock()
     mock_state.check_contributions.return_value = False
     xpl.state = mock_state
     with self.assertRaises(ValueError):
         xpl.check_contributions()
示例#5
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])
示例#6
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)