{"id":34478,"date":"2025-11-19T12:01:45","date_gmt":"2025-11-19T11:01:45","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=34478"},"modified":"2025-11-19T12:45:32","modified_gmt":"2025-11-19T11:45:32","slug":"oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/","title":{"rendered":"Oltre la Black Box: Guida pratica alla XAI per sviluppatori"},"content":{"rendered":"\n<p>Immagina di costruire un sistema di machine learning per una banca che deve decidere se approvare mutui da centinaia di migliaia di euro. Il modello funziona benissimo: accuratezza del 94%, metriche impeccabili. Tutto perfetto, fino a quando un cliente rifiutato chiede: &#8220;Perch\u00e9 mi avete negato il prestito?&#8221; E tu, come sviluppatore, non hai una risposta chiara da dare.<\/p>\n\n\n\n<p>Questo scenario non \u00e8 ipotetico. \u00c8 la realt\u00e0 quotidiana di migliaia di team che lavorano con l&#8217;intelligenza artificiale.<strong> I modelli di machine learning, soprattutto quelli pi\u00f9 complessi come le reti neurali profonde o i gradient boosting ensemble, operano come scatole nere:<\/strong> ricevono input, producono output, ma il processo decisionale interno rimane oscuro persino a chi li ha creati.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-il-problema-della-black-box-nell-ai-moderna\">Il problema della black box nell&#8217;AI moderna<\/h2>\n\n\n\n<p>Quando parliamo di &#8220;black box&#8221; nel contesto dell&#8217;intelligenza artificiale, ci riferiamo a modelli che non permettono di comprendere il ragionamento che porta a un determinato risultato. Prendiamo un esempio concreto: hai addestrato una rete neurale per diagnosticare malattie da immagini radiografiche. Il modello identifica un tumore con il 97% di confidenza. Eccellente, vero? Ma cosa succede se il medico chiede: &#8220;Su cosa si \u00e8 basato per questa diagnosi?&#8221; La risposta \u00e8 frustrante: non lo sappiamo con certezza.<\/p>\n\n\n\n<p>Questa opacit\u00e0 crea problemi concreti in diversi ambiti:<\/p>\n\n\n\n<p><strong>Nel settore finanziario<\/strong>, le normative come il GDPR europeo stabiliscono il diritto degli individui a ottenere spiegazioni sulle decisioni automatizzate che li riguardano. Una banca che usa l&#8217;AI per valutare il rischio creditizio deve poter giustificare ogni rifiuto. Non basta dire &#8220;l&#8217;algoritmo ha deciso cos\u00ec&#8221;.<\/p>\n\n\n\n<p><strong>In ambito medico<\/strong>, la posta in gioco \u00e8 ancora pi\u00f9 alta. Un sistema che raccomanda un trattamento oncologico o esclude una diagnosi deve essere trasparente. I medici hanno bisogno di capire se il modello ha identificato pattern clinicamente rilevanti o se si sta basando su correlazioni spurie presenti nei dati di training.<\/p>\n\n\n\n<p><strong>Nel recruiting<\/strong>, algoritmi di screening dei CV possono perpetuare bias nascosti nei dati storici. Se il tuo modello scarta sistematicamente candidati di un certo genere o background, devi poterlo identificare e correggere. Ma come fai se non capisci cosa sta guardando il modello?<\/p>\n\n\n\n<p><strong>Nei sistemi di giustizia predittiva<\/strong>, utilizzati in alcuni paesi per valutare il rischio di recidiva, la mancanza di trasparenza solleva questioni etiche fondamentali. Decidere della libert\u00e0 di una persona sulla base di un algoritmo incomprensibile \u00e8 accettabile?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-xai-rendere-l-ai-comprensibile-agli-umani\">XAI: rendere l&#8217;AI comprensibile agli umani<\/h2>\n\n\n\n<p>\u00c8 qui che entra in gioco la XAI, acronimo di <strong>Explainable Artificial Intelligence<\/strong>. Non si tratta di una singola tecnica, ma di un intero campo di ricerca che si pone un obiettivo ambizioso: rendere i modelli di intelligenza artificiale comprensibili agli esseri umani, senza sacrificarne le prestazioni.<\/p>\n\n\n\n<p>La XAI si basa su un principio fondamentale: <strong>la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0.<\/strong> Non solo per questioni etiche o normative, ma anche per ragioni pratiche. Un modello interpretabile \u00e8 pi\u00f9 facile da debuggare, da migliorare e da mettere in produzione con fiducia.<\/p>\n\n\n\n<p>Esistono due approcci principali nella XAI:<\/p>\n\n\n\n<p><strong>I modelli glass-box<\/strong> sono intrinsecamente interpretabili. La loro struttura permette di capire direttamente come arrivano alle decisioni. Pensa a una regressione lineare: puoi vedere esattamente quanto ogni variabile contribuisce al risultato finale. Il trade-off tradizionale era che questi modelli sacrificavano accuratezza in cambio di interpretabilit\u00e0.<\/p>\n\n\n\n<p><strong>Gli &#8216;spiegatori&#8217; post-hoc<\/strong> lavorano con modelli black-box gi\u00e0 addestrati. Una volta che hai il tuo modello &#8216;opaco&#8217; ma performante, applichi tecniche di spiegazione a posteriori. \u00c8 come avere un interprete che traduce le decisioni del modello in linguaggio comprensibile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-interpretml-xai-accessibile-per-tutti\">InterpretML: XAI accessibile per tutti<\/h2>\n\n\n\n<p>Tra le librerie disponibili per la XAI in <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/top-10-piattaforme-online-per-fare-pratica-con-python\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a>, <strong>InterpretML<\/strong> si distingue per un equilibrio raro tra potenza e semplicit\u00e0 d&#8217;uso. Sviluppata da Microsoft Research, questa libreria open-source offre strumenti sia per modelli glass-box che per spiegazioni post-hoc, con un&#8217;interfaccia unificata che abbassa drasticamente la barriera d&#8217;ingresso.<\/p>\n\n\n\n<p>L&#8217;installazione \u00e8 immediata:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">pip install interpret<\/code><\/span><\/pre>\n\n\n<p>InterpretML brilla particolarmente per due aspetti: la visualizzazione interattiva delle spiegazioni attraverso un&#8217;interfaccia web automatica, e l&#8217;implementazione <a href=\"https:\/\/interpret.ml\/docs\/ebm.html\" target=\"_blank\" rel=\"noreferrer noopener\">dell&#8217;Explainable Boosting Machine<\/a> (EBM), un modello che riesce a combinare accuratezza competitiva con i migliori algoritmi black-box e interpretabilit\u00e0 totale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-explainable-boosting-machine-il-meglio-di-due-mondi\">Explainable Boosting Machine: il meglio di due mondi<\/h2>\n\n\n\n<p>L&#8217;EBM \u00e8 una tecnica che merita attenzione particolare. Si tratta di un algoritmo di tipo Generalized Additive Model (GAM) potenziato con tecniche di boosting. Suona complesso, ma il concetto \u00e8 elegante: il modello impara funzioni separate per ogni feature, poi le combina in modo additivo per fare la predizione finale.<\/p>\n\n\n\n<p>Cosa significa in pratica? Che puoi vedere esattamente come ogni variabile influenza il risultato. Se stai predicendo il rischio di default su un prestito, puoi visualizzare come il reddito annuo, il rapporto debito\/reddito, lo storico creditizio e altre variabili contribuiscono individualmente alla decisione finale.<\/p>\n\n\n\n<p>Il vantaggio dell&#8217;EBM rispetto a modelli lineari semplici \u00e8 che pu\u00f2 catturare relazioni non lineari complesse. Una variabile pu\u00f2 avere un effetto positivo in un certo range e negativo in un altro, e il modello lo rappresenta chiaramente. E a differenza di random forest o neural network, puoi vedere e comprendere queste relazioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-caso-pratico-classificazione-delle-iris-con-spiegazione\">Caso pratico: classificazione delle iris con spiegazione<\/h2>\n\n\n\n<p>Vediamo InterpretML in azione con un esempio concreto. Useremo il classico dataset Iris, che contiene misurazioni di 150 fiori appartenenti a tre specie diverse: setosa, versicolor e virginica. Per ogni fiore abbiamo quattro misure: lunghezza e larghezza del sepalo, lunghezza e larghezza del petalo.<\/p>\n\n\n\n<p>Anche se \u00e8 un dataset semplice, usato principalmente per didattica, ci permette di esplorare concetti che poi applicherai a problemi reali molto pi\u00f9 complessi.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from sklearn.datasets import load_iris\nfrom sklearn.model_selection import train_test_split\nfrom interpret.glassbox import ExplainableBoostingClassifier\nfrom interpret import show\nimport pandas <span class=\"hljs-keyword\">as<\/span> pd\n\n<span class=\"hljs-comment\"># Caricamento e preparazione dei dati<\/span>\niris = load_iris()\nX = pd.DataFrame(iris.data, columns=iris.feature_names)\ny = pd.Series(iris.target, name=<span class=\"hljs-string\">'species'<\/span>)\n\n<span class=\"hljs-comment\"># Split train\/test<\/span>\nX_train, X_test, y_train, y_test = train_test_split(\n    X, y, test_size=<span class=\"hljs-number\">0.2<\/span>, random_state=<span class=\"hljs-number\">42<\/span>, stratify=y\n)\n\n<span class=\"hljs-comment\"># Training del modello EBM<\/span>\nebm = ExplainableBoostingClassifier(random_state=<span class=\"hljs-number\">42<\/span>)\nebm.fit(X_train, y_train)\n\n<span class=\"hljs-comment\"># Valutazione<\/span>\naccuracy = ebm.score(X_test, y_test)\n<span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Accuratezza sul test set: {accuracy:.2%}\"<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Fin qui, nulla di diverso da qualsiasi altro classificatore sklearn. La magia inizia quando generiamo le spiegazioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-spiegazioni-globali-capire-il-modello-nel-suo-insieme\">Spiegazioni globali: capire il modello nel suo insieme<\/h2>\n\n\n\n<p>Le spiegazioni globali ci mostrano come il modello funziona in generale, su tutto il dataset. Quali variabili sono pi\u00f9 importanti? Come influenzano le predizioni?<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Generazione della spiegazione globale<\/span>\nebm_global = ebm.explain_global(name=<span class=\"hljs-string\">\"EBM - Iris Global\"<\/span>)\nshow(ebm_global)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Quando esegui <code>show(ebm_global)<\/code>, InterpretML avvia automaticamente un server locale e apre il browser su una dashboard interattiva. Questa interfaccia \u00e8 sorprendentemente ricca considerando che non hai scritto una riga di codice di visualizzazione.<\/p>\n\n\n\n<p>La prima cosa che vedrai \u00e8 un grafico a barre che mostra l&#8217;importanza di ogni feature. Nel caso del dataset Iris, tipicamente scoprirai che la larghezza del petalo (<code>petal width<\/code>) \u00e8 la variabile pi\u00f9 discriminante, seguita dalla lunghezza del petalo (<code>petal length<\/code>). Le caratteristiche del sepalo hanno un&#8217;importanza minore.<\/p>\n\n\n\n<p>Ma InterpretML va oltre. Cliccando su ogni feature, puoi visualizzare la sua &#8220;shape function&#8221;: un grafico che mostra esattamente come quella variabile influenza la predizione. Per la larghezza del petalo, per esempio, vedrai che:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Valori sotto 0.8 cm predicono fortemente la classe &#8220;setosa&#8221;<\/li>\n\n\n\n<li>Valori tra 1.0 e 1.8 cm indicano &#8220;versicolor&#8221;<\/li>\n\n\n\n<li>Valori sopra 1.8 cm suggeriscono &#8220;virginica&#8221;<\/li>\n<\/ul>\n\n\n\n<p>Questa \u00e8 informazione che puoi condividere con esperti di dominio. Un botanico potrebbe confermare che queste soglie hanno senso dal punto di vista biologico, o identificare anomalie nei dati.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-spiegazioni-locali-capire-le-singole-predizioni\">Spiegazioni locali: capire le singole predizioni<\/h2>\n\n\n\n<p>Le spiegazioni globali sono potenti, ma spesso hai bisogno di capire perch\u00e9 il modello ha fatto una predizione specifica su un particolare esempio. \u00c8 qui che entrano in gioco le spiegazioni locali.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Spiegazioni per i primi 5 esempi del test set<\/span>\nebm_local = ebm.explain_local(\n    X_test.iloc&#91;:<span class=\"hljs-number\">5<\/span>], \n    y_test.iloc&#91;:<span class=\"hljs-number\">5<\/span>], \n    name=<span class=\"hljs-string\">\"EBM - Iris Local\"<\/span>\n)\nshow(ebm_local)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>La visualizzazione locale \u00e8 ancora pi\u00f9 affascinante. Per ogni esempio, vedi un grafico a cascata che mostra:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Il valore base (la predizione media del modello)<\/li>\n\n\n\n<li>Come ogni feature sposta la predizione verso una classe o un&#8217;altra<\/li>\n\n\n\n<li>La predizione finale<\/li>\n<\/ol>\n\n\n\n<p>Prendiamo un esempio concreto. Immagina un fiore con queste caratteristiche:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lunghezza sepalo: 5.8 cm<\/li>\n\n\n\n<li>Larghezza sepalo: 2.7 cm<\/li>\n\n\n\n<li>Lunghezza petalo: 5.1 cm<\/li>\n\n\n\n<li>Larghezza petalo: 1.9 cm<\/li>\n<\/ul>\n\n\n\n<p>Il modello predice &#8220;virginica&#8221; con alta confidenza. La spiegazione locale ti mostra che:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La larghezza del petalo (1.9 cm) contribuisce fortemente verso &#8220;virginica&#8221; (+0.45)<\/li>\n\n\n\n<li>La lunghezza del petalo (5.1 cm) supporta anche questa predizione (+0.32)<\/li>\n\n\n\n<li>La lunghezza del sepalo ha un effetto neutro (+0.03)<\/li>\n\n\n\n<li>La larghezza del sepalo spinge leggermente verso &#8220;versicolor&#8221; (-0.08)<\/li>\n<\/ul>\n\n\n\n<p>Il contributo netto porta a una forte predizione per &#8220;virginica&#8221;. Puoi vedere esattamente quali caratteristiche hanno &#8220;votato&#8221; per quale classe e con quale forza.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-oltre-l-esempio-applicazioni-reali\">Oltre l&#8217;esempio : applicazioni reali<\/h2>\n\n\n\n<p>Il dataset Iris \u00e8 didattico, ma i concetti si estendono direttamente a problemi reali. Vediamo alcuni scenari dove ho visto InterpretML fare la differenza.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-credit-scoring-con-ebm\">Credit scoring con EBM<\/h3>\n\n\n\n<p>In un progetto per una fintech, dovevamo costruire un modello di credit scoring. I requisiti erano chiari: accuratezza competitiva con i migliori modelli e piena interpretabilit\u00e0 per compliance normativa.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from interpret.glassbox import ExplainableBoostingClassifier\nimport pandas <span class=\"hljs-keyword\">as<\/span> pd\n\n<span class=\"hljs-comment\"># Features tipiche per credit scoring<\/span>\nfeatures = &#91;\n    <span class=\"hljs-string\">'annual_income'<\/span>, <span class=\"hljs-string\">'debt_to_income_ratio'<\/span>, <span class=\"hljs-string\">'credit_history_length'<\/span>,\n    <span class=\"hljs-string\">'number_of_open_accounts'<\/span>, <span class=\"hljs-string\">'credit_utilization'<\/span>, <span class=\"hljs-string\">'payment_history_score'<\/span>,\n    <span class=\"hljs-string\">'number_of_inquiries'<\/span>, <span class=\"hljs-string\">'employment_length'<\/span>\n]\n\n<span class=\"hljs-comment\"># Training dell'EBM<\/span>\nebm_credit = ExplainableBoostingClassifier(\n    max_bins=<span class=\"hljs-number\">512<\/span>,  <span class=\"hljs-comment\"># Pi\u00f9 bins per catturare relazioni complesse<\/span>\n    interactions=<span class=\"hljs-number\">10<\/span>,  <span class=\"hljs-comment\"># Considera interazioni tra features<\/span>\n    learning_rate=<span class=\"hljs-number\">0.01<\/span>,\n    max_rounds=<span class=\"hljs-number\">5000<\/span>\n)\n\nebm_credit.fit(X_train&#91;features], y_train)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Le spiegazioni globali hanno rivelato insight interessanti. Il rapporto debito\/reddito aveva, come previsto, un forte impatto negativo oltre il 43%. Ma abbiamo scoperto che il numero di conti aperti aveva una relazione a U invertita: troppo pochi (0-2) o troppi (&gt;8) aumentavano il rischio, mentre 3-7 conti erano ottimali.<\/p>\n\n\n\n<p>Questo tipo di insight \u00e8 prezioso. Non solo soddisfa i requisiti normativi, ma suggerisce feature engineering mirate e aiuta a identificare potenziali problemi nei dati.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-diagnostica-medica-con-spiegazioni-post-hoc\">Diagnostica medica con spiegazioni post-hoc<\/h3>\n\n\n\n<p>Per un progetto di classificazione di immagini mediche, avevamo un modello CNN black-box con ottime prestazioni. Non potevamo sacrificare l&#8217;accuratezza, ma avevamo bisogno di ammissibilit\u00e0&#8217; . InterpretML offre anche spiegatori post-hoc per questi casi.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from interpret.blackbox import LimeTabular\nfrom sklearn.ensemble import RandomForestClassifier\n\n<span class=\"hljs-comment\"># Modello black-box gi\u00e0 addestrato<\/span>\nrf_model = RandomForestClassifier(n_estimators=<span class=\"hljs-number\">100<\/span>)\nrf_model.fit(X_train, y_train)\n\n<span class=\"hljs-comment\"># Spiegatore LIME<\/span>\nlime = LimeTabular(\n    model=rf_model.predict_proba, \n    data=X_train, \n    random_state=<span class=\"hljs-number\">42<\/span>\n)\n\n<span class=\"hljs-comment\"># Spiegazione locale<\/span>\nlime_local = lime.explain_local(\n    X_test.iloc&#91;:<span class=\"hljs-number\">1<\/span>], \n    y_test.iloc&#91;:<span class=\"hljs-number\">1<\/span>],\n    name=<span class=\"hljs-string\">\"LIME Explanation\"<\/span>\n)\nshow(lime_local)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>LIME (Local Interpretable Model-agnostic Explanations) crea un modello lineare locale attorno a ogni predizione, permettendoti di capire quali feature hanno influenzato quella specifica decisione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-gestire-interazioni-tra-features\">Gestire interazioni tra features<\/h2>\n\n\n\n<p>Una limitazione dei GAM classici \u00e8 che assumono che le features contribuiscano in modo indipendente. Nella realt\u00e0, spesso esistono interazioni: l&#8217;effetto di una variabile dipende dal valore di un&#8217;altra.<\/p>\n\n\n\n<p>L&#8217;EBM di InterpretML gestisce questo problema attraverso termini di interazione. Puoi specificare quante interazioni vuoi che il modello consideri:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">ebm_interactions = ExplainableBoostingClassifier(\n    interactions=<span class=\"hljs-number\">15<\/span>,  <span class=\"hljs-comment\"># Considera le top 15 interazioni<\/span>\n    max_interaction_bins=<span class=\"hljs-number\">32<\/span>\n)\nebm_interactions.fit(X_train, y_train)\n\n<span class=\"hljs-comment\"># Visualizza le interazioni scoperte<\/span>\nebm_global = ebm_interactions.explain_global()\nshow(ebm_global)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>La dashboard ti mostrer\u00e0 non solo l&#8217;importanza delle singole features, ma anche le interazioni significative. Per esempio, in un modello di churn prediction, potresti scoprire che l&#8217;interazione tra &#8220;durata contratto&#8221; e &#8220;numero di reclami&#8221; \u00e8 molto informativa: molti reclami sono tollerati per clienti di lungo corso, ma per clienti nuovi anche pochi reclami predicono fortemente l&#8217;abbandono.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-confrontare-modelli-interpretativi-e-black-box\">Confrontare modelli interpretativi e black-box<\/h2>\n\n\n\n<p>Un dubbio legittimo: quanto sacrifichiamo in termini di prestazioni usando modelli interpretabili? InterpretML rende facile il confronto.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\nfrom interpret.glassbox import ExplainableBoostingClassifier\nfrom interpret.perf import ROC\n\n<span class=\"hljs-comment\"># Training di diversi modelli<\/span>\nmodels = {\n    <span class=\"hljs-string\">'EBM'<\/span>: ExplainableBoostingClassifier(random_state=<span class=\"hljs-number\">42<\/span>),\n    <span class=\"hljs-string\">'Random Forest'<\/span>: RandomForestClassifier(n_estimators=<span class=\"hljs-number\">100<\/span>, random_state=<span class=\"hljs-number\">42<\/span>),\n    <span class=\"hljs-string\">'Gradient Boosting'<\/span>: GradientBoostingClassifier(random_state=<span class=\"hljs-number\">42<\/span>)\n}\n\nresults = {}\n<span class=\"hljs-keyword\">for<\/span> name, model in models.items():\n    model.fit(X_train, y_train)\n    results&#91;name] = {\n        <span class=\"hljs-string\">'model'<\/span>: model,\n        <span class=\"hljs-string\">'accuracy'<\/span>: model.score(X_test, y_test),\n        <span class=\"hljs-string\">'predictions'<\/span>: model.predict_proba(X_test)\n    }\n\n<span class=\"hljs-comment\"># Confronto delle performance<\/span>\n<span class=\"hljs-keyword\">for<\/span> name, result in results.items():\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"{name}: {result&#91;'accuracy']:.4f}\"<\/span>)\n\n<span class=\"hljs-comment\"># Visualizzazione ROC comparativa<\/span>\nroc = ROC(results&#91;<span class=\"hljs-string\">'EBM'<\/span>]&#91;<span class=\"hljs-string\">'model'<\/span>].predict_proba)\nroc_viz = roc.explain_perf(X_test, y_test, name=<span class=\"hljs-string\">'EBM'<\/span>)\nshow(roc_viz)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Nella mia esperienza, l&#8217;EBM generalmente si posiziona a 1-3% di accuratezza rispetto ai migliori gradient boosting black-box. Per molti use case, questo trade-off \u00e8 pi\u00f9 che accettabile considerando il guadagno in interpretabilit\u00e0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-best-practices-per-xai-in-produzione\">Best practices per XAI in produzione<\/h2>\n\n\n\n<p>Implementare XAI non significa solo installare una libreria. Ecco alcune lezioni apprese lavorando con questi strumenti in produzione.<\/p>\n\n\n\n<p><strong>Inizia con l&#8217;interpretabilit\u00e0 fin dall&#8217;inizio.<\/strong> Non aspettare di avere un modello gi\u00e0 in produzione per pensare alla &#8216;ammissibilit\u00e0&#8217;. Includila nei requisiti di progetto dall&#8217;inizio. \u00c8 molto pi\u00f9 facile costruire con la trasparenza in mente che aggiungerlasuccessive.<\/p>\n\n\n\n<p><strong>Documenta le spiegazioni insieme al codice.<\/strong> Le visualizzazioni di InterpretML sono ottime per l&#8217;esplorazione, ma dovresti anche salvare spiegazioni chiave come artefatti versionate. Questo crea una traccia auditabile.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Salva le spiegazioni per audit futuro<\/span>\nfrom interpret import preserve\n\npreserve(ebm_global, <span class=\"hljs-string\">'ebm_global_explanation.html'<\/span>)\npreserve(ebm_local, <span class=\"hljs-string\">'ebm_local_explanation.html'<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Valida le spiegazioni con esperti di dominio.<\/strong> L&#8217;interpretabilit\u00e0 \u00e8 inutile se nessuno con expertise rilevante la verifica. Organizza sessioni dove mostri le spiegazioni del modello a chi conosce il problema. Spesso emergono insight o problemi nascosti.<\/p>\n\n\n\n<p><strong>Monitora la stabilit\u00e0 delle spiegazioni.<\/strong> In produzione, non monitorare solo le prestazioni del modello, ma anche come cambiano le spiegazioni nel tempo. Un improvviso cambio nell&#8217;importanza delle features pu\u00f2 segnalare data drift o problemi di qualit\u00e0 dei dati.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Tracking delle feature importances nel tempo<\/span>\nimport json\nfrom datetime import datetime\n\ndef log_feature_importance(model, version):\n    importance = dict(zip(\n        model.feature_names_in_,\n        model.feature_importances_\n    ))\n    \n    log_entry = {\n        <span class=\"hljs-string\">'timestamp'<\/span>: datetime.now().isoformat(),\n        <span class=\"hljs-string\">'model_version'<\/span>: version,\n        <span class=\"hljs-string\">'feature_importance'<\/span>: importance\n    }\n    \n    with open(<span class=\"hljs-string\">'feature_importance_log.jsonl'<\/span>, <span class=\"hljs-string\">'a'<\/span>) <span class=\"hljs-keyword\">as<\/span> f:\n        f.write(json.dumps(log_entry) + <span class=\"hljs-string\">'\\n'<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Usa spiegazioni diverse per audience diverse.<\/strong> Le spiegazioni tecniche per il team di data science sono diverse da quelle per stakeholder business o per utenti finali. InterpretML permette di generare diverse viste degli stessi insight.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-limiti-e-sfide-della-xai\">Limiti e sfide della XAI<\/h2>\n\n\n\n<p>La XAI non \u00e8 una panacea. \u00c8 importante riconoscere i limiti.<\/p>\n\n\n\n<p><strong>Le spiegazioni possono essere ingannevoli.<\/strong> Una spiegazione plausibile non \u00e8 necessariamente corretta. Il modello potrebbe basarsi su correlazioni spurie che sembrano ragionevoli superficialmente. L&#8217; ammissibilit\u00e0 deve accompagnarsi a validazione rigorosa.<\/p>\n\n\n\n<p><strong>Trade-off complessit\u00e0-interpretabilit\u00e0.<\/strong> Per problemi estremamente complessi (visione computerizzata avanzata, NLP, ecc.), i modelli veramente interpretabili possono non essere sufficienti. In questi casi, gli spiegatori post-hoc sono l&#8217;unica opzione, ma sono approssimazioni.<\/p>\n\n\n\n<p><strong>Costo computazionale.<\/strong> Generare spiegazioni dettagliate, specialmente per modelli black-box grandi, pu\u00f2 essere costoso. In produzione con bassa latenza, questo pu\u00f2 essere problematico. Serve bilanciare tra spiegazioni on-demand e pre-calcolate.<\/p>\n\n\n\n<p><strong>Non risolve problemi etici fondamentali.<\/strong> L&#8217;ammissibilit\u00e0&#8217; aiuta a identificare bias, ma non li elimina automaticamente. Un modello interpretabile che discrimina \u00e8 ancora problematico. La XAI \u00e8 uno strumento, non una soluzione magica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-il-futuro-della-xai\">Il futuro della XAI<\/h2>\n\n\n\n<p>Il campo della XAI sta evolvendo rapidamente. Alcune direzioni interessanti:<\/p>\n\n\n\n<p><strong>Spiegazioni causali<\/strong>: andare oltre le correlazioni per capire relazioni causa-effetto. Librerie come DoWhy stanno esplorando questo territorio.<\/p>\n\n\n\n<p><strong>Spiegazioni multimodali<\/strong>: per modelli che lavorano con immagini, testo e dati strutturati insieme, servono tecniche di spiegazione che integrino diverse modalit\u00e0.<\/p>\n\n\n\n<p><strong>Certificazione formale<\/strong>: non solo spiegazioni, ma garanzie formali sul comportamento del modello. Tecniche di verifica formale applicate al machine learning.<\/p>\n\n\n\n<p><strong>Spiegazioni interattive<\/strong>: interfacce dove l&#8217;utente pu\u00f2 esplorare scenari &#8220;what-if&#8221; e vedere come cambierebbe la predizione modificando diverse features.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusione-trasparenza-come-vantaggio-competitivo\">Conclusione: trasparenza come vantaggio competitivo<\/h2>\n\n\n\n<p>L&#8217;adozione della XAI non dovrebbe essere vista come un vincolo imposto da normative o richieste etiche, ma come un vantaggio strategico. Modelli interpretabili sono pi\u00f9 facili da debuggare, pi\u00f9 robusti, pi\u00f9 affidabili in produzione e generano maggiore fiducia negli utenti.<\/p>\n\n\n\n<p>InterpretML rappresenta uno strumento eccellente per iniziare questo percorso. La sua facilit\u00e0 d&#8217;uso abbassa la barriera d&#8217;ingresso, mentre la potenza dell&#8217;EBM dimostra che interpretabilit\u00e0 e performance non sono necessariamente in conflitto.<\/p>\n\n\n\n<p>La prossima volta che addestri un modello, prima di raggiungere automaticamente verso un random forest o una <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/deep-learning-it\/il-percettrone-reti-neurali-la-prima-pietra\/\" target=\"_blank\" rel=\"noreferrer noopener\">rete neurale<\/a>, considera: hai veramente bisogno di quella complessit\u00e0? Potresti ottenere risultati comparabili con un modello che puoi spiegare e comprendere completamente?<\/p>\n\n\n\n<p>La risposta potrebbe sorprenderti. E i tuoi utenti, stakeholder e te stesso tra sei mesi ringrazierete per la scelta della trasparenza.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Immagina di costruire un sistema di machine learning per una banca che deve decidere se approvare mutui da centinaia di migliaia di euro. Il modello funziona benissimo: accuratezza del 94%, metriche impeccabili. Tutto perfetto, fino a quando un cliente rifiutato chiede: &#8220;Perch\u00e9 mi avete negato il prestito?&#8221; E tu, come sviluppatore, non hai una risposta&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\">Read more<\/a><\/p>\n","protected":false},"author":64,"featured_media":34486,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10261],"tags":[13725,13728,13731],"collections":[11387],"class_list":{"0":"post-34478","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-intelligenza-artificiale","8":"tag-interpretml-it","9":"tag-reti-neurali-it","10":"tag-xai-en-it","11":"collections-top-of-the-week","12":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oltre la Black Box: Guida pratica alla XAI per sviluppatori - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"La XAI si basa su un principio fondamentale: la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0. Non solo per questioni etiche o normative, ma anche per ragioni pratiche.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oltre la Black Box: Guida pratica alla XAI per sviluppatori\" \/>\n<meta property=\"og:description\" content=\"La XAI si basa su un principio fondamentale: la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0. Non solo per questioni etiche o normative, ma anche per ragioni pratiche.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-19T11:01:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-19T11:45:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2177\" \/>\n\t<meta property=\"og:image:height\" content=\"1049\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Codemotion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Codemotion\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\"},\"author\":{\"name\":\"Codemotion\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c\"},\"headline\":\"Oltre la Black Box: Guida pratica alla XAI per sviluppatori\",\"datePublished\":\"2025-11-19T11:01:45+00:00\",\"dateModified\":\"2025-11-19T11:45:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\"},\"wordCount\":2173,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg\",\"keywords\":[\"interpretML\",\"reti neurali\",\"xai\"],\"articleSection\":[\"Intelligenza artificiale\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\",\"name\":\"Oltre la Black Box: Guida pratica alla XAI per sviluppatori - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg\",\"datePublished\":\"2025-11-19T11:01:45+00:00\",\"dateModified\":\"2025-11-19T11:45:32+00:00\",\"description\":\"La XAI si basa su un principio fondamentale: la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0. Non solo per questioni etiche o normative, ma anche per ragioni pratiche.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg\",\"width\":2177,\"height\":1049,\"caption\":\"xai\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Intelligenza artificiale\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Oltre la Black Box: Guida pratica alla XAI per sviluppatori\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c\",\"name\":\"Codemotion\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png\",\"caption\":\"Codemotion\"},\"description\":\"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.\",\"sameAs\":[\"https:\/\/x.com\/CodemotionIT\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oltre la Black Box: Guida pratica alla XAI per sviluppatori - Codemotion Magazine","description":"La XAI si basa su un principio fondamentale: la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0. Non solo per questioni etiche o normative, ma anche per ragioni pratiche.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/","og_locale":"en_US","og_type":"article","og_title":"Oltre la Black Box: Guida pratica alla XAI per sviluppatori","og_description":"La XAI si basa su un principio fondamentale: la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0. Non solo per questioni etiche o normative, ma anche per ragioni pratiche.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-11-19T11:01:45+00:00","article_modified_time":"2025-11-19T11:45:32+00:00","og_image":[{"width":2177,"height":1049,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg","type":"image\/jpeg"}],"author":"Codemotion","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Codemotion","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/"},"author":{"name":"Codemotion","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c"},"headline":"Oltre la Black Box: Guida pratica alla XAI per sviluppatori","datePublished":"2025-11-19T11:01:45+00:00","dateModified":"2025-11-19T11:45:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/"},"wordCount":2173,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg","keywords":["interpretML","reti neurali","xai"],"articleSection":["Intelligenza artificiale"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/","name":"Oltre la Black Box: Guida pratica alla XAI per sviluppatori - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg","datePublished":"2025-11-19T11:01:45+00:00","dateModified":"2025-11-19T11:45:32+00:00","description":"La XAI si basa su un principio fondamentale: la trasparenza non \u00e8 un lusso, \u00e8 una necessit\u00e0. Non solo per questioni etiche o normative, ma anche per ragioni pratiche.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg","width":2177,"height":1049,"caption":"xai"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/oltre-la-black-box-guida-pratica-alla-xai-per-sviluppatori\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Intelligenza artificiale","item":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/"},{"@type":"ListItem","position":3,"name":"Oltre la Black Box: Guida pratica alla XAI per sviluppatori"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c","name":"Codemotion","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","caption":"Codemotion"},"description":"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.","sameAs":["https:\/\/x.com\/CodemotionIT"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-600x600.jpg","author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI.jpg",2177,1049,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-300x145.jpg",300,145,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-768x370.jpg",768,370,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-1024x493.jpg",1024,493,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-1536x740.jpg",1536,740,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-2048x987.jpg",2048,987,true],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-100x100.jpg",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/xAI-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_comment_info":0,"uagb_excerpt":"Immagina di costruire un sistema di machine learning per una banca che deve decidere se approvare mutui da centinaia di migliaia di euro. Il modello funziona benissimo: accuratezza del 94%, metriche impeccabili. Tutto perfetto, fino a quando un cliente rifiutato chiede: &#8220;Perch\u00e9 mi avete negato il prestito?&#8221; E tu, come sviluppatore, non hai una risposta&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=34478"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34478\/revisions"}],"predecessor-version":[{"id":34485,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34478\/revisions\/34485"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/34486"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=34478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=34478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=34478"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=34478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}