Blog

IA e Avvocati (13): un esempio pratico di giustizia predittiva 

IA e Avvocati (13): un esempio pratico di giustizia predittiva 

Intelligenza artificiale e Avvocati

13. Giustizia predittiva: un esempio pratico

Introduzione

Glossario essenziale

  • Giustizia predittiva: insieme di metodi e strumenti basati su intelligenza artificiale e machine learning, utilizzati per analizzare dati giuridici (come sentenze, atti e dati processuali) allo scopo di stimare con una certa probabilità l’esito di una controversia, la sua durata o altri parametri rilevanti. Non fornisce certezze né sostituisce il giudizio umano, ma offre supporto analitico alla valutazione strategica e decisionale.
  • Analisi predittiva: tecnica basata su dati storici per stimare l’esito probabile di un evento futuro.
  • Machine learning (ML): ramo dell’IA che permette ai modelli statistici di “apprendere” dai dati senza programmazione esplicita.
  • Dataset: insieme strutturato di dati organizzati in righe (casi) e colonne (variabili).
  • Modello predittivo: algoritmo che riceve dati in input e produce una previsione o classificazione in output.
  • Random Forest: algoritmo ML che combina molti alberi decisionali per aumentare precisione e robustezza.
  • Training/Test set: suddivisione del dataset tra dati usati per “insegnare” al modello (training) e dati per valutarne l’efficacia (test).
  • Streamlit: framework open-source per creare interfacce web interattive in Python, qui usato per simulare l’uso pratico del modello.
  • Explainability (spiegabilità): capacità di interpretare e giustificare il funzionamento e le decisioni di un modello.

L’adozione dell’Intelligenza Artificiale (IA) nello studio legale non è più un’ipotesi futuribile, ma una possibilità concreta per migliorare efficienza, strategia e servizio al Cliente.

In questo post presentiamo un semplice esempio pratico di analisi predittiva delle controversie legali, realizzato con strumenti open-source, funzionante interamente in locale e senza utilizzo di servizi cloud.

Tutto il sistema funziona localmente, senza invio di dati online.

Realizzeremo passo per passo:

  • Un dataset simulato
  • Un modello predittivo con Python
  • Un’interfaccia leggera con Streamlit

Giustizia predittiva: obiettivi del progetto

  • Comprendere cos’è la giustizia predittiva e come funziona con applicazioni concrete
  • Fornire una base replicabile e modificabile per uno studio legale
  • Usare una dashboard locale per analizzare un caso
  • Introdurre strumenti di explainability
  • Riflettere su limiti, opportunità e uso consapevole

Checklist per l’ambiente locale

Per la preparazione dell’ambiente di lavoro si rimanda al post 6.

Occorre installare da terminale, nell’ambiente virtuale del progetto:

pip install pandas scikit-learn streamlit joblib

Dataset simulato (anonimo)

Il dataset seguente rappresenta una simulazione semplificata di archivio processuale.

Ogni riga equivale a una controversia conclusa, con informazioni essenziali sul contesto e l’esito finale:

1 = esito favorevole 

0 = esito sfavorevole 

materiaforovaloretipo_parteesito
lavoroRoma15000persona fisica1
civileMilano25000impresa0
recupero creditoNapoli10000persona fisica1
lavoroNapoli12000impresa0
civileRoma22000persona fisica1
recupero creditoMilano18000impresa0
lavoroMilano20000persona fisica1
civileNapoli14000impresa0
recupero creditoRoma16000persona fisica1
lavoroRoma13000impresa0

Questo dataset è stato creato esclusivamente a scopo illustrativo. Non riflette alcuna base giurisprudenziale reale e non ha alcun valore predittivo effettivo.

Come generare il dataset simulato per il nostro esempio pratico di giustizia predittiva

Per creare il file dati_controversie.csv con i dati fittizi di esempio mostrati sopra, puoi utilizzare lo script Python seguente.

Verrà generato un file CSV pronto all’uso per il successivo addestramento del modello:

import pandas as pd

# Creazione del dataset simulato
dati = [
    ["lavoro", "Roma", 15000, "persona fisica", 1],
    ["civile", "Milano", 25000, "impresa", 0],
    ["recupero credito", "Napoli", 10000, "persona fisica", 1],
    ["lavoro", "Napoli", 12000, "impresa", 0],
    ["civile", "Roma", 22000, "persona fisica", 1],
    ["recupero credito", "Milano", 18000, "impresa", 0],
    ["lavoro", "Milano", 20000, "persona fisica", 1],
    ["civile", "Napoli", 14000, "impresa", 0],
    ["recupero credito", "Roma", 16000, "persona fisica", 1],
    ["lavoro", "Roma", 13000, "impresa", 0]
]

# Definizione delle colonne
colonne = ["materia", "foro", "valore", "tipo_parte", "esito"]

# Creazione e salvataggio del DataFrame
df = pd.DataFrame(dati, columns=colonne)
df.to_csv("dati_controversie.csv", index=False)
print("File 'dati_controversie.csv' creato con successo.")

Questo script può essere salvato come crea_dataset.py ed eseguito una sola volta per generare il file CSV con il dataset di esempio richiesto dal progetto.

Come deve essere costruito un dataset idoneo?

Per essere efficace in un sistema predittivo legale, un dataset deve possedere le seguenti caratteristiche principali:

  • Omogeneità dei campi: ogni colonna deve rappresentare una variabile significativa (es. materia, foro, valore economico), con formato coerente.
  • Completezza: ogni riga deve contenere tutti i dati richiesti, senza valori mancanti.
  • Pulizia: eliminare errori, duplicazioni, o codifiche incoerenti (es. “milano” vs “Milano”).
  • Dimensione adeguata: per semplici test didattici possono bastare 100–150 esempi. Tuttavia, per ottenere risultati affidabili in contesti reali, si raccomanda l’uso di almeno 500–1000 casi, bilanciati tra esiti positivi e negativi, e arricchiti da variabili di qualità.
  • Etichettatura chiara: la variabile esito deve essere costruita secondo criteri oggettivi (es. accoglimento/rigetto).
  • Neutralità: evitare dataset dominati da una sola categoria o foro, per ridurre il rischio di generalizzazioni errate.

Nota: Il dataset utilizzato in questo post ha esclusiva finalità dimostrativa e non è strutturato secondo criteri statistici o giuridici validi per un uso professionale.

Non può quindi produrre risultati attendibili né essere impiegato per valutazioni reali.

La costruzione rigorosa del dataset è una condizione indispensabile per ottenere previsioni affidabili.

Senza una base informativa solida, completa e rappresentativa, nessun algoritmo — per quanto sofisticato — può restituire risultati utili o giuridicamente significativi.


Script Python con spiegazioni

Obiettivo generale del codice

Lo scopo dello script è costruire un semplice modello di machine learning di prova in grado di prevedere, con un certo margine di probabilità, l’esito di una causa legale a partire da quattro variabili descrittive: la materia trattata, il foro competente, il valore economico della causa e la tipologia della parte (impresa o persona fisica).

Questo processo viene gestito con l’aiuto della libreria scikit-learn, utilizzando un algoritmo noto come Random Forest, che funziona creando un insieme di alberi decisionali per arrivare a una previsione finale più robusta.

L’intero flusso è pensato per ambienti locali: niente cloud, nessun dato viene inviato all’esterno. 

Funzionamento passo per passo

  1. Import delle librerie
    Si importano le librerie Python necessarie per la gestione dei dati (pandas), l’addestramento del modello (RandomForestClassifier), la divisione dei dati (train_test_split), la valutazione (accuracy_score) e il salvataggio del modello (joblib).
  2. Caricamento del dataset
    Viene letto il file dati_controversie.csv che contiene l’archivio simulato di cause concluse (il file deve essere presente nella medesima cartella del file .py del progetto). Ogni riga rappresenta un caso con le sue caratteristiche e l’esito.
  3. Pre-elaborazione dei dati (preprocessing)
    Le colonne testuali (come materia, foro, tipo_parte) vengono trasformate in formato numerico tramite pd.get_dummies() per essere comprese dal modello di machine learning.
  4. Separazione tra training e test set
    Il dataset viene diviso in due parti:
    • una per addestrare il modello (70%)
    • una per testarne la capacità predittiva (30%)
  5. Addestramento del modello
    Il classificatore Random Forest viene allenato con i dati di training. Il modello impara a riconoscere le correlazioni tra le caratteristiche della causa e il suo esito.
  6. Salvataggio del modello
    Dopo l’addestramento, il modello viene salvato in un file .pkl che potrà essere riutilizzato successivamente dall’interfaccia utente (Streamlit) per effettuare previsioni su nuovi casi.
  7. Valutazione dell’accuratezza
    Si confrontano le previsioni del modello sui dati di test con gli esiti reali per misurare l’efficacia del sistema. L’accuratezza viene stampata nel terminale.

Questo codice rappresenta una semplice base tecnica sulla quale può essere costruita una vera interfaccia predittiva a uso forense, che potrà evolvere nel tempo con l’aggiunta di parametri, filtri o modelli alternativi.

Il codice crea un modello di prova idoneo a prevedere l’esito di una controversia sulla base di 4 parametri.

Codice completo e commentato

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import joblib

# 1. Caricamento dati
print("Caricamento...")
df = pd.read_csv("dati_controversie.csv")

# 2. Codifica variabili categoriche
X = pd.get_dummies(df.drop("esito", axis=1))
y = df["esito"]

# 3. Suddivisione training/test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 4. Addestramento modello
clf = RandomForestClassifier()
clf.fit(X_train, y_train)

# 5. Salvataggio
joblib.dump(clf, "modello.pkl")

# 6. Valutazione
pred = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test, pred))

Riepilogo: il modello viene addestrato su casi passati per classificare i futuri.

Lo script deve essere salvato con estensione .py nella medesima cartella contenente il file del dataset simulato che abbiamo creato, ed eseguito da terminale.


Interfaccia Streamlit

Come funziona

Consente all’Avvocato di simulare un nuovo caso dal browser locale.

Codice

import streamlit as st
import pandas as pd
import joblib

clf = joblib.load("modello.pkl")

st.title("Analisi predittiva cause legali")

materia = st.selectbox("Materia", ["lavoro", "civile", "recupero credito", "Esci"])
if materia == "Esci":
    st.warning("Hai scelto di uscire. L'applicazione è stata interrotta.")
    st.stop()

foro = st.selectbox("Foro", ["Roma", "Milano", "Napoli"])
valore = st.number_input("Valore causa", min_value=5000)
tipo_parte = st.selectbox("Tipo parte", ["persona fisica", "impresa"])

input_df = pd.DataFrame([[materia, foro, valore, tipo_parte]], columns=["materia", "foro", "valore", "tipo_parte"])
input_encoded = pd.get_dummies(input_df).reindex(columns=clf.feature_names_in_, fill_value=0)

if st.button("Prevedi esito"):
    pred = clf.predict(input_encoded)[0]
    prob = clf.predict_proba(input_encoded)[0][1]
    st.success(f"Esito previsto: {'FAVOREVOLE' if pred == 1 else 'SFAVOREVOLE'}")
    st.info(f"Probabilità: {prob*100:.1f}%")
    st.warning("Questa è una stima probabilistica e non vincolante.")

Questo script richiede, nella medesima cartella che lo ospita, il file “modello.pkl”, generato eseguendo lo script che precede, di addestramento del modello.

Salva il codice come app.py ed eseguilo da terminale con il comando:

streamlit run app.py --server.address=localhost

L’interfaccia sarà accessibile solo sul tuo computer (da browser), all’indirizzo:

http://localhost:8501

Dopo essere uscito dal programma, per chiudere Streamlit usa CTRL+C nel terminale o chiudi la finestra del terminale.

Se stai usando un ambiente virtuale Python, ricordati di attivarlo prima.

Interpretabilità – SHAP e LIME

Installazione

pip install shap lime

Uso base

  • SHAP mostra il contributo percentuale di ciascuna variabile
  • LIME simula modifiche per spiegare localmente l’output

Esempio SHAP: foro=Roma ha contribuito al 24% alla previsione positiva.

Puoi integrare SHAP e LIME nel modello con esempi disponibili nella documentazione ufficiale.


Quadro normativo essenziale di riferimento per la giustizia predittiva

L’uso di strumenti predittivi e algoritmici nell’ambito del diritto è un tema che tocca da vicino principi costituzionali e norme sulla protezione dei dati personali.

Principale normativa di riferimento

  • GDPR (Regolamento (UE) 2016/679)
  • Codice deontologico forense (in particolare artt. 9, 13, 14, 15, 24, 28, 35)
  • Regolamento UE sull’intelligenza artificiale (Regolamento (UE) 2024/1689 (AI Act)): classifica i sistemi predittivi in ambito giuridico come “ad alto rischio”.

Qualunque applicazione predittiva nello studio legale deve dunque essere trasparente, accessibile, verificabile e sempre utilizzata sotto il controllo dell’Avvocato (supervisione umana obbligatoria).

Per approfondire si rimanda al post 3.

Limiti e considerazioni etiche

  • I modelli dipendono dalla qualità e dal bilanciamento dei dati
  • Alcune variabili legali (per es. intenzioni, credibilità) sono non modellabili
  • Attenzione a non cadere in una visione deterministica della giustizia

Es.: se il 90% dei dati proviene da Roma, il modello sarà sbilanciato a favore di quel foro.


Giustizia predittiva

Prospettive

Evoluzione del modello predittivo

L’algoritmo Random Forest è un ottimo punto di partenza per costruire un sistema stabile e interpretabile, ma in uno studio che accumula progressivamente nuovi dati reali è possibile:

  • Sostituire o affiancare modelli più avanzati, come:
    • Gradient Boosting Machines (es. XGBoost, LightGBM), che spesso offrono una maggiore accuratezza.
    • Regressione logistica, utile per confronti con modelli lineari spiegabili.
    • Modelli di deep learning (es. reti neurali), se i dati crescono in volume e complessità.
  • Implementare un retraining continuo, ad esempio ogni trimestre, in base ai nuovi casi archiviati, migliorando progressivamente le previsioni.
  • Creare ensemble ibridi che combinano modelli diversi e bilanciano spiegabilità e accuratezza.

Questo approccio incrementale permette allo studio di non fermarsi a una soluzione fissa, ma di far evolvere il sistema al passo con la crescita del patrimonio informativo.

Automazione documentale e strategica

Oltre a fornire un risultato predittivo, il modello può diventare il motore per un flusso decisionale semi-automatizzato:

  • Generazione automatica di schede causa: una volta ricevuta la previsione, si può creare una scheda riassuntiva con:
    • sintesi dei fattori considerati
    • stima del rischio
    • suggerimento strategico
  • Collegamento con modelli generativi (LLM): tramite  modelli open-source, è possibile:
    • generare bozze di pareri motivati a partire dai parametri e dall’esito previsto
    • confrontare la previsione con orientamenti giurisprudenziali ricavati via RAG

In questo modo, l’output predittivo non rimane un dato a sé stante, ma il punto di partenza per un’intera catena decisionale.

Prospettive

  • Integrazione con banche dati normative e giurisprudenziali
  • Implementazione in RAG per generare spiegazioni giuridiche
  • Report predittivi settimanali per cluster di fascicoli
  • Interfaccia multi-utente per studi associati

Esempio: uno studio con 500 cause può usare un sistema predittivo per ordinare i casi in base al rischio e decidere dove investire tempo e risorse.


Conclusione

Il progetto presentato ha mera finalità esemplificativa: intende mostrare in modo pratico cos’è l’analisi predittiva applicata al diritto, come può essere implementata con strumenti accessibili, e quali opportunità offre in termini di supporto alla valutazione delle controversie.

L’integrazione tra conoscenza giuridica, metodo analitico e strumenti digitali locali permette in particolare di:

  • stimare rapidamente i rischi di una causa,
  • documentare le scelte strategiche con basi oggettive,
  • comunicare con il Cliente in modo più trasparente.

Naturalmente, ogni decisione resta e deve restare nelle (insostituibili) mani dell’Avvocato.

Con il supporto dell’IA predittiva, la valutazione legale può tuttavia diventare più solida, misurabile e orientata all’efficacia.


Per un aiuto e per approfondire

Per un aiuto e per approfondire i temi dell’intelligenza artificiale nello studio legale, del legal tech e del legal design è online il GPT Iusreporter.tech (link esterno, richiede ChatGPT)

Per gli altri articoli pubblicati su questo blog sul tema:
Intelligenza artificiale e Avvocati


Scritto con l’aiuto di Iusreporter, il tuo assistente per la ricerca giuridica online 

Studio legale Avvocato Giuseppe Briganti

Pesaro – Urbino

Post aggiornato alla data di pubblicazione

📄 Disclaimer

Gli script Python e i contenuti di questo testo sono forniti esclusivamente a scopo informativo, didattico e sperimentale in ambienti di test controllati. Non costituiscono consulenza legale o tecnica e non sostituiscono il parere di un professionista qualificato.

L’autore declina ogni responsabilità per eventuali errori, omissioni, malfunzionamenti, danni diretti o indiretti, incidentali, consequenziali o di altro tipo derivanti dall’uso, dall’uso improprio o dall’impossibilità di utilizzo degli script o delle informazioni contenute nel presente testo. Gli script sono forniti “così come sono” (AS IS), senza garanzie esplicite o implicite, incluse, ma non limitate a, garanzie di commerciabilità, idoneità a uno scopo particolare o assenza di violazioni.

L’utilizzo degli strumenti è sotto la piena responsabilità dell’utente, che è tenuto a verificarne, in particolare:

  • la correttezza tecnica e funzionale,
  • la conformità alle normative vigenti, incluse, a titolo esemplificativo, l’AI Act, il GDPR, il Codice Deontologico Forense,
  • il rispetto delle licenze delle librerie e dei componenti e software di terze parti eventualmente utilizzati, inclusi quelli distribuiti con licenze open source.

Gli script non sono progettati né validati per l’uso in ambienti produttivi o per l’elaborazione di dati personali. Qualsiasi utilizzo in tali contesti è esclusiva responsabilità dell’utente, che deve adottare le opportune misure di sicurezza e valutare l’impatto normativo.

Gli script sono stati testati su Python 3.10 in ambiente Windows. Non è garantita la compatibilità con versioni diverse del linguaggio o con altri sistemi operativi. L’autore non fornisce assistenza tecnica, aggiornamenti periodici o correzione dei malfunzionamenti.

Tutti i contenuti di questo ebook, inclusi i testi e il codice sorgente, sono protetti dal diritto d’autore ai sensi della Legge 22 aprile 1941, n. 633 e successive modificazioni. È vietata la riproduzione, distribuzione, pubblicazione, comunicazione o modifica, totale o parziale, in qualsiasi forma, dei contenuti senza autorizzazione scritta dell’autore, salvo espressa indicazione contraria.

L’uso di questo testo e degli script in esso contenuti implica l’accettazione integrale del presente disclaimer. Se non si accettano tali condizioni, si prega di non utilizzare il materiale fornito.

Eventuali errori, osservazioni o segnalazioni possono essere comunicati all’autore, che si riserva di valutarli senza alcun obbligo di risposta o correzione.

Condividi

Leave a comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *