$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Dichiarazione etica, dataset, software e preparazione dei dati
I risultati di questo studio si sono basati sul dataset Heart Disease del Repository di Machine Learning dell'UCI Learning Repository. Poiché si tratta di una risorsa pubblicamente accessibile e de-identificata, il suo utilizzo non ha richiesto l'approvazione del comitato etico. Gli autori verificano inoltre l'originalità di questo manoscritto, confermando che non sia stato precedentemente pubblicato o inviato ad altre riviste.
Il dataset sulle malattie cardiache di Cleveland è stato suddiviso in set di addestramento e test con un valore 80/20. Il dataset contiene tipicamente 303 istanze; Pertanto, sono stati utilizzati circa 242 campioni per l'addestramento e 61 campioni sono stati conservati come set di prova pulito. I campioni sintetici generati dal GAN o dal metodo di fallback gaussiano sono stati aggiunti solo ai dati di addestramento per ridurre il rischio di perdita di dati. Il set finale di addestramento aumentato consisteva in circa 242 campioni reali e 1.000 campioni sintetici, per un totale di 1.242 campioni di addestramento. Non fu utilizzato alcun set fisso di validazione statica. Invece, durante l'addestramento del modello veniva applicata la validazione incrociata stratificata, con ogni piega che suddivideva i dati di addestramento aumentati in sottoinsiemi di addestramento e validazione.
Il dataset veniva caricato in un DataFrame Pandas e ispezionato per eventuali valori mancanti. Le caratteristiche numeriche con valori mancanti sono state gestite tramite imputazione mediana con la classe SimpleImputer di scikit-learn usando strategia = 'mediana'. Le caratteristiche categoriche con valori mancanti sono state gestite tramite imputazione modale con SimpleImputer usando strategia = 'most_frequent'. I meccanismi di mancanza sono stati documentati calcolando la percentuale mancante per ogni caratteristica usando df.isnull().sum() / len(df). I modelli di mancanza non casuali sono stati valutati confrontando i valori medi di altre caratteristiche tra campioni con e senza dati mancanti, utilizzando test t. per le caratteristiche numeriche e test chi-quadrato per le caratteristiche categoriche. La mancanza veniva poi documentata come Mancante Completamente a Caso (MCAR), Mancante a Caso (MAR) o Mancante Non a Caso (MNAR), dove applicabile.
Per i dataset con mancanza sostanziale, è stata raccomandata un'analisi di sensibilità confrontando l'imputazione mediana/modalità con l'imputazione multipla tramite equazioni concatenate (MICE), utilizzando fancyimpute. IterativeImputer con max_iter = 10, e imputazione KNN, usando fancyimpute. KNN con k = 5. Una differenza di accuratezza inferiore a 0,03 è stata trattata come indicazione della robustezza del metododi imputazione 12. Questa analisi di sensibilità è stata considerata opzionale per il dataset di Cleveland a causa della sua limitata mancanza, ma è stata raccomandata per altri dataset clinici con valori mancanti più del 5%. I pattern di mancanza sono stati visualizzati anche utilizzando la libreria missingno generando una mappa di calore della matrice mancante con msno.matrix(df). Il raggruppamento dei pattern di mancanza è stato utilizzato per identificare se i valori mancanti co-ocorrevano sistematicamente, il che potrebbe indicare meccanismi MNAR che richiedono l'intervento di esperti clinici.
Le caratteristiche numeriche sono state standardizzate utilizzando la normalizzazione z-score. StandardScaler di scikit-learn è stato inserito sui dati di addestramento e poi applicato sia ai set di addestramento che a quelli di test. Le variabili categoriche venivano codificate usando la codifica one-hot. Il tipo di dolore toracico (cp), che contiene quattro categorie, è stato convertito in quattro colonne indicatori binarie usando pandas.get_dummies. La talassemia (thal), che comprende tre categorie, è stata convertita in tre colonne indicatori binarie. Poiché il generatore e il discriminatore GAN utilizzavano una dimensione fissa di input/output di 13 caratteristiche corrispondenti al dataset originale prima della codifica one-hot, i campioni sintetici venivano generati nello spazio originale di 13 caratteristiche e poi passati attraverso la stessa pipeline di codifica one-hot dei dati reali. Questo ha mantenuto la compatibilità con l'architettura GAN permettendo al contempo di utilizzare funzionalità codificate per l'addestramento dei modelli.
Definizioni matematiche e metriche di qualità
La distanza di Fréchet veniva utilizzata per confrontare le distribuzioni di caratteristiche reali e sintetiche. La distanza di Fréchet Fr(F, G) tra due distribuzioni F e G è stata definita come segue:
Fr2(F,G)=minX,YE|X-Y|2 (1)
dove E rappresenta l'aspettativa, e la minimizzazione si assume su tutte le variabili casuali X e Y con distribuzioni F e G,rispettivamente 19.
L'Ottimizzazione Harris Hawk (HHO) è stata utilizzata come metodo di ottimizzazione metaeuristica. HHO è ispirato dal comportamento di caccia cooperativo degli Harrishawks 20. La transizione tra le fasi di esplorazione e sfruttamento era controllata dall'energia di fuga E. Nella fase di esplorazione, dove |E| ≥ 1, l'aggiornamento fu definito come segue:
X(t+1) = Xrand (t) - r1 | Xrand (t) - 2r2X (t)|
Nella fase di sfruttamento, dove |E| < 1, gli aggiornamenti erano determinati dall'energia di fuga E = 2E(1 − t/T) e dalla forza del salto J = 2(1 − r5). Nella condizione di assedio morbido, dove sono ≥ 0,5 e |E| ≥ 0.5, l'aggiornamento è stato definito come segue:
X(t+1) = ΔX(t) - E|JX coniglio (t) - X(t)|
Nella condizione di assedio duro, dove sono ≥ 0,5 e |E| < 0.5, l'aggiornamento è stato definito come segue:
X(t+1) =X coniglio (t) - E|ΔX(t)|
L'equità è stata valutata utilizzando parità statistica e equilibrio del tasso di errore, seguendo Hardt et al.20 e Lima et al.21. Differenza di parità demografica, differenza di probabilità equalizzata e errore di calibrazione basato sull'età sono stati utilizzati come metriche di equità.

ΔEO = max(|TPRA - TPRB |,| FPRA - FPRB |)
ΔBS=|BS età<50 - BSetà>50 |
dove BS è il punteggio di Brier:

L'interpretabilità del dashboard si basava sui valori SHAP, calcolati utilizzando la teoria dei giochi coalizionali18.

dove Φi rappresenta l'attribuzione SHAP per la caratteristica i, F. f(S) rappresenta l'insieme di tutte le caratteristiche e rappresenta la previsione del modello per un sottoinsieme di caratteristiche S.
Aumento dei dati basato su GAN
Per affrontare la scarsità di dati e lo squilibrio di classe, è stata utilizzata una Rete Generativa Adversariale (GAN) per generare campioni sintetici. L'architettura del generatore era configurata in TensorFlow/Keras. Accettava un vettore di rumore a 100 dimensioni campionato da una distribuzione normale standard N(0,1), seguito da strati densi con 128, 256 e 512 unità usando l'attivazione ReLU. Il livello di uscita conteneva 13 unità, corrispondenti alla dimensione originale della caratteristica, e utilizzava l'attivazione sigmoide.
L'architettura del discriminatore accettava un vettore di caratteristiche a 13 dimensioni come input. Era composto da strati densi con 512, 256 e 128 unità utilizzando attivazione LeakyReLU con α = 0,2. Lo strato di output conteneva un'unità con attivazione sigmoide per la classificazione binaria di campioni reali rispetto a sintetici.
Il GAN fu addestrato per 100 epoche utilizzando un lotto di 64 anni. L'ottimizzatore Adam veniva utilizzato con un tasso di apprendimento di 0,0002, β1 = 0,5 e β2 = 0,999. Durante ogni epoca, il discriminatore veniva allenato alternativamente su lotti reali e sintetici, e il generatore veniva addestrato per ingannare il discriminatore. Dopo l'addestramento, furono inseriti 1.000 vettori di rumore casuale nel generatore per produrre 1.000 campioni sintetici, che venivano aggiunti solo al set di addestramento.
Il collasso delle modalità è stato monitorato durante l'addestramento GAN misurando la varianza di ogni caratteristica sintetica su 100 campioni generati ogni 10 epoche. Se la varianza di una caratteristica scendeva sotto il 10% della corrispondente varianza dei dati reali per tre controlli consecutivi, si sospettava il collasso della modalità. Le strategie di mitigazione includevano la riduzione del tasso di apprendimento a 1 × 10⁻4, l'aumento della dimensione del lotto a 128, il riavvio dell'allenamento con un'inizializzazione del peso diversa, o la sostituzione del GAN standard con il GAN di Wasserstein con Gradient Penalty (WGAN-GP), come descritto da Arjovsky et al.17. L'implementazione utilizzava un GAN standard con un fallback di perturbazione gaussiana per garantire la generazione di dati sintetici quando TensorFlow non era disponibile.
La qualità dei dati sintetici è stata valutata calcolando la distanza di Fréchet tra le distribuzioni reali e sintetiche utilizzando un'implementazione personalizzata. Un classificatore, come la regressione logistica, è stato anche addestrato per distinguere campioni reali da sintetici; L'accuratezza della classificazione a rischio è stata trattata come indicazione di alta fedeltà. È stato calcolato l'AUC di Precisione-Recall, con valori superiori a 0,9 considerati indicativo di una buona cattura della distribuzione. Sono state inoltre confrontate le correlazioni di Pearson tra coppie di caratteristiche nei dataset reali e sintetici, con differenze inferiori a 0,05 considerate accettabili come conservazione della struttura correlazionale.
Quando TensorFlow/Keras non era disponibile o l'addestramento GAN falliva, veniva utilizzato un metodo di fallimento per perturbazioni gaussiane. Per ogni classe, la media (μ) e la deviazione standard (σ) di ogni caratteristica venivano calcolate dal set di addestramento. I campioni sintetici venivano quindi generati come segue:
Xsynthetic = μ + ε × σ × 0,05, dove ε ~ N(0,1)
Le etichette di classe venivano generate in proporzione alla distribuzione originale delle classi. Questo fallback è stato incluso per supportare la riproducibilità tra ambienti senza dipendenze da deep learning.
Selezione delle caratteristiche ibride
È stata applicata una strategia ibrida di selezione delle caratteristiche a due fasi. Nella prima fase è stato eseguito un pre-filtraggio statistico. Per ogni caratteristica xi nell'insieme di caratteristiche X, i valori sono stati divisi in due gruppi secondo la variabile binaria di esito: G0 per y = 0, che indica nessuna malattia, e G1 per y = 1, che indica la presenza della malattia. Il test t a due campioni di Welch è stato eseguito utilizzando scipy.stats.ttest_ind con equal_var = Falso. La dimensione dell'effetto d di Cohen fu quindi calcolata come segue:
d = (media1 − media2) / pooled_std
dove:
pooled_std = sqrt((std12 + std22)/2)
Il nome della caratteristica, il valore p e il valore d di Cohen erano memorizzati in una tabella dei risultati. Le caratteristiche sono state selezionate se soddisfacevano entrambi i criteri: p-value < 0,05 e |Il d| di Cohen ≥ 0,5. Il set di funzionalità risultante era definito come Xfiltered.
Il test t di Welch è stato utilizzato perché è appropriato per caratteristiche numeriche continue come età, talaco e oldpeak. Per caratteristiche categoriche binarie come sesso ed exang, il test t. produce risultati comparabili a un test delle proporzioni confrontato tra due gruppi. Caratteristiche multi-categoriche come cp e thal sono state codificate in one-hot, e ogni indicatore binario è stato testato individualmente rispetto alla variabile di risultato. Questo approccio è stato ritenuto appropriato perché il dataset di Cleveland contiene più di 30 campioni, le caratteristiche erano standardizzate prima dell'analisi e equal_var = False spiega le varianze diseguali tra gruppi. Per le caratteristiche con gravi violazioni della normalità, il test Mann-Whitney U è stato considerato come un test non parametrico alternativo.
La soglia p < 0,05 seguiva la significanza statistica convenzionale, mentre |Il d| di Cohen ≥ 0,5 corrispondeva a una dimensione d'effetto da moderata a grande. Per dataset con campioni piccoli o risultati rari, sono stati raccomandati l'aggiustamento basato su bootstrap, la correzione di Hedges g o soglie esplorative rilassate con input clinici esperti. Ad esempio, 1.000 ricampionamenti bootstrap potrebbero essere usati per calcolare gli intervalli di confidenza d di Cohen, e la g di Hedges potrebbe essere applicata per correggere il bias di piccoli campioni. Caratteristiche con statistiche borderline, come valori p tra 0,03 e 0,08 o |d| Valori tra 0,4 e 0,6, sono stati documentati per una possibile revisione clinica degli esperti prima dell'esclusione.
Nella seconda fase, l'Ottimizzazione Harris Hawk (HHO) è stata applicata al set di funzionalità filtrato statisticamente. La dimensione della popolazione HHO fu impostata a 20 e il numero massimo di iterazioni a 50. Ogni soluzione era rappresentata come un vettore binario con lunghezza pari al numero di caratteristiche in Xfiltered, dove 1 indicava che una caratteristica era stata selezionata e 0 indicava che non era stata selezionata. Le posizioni continue dell'HHO sono state mappate su vettori binari usando la funzione di trasferimento a forma di V:
T(x) = |tanh(x)|
Il valore binario era impostato a 1 se T(x) > 0,5 e a 0 altrimenti. La funzione a V è stata scelta perché supporta l'esplorazione e lo sfruttamento bilanciati durante la conversione binaria.
La funzione di fitness per ciascuna soluzione è stata definita utilizzando la regressione logistica. Un modello di regressione logistica è stato addestrato utilizzando solo le caratteristiche selezionate dal vettore binario, e la validazione incrociata a 5 punti è stata eseguita utilizzando cross_val_score da scikit-learn. La fitness veniva calcolata come segue:
Fitness = 1 − accuratezza media
La popolazione delle posizioni dei falchi è stata inizializzata uniformemente nell'intervallo [−1, 1] usando numpy.random.uniform(−1, 1, (population_size, n_features)) con un seme casuale fisso di 42 per la riproducibilità. Ad ogni iterazione veniva valutata la fitness di tutti i falchi, la posizione migliore del falco veniva identificata come il coniglio e le posizioni venivano aggiornate utilizzando le equazioni di esplorazione e sfruttamento HHO basate sull'energia di fuga. Dopo la convergenza, il vettore binario con le migliori prestazioni veniva selezionato come sottoinsieme di caratteristiche finale, Xfinal.
Le caratteristiche selezionate sono state registrate da una singola esecuzione di ottimizzazione HHO con un seed casuale fisso. Per applicazioni che richiedono maggiore fiducia statistica, sono state raccomandate 30 run indipendenti con diversi seed casuali, e sono stati selezionati elementi di consenso che compaiono in almeno l'80% delle sessioni. L'implementazione riportata si basava su una singola esecuzione rappresentativa, poiché i test preliminari indicavano una convergenza costante.
Addestramento e ottimizzazione del modello
Sono stati considerati tre modelli: Regressione Logistica, Foresta Casuale e una Rete Neurale Artificiale (ANN) ottimizzata per PSO. La regressione logistica è stata addestrata utilizzando la validazione incrociata stratificata a 5 volte per mantenere la distribuzione delle classi. La forza di regolarizzazione C è stata ottimizzata utilizzando lo spazio di ricerca C
[0,001, 0,01, 0,1, 1, 10]. Per ogni piega e ogni valore di C, il modello veniva addestrato sulla piega di addestramento e valutato sulla piega di validazione. È stato selezionato il valore di C che massimizza l'accuratezza media della validazione tra le pieghe.
Il modello Random Forest è stato addestrato utilizzando l'accordatura degli iperparametri. Lo spazio di ricerca includeva max_depth = [5, 10, 15, Nessuno] e min_samples_split = [2, 5, 10]. La ricerca a griglia con validazione incrociata a 5 volte è stata eseguita utilizzando ROC-AUC come metrica di ottimizzazione tramite GridSearchCV con punteggio = 'roc_auc'. Il modello di Foresta Casuale selezionato utilizzava max_depth = 10 e min_samples_split = 5. La stima del punteggio fuori dalla borsa (OOB) è stata abilitata usando oob_score = Vero.
L'overfitting è stato valutato calcolando il divario tra l'accuratezza dell'addestramento e il punteggio OOB:
overfitting_gap = training_accuracy − oob_score
Un gap di overfitting sotto 0,05 è stato considerato indicativo di una buona generalizzazione, mentre un gap superiore a 0,10 indicava la necessità di ridurre max_depth o aumentare min_samples_split. Con un punteggio OOB di 0,9296 e una precisione tipica dell'allenamento tra 0,94 e 0,96, il divario era di circa 0,01–0,03.
Un classificatore ANN è stato inoltre ottimizzato utilizzando Particle Swarm Optimization (PSO). L'architettura ANN consisteva in uno strato di input, uno strato nascosto con 64 neuroni tramite attivazione ReLU, e uno strato di output con un neurone che utilizzava l'attivazione sigmoide. PSO fu inizializzato con 50 particelle e 50 iterazioni ed è stato utilizzato per ottimizzare i pesi iniziali della rete. L'ANN veniva poi addestrato utilizzando la retropropagazione standard. Poiché l'ottimizzazione PSO veniva eseguita sugli stessi dati di addestramento senza validazione incrociata annidata, questo componente veniva trattato con cautela. Per applicazioni future, è stata raccomandata la validazione incrociata annidata, con un anello esterno 10-fold per la valutazione e un loop interno 10-fold per la selezione degli iperparametri PSO. Un gap di generalizzazione sotto 0,08 è stato considerato accettabile, mentre un gap superiore a 0,15 indicava un potenziale overfitting che richiedeva la semplificazione del modello.
Valutazione del modello
La valutazione del modello è stata effettuata utilizzando la validazione incrociata stratificata a 10 volte sull'insieme finale di caratteristiche, Xfinal. In ogni fold, sono stati addestrati i modelli di Regressione Logistica e Foresta Casuale sui dati di addestramento e valutati sui dati di validazione. Accuratezza, Precisione, Richiamo, F1-score e ROC-AUC sono stati calcolati utilizzando classification_report e roc_auc_score da scikit-learn. La media e la deviazione standard di tutte le metriche sono state calcolate tra le 10 variazioni.
Il gap di generalizzazione è stato calcolato anche per ogni piega come segue:
generalization_gap = training_accuracy − validation_accuracy
È stato riportato il divario medio di generalizzazione su tutte e 10 le variazioni. Un gap medio sotto 0,08 è stato considerato indicativo di sovraadattamento minimo, mentre un gap superiore a 0,15 suggeriva sovraadattamento e la necessità di regolarizzazione o riduzione della complessità del modello. Sono stati eseguiti test Wilcoxon con rango firmato per confrontare il quadro proposto con i metodi di base su 10 fold utilizzando α = 0,01.
Analisi della spiegabilità
L'analisi della spiegabilità è stata effettuata utilizzando metodi specifici e indipendenti dal modello. Per la Regressione Logistica, il modello finale è stato adattato e i valori dei coefficienti sono stati estratti per ogni caratteristica selezionata. I odds ratio sono stati calcolati come exp(coefficiente) e sono stati calcolati intervalli di confidenza del 95% utilizzando gli errori standard dei coefficienti.
Per Random Forest, i punteggi di importanza di Gini sono stati estratti dal modello addestrato usando l'attributo feature_importances_ e normalizzati per sommare 1. Le spiegazioni SHAP venivano generate utilizzando la libreria SHAP. Un oggetto KernelExplainer è stato creato utilizzando il modello addestrato e un dataset di background, come 100 campioni di addestramento selezionati casualmente. I valori SHAP venivano calcolati per tutte le istanze del set di test usando shap_values. I grafici riassuntivi degli sciami di api venivano generati usando shap.summary_plot, e i grafici a barre dei valori assoluti medi di SHAP venivano generati usando shap.bar_plot.
Sono stati generati Grafici di Dipendenza Parziale (PDP) per le caratteristiche principali identificate dall'analisi SHAP. Per ogni caratteristica selezionata, veniva creata una sequenza di valori che attraversava l'intervallo di caratteristiche. Ogni valore veniva sostituito nella colonna delle caratteristiche mantenendo costanti le altre caratteristiche, e la probabilità media prevista veniva calcolata in tutte le ipotesi. I valori delle caratteristiche sono stati tracciati rispetto alle previsioni medie usando matplotlib. Intervalli di confidenza del 95% sono stati aggiunti utilizzando 100 iterazioni di ricampionamento bootstrap.
I grafici di Aspettativa Condizionale Individuale (ICE) sono stati generati per caratteristiche selezionate tracciando traiettorie di previsione per singole istanze man mano che i valori delle caratteristiche cambiavano. La linea del PDP è stata sovrapposta al terreno ICE. I metodi di spiegazione sono stati confrontati calcolando la correlazione di rango di Spearman tra i rapporti di probabilità di regressione logistica e i valori SHAP di Random Forest utilizzando scipy.stats.spearmanr. Sono state documentate discrepanze tra i metodi esplicativi per l'interpretazione clinica. Quando i coefficienti di SHAP e regressione logistica si sono scontrati, è stato esaminato il PDP per quella caratteristica. Se il PDP mostrava una tendenza non lineare, la spiegazione SHAP era prioritaria rispetto al coefficiente di regressione logistica perché la Foresta Casuale può catturare relazioni non lineari che i modelli lineari non possono.
Protocollo di generalizzazione del framework per la validazione esterna usando MIMIC-III
È stato delineato un protocollo di validazione esterno per l'applicazione del framework al database MIMIC-III. L'accesso a MIMIC-III richiederebbe l'approvazione di PhysioNet e il completamento dell'addestramento umano richiesto. La coorte proposta includerebbe pazienti adulti di età pari o superiore a 18 anni con il primo ricovero in terapia intensiva e codici ICD-9 410–414 per l'infarto miocardico acuto o codici ICD-10 I20–I25 per la cardiopatia ischemica. I criteri di esclusione includerebbero valori mancanti di oltre il 30% nelle caratteristiche target, durata del soggiorno sotto le 24 ore, età superiore a 90 anni, precedenti interventi di chirurgia cardiaca o cardiopatia congenita.
L'esito proposto era eventi avversi cardiaci maggiori (MACE) entro 72 ore dal ricovero, definiti come un composto di mortalità ospedaliera, shock cardiogeno o aritmia ventricolare che richiedeva intervento. Caratteristiche di serie temporali come frequenza cardiaca e pressione sanguigna verrebbero aggregate nelle prime 24 ore di permanenza in terapia intensiva utilizzando media, mediana, minimo, massimo e tendenza, dove la tendenza sarebbe stimata come la pendenza della regressione lineare nel tempo. La frequenza cardiaca massima sarebbe stata usata come equivalente mappato del talac.
Le caratteristiche del dataset Cleveland sarebbero state mappate alle variabili MIMIC-III. Ad esempio, il thalach sarebbe stato mappato alla frequenza cardiaca massima registrata durante le prime 24 ore di ricovero in terapia intensiva, la cp sarebbe stata mappata a valutazioni strutturate del dolore e menzioni del dolore toracico estratte tramite NLP, e oldpeak sarebbe stata mappata alla deviazione del segmento ST dai referti ECG. Veniva creata una tabella di mappatura per documentare tutti gli allineamenti delle caratteristiche.
Prima di applicare l'intera pipeline, l'estrazione NLP per oldpeak sarebbe validata su 100 referti ECG selezionati casualmente. Precisione, richiamo e punteggio F1 sarebbero calcolati in base all'annotazione manuale da parte di due clinici. Se il punteggio F1 era inferiore a 0,85, i pattern regex venivano rivisti o venivano utilizzati dati ECG strutturati dagli eventi grafici come alternativa. La pipeline di preprocessing verrebbe poi ripetuta sui dati estratti MIMIC-III, il GAN verrebbe riaddestrato per l'augmentazione, la selezione ibrida delle caratteristiche verrebbe riapplicata, i modelli verranno riaddestrati, verranno generate spiegazioni e le metriche di performance verrebbero confrontate con i risultati del dataset Cleveland.
Implementazione di dashboard clinici
Un prototipo di dashboard clinico basato sul web è stato progettato utilizzando un framework come Flask o Django. Gli endpoint API HL7/FHIR erano previsti per l'integrazione con EHR, con autenticazione e autorizzazione configurate secondo le politiche di sicurezza istituzionali. Le funzioni di mappatura dati sono state progettate per convertire i dati EHR in formato di input modello.
L'interfaccia utente includeva tre viste principali. La visuale pre-screening mostrava la demografia dei pazienti e i punteggi di rischio calcolati con livelli di rischio codificati a colori. La vista del supporto alle decisioni mostrava un grafico a cascata SHAP che mostrava i principali fattori contributivi per un paziente specifico. La vista della pianificazione dell'intervento ha permesso l'analisi 'e se' aggiustando i fattori di rischio modificabili e mostrando previsioni aggiornate sul rischio. Era inclusa la funzionalità di esportazione per salvare i report come file PDF o integrarli con i sistemi di documentazione EHR.
Per il futuro impiego clinico, è stata pianificata una valutazione dell'usabilità tramite dashboard con almeno cinque clinici. La valutazione utilizzerebbe la System Usability Scale, con un punteggio obiettivo superiore a 68, tempi di completamento del compito, con una riduzione target di almeno il 20% rispetto all'uso solo dell'EHR, e scale di soddisfazione a 5 punti per chiarezza e fiducia nella spiegazione. Questa valutazione dell'usabilità era prevista come passo futuro e non è stata implementata nello studio attuale.