[{"data":1,"prerenderedAt":295},["ShallowReactive",2],{"studies-it-process-mining-system":3},{"id":4,"title":5,"body":6,"category":274,"description":110,"extension":275,"featured":276,"links":277,"meta":278,"navigation":276,"order":279,"path":280,"period":281,"role":282,"seo":283,"slug":284,"stack":285,"stem":292,"subtitle":293,"summary":277,"__hash__":294},"projects_it\u002Fprojects\u002Fit\u002Fprocess-mining-system.md","Process Mining System",{"type":7,"value":8,"toc":265},"minimark",[9,14,39,47,51,54,88,92,103,113,128,135,142,146,152,166,172,190,197,203,209,213,248,252,259],[10,11,13],"h2",{"id":12},"il-contesto","Il contesto",[15,16,17,18,22,23,27,28,27,31,34,35,38],"p",{},"Il ",[19,20,21],"em",{},"process mining"," parte da log di eventi grezzi (tuple ",[24,25,26],"code",{},"case_id",", ",[24,29,30],{},"activity",[24,32,33],{},"timestamp",") e cerca di ricostruire il processo sottostante: ",[19,36,37],{},"\"come si snoda davvero il lavoro, dentro questo sistema?\"",". È una disciplina fondata da Wil van der Aalst a inizio anni 2000 e oggi usata in finance (compliance), sanità (patient pathways), manifatturiero (bottleneck detection).",[15,40,41,42,46],{},"L'esame di ",[43,44,45],"strong",{},"Formal Methods in Computer Science"," chiedeva un'implementazione completa di un sistema di process mining: discovery, valutazione, visualizzazione. Abbiamo spinto oltre: ci abbiamo aggiunto un layer di reasoning LLM che legge il modello scoperto e produce considerazioni leggibili per un umano.",[10,48,50],{"id":49},"cosa-fa","Cosa fa",[15,52,53],{},"Un'app web che prende un event log (tre dataset predefiniti o upload custom in CSV \u002F Excel \u002F JSON) e:",[55,56,57,64,70,76,82],"ol",{},[58,59,60,63],"li",{},[43,61,62],{},"Preprocessa"," i dati — filtro per attività\u002Fperiodo, rimozione duplicati, normalizzazione nomi, outlier removal per lunghezza dei casi",[58,65,66,69],{},[43,67,68],{},"Scopre il modello di processo"," con tre algoritmi classici — Alpha Miner, Heuristic Miner, Inductive Miner",[58,71,72,75],{},[43,73,74],{},"Valuta"," il modello con cinque metriche — fitness, precision, generalization, simplicity, F-score composito",[58,77,78,81],{},[43,79,80],{},"Visualizza"," il risultato in quattro formati — Petri net, BPMN, Directly-Follows Graph, Process Tree",[58,83,84,87],{},[43,85,86],{},"Ragiona"," sul modello via LLM — genera report, rileva anomalie, suggerisce ottimizzazioni, predice il prossimo evento di un trace parziale, risponde in chat",[10,89,91],{"id":90},"architettura","Architettura",[15,93,94,95,98,99,102],{},"Backend ",[43,96,97],{},"Flask"," monolitico (~1100 righe in ",[24,100,101],{},"app.py",") che delega a moduli specializzati invece di tenere business logic inline:",[104,105,111],"pre",{"className":106,"code":108,"language":109,"meta":110},[107],"language-text","app.py                       ← routes Flask + orchestrazione\ndataset_selector.py          ← caricamento \u002F sintesi dataset\npreprocessor.py              ← cleaning + filtering\nprocess_discovery.py         ← wrapper attorno ai 3 miners\npm4py_integration.py         ← evaluation + rendering visuale\nenhanced_llm_reasoning.py    ← integrazione Gemini + prompt template\nmain.py                      ← runner CLI per test offline\n","text","",[24,112,108],{"__ignoreMap":110},[15,114,115,116,119,120,123,124,127],{},"Frontend ",[43,117,118],{},"dashboard single-page HTML + vanilla JS",": sidebar a tab (Import, Preprocess, Models, Visualize, Analytics, Reasoning, Chatbot, Export), comunicazione via ",[24,121,122],{},"fetch()"," + JSON. Le visualizzazioni arrivano dal backend come SVG \u002F PNG in base64 e vengono inlineate direttamente in ",[24,125,126],{},"\u003Cimg>",".",[15,129,130,131,134],{},"Stato globale lato server ",[19,132,133],{},"in-memory"," — sufficiente per una demo single-user. Un'app production-grade richiederebbe una sessione per utente in Redis o simili; scelta esplicita per mantenere il focus sugli algoritmi.",[15,136,137,138,141],{},"Deploy in container con WSGI worker pool (default ",[24,139,140],{},"2·cpu + 1",", timeout 30s) dietro reverse proxy che gestisce gzip, security header standard, rate limit sull'health check, timeout esteso (90s) sugli endpoint di discovery.",[10,143,145],{"id":144},"decisioni-tecniche-chiave","Decisioni tecniche chiave",[15,147,148,151],{},[43,149,150],{},"1. PM4Py come motore, non come dipendenza opzionale."," I tre miner passano attraverso PM4Py invece di reimplementazioni custom. L'esame chiedeva di capire gli algoritmi — non di rifarli da zero in produzione. Abbiamo scelto consapevolmente: l'energia è andata su orchestrazione, metriche, reasoning. Una Petri net ottenuta con PM4Py è identica a una fatta a mano, con anni di bug-fix in più.",[15,153,154,157,158,161,162,165],{},[43,155,156],{},"2. Scoring composito per raccomandare un miner."," Le cinque metriche sono spesso in conflitto: un modello iper-semplice ha precision bassa, un modello che fitta il log perfettamente spesso non generalizza. Definiamo un ",[43,159,160],{},"F-score pesato"," ",[24,163,164],{},"fitness·0.4 + precision·0.3 + generalization·0.2 + simplicity·0.1"," che raccomanda il modello di default. Pesi arbitrari ma espliciti — meglio una scelta difendibile di una media naive.",[15,167,168,171],{},[43,169,170],{},"3. LLM come reasoning layer, non come oracolo."," L'LLM non scopre il processo: riceve il modello già scoperto + le metriche + statistiche del log e produce linguaggio naturale sopra. Cinque capability distinte:",[173,174,175,178,181,184,187],"ul",{},[58,176,177],{},"report strutturato (executive summary + rischi + raccomandazioni)",[58,179,180],{},"lista di anomalie con severità in JSON strutturato",[58,182,183],{},"suggerimenti di ottimizzazione prioritizzati",[58,185,186],{},"predizione del next event di un trace parziale con confidence",[58,188,189],{},"chatbot contestuale sulle analisi in corso",[15,191,192,193,196],{},"Il prompt engineering inserisce statistiche ",[19,194,195],{},"reali"," nel contesto (numero di case, attività uniche, durata media). Fallback deterministico se l'API remota non è disponibile — nessuna dipendenza hard dal modello esterno.",[15,198,199,202],{},[43,200,201],{},"4. Analytics disaccoppiati dalla discovery."," Endpoint separati per variant analysis, bottleneck detection, performance metrics, data-quality assessment. Chi vuole solo esplorare un dataset non è costretto a lanciare prima una discovery.",[15,204,205,208],{},[43,206,207],{},"5. Reverse proxy + worker pool anche su un progetto d'esame."," Scelta volutamente didattica: rate limiting, gzip, security header, worker pool, health check — pattern production-grade che valeva imparare in un contesto controllato invece di improvvisare al primo lavoro.",[10,210,212],{"id":211},"numeri","Numeri",[173,214,215,222,236,242],{},[58,216,217,218,221],{},"~",[43,219,220],{},"2.800 righe Python"," su 8 moduli + dashboard JS\u002FHTML",[58,223,224,227,228,231,232,235],{},[43,225,226],{},"3 algoritmi"," di discovery · ",[43,229,230],{},"5 metriche"," di valutazione · ",[43,233,234],{},"4 formati"," di visualizzazione",[58,237,238,241],{},[43,239,240],{},"5 capability LLM"," (report, anomalie, ottimizzazione, next-event, chatbot)",[58,243,244,247],{},[43,245,246],{},"3 dataset"," sintetici bundled (smart home CASAS, e-commerce, daily routines) + upload custom",[10,249,251],{"id":250},"cosa-mi-porto-dietro","Cosa mi porto dietro",[15,253,254,255,258],{},"Far convivere formal methods classici (algoritmi Petri-based) e LLM generativo è meno ovvio di quanto sembri. ",[43,256,257],{},"Il valore è la divisione del lavoro",": l'algoritmo classico dà garanzie formali (soundness, completezza), l'LLM dà linguaggio naturale per umani. Se ti fidi del secondo per la parte formale, stai sbagliando lavoro. Se ignori il primo quando hai un LLM a portata, stai lasciando valore sul tavolo.",[15,260,261,262,127],{},"Progetto sviluppato in gruppo all'",[43,263,264],{},"Università degli Studi di Bari Aldo Moro",{"title":110,"searchDepth":266,"depth":266,"links":267},2,[268,269,270,271,272,273],{"id":12,"depth":266,"text":13},{"id":49,"depth":266,"text":50},{"id":90,"depth":266,"text":91},{"id":144,"depth":266,"text":145},{"id":211,"depth":266,"text":212},{"id":250,"depth":266,"text":251},"studies","md",true,null,{},10,"\u002Fprojects\u002Fit\u002Fprocess-mining-system","2026","Formal Methods in Computer Science · MSc curriculum AI",{"title":5,"description":110},"process-mining-system",[286,97,287,288,289,290,291],"Python","PM4Py","pandas · scikit-learn","Gemini","Docker","Gunicorn · reverse proxy","projects\u002Fit\u002Fprocess-mining-system","Sistema full-stack di process mining con tre algoritmi classici di discovery, valutazione multi-metrica e un layer di reasoning LLM sopra i modelli scoperti.","bCIRvuNLUJaFjK5g5NT7w1BXSFJ2DPsNSUsg3ROdFr0",1781346783287]