Andrea Maldonado commited on
Commit
441ee01
Β·
1 Parent(s): 761e409

GEDI Fig.7 and 8

Browse files
data/{baseline_ED_bench.csv β†’ BaselineED_bench.csv} RENAMED
@@ -1,4 +1,4 @@
1
- log,fitness_heuristics,precision_heuristics,fscore_heuristics,size_heuristics,pnsize_heuristics,cfc_heuristics,fitness_ilp,precision_ilp,fscore_ilp,size_ilp,pnsize_ilp,cfc_ilp,fitness_imf,precision_imf,fscore_imf,size_imf,pnsize_imf,cfc_imf
2
  BPIC16wm_p,0.999900004026629,1.0,0.999949999513391,5.0,4.0,2.0,0.9999495832135112,1.0,0.999974790971276,4.0,3.0,1.0,0.999900004026629,1.0,0.999949999513391,5,4,2
3
  BPIC13op,0.990133346397138,0.9620563035495712,0.975892918274616,12.0,7.0,7.0,0.99993033237412,0.9065645824471852,0.950961282086593,10.0,5.0,3.0,0.8513195049834781,0.9065645824471852,0.8780739493381781,17,10,8
4
  BPIC13cp,0.989977119234364,0.8684298767708941,0.925228660364203,14.0,9.0,8.0,0.999955347339294,0.792379879879879,0.8841476594077591,20.0,8.0,6.0,0.990412853232678,0.9470205909661912,0.9682307987170752,15,10,9
 
1
+ log,fitness_heu,precision_heu,fscore_heu,size_heu,pnsize_heu,cfc_heu,fitness_ilp,precision_ilp,fscore_ilp,size_ilp,pnsize_ilp,cfc_ilp,fitness_imf,precision_imf,fscore_imf,size_imf,pnsize_imf,cfc_imf
2
  BPIC16wm_p,0.999900004026629,1.0,0.999949999513391,5.0,4.0,2.0,0.9999495832135112,1.0,0.999974790971276,4.0,3.0,1.0,0.999900004026629,1.0,0.999949999513391,5,4,2
3
  BPIC13op,0.990133346397138,0.9620563035495712,0.975892918274616,12.0,7.0,7.0,0.99993033237412,0.9065645824471852,0.950961282086593,10.0,5.0,3.0,0.8513195049834781,0.9065645824471852,0.8780739493381781,17,10,8
4
  BPIC13cp,0.989977119234364,0.8684298767708941,0.925228660364203,14.0,9.0,8.0,0.999955347339294,0.792379879879879,0.8841476594077591,20.0,8.0,6.0,0.990412853232678,0.9470205909661912,0.9682307987170752,15,10,9
data/{baseline_ED_feat.csv β†’ BaselineED_feat.csv} RENAMED
File without changes
data/{GenBaseline_ED_bench.csv β†’ GenBaselineED_bench.csv} RENAMED
@@ -1,4 +1,4 @@
1
- log,fitness_heuristics,precision_heuristics,fscore_heuristics,size_heuristics,pnsize_heuristics,cfc_heuristics,fitness_ilp,precision_ilp,fscore_ilp,size_ilp,pnsize_ilp,cfc_ilp,fitness_imf,precision_imf,fscore_imf,size_imf,pnsize_imf,cfc_imf
2
  genELBPIC20b_03394_01938_01456_07583_02123_08113_01168,0.6965863019071621,0.8709677419354831,0.7740775519905101,13.0,7.0,5.0,0.999969621176065,0.427355623100303,0.598802049151352,21.0,7.0,6.0,0.99991994157317,0.902439024390243,0.9486819182778732,21,14,11
3
  genELBPIC15f1_06103_03639_02702_06529_00067_01218_09758,0.244571491396844,0.970825492684492,0.390713884832271,48.0,28.0,13.0,0.9999851056034972,0.7639844601581931,0.866197576079873,50.0,34.0,12.0,0.9999702116506732,0.7639844601581931,0.8661919884129461,32,33,4
4
  genELBPIC12_04231_02756_02261_07083_0262_06863_03336,0.938048056994855,0.492925487219797,0.6462562461747551,49.0,30.0,30.0,0.999983354100017,0.128493715326455,0.227725631143263,54.0,10.0,28.0,0.9099497610012792,0.397165646466794,0.552974562177985,48,30,26
 
1
+ log,fitness_heu,precision_heu,fscore_heu,size_heu,pnsize_heu,cfc_heu,fitness_ilp,precision_ilp,fscore_ilp,size_ilp,pnsize_ilp,cfc_ilp,fitness_imf,precision_imf,fscore_imf,size_imf,pnsize_imf,cfc_imf
2
  genELBPIC20b_03394_01938_01456_07583_02123_08113_01168,0.6965863019071621,0.8709677419354831,0.7740775519905101,13.0,7.0,5.0,0.999969621176065,0.427355623100303,0.598802049151352,21.0,7.0,6.0,0.99991994157317,0.902439024390243,0.9486819182778732,21,14,11
3
  genELBPIC15f1_06103_03639_02702_06529_00067_01218_09758,0.244571491396844,0.970825492684492,0.390713884832271,48.0,28.0,13.0,0.9999851056034972,0.7639844601581931,0.866197576079873,50.0,34.0,12.0,0.9999702116506732,0.7639844601581931,0.8661919884129461,32,33,4
4
  genELBPIC12_04231_02756_02261_07083_0262_06863_03336,0.938048056994855,0.492925487219797,0.6462562461747551,49.0,30.0,30.0,0.999983354100017,0.128493715326455,0.227725631143263,54.0,10.0,28.0,0.9099497610012792,0.397165646466794,0.552974562177985,48,30,26
data/{GenBaseline_ED_feat.csv β†’ GenBaselineED_feat.csv} RENAMED
File without changes
data/GenED_bench.csv CHANGED
@@ -1,4 +1,4 @@
1
- log,fitness_heuristics,precision_heuristics,fscore_heuristics,size_heuristics,pnsize_heuristics,cfc_heuristics,fitness_ilp,precision_ilp,fscore_ilp,size_ilp,pnsize_ilp,cfc_ilp,fitness_imf,precision_imf,fscore_imf,size_imf,pnsize_imf,cfc_imf
2
  2_ense_rmcv_genELtask_67_06_00,0.376214776532216,0.994733180959952,0.545948253307299,29.0,18.0,10.0,,,,,,,0.945685191537984,0.507638900441974,0.6606462982975451,28.0,22.0,8.0
3
  2_enself_rmcv_genELtask_13_01_01,0.63263614857424,0.858184089962515,0.7283484130513961,14.0,8.0,7.0,0.99997771174738,0.940229218047294,0.96918349021716,13.0,8.0,3.0,0.95097054618107,0.940229218047294,0.945569378691894,13.0,8.0,4.0
4
  2_rt10v_rutpt_genELtask_1_00_00,0.538653366583541,1.0,0.700162074554294,5.0,4.0,0.0,0.999955489786125,1.0,0.9999777443977612,15.0,8.0,4.0,0.999932932799884,1.0,0.999966465275402,11.0,10.0,2.0
 
1
+ log,fitness_heu,precision_heu,fscore_heu,size_heu,pnsize_heu,cfc_heu,fitness_ilp,precision_ilp,fscore_ilp,size_ilp,pnsize_ilp,cfc_ilp,fitness_imf,precision_imf,fscore_imf,size_imf,pnsize_imf,cfc_imf
2
  2_ense_rmcv_genELtask_67_06_00,0.376214776532216,0.994733180959952,0.545948253307299,29.0,18.0,10.0,,,,,,,0.945685191537984,0.507638900441974,0.6606462982975451,28.0,22.0,8.0
3
  2_enself_rmcv_genELtask_13_01_01,0.63263614857424,0.858184089962515,0.7283484130513961,14.0,8.0,7.0,0.99997771174738,0.940229218047294,0.96918349021716,13.0,8.0,3.0,0.95097054618107,0.940229218047294,0.945569378691894,13.0,8.0,4.0
4
  2_rt10v_rutpt_genELtask_1_00_00,0.538653366583541,1.0,0.700162074554294,5.0,4.0,0.0,0.999955489786125,1.0,0.9999777443977612,15.0,8.0,4.0,0.999932932799884,1.0,0.999966465275402,11.0,10.0,2.0
notebooks/GEDI_statistical_tests.ipynb ADDED
@@ -0,0 +1,316 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 32,
6
+ "id": "1768477d",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "import pandas as pd\n",
11
+ "from scipy import spatial\n",
12
+ "from sklearn.metrics.pairwise import cosine_similarity\n",
13
+ "TEST='kendalltau'\n",
14
+ "DATA_SOURCE = 'BaselineED' #'BaselineED', 'GenBaselineED', 'GenED'\n",
15
+ "IMPUTE = False #If False Nan lines are dropped\n",
16
+ "\n",
17
+ "paper_feat_columns = [\"log\",\"ratio_unique_traces_per_trace\", \"ratio_most_common_variant\", 'ratio_top_10_variants', 'epa_normalized_variant_entropy', 'epa_normalized_sequence_entropy', 'epa_normalized_sequence_entropy_linear_forgetting', 'epa_normalized_sequence_entropy_exponential_forgetting'] \n",
18
+ "paper_metrics_columns = ['log', 'fitness_heu', 'precision_heu',\n",
19
+ " 'fscore_heu', 'size_heu', 'cfc_heu', 'fitness_ilp', 'precision_ilp', 'fscore_ilp',\n",
20
+ " 'size_ilp','cfc_ilp', 'fitness_imf', 'precision_imf', 'fscore_imf', 'size_imf', 'cfc_imf']"
21
+ ]
22
+ },
23
+ {
24
+ "cell_type": "code",
25
+ "execution_count": 33,
26
+ "id": "d3b7f2d1",
27
+ "metadata": {},
28
+ "outputs": [
29
+ {
30
+ "name": "stdout",
31
+ "output_type": "stream",
32
+ "text": [
33
+ "BaselineED\n",
34
+ "kendalltau_BaselineED_nanDropped\n"
35
+ ]
36
+ }
37
+ ],
38
+ "source": [
39
+ "def get_output_file_name(test, data_source, impute): \n",
40
+ " print(data_source)\n",
41
+ " impute = 'imputed' if impute else 'nanDropped'\n",
42
+ " return (\"_\".join([test, data_source, impute]))\n",
43
+ "print(get_output_file_name(TEST, DATA_SOURCE, IMPUTE))"
44
+ ]
45
+ },
46
+ {
47
+ "cell_type": "code",
48
+ "execution_count": 34,
49
+ "id": "6594d6b4",
50
+ "metadata": {},
51
+ "outputs": [],
52
+ "source": [
53
+ "## LOAD FEATURE AND METRICS FILES\n",
54
+ "def load_data(data_source, content):\n",
55
+ " path = f\"../data/{data_source}.csv\" \n",
56
+ " print(\"Path: \", path)\n",
57
+ " data = pd.read_csv(path).sort_values('log')\n",
58
+ " if data_source == 'GenBaselineED_feat':\n",
59
+ " data['log']=data.apply(lambda x: \"Gen\"+x['log'], axis=1)\n",
60
+ " elif data_source == 'GenBaselineED_bench':\n",
61
+ " data['log']=data.apply(lambda x: \"Gen\"+x['log'].replace(\"genEL\",\"\").rsplit(\"_\",7)[0], axis=1)\n",
62
+ " return data"
63
+ ]
64
+ },
65
+ {
66
+ "cell_type": "code",
67
+ "execution_count": 35,
68
+ "id": "7428d805",
69
+ "metadata": {},
70
+ "outputs": [],
71
+ "source": [
72
+ "### INSTANCE SELECTION: NULLS OR IMPUTATION?\n",
73
+ "import numpy as np\n",
74
+ "import matplotlib.pyplot as plt\n",
75
+ "import seaborn as sns\n",
76
+ "from sklearn.impute import SimpleImputer\n",
77
+ "\n",
78
+ "def clean_data(fd_pdm, impute=False, feat_columns=paper_feat_columns, metric_columns=paper_metrics_columns):\n",
79
+ " num_cols = fd_pdm.convert_dtypes().select_dtypes(exclude=['string']).columns\n",
80
+ " str_cols = fd_pdm.convert_dtypes().select_dtypes(include=['string']).columns\n",
81
+ "\n",
82
+ " imputer = SimpleImputer(missing_values=np.nan, strategy='mean')\n",
83
+ " imputer.fit(fd_pdm.drop(str_cols, axis=1))\n",
84
+ " imp_df = imputer.transform(fd_pdm.drop(str_cols, axis=1))\n",
85
+ " imp_df = pd.DataFrame(imp_df, columns=num_cols)\n",
86
+ " imp_df['log'] = fd_pdm['log']\n",
87
+ " print(\"Imputed dataset:\" ,imp_df.shape)\n",
88
+ "\n",
89
+ " ft_pdm_no_nans = fd_pdm.copy()\n",
90
+ " ft_pdm_no_nans = ft_pdm_no_nans.dropna()\n",
91
+ " ft_pdm_no_nans['log'] = fd_pdm['log']\n",
92
+ " print(\"No nan's dataset:\" ,ft_pdm_no_nans.shape)\n",
93
+ " #print(len(ft_pdm_no_nans[ft_pdm_no_nans['source']==DATA_SOURCE]['log']))\n",
94
+ " print(\"FT_COL: \", feat_columns)\n",
95
+ " print(\"M_COL: \", metric_columns)\n",
96
+ " \n",
97
+ " if IMPUTE:\n",
98
+ " benchmarked_ft = imp_df[feat_columns]\n",
99
+ " benchmarked_pd = imp_df[metric_columns]\n",
100
+ " else:\n",
101
+ " benchmarked_ft = ft_pdm_no_nans[feat_columns]\n",
102
+ " benchmarked_pd = ft_pdm_no_nans[metric_columns]\n",
103
+ " return benchmarked_ft, benchmarked_pd"
104
+ ]
105
+ },
106
+ {
107
+ "cell_type": "code",
108
+ "execution_count": 39,
109
+ "id": "14e72f71",
110
+ "metadata": {},
111
+ "outputs": [
112
+ {
113
+ "name": "stdout",
114
+ "output_type": "stream",
115
+ "text": [
116
+ "Path: ../data/BaselineED_feat.csv\n",
117
+ "(26, 8)\n",
118
+ "['BPIC12', 'BPIC13cp', 'BPIC13inc', 'BPIC13op', 'BPIC14dc_p', 'BPIC14di_p', 'BPIC14dia_p', 'BPIC15f1', 'BPIC15f2', 'BPIC15f3', 'BPIC15f4', 'BPIC15f5', 'BPIC16c_p', 'BPIC16wm_p', 'BPIC17', 'BPIC17ol', 'BPIC19', 'BPIC20a', 'BPIC20b', 'BPIC20c', 'BPIC20d', 'BPIC20e', 'HD', 'RTFMP', 'RWABOCSL', 'SEPSIS']\n",
119
+ "Path: ../data/BaselineED_bench.csv\n",
120
+ "(17, 19)\n",
121
+ "['BPIC13cp', 'BPIC13inc', 'BPIC13op', 'BPIC14dc_p', 'BPIC14di_p', 'BPIC16c_p', 'BPIC16wm_p', 'BPIC17ol', 'BPIC20a', 'BPIC20b', 'BPIC20c', 'BPIC20d', 'BPIC20e', 'HD', 'RTFMP', 'RWABOCSL', 'SEPSIS']\n",
122
+ "(17, 26)\n",
123
+ "Index(['log', 'ratio_unique_traces_per_trace', 'ratio_most_common_variant',\n",
124
+ " 'ratio_top_10_variants', 'epa_normalized_variant_entropy',\n",
125
+ " 'epa_normalized_sequence_entropy',\n",
126
+ " 'epa_normalized_sequence_entropy_linear_forgetting',\n",
127
+ " 'epa_normalized_sequence_entropy_exponential_forgetting', 'fitness_heu',\n",
128
+ " 'precision_heu', 'fscore_heu', 'size_heu', 'pnsize_heu', 'cfc_heu',\n",
129
+ " 'fitness_ilp', 'precision_ilp', 'fscore_ilp', 'size_ilp', 'pnsize_ilp',\n",
130
+ " 'cfc_ilp', 'fitness_imf', 'precision_imf', 'fscore_imf', 'size_imf',\n",
131
+ " 'pnsize_imf', 'cfc_imf'],\n",
132
+ " dtype='object')\n",
133
+ "Imputed dataset: (17, 26)\n",
134
+ "No nan's dataset: (14, 26)\n",
135
+ "FT_COL: ['log', 'ratio_unique_traces_per_trace', 'ratio_most_common_variant', 'ratio_top_10_variants', 'epa_normalized_variant_entropy', 'epa_normalized_sequence_entropy', 'epa_normalized_sequence_entropy_linear_forgetting', 'epa_normalized_sequence_entropy_exponential_forgetting']\n",
136
+ "M_COL: ['log', 'ratio_unique_traces_per_trace', 'ratio_most_common_variant', 'ratio_top_10_variants', 'epa_normalized_variant_entropy', 'epa_normalized_sequence_entropy', 'epa_normalized_sequence_entropy_linear_forgetting', 'epa_normalized_sequence_entropy_exponential_forgetting']\n",
137
+ "(14, 8) (14, 8)\n",
138
+ "BaselineED (14, 8) (14, 8)\n",
139
+ "['rutpt', 'rmcv', 'rt10v', 'enve', 'ense', 'enself', 'enseef']\n",
140
+ "Direct kendalltau BaselineED\n",
141
+ "BaselineED\n",
142
+ "../output/plots/pdm_kendalltau_BaselineED_nanDropped\n"
143
+ ]
144
+ },
145
+ {
146
+ "data": {
147
+ "image/png": "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\n",
148
+ "text/plain": [
149
+ "<Figure size 432x288 with 2 Axes>"
150
+ ]
151
+ },
152
+ "metadata": {
153
+ "needs_background": "light"
154
+ },
155
+ "output_type": "display_data"
156
+ }
157
+ ],
158
+ "source": [
159
+ "from scipy.stats import spearmanr\n",
160
+ "from scipy.stats import kendalltau\n",
161
+ "from scipy.stats import pearsonr\n",
162
+ "from numpy import isnan\n",
163
+ "\n",
164
+ "import sys\n",
165
+ "import os\n",
166
+ "sys.path.append(os.path.dirname(\"../gedi/utils/io_helpers.py\"))\n",
167
+ "from io_helpers import get_keys_abbreviation\n",
168
+ "\n",
169
+ "def statistical_test(feature_source, bench_source, test, impute=False):\n",
170
+ " ft = load_data(feature_source, 'feat')\n",
171
+ " #paper_feat_columns = [\"log\",\"ratio_unique_traces_per_trace\", \"ratio_most_common_variant\", 'ratio_top_10_variants', 'epa_normalized_variant_entropy', 'epa_normalized_sequence_entropy', 'epa_normalized_sequence_entropy_linear_forgetting', 'epa_normalized_sequence_entropy_exponential_forgetting'] \n",
172
+ " #ft= ft[paper_feat_columns]\n",
173
+ " print(ft.shape)\n",
174
+ " print(ft['log'].tolist())\n",
175
+ "\n",
176
+ "\n",
177
+ " ben = load_data(bench_source, 'bench')\n",
178
+ " #ben['log']=ben.apply(lambda x: x['log'].replace(\"Gen\",\"\"), axis=1)\n",
179
+ " '''\n",
180
+ " paper_metrics_columns = ['log', 'fitness_heu', 'precision_heu',\n",
181
+ " 'fscore_heu', 'size_heu', 'cfc_heu', 'fitness_ilp', 'precision_ilp', 'fscore_ilp',\n",
182
+ " 'size_ilp','cfc_ilp', 'fitness_imf', 'precision_imf', 'fscore_imf', 'size_imf', 'cfc_imf']\n",
183
+ " '''\n",
184
+ " #ben = ben[paper_metrics_columns]\n",
185
+ " print(ben.shape)\n",
186
+ " print(ben['log'].tolist())\n",
187
+ " fd_pdm = pd.merge(ft, ben, on=['log'], how='inner').reset_index(drop=True)#.reindex(both_df.index)\n",
188
+ "\n",
189
+ " ## DROP DUPLICATES\n",
190
+ " fd_pdm = fd_pdm.reset_index(drop=True)\n",
191
+ " fd_pdm = fd_pdm.T.drop_duplicates().T\n",
192
+ " print(fd_pdm.shape)\n",
193
+ " fd_pdm['log'].unique()\n",
194
+ " \n",
195
+ " print(fd_pdm.columns)\n",
196
+ " benchmark_ft, benchmark_pd = clean_data(fd_pdm, impute, paper_feat_columns, paper_feat_columns)\n",
197
+ " \n",
198
+ " print(benchmark_ft.shape, benchmark_pd.shape)\n",
199
+ "\n",
200
+ " benchmarked_ft_plot = benchmark_ft.copy()\n",
201
+ " benchmarked_pdm_plot = benchmark_pd.copy()\n",
202
+ "\n",
203
+ " #benchmarked_ft = benchmarked_ft.head(10)\n",
204
+ " #benchmarked_pdm = benchmarked_pdm.head(10)\n",
205
+ " print(DATA_SOURCE, benchmarked_ft_plot.shape, benchmarked_pdm_plot.shape)\n",
206
+ "\n",
207
+ " tmp = list(benchmarked_ft_plot.columns[1:-1])\n",
208
+ " df_tmp = pd.DataFrame(index=benchmarked_pdm_plot.columns[1:-1], columns=tmp)\n",
209
+ " #print(\"Benchmark_pdm:\", benchmarked_pdm.columns[1:-1])\n",
210
+ " #print (\"Benchmark_ft:\", tmp)\n",
211
+ "\n",
212
+ " for feature in benchmarked_ft_plot.columns:\n",
213
+ " if feature != 'log' and feature != 'source':\n",
214
+ " for metric in benchmarked_pdm_plot.columns:\n",
215
+ " if metric != 'log' and metric != 'source':\n",
216
+ " #print(feature, benchmarked_pdm.columns[1])\n",
217
+ " stat, p = eval(f\"{TEST}(benchmarked_ft_plot[feature], benchmarked_pdm_plot[metric])\") \n",
218
+ " #print(feature, metric, p, p <= 0.05)\n",
219
+ " df_tmp.loc[metric, feature] = stat*(1.0 if (p <= 0.05) else 0.0)\n",
220
+ "\n",
221
+ " feature_keys = get_keys_abbreviation(df_tmp.columns).split(\"_\")\n",
222
+ " print(feature_keys)\n",
223
+ " df_tmp.columns=feature_keys\n",
224
+ " print(\"Direct\", TEST, DATA_SOURCE)\n",
225
+ " # df_tmp[pd.isnan()]\n",
226
+ "\n",
227
+ " sns.heatmap(df_tmp.fillna(0), annot=True, cmap=\"viridis\", annot_kws={\"size\": 9})\n",
228
+ " ax = plt.gca()\n",
229
+ " sns.heatmap(df_tmp.fillna(0), mask=df_tmp.fillna(0)!=0, cmap=\"Greys\", annot=False, cbar=False, ax=ax)\n",
230
+ " #ax.set_title(\"P-values of features leading to process discovery metrics\", fontsize=15)\n",
231
+ " plt.tight_layout()\n",
232
+ " output_path = f\"../output/plots/pdm_{get_output_file_name(TEST, DATA_SOURCE, IMPUTE)}\"\n",
233
+ " print(output_path)\n",
234
+ " plt.savefig(output_path, dpi=300)\n",
235
+ "\n",
236
+ "statistical_test(DATA_SOURCE+\"_feat\", DATA_SOURCE+\"_bench\", TEST, IMPUTE)"
237
+ ]
238
+ },
239
+ {
240
+ "cell_type": "code",
241
+ "execution_count": null,
242
+ "id": "5fc91e8f",
243
+ "metadata": {},
244
+ "outputs": [],
245
+ "source": [
246
+ "\n",
247
+ "\n"
248
+ ]
249
+ },
250
+ {
251
+ "cell_type": "markdown",
252
+ "id": "07370d54",
253
+ "metadata": {},
254
+ "source": [
255
+ "## Statistical test: Is there a statistical significant relation between feature similarity and performance metrics?"
256
+ ]
257
+ },
258
+ {
259
+ "cell_type": "code",
260
+ "execution_count": null,
261
+ "id": "37470503",
262
+ "metadata": {},
263
+ "outputs": [],
264
+ "source": [
265
+ "### DIRECT STATISTICAL TEST\n",
266
+ "from scipy.stats import spearmanr\n",
267
+ "from scipy.stats import kendalltau\n",
268
+ "from scipy.stats import pearsonr\n",
269
+ "from numpy import isnan\n",
270
+ "\n",
271
+ "import sys\n",
272
+ "import os\n",
273
+ "sys.path.append(os.path.dirname(\"../gedi/utils/io_helpers.py\"))\n",
274
+ "from io_helpers import get_keys_abbreviation\n",
275
+ "\n"
276
+ ]
277
+ },
278
+ {
279
+ "cell_type": "code",
280
+ "execution_count": null,
281
+ "id": "f6ae0fd0",
282
+ "metadata": {},
283
+ "outputs": [],
284
+ "source": []
285
+ },
286
+ {
287
+ "cell_type": "code",
288
+ "execution_count": null,
289
+ "id": "3d381199",
290
+ "metadata": {},
291
+ "outputs": [],
292
+ "source": []
293
+ }
294
+ ],
295
+ "metadata": {
296
+ "kernelspec": {
297
+ "display_name": "Python 3 (ipykernel)",
298
+ "language": "python",
299
+ "name": "python3"
300
+ },
301
+ "language_info": {
302
+ "codemirror_mode": {
303
+ "name": "ipython",
304
+ "version": 3
305
+ },
306
+ "file_extension": ".py",
307
+ "mimetype": "text/x-python",
308
+ "name": "python",
309
+ "nbconvert_exporter": "python",
310
+ "pygments_lexer": "ipython3",
311
+ "version": "3.9.19"
312
+ }
313
+ },
314
+ "nbformat": 4,
315
+ "nbformat_minor": 5
316
+ }
notebooks/benchmarking_process_discovery.ipynb CHANGED
The diff for this file is too large to render. See raw diff