def test_class_nb(self): job = create_test_job( predictive_model=create_test_predictive_model( prediction_method=ClassificationMethods. MULTINOMIAL_NAIVE_BAYES.value), labelling=create_test_labelling( label_type=LabelTypes.ATTRIBUTE_STRING.value, attribute_name='concept:name'), clustering=create_test_clustering( clustering_type=ClusteringMethods.NO_CLUSTER.value)) result, _ = calculate(job) del result['elapsed_time'] self.assertDictEqual( result, { 'f1score': 0.0, 'acc': 0.0, 'precision': 0.0, 'recall': 0.0, 'true_positive': 0, 'true_negative': 0, 'false_negative': 2, 'false_positive': 0, 'auc': 0.0 })
def test_next_activity(self): labelling = create_test_labelling( label_type=LabelTypes.NEXT_ACTIVITY.value) encoding = create_test_encoding( value_encoding=ValueEncodings.BOOLEAN.value, prefix_length=3, task_generation_type=TaskGenerationTypes.ONLY_THIS.value) _, df = encode_label_logs( self.test_log, self.test_log, create_test_job( encoding=encoding, labelling=labelling, predictive_model=create_test_predictive_model( predictive_model=PredictiveModels.CLASSIFICATION.value))) self.assertEqual(df.shape, (2, 9)) trace_5 = df[df.trace_id == '5'].iloc[0].values.tolist() self.assertListEqual( trace_5, ['5', True, True, True, False, False, False, False, 'decide']) trace_4 = df[df.trace_id == '4'].iloc[0].values.tolist() self.assertListEqual( trace_4, ['4', True, False, True, False, False, False, True, 'decide'])
def test_explain(self): split = create_test_split( split_type=SplitTypes.SPLIT_DOUBLE.value, split_ordering_method=SplitOrderingMethods.SPLIT_SEQUENTIAL.value, test_size=0.2, original_log=None, train_log=create_test_log( log_name='train_explainability.xes', log_path='cache/log_cache/test_logs/train_explainability.xes'), test_log=create_test_log( log_name='test_explainability.xes', log_path='cache/log_cache/test_logs/test_explainability.xes')) predictive_model = create_test_predictive_model( predictive_model=PredictiveModels.CLASSIFICATION.value, prediction_method=ClassificationMethods.DECISION_TREE.value) job = create_test_job( split=split, encoding=create_test_encoding( prefix_length=4, padding=True, value_encoding=ValueEncodings.SIMPLE_INDEX.value), labelling=create_test_labelling( label_type=LabelTypes.ATTRIBUTE_STRING.value, attribute_name='label'), clustering=None, create_models=True, predictive_model=predictive_model, job_type=JobTypes.PREDICTION.value, hyperparameter_optimizer=None, incremental_train=None) prediction_task(job.id, do_publish_result=False) job.refresh_from_db() exp = Explanation.objects.get_or_create( type=ExplanationTypes.ICE.value, split=split, predictive_model=predictive_model, job=job, results={})[0] training_df_old, test_df_old = get_encoded_logs(job) explanation_target = 'prefix_2' explanation = explain(exp, training_df_old, test_df_old, explanation_target, prefix_target=None) expected = [{ 'value': 'Contact Hospital', 'label': 1.2962962962962963, 'count': 351 }, { 'value': 'Create Questionnaire', 'label': 1.5526992287917738, 'count': 1167 }, { 'value': 'High Insurance Check', 'label': 1.2667660208643816, 'count': 671 }] self.assertEqual(expected, explanation)
def test_prefix1_no_label(self): labelling = create_test_labelling(label_type=LabelTypes.NO_LABEL.value) df = frequency(self.log, self.event_names, labelling, self.encoding) self.assertEqual(df.shape, (2, 8)) self.assertNotIn('label', df.columns.values.tolist())
def test_remaining_time(self): job = self.get_job() job.labelling = create_test_labelling(label_type=LabelTypes.REMAINING_TIME.value) job.save() result, _ = calculate(job) self.assertEqual(result, {'true': 529, 'false': 354})