Spaces:
Sleeping
Sleeping
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} +1 -1
- data/{baseline_ED_feat.csv β BaselineED_feat.csv} +0 -0
- data/{GenBaseline_ED_bench.csv β GenBaselineED_bench.csv} +1 -1
- data/{GenBaseline_ED_feat.csv β GenBaselineED_feat.csv} +0 -0
- data/GenED_bench.csv +1 -1
- notebooks/GEDI_statistical_tests.ipynb +316 -0
- notebooks/benchmarking_process_discovery.ipynb +0 -0
data/{baseline_ED_bench.csv β BaselineED_bench.csv}
RENAMED
@@ -1,4 +1,4 @@
|
|
1 |
-
log,
|
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,
|
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,
|
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
|
|