Sviluppatore Migliore
Parliamone

RisorseIntelligenza artificialeChi comprerà, chi se ne va

Il machine learning che paga le fatture

Chi comprerà, chi se ne va,
chi non paga

Questa è la famiglia di modelli che in azienda produce più soldi e meno titoli sui giornali. Nessuno scrive articoli entusiasti sul gradient boosting che stima la probabilità di insoluto. Però quel modello, in una società di servizi con ventimila clienti, vale più di tutta l'AI generativa che le hanno venduto nello stesso anno. Fa una cosa sola e la fa bene: guarda un cliente, una pratica o una macchina, e dà un numero tra zero e uno.

Il problema è cosa succede dopo quel numero. Perché il numero, da solo, non fa niente. Qualcuno deve decidere dove tagliare: sopra questa soglia chiamo, sotto lascio perdere. E quella soglia, che nessuno tratta come una decisione tecnica seria, è il punto in cui il modello diventa denaro oppure diventa un cruscotto che nessuno guarda. Ho visto progetti fallire con un modello ottimo e una soglia scelta a occhio in riunione.

Qui dentro trovi il mestiere per intero. Come si definisce l'etichetta, che è il 60% del lavoro e il 100% degli errori. Perché un punteggio può ordinare benissimo i clienti e mentire completamente sulle probabilità, e perché la differenza ti costa soldi veri. Come si sceglie la soglia partendo dal conto economico invece che dall'intuito. Cosa fare quando l'evento è raro, che è quasi sempre. E come si passa dal «se» al quando, che è la domanda che i clienti fanno davvero: non «questo cliente comprerà?», ma «quando finirà il prodotto e quando devo chiamarlo?».

Poche righe più in basso c'è la prima simulazione. Due modelli guardano gli stessi clienti. Hanno la stessa identica capacità di ordinarli dal più al meno probabile, cioè lo stesso AUC, il numero che porti in riunione. Uno dei due però, quando dice «70% di probabilità», ha ragione il 70% delle volte. L'altro dice 70% e ne azzecca 40. Sono lo stesso modello per ogni metrica che si usa di solito, e uno dei due ti fa perdere denaro a ogni decisione.

Matteo Migliore

Una professionista in un ufficio luminoso segna con l'evidenziatore pochi nomi su una lunga lista di clienti

Il momento che conta Non il modello: la riga evidenziata. Tutto questo mestiere esiste per far sì che quei pochi nomi segnati siano quelli giusti, e per sapere quanto costa sbagliarli.

Lo stesso AUC, due modelli diversi

Entrambi ordinano i clienti identicamente. Ma solo uno dice la verità quando dichiara una probabilità. Guarda cosa succede quando ci costruisci sopra una decisione.

la retta della verità quello che succede davvero
·AUC (identico)
·errore di calibrazione
·costo annuo della bugia

Nota I dati sono generati adesso nel tuo browser e l'AUC è calcolato dal vivo su entrambi i modelli. Il punto sta altrove: sono ugualmente bravi a ordinare. Solo che uno dei due non sa quanto vale quello che dice, e tu su quel numero ci devi mettere una soglia.

La mappa

Dal target al conto in euro: come si costruisce un modello che qualcuno userà davvero per decidere. Entra dove ti serve.

calibrazione AUC soglia ottima matrice di costo precision e recall classi sbilanciate PR-AUC gradient boosting random forest regressione logistica RFM leakage Kaplan-Meier censura hazard CLV modelli gerarchici SHAP
00 · la domanda

Tre domande che in riunione sembrano una sola, e che sono tre progetti diversi.

«Vogliamo sapere quali clienti perdiamo.» Dentro questa frase ci sono tre modelli, tre matematiche e tre modi di sbagliare.

Prima di aprire qualunque strumento, il lavoro è distinguere. Le tre domande sotto arrivano sempre mescolate, e chi le tiene mescolate costruisce la cosa sbagliata con grande efficienza.

  1. Classificare: a quale gruppo appartiene? Questo ticket è urgente. Questo lead è caldo. Questa pratica va rivista. Ti serve una categoria, e a valle qualcuno fa una cosa diversa a seconda della categoria. La difficoltà vera sta nelle etichette: se «urgente» lo decidono cinque persone con cinque criteri, stai insegnando al modello i loro disaccordi.
  2. Dare un punteggio: quanto è probabile? Probabilità che compri, che abbandoni, che non paghi. Qui non ti serve la categoria: ti serve l'ordinamento, perché domani mattina un commerciale ha tempo per venti telefonate e vuole le venti migliori. È il caso più frequente in assoluto, ed è quello in cui la calibrazione (capitolo 04) decide se il numero è utilizzabile.
  3. Prevedere quando: fra quanto succede? Quando finirà il prodotto, quando si romperà la macchina, quando quel cliente smetterà di ordinare. Questa domanda ha una matematica sua, l'analisi di sopravvivenza (capitolo 13), e quasi nessuno la usa: la si schiaccia dentro la seconda, chiedendo «abbandonerà nei prossimi 90 giorni?», e si butta via metà dell'informazione.

Il cliente chiede sempre la prima. Quasi sempre gli serve la seconda. E la domanda che gli cambierebbe l'anno è la terza.

Un esempio concreto, da un lavoro vero. Un'azienda di consumabili voleva «prevedere chi abbandona». Abbiamo costruito il punteggio di abbandono, funzionava, e non è cambiato niente: perché quando il modello diceva «questo cliente sta per andarsene» era già andato. La domanda utile era un'altra: quando finirà il materiale che ha comprato. Stesso identico storico, matematica diversa, e la telefonata parte tre settimane prima invece che tre settimane dopo. Il modello di abbandono era corretto e inutile.

Due colleghi discutono davanti a una lavagna in un ufficio luminoso, uno pone una domanda indicando uno schema disegnato a mano

Il lavoro vero Questa discussione, non il codice. Finché le due persone alla lavagna non sono d'accordo su cosa vuol dire «perso», qualunque modello costruito dopo sarà preciso su una domanda che nessuno ha fatto.

01 · la domanda

L'etichetta è il progetto. Il modello è quello che viene dopo.

Due team della stessa azienda, stesso storico, due modelli di abbandono che dicono cose opposte sugli stessi clienti. Entrambi corretti.

È successo davvero, e quel giorno ho capito che il problema non era statistico. Nessuno aveva scritto una frase in italiano.

Chiediti cos'è un cliente perso. Le risposte possibili, tutte difendibili:

  • Chi ha disdetto formalmente. Pulita, oggettiva, e nella maggior parte delle aziende B2B non esiste: nessuno disdice, semplicemente smette.
  • Chi non ordina da 90 giorni. E allora il cliente che ordina ogni quattro mesi da dodici anni risulta perso ogni singolo anno.
  • Chi non ordina da 180. E allora te ne accorgi quando è troppo tardi per farci qualcosa.
  • Chi ha ridotto del 70% ma è ancora lì. Che è il caso più interessante e quello che nessuno modella, perché serve una soglia su una quantità continua.
  • Chi ha spostato gli acquisti sul concorrente pur continuando a comprare le briciole da te. Questo è il caso da prendere, e nei tuoi dati non c'è scritto da nessuna parte.

A seconda di quale scegli ottieni dataset diversi, modelli diversi, azioni diverse e ritorni diversi. Non c'è una risposta giusta in astratto: c'è la risposta giusta rispetto alla decisione che vuoi cambiare. Se l'azione è «il commerciale lo chiama», la definizione deve accendersi quando chiamare serve ancora.

Se ti danno tre definizioni di «perso» e nessuno vuole scegliere, non hai un problema di dati. Hai tre reparti che misurano tre cose e le chiamano con lo stesso nome.

Le quattro trappole dell'etichetta, in ordine di quanto le vedo:

  1. L'etichetta che arriva troppo tardi. «Insoluto» diventa vero dopo 120 giorni. Se addestri su quello, il modello impara a riconoscere gli insoluti quando ormai lo sa anche il centralino.
  2. L'etichetta scritta da chi decide. Se «lead caldo» lo assegna il commerciale che poi lo lavora, stai imparando le sue preferenze e le chiami previsioni. Il modello dirà che sono caldi i lead a cui lui parla volentieri.
  3. L'etichetta corretta a posteriori. Le anagrafiche sistemate mesi dopo, i resi riclassificati, le pratiche riaperte. Nel database sembrano dati di allora, e non lo erano. Questo è leakage puro, e ne parlo al capitolo 11.
  4. L'etichetta che non c'è. Il caso migliore di tutti: quello che vuoi prevedere nessuno l'ha mai registrato. Qui la risposta onesta è che il progetto comincia da sei mesi di raccolta, non da un modello.

Il consiglio operativo che do sempre, e che costa un pomeriggio: prendi trenta casi a caso e falli etichettare a mano da due persone brave, separatamente. Se sono d'accordo su ventotto, il target esiste e puoi partire. Se sono d'accordo su diciotto, hai appena scoperto che il tuo modello imparerà la media di due opinioni, e nessuna quantità di gradient boosting sistemerà quella cosa lì.

02 · la domanda

Il numero finisce in mano a una persona. Quella persona ha venti minuti e non si fida.

La domanda che faccio prima dei dati: quando il modello dirà un numero che non vi piace, chi ha l'autorità di seguirlo lo stesso?

Un punteggio di abbandono al 91% non fa niente da solo. Serve che qualcuno, alle nove di lunedì, apra una lista e chiami. E quella persona ha tre caratteristiche che decidono il destino del progetto, e che nessun capitolato menziona:

  • Ha una capacità finita. Venti telefonate, non trecento. Quindi il tuo modello non deve dire «chi abbandonerà»: deve produrre i venti nomi migliori. È un problema diverso, e lo affronto al capitolo 08.
  • Non si fida, ed è ragionevole. Se il sistema le dice di chiamare un cliente che lei sa essere fedele da vent'anni, ha ragione lei e il sistema ha perso credibilità per sei mesi. Per questo la spiegazione conta più di due punti di accuratezza.
  • Non ti dirà mai che ha smesso di usarlo. Continuerà ad aprire il cruscotto quando passi tu. Il progetto risulterà attivo e sarà morto.

Da qui discendono due regole che applico prima di scrivere una riga.

  1. Il modello consegna una lista, non una probabilità. Ordinata, lunga quanto la capacità reale, con accanto il motivo in italiano. «Vale la pena chiamare Rossi perché ha dimezzato gli ordini da due mesi e l'anno scorso in questo periodo aveva già riordinato.»
  2. Si misura quello che succede dopo la telefonata. Altrimenti fra un anno, alla domanda «quanto ci ha fatto guadagnare?», la risposta sarà un aneddoto. E la risposta seria richiede di lasciare fuori una quota di clienti che il sistema non tocca: ne parlo nel capitolo sui cicli di feedback della risorsa madre, e vale ogni riga.

Un punteggio senza una persona che agisce, una capacità che lo limita e una misura che lo verifica non è un progetto. È un file.

Una professionista in un ufficio luminoso divide una pila di fatture stampate in due mucchi ordinati

Due mucchi, non una classifica Il modello produce una graduatoria continua. Chi lavora la lista fa un'altra cosa: divide in «oggi lo chiamo» e «oggi no». Quel taglio esiste comunque, anche quando nessuno lo decide, e il capitolo 07 serve a sceglierlo invece di subirlo.

parte seconda

Il punteggio, e la sua onestà

Quattro capitoli sul numero tra zero e uno: cosa vuol dire davvero, quando mente, e perché la metrica che porti in riunione è quasi sempre quella sbagliata.

03 · il punteggio

Ordinare i clienti e misurare la probabilità sono due capacità diverse. L'AUC ne vede una sola.

Il numero che tutti portano in riunione risponde a una domanda sola: se prendo un cliente che abbandonerà e uno che resterà, il modello mette il primo più in alto?

L'AUC misura questo, e nient'altro. È una proprietà di ordinamento. Ha un pregio enorme, cioè non dipende dalla soglia né da quanto è raro l'evento, e per questo è diventato il numero standard. Ma ha una conseguenza che quasi nessuno tira: puoi prendere tutte le probabilità del tuo modello, elevarle al quadrato, e l'AUC non si muove di un millesimo. L'ordine è identico. Le probabilità sono diventate tutte più basse. Il modello mente, e la metrica sorride.

Cosa misura davvero l'AUC

AUC = P( s(x+) > s(x) )

Prendi a caso un cliente che ha abbandonato (x+) e uno che non ha abbandonato (x). L'AUC è la probabilità che il punteggio s del primo sia più alto di quello del secondo. Nota cosa non compare in questa formula: il valore del punteggio. Compare solo il confronto. Un modello che dice 0,9 e 0,1 e uno che dice 0,09 e 0,01 hanno lo stesso identico AUC. Solo che sul secondo, se decidi «chiamo sopra 0,5», non chiami nessuno.

Quando basta l'ordinamento e quando serve la probabilità vera? La regola è semplice e la uso sempre:

  • Ti basta ordinare quando la capacità è fissa e decide lei. Venti telefonate al giorno: prendi i primi venti, e il valore assoluto del punteggio è irrilevante. Qui l'AUC è la metrica giusta e puoi smettere di preoccuparti.
  • Ti serve la probabilità vera nel momento in cui il numero entra in un conto. «Se la probabilità di insoluto è 8% e il margine è 12%, vendo lo stesso.» Quel confronto ha senso solo se l'8% è davvero l'8%. E serve anche quando sommi: il valore atteso del portafoglio è la somma delle probabilità, e se sono gonfie del 30% hai un budget gonfio del 30%.

La domanda che decide quale delle due ti serve: il numero finisce in una lista ordinata, o dentro una moltiplicazione? Nel secondo caso, l'AUC non ti sta dicendo se puoi fidarti.

04 · il punteggio

Calibrazione: quando il modello dice 70%, ci prende 70 volte su 100?

È verificabile in mezza giornata, non lo fa quasi nessuno, e senza è impossibile mettere il punteggio dentro un conto economico.

La definizione è quella che hai visto nella simulazione in cima: prendi tutti i casi a cui il modello ha dato circa il 70%, guarda quanti sono davvero successi, e speri di trovare il 70%. Ripeti per ogni fascia. Se la curva sta sulla diagonale, il modello è calibrato e le sue probabilità sono una moneta di scambio: ci puoi fare aritmetica sopra. Se sta sopra o sotto, il numero è un ordinamento travestito da probabilità.

Da dove viene lo scalibrato, perché non è sfortuna ma tre cause precise:

  1. Il ricampionamento. Il caso più comune di tutti. L'evento è raro, il modello impara poco, e allora si bilancia il dataset: si tengono tutti i 500 abbandoni e si scartano 19.500 dei 19.500 fedeli. Il modello adesso vive in un mondo dove l'abbandono è al 50%, e sputa probabilità di quel mondo. In produzione l'abbandono è al 2,5%. Ogni probabilità che dice è gonfia di venti volte, e nessuno se ne accorge perché l'AUC è ottimo.
  2. L'algoritmo. Alcuni modelli sono scalibrati per costruzione. Le SVM danno distanze da un iperpiano, non probabilità. Il random forest fa una media di voti e schiaccia gli estremi: fatica a dire 0,02 e 0,98. Il gradient boosting con la log-loss è invece ragionevolmente calibrato di suo, ed è uno dei motivi per cui lo uso.
  3. Il tempo. Il modello era calibrato a gennaio, il mercato è cambiato, e adesso dice 70% dove la realtà fa 55%. La calibrazione è la prima cosa che si rompe con la deriva, e siccome l'ordinamento regge, l'AUC resta bello e nessuno suona l'allarme.

Come si aggiusta, e costa pochissimo: si prende un pezzo di dati che il modello non ha mai visto e si impara una funzione che rimappa i punteggi sulle frequenze osservate. Due modi standard:

  • Platt scaling: una regressione logistica sopra il punteggio. Due parametri, robusta anche con pochi dati, assume una forma a S.
  • Isotonic regression: una scala monotona che segue i dati senza imporre una forma. Più flessibile, vuole più dati, altrimenti impara il rumore.

Entrambe hanno una proprietà che le rende gratis: non cambiano l'ordine, quindi l'AUC resta identico. Aggiungi solo l'onestà. È una delle poche cose in questo mestiere che si può fare senza rinunciare a niente.

Mani che regolano con un cacciavite la vite di taratura di uno strumento di precisione su una scrivania luminosa

La taratura Uno strumento che misura sempre 3 grammi in più è utilissimo per capire quale pacco è più pesante, e inservibile per dire quanto pesa. Il tuo punteggio, finché non lo tari, è quello strumento.

05 · il punteggio

Il 97% di accuratezza che si ottiene rispondendo sempre «no».

Se l'evento che ti interessa è raro, e lo è quasi sempre, l'accuratezza smette di voler dire qualcosa. Ecco cosa guardare al suo posto.

Tre clienti su cento abbandonano. Scrivo un modello di una riga, return false, che dice a tutti «non abbandonerà». Accuratezza: 97%. È il modello più accurato che avrai mai e vale zero. Questa battuta la trovo scritta sul serio: il 97% è il primo numero che finisce nelle slide di metà dei progetti che vedo, ed è il motivo per cui l'accuratezza, sugli eventi rari, andrebbe vietata.

Le metriche che si guardano davvero:

  • Precision: dei casi che ho segnalato, quanti erano veri. È la fatica sprecata dell'operatore.
  • Recall: dei casi veri, quanti ne ho presi. È il danno che ti sfugge.
  • PR-AUC: la sintesi delle due al variare della soglia. Sugli eventi rari dice molto più dell'AUC, perché non si lascia impressionare dalla montagna di negativi facili.

Precision e recall si muovono in direzioni opposte, sempre. Alzi la soglia e diventi preciso ma ti sfugge roba; la abbassi e prendi tutto ma affoghi l'operatore. La simulazione qui sotto rende la cosa toccabile.

Muovi la rarità e guarda le metriche cambiare senso

Stesso modello, stessa capacità di distinguere. Cambia solo quanto è raro l'evento e dove tagli. Il modello «dico sempre no» è lì per confronto.

·accuratezza
·precision
·recall
·accuratezza di «dico sempre no»

Da provare Porta la rarità all'1% e la soglia a 0,5: l'accuratezza è splendida, la precision è un disastro, e il modello scemo ti batte. Poi porta la rarità al 50%: l'accuratezza torna a voler dire qualcosa e il modello scemo crolla. La stessa metrica, sullo stesso modello, passa da bugiarda a utile solo cambiando quanto è raro l'evento.

Centinaia di sassolini bianchi identici visti dall'alto, con tre o quattro ambrati quasi introvabili in mezzo

Cosa fare quando l'evento è raro, in ordine di quanto funziona sul serio:

  1. Cambia metrica, non dataset. Prima di toccare i dati, guarda PR-AUC e la precision alla capacità che hai davvero (capitolo 08). Spesso il modello andava già bene e il problema era il righello.
  2. Pesa gli errori invece di buttare dati. Quasi tutte le librerie hanno class_weight o scale_pos_weight: dici al modello che sbagliare su un abbandono costa venti volte. Ottieni lo stesso effetto del bilanciamento senza gettare via il 97% dello storico.
  3. Se ricampioni, ricalibra. Sempre. Il sottocampionamento è legittimo per far girare le cose, ma ti restituisce probabilità del mondo finto che hai creato. Rimettile nel mondo vero prima di usarle in un conto.
  4. Diffida dei dati sintetici. SMOTE e parenti inventano abbandoni interpolando fra abbandoni veri. In alta dimensione questo genera casi che non esistono in natura, e il modello impara a riconoscere la tua interpolazione. L'ho visto migliorare i numeri in laboratorio e peggiorare tutto in produzione.
06 · il punteggio

Le metriche che contano, e quelle che servono solo a far bella figura.

Ogni metrica risponde a una domanda diversa. Portare quella sbagliata in riunione è il modo più elegante di approvare un progetto che non funzionerà.

Ecco la tabella che tengo a mente, con la colonna che di solito manca: quando quella metrica ti inganna.

Le metriche di un punteggio · a cosa rispondono e quando mentono
MetricaRisponde aSensibile alla sogliaQuando ti inganna
Accuratezza quante ne indovino in tutto Sempre, se l'evento è raro. «Dico sempre no» fa 97%. Toglila dalle slide e mettici la precision alla tua capacità.
AUC (ROC) ordino bene i casi? no Non vede la calibrazione: puoi elevare al quadrato tutte le probabilità e non si muove. E sugli eventi rarissimi resta bello anche con una precision pessima.
PR-AUC ordino bene i rari? no Dipende dalla prevalenza, quindi non confrontarla fra periodi in cui l'evento è diventato più o meno frequente. È la metrica giusta per gli eventi rari.
Precision quanti allarmi sono veri Da sola premia chi segnala pochissimo. Va sempre letta insieme al recall, o meglio a capacità fissata (precision@k).
Recall quanti veri ho preso Da sola premia chi segnala tutto. «Deve prenderli tutti» è un capitolato che chiede return true.
F1 compromesso fra le due Assume che precision e recall valgano uguale. Nella tua azienda non è quasi mai vero: usa la matrice di costo (capitolo 07).
Log-loss / Brier le probabilità sono oneste? no Poco leggibile in riunione, e nessuno la chiede. Ma è l'unica che punisce il modello che dice 90% e sbaglia. Guardala tu.
Euro quanto guadagno Mai. È l'unica che descrive il progetto. Richiede di sapere cosa costa un falso positivo e un falso negativo, e il fatto che quasi nessuno lo sappia dire è il vero problema.

Se puoi portare un numero solo in direzione, porta gli euro. Se puoi portarne due, porta gli euro e la precision alla capacità che avete davvero.

Una nota sull'onestà della misura, che vale per tutte le righe della tabella: quel numero deve venire da dati che il modello non ha mai visto, e che appartengono a un periodo successivo a quello di addestramento. Su questi problemi il tempo c'è sempre, anche quando sembra di no: i clienti di gennaio hanno abbandonato con le regole di gennaio. Se mescoli gli anni e fai una divisione a caso, il numero che ottieni è ottimista e falso. È lo stesso identico meccanismo che ho spiegato nel capitolo sul leakage della risorsa madre, e lo riprendo sui casi veri al capitolo 11.

parte terza

La soglia: dove il modello diventa soldi

Due capitoli sul punto che tutti trattano come un dettaglio tecnico e che invece decide il ritorno del progetto.

07 · la soglia

Il modello finisce a 0,5 per abitudine. Quel numero non l'ha scelto nessuno.

Lo 0,5 è il valore predefinito di una libreria. È diventato una decisione aziendale senza che nessuno se ne accorgesse.

Ogni classificatore, in fondo, fa questo: calcola una probabilità e poi la confronta con 0,5. Se sopra, dice sì. Quel confronto sta scritto dentro predict(), arriva gratis con la libreria, e implica una cosa precisa: sbagliare in un senso costa esattamente quanto sbagliare nell'altro. Nella tua azienda questo è falso praticamente sempre.

  • Chiamare per sbaglio un cliente fedele: cinque minuti di un commerciale, e forse gli fa pure piacere.
  • Non chiamare un cliente che se ne va: il suo margine annuo, per gli anni che sarebbe rimasto.

Il rapporto fra i due costi, in un caso del genere, è di uno a mille. E la soglia giusta si scrive in una riga.

La soglia ottima, dalla matrice di costo

t* = CFP  /  (CFP + CFN)

CFP è il costo di un falso allarme: agisci su un cliente che non ne aveva bisogno. CFN è il costo di un caso mancato: non agisci e succede. Se il primo costa 5 euro e il secondo 500, la soglia ottima è 5/505, cioè 0,0099. Praticamente zero: ti conviene chiamare chiunque abbia anche solo l'un per cento di probabilità di andarsene. Lo 0,5 predefinito, su questi numeri, ti fa perdere quasi tutti i clienti recuperabili, e nessuna metrica te lo dice, perché l'accuratezza a 0,5 è splendida. Nota anche la parentela con il quantile del giornalaio della risorsa madre: è la stessa idea, applicata a una decisione sì/no invece che a una quantità.

Muovi i costi e guarda dove finisce la soglia

Stesso modello, stessi clienti. Cambia solo quanto ti costa sbagliare da una parte e dall'altra. Il conto è annuo, su diecimila clienti.

costo totale al variare della soglia dove tagli adesso
·soglia usata
·soglia ottima calcolata
·costo annuo
·quanto lasci sul tavolo

La cosa da fare Lascia i costi come stanno e passa da «soglia 0,5» a «soglia dai costi». Il modello è lo stesso, i clienti sono gli stessi, l'AUC è lo stesso. Cambia solo dove tagli, e cambia il conto di decine di migliaia di euro. È la leva più economica che esiste in tutto questo mestiere: due righe di codice e zero addestramento.

Due mani tracciano con riga e matita una sola linea verticale decisa su una striscia di carta stampata

Perché quasi nessuno lo fa, e non è pigrizia. Perché per usare quella formula bisogna rispondere a due domande che in azienda nessuno ha mai messo per iscritto: quanto costa disturbare un cliente per niente, e quanto vale un cliente perso. Ho visto riunioni intere fermarsi lì. E quando finalmente li quantificano, succede la cosa interessante: scoprono che la policy in vigore da anni corrisponde a un rapporto di costi che nessuno sceglierebbe consapevolmente. La domanda è arrivata con l'AI, la risposta non aveva bisogno dell'AI.

Due avvertenze, perché la formula è semplice e le semplificazioni si pagano:

  1. Vale se le probabilità sono calibrate. Se il modello dice 8% dove la realtà fa 30%, tagliare a 0,0099 non fa quello che credi. Prima taratura (capitolo 04), poi soglia.
  2. I costi non sono uguali per tutti. Perdere il cliente da 200.000 euro l'anno non costa come perdere quello da 800. Il passo successivo, che vale ancora più della soglia, è ordinare per impatto atteso: probabilità per valore. Ne parlo nel capitolo 17.
08 · la soglia

Non chiedere al modello chi abbandonerà. Chiedigli i venti nomi di domani mattina.

La capacità di chi agisce è un vincolo fisico. Se lo metti dentro il problema invece che fuori, cambia tutto: metrica, soglia e valore.

La soglia del capitolo precedente assume che tu possa agire su tutti quelli che superano il taglio. Con costi molto sbilanciati la soglia ottima diventa bassissima, e ti ritrovi con quattromila clienti da chiamare e due persone al telefono. A quel punto la soglia teorica è corretta e inapplicabile.

La riformulazione che uso, e che cambia il progetto: il modello non produce una probabilità, produce la lista dei venti. Da qui discendono tre cose concrete.

  1. La metrica diventa precision@k. Dei primi venti che ti ho dato, quanti erano veri? Questo numero parla la lingua dell'operatore, si misura la settimana dopo, e non si lascia impressionare dalla rarità.
  2. L'ordinamento torna a essere l'unica cosa che conta. Se la capacità decide il taglio, la calibrazione serve meno per questa decisione. Ti serve ancora per il conto economico, ma la lista di domani la fa l'ordine.
  3. Il problema diventa di allocazione. Venti telefonate, mille candidati, valori diversi: è esattamente un problema di ottimizzazione sotto vincolo, cugino di quelli che stanno nella parte sull'ottimizzazione della risorsa madre. E la funzione da massimizzare diventa probabilità per valore per recuperabilità, dove la probabilità da sola è solo il primo dei tre fattori.

Quel terzo fattore è quello che nessuno mette. Un cliente che sta per andarsene con probabilità 95% spesso è già andato: chiamarlo è teatro. Il valore sta nei clienti al 60%, dove la telefonata può ancora cambiare la storia.

E qui si apre la porta della cosa più importante di tutto il capitolo, che merita la sua risorsa e che ti anticipo. La domanda giusta non è «chi abbandonerà». È «su chi la mia telefonata cambia l'esito». Sono due liste diverse, e si sovrappongono meno di quanto immagini: contengono clienti che se ne andrebbero comunque, clienti che resterebbero comunque, e la fetta sottile su cui la chiamata fa la differenza. Distinguerle si chiama uplift modeling, e richiede un esperimento: un gruppo che chiami e uno che deliberatamente non chiami. Chi ha letto il capitolo sulla causalità sa già perché non se ne esce senza.

parte quarta

Il modello e i suoi ingredienti

Quattro capitoli sulla parte che tutti chiamano «il progetto» e che pesa il dieci per cento: quale algoritmo, quali colonne, e i due modi in cui questa parte si rovina da sola.

09 · il modello

Quale algoritmo, per davvero, su una tabella di clienti.

La risposta breve è gradient boosting. La risposta utile è perché, e quando invece serve altro.

Nella risorsa madre c'è la tabella generale degli algoritmi. Qui li guardo da vicino sul caso che ci interessa: una tabella con ventimila clienti, cinquanta colonne, e un sì o no da prevedere.

  1. Regressione logistica. Il baseline obbligatorio, e a volte il vincitore. Ti dà coefficienti che una persona legge, probabilità naturalmente calibrate, e gira in un istante. Il suo limite è che vede solo relazioni lineari: le interazioni («il ritardo conta solo per i clienti piccoli») gliele devi scrivere tu a mano. Parti sempre da qui, se non altro per avere un numero contro cui misurare tutto il resto.
  2. Gradient boosting (XGBoost, LightGBM, CatBoost). Il vincitore nella stragrande maggioranza dei casi reali, e lo è ancora oggi contro il deep learning sulle tabelle. Trova le interazioni da solo, mangia valori mancanti e variabili categoriche senza fare storie, e con la log-loss esce ragionevolmente calibrato. Il prezzo: adora il leakage e non estrapola.
  3. Random forest. Robusto, quasi zero tuning, ottimo secondo posto. Il difetto che conta qui: schiaccia le probabilità verso il centro, perché fa una media di voti. Fatica a dire 0,02 e 0,98, e quindi va tarato prima di metterlo in un conto.
  4. SVM. Utile con pochi dati e molte colonne, tipicamente sul testo. Su ventimila clienti scala male e ti dà distanze, non probabilità. Oggi è di nicchia.
  5. kNN. Raramente il modello finale, spesso lo strumento migliore per la spiegazione: «i tre clienti più simili a questo se ne sono andati tutti e tre». È il nonno della ricerca vettoriale ed è la cosa che convince un commerciale in due secondi.
  6. PCA. Serve a preparare i dati, e da sola non predice niente. Comprime colonne correlate, e ti costa la spiegabilità: dopo la PCA nessuno sa più cosa vuol dire una variabile. Sulle tabelle aziendali, dove la spiegazione serve, la uso poco.
  7. Reti neurali. Sulle tabelle costano dieci volte tanto per fare peggio. Servono quando dentro ci sono segnali (testo, immagini, sequenze lunghe), e allora si combinano: la rete estrae, il boosting decide.

Regressione logistica per capire, gradient boosting per vincere, kNN per spiegare. Il resto, su una tabella di clienti, è quasi sempre lusso.

Una cosa che vale più della scelta dell'algoritmo, e che dico controvoglia perché è poco affascinante: la differenza fra il miglior algoritmo e il secondo è di solito un punto di AUC. La differenza fra la feature giusta e la sua assenza è dieci. Se hai un pomeriggio, non spenderlo a provare un modello nuovo. Spendilo a parlare con chi lavora lì da vent'anni. È il capitolo che segue.

10 · il modello

Le tre colonne che valgono più di tutto il resto, e come si trovano.

Non stanno nel database. Stanno nella testa di chi il mestiere lo fa, e si tirano fuori facendo le domande giuste.

Su un problema di abbandono in B2B, tre colonne fanno quasi tutto il lavoro. Le conoscono con una sigla vecchia di decenni, RFM, e battono regolarmente modelli molto più eleganti:

  • Recency: quanti giorni dall'ultimo ordine. Da sola, la variabile più predittiva che esista in quasi ogni azienda.
  • Frequency: quanti ordini in un periodo, e soprattutto come sta cambiando il ritmo rispetto al ritmo abituale di quel cliente.
  • Monetary: quanto vale, e come si sta muovendo il valore.

La parte che quasi tutti sbagliano sta in quel «rispetto al ritmo abituale». Un cliente che ordina ogni quattro mesi e non ordina da tre è in perfetto orario. Un cliente che ordina ogni settimana e non ordina da tre è già andato. La feature giusta si scrive «giorni dall'ultimo ordine diviso il suo intervallo tipico», e quel rapporto vale molto più del numero secco. Una divisione, e il modello smette di confondere abitudini diverse.

Le famiglie di colonne che aggiungo sempre, in ordine di ritorno:

  1. I rapporti, non i valori assoluti. Il fatturato di questo trimestre diviso la media dei quattro precedenti dice cento volte di più del fatturato.
  2. Il calendario vero. Giorni lavorativi del mese, agosto, festività mobili, chiusura del bilancio del cliente. Una colonna «numero di sabati nel mese» ha risolto più problemi di certe reti neurali.
  3. Le derivate. Non «quanti ticket ha aperto», ma «quanti ne ha aperti negli ultimi 30 giorni rispetto ai suoi soliti».
  4. Il testo trasformato in colonne. Le note del commerciale, le mail, i verbali. È l'80% dell'informazione aziendale e nessun modello tabellare l'ha mai potuta leggere. Oggi si può, e come si fa lo racconto nella risorsa madre: è la leva più sottovalutata del momento.

E il metodo per trovarle, che vale più di qualsiasi tecnica automatica: siediti con il commerciale più bravo e chiedigli come fa a capire che sta per perdere un cliente. Ti dirà cose come «quando cominciano a chiedere il DDT separato», «quando smettono di chiamare per le urgenze», «quando l'ordine arriva via mail invece che per telefono». Ognuna di quelle frasi è una colonna, e quasi sempre è nei tuoi dati, solo che a nessuno era venuto in mente di guardarla.

Il novanta per cento del valore di un data scientist bravo è saper fare le domande giuste a quella persona. Il modello lo sa allenare chiunque.

11 · il modello

Il leakage sui casi veri: i quattro modi in cui il tuo 0,97 è finto.

La teoria sta nella risorsa madre. Qui ci sono gli esempi che ho visto davvero, uno per caso d'uso, e come si riconoscono.

Nel capitolo sul leakage della risorsa madre ho spiegato il meccanismo. Qui lo applico ai quattro casi di questa pagina, perché ognuno ha la sua trappola tipica e la riconosci solo se l'hai già vista.

  1. Insoluti: i solleciti. Fra le colonne c'è «numero di solleciti inviati». L'AUC arriva a 0,98 e c'è festa. Peccato che i solleciti si mandino dopo che il cliente non ha pagato. Il modello ha imparato a leggere il passato e lo chiama profezia.
  2. Abbandono: l'anagrafica aggiornata. Lo stato del cliente diventa «cessato» in anagrafica, e quel campo lo leggi da una tabella che riporta la situazione di oggi, non di allora. Sembra un dato innocente. È la risposta scritta a matita sul banco.
  3. Guasti: la manutenzione registrata. Fra le feature c'è «ore di fermo macchina nell'ultimo mese». Il fermo è la conseguenza del guasto che stai cercando di prevedere. Il modello prevede benissimo guasti già successi.
  4. Lead: l'assegnazione al commerciale. «Assegnato al senior» predice benissimo la chiusura. Certo: al senior i lead buoni glieli danno perché sono buoni. Il modello ha imparato la politica interna dell'ufficio commerciale.

La domanda che smaschera tutte e quattro, e che va fatta a ogni singola colonna, in forma brutale: «alle nove di lunedì, quando devo decidere, ho questo valore in mano, e ha esattamente questo valore?» Se la risposta è «beh, quasi», è no. Se è «sì ma viene caricato a fine mese», è no. Se è «sì ma qualcuno lo corregge dopo», è il caso peggiore di tutti, perché nel database c'è e sembra a posto.

Il sintomo universale lo ripeto perché mi ha salvato più volte di qualunque strumento: va troppo bene. In ventisei anni, un risultato splendido ottenuto al primo colpo è stato un errore nel novanta per cento dei casi. Il modello che funziona davvero, all'inizio, funziona così così.

La difesa strutturale, per chi lavora su dati che valgono soldi, si chiama point-in-time correctness: registrare non solo il valore, ma da quale istante era conoscibile, e ricostruire il training «come si vedeva allora». È lavoro serio, si fa una volta, e trasforma la domanda «stiamo barando?» da opinione a interrogazione. Chi ha letto la risorsa su Entity Framework sa che questa cosa non nasce nel modello: nasce nello strato dati, in come sono scritte le tabelle e in cosa succede quando qualcuno aggiorna una riga senza storicizzarla.

12 · il modello

Quando i dati sono pochi: il prodotto con tre vendite l'anno.

Metà dei tuoi articoli ha uno storico ridicolo. Buttarli via è la scelta comoda; farli imparare dai fratelli è quella giusta.

Il caso è questo: cinquemila articoli, e la coda lunga ha tre vendite l'anno a testa. Un modello per articolo non sta in piedi. Un modello unico per tutti tratta il ricambio raro come il consumabile che gira ogni settimana. Le due strade comode sono entrambe sbagliate.

La via di mezzo si chiama modello gerarchico, ed è una delle idee più eleganti della statistica applicata. Il ragionamento è quello che farebbe una persona di buon senso: se di questo articolo so pochissimo, parto da quello che so della sua famiglia, e mi sposto da lì solo quanto i suoi pochi dati mi autorizzano a spostarmi. Tre vendite non mi fanno cambiare idea di molto. Trecento sì.

Il compromesso, in una riga

θ̂i = wiȳi + (1 − wi) ⋅ μ     con   wi = ni / (ni + k)

ȳi è quello che dicono i dati di questo articolo. μ è quello che dice la sua famiglia. ni è quanti dati hai su di lui. Il peso wi fa il lavoro da solo: con n piccolo tende a zero e ti appoggi alla famiglia, con n grande tende a uno e l'articolo parla per sé. k decide quanto sei prudente. È la stessa idea del prior bayesiano da correggere coi dati veri, ed è anche il motivo per cui un articolo con due vendite non deve avere una previsione tutta sua: quella previsione sarebbe rumore con l'aria di un numero.

Le alternative pratiche, quando non vuoi tirare fuori l'artiglieria bayesiana:

  • Un modello solo, con la famiglia come colonna. Il boosting impara da sé a usare il livello di famiglia quando l'articolo non ha storia. Semplice, funziona, e nel 70% dei casi basta.
  • Target encoding con smoothing: la media della categoria, tirata verso la media generale in proporzione a quanti dati ha. È lo stesso identico compromesso della formula, scritto come feature. Attenzione a calcolarlo solo sul training, o hai appena fatto leakage.
  • Rinunciare, e dirlo. Per l'articolo con due vendite la risposta onesta è che non si può prevedere. Un sistema che risponde sempre è un sistema che mente bene: meglio una regola esplicita («sotto cinque vendite, scorta minima fissa e amen») che una previsione inventata con tre decimali.

parte quinta

Non «se». Quando

Tre capitoli sulla domanda che i clienti fanno davvero e che quasi nessuno modella: fra quanto succede. Ha una matematica sua, ed è la parte che sposta le telefonate da tre settimane dopo a tre settimane prima.

13 · il tempo

Se calcoli quanto durano i clienti guardando solo quelli che se ne sono già andati, sbagli. Sempre, e per difetto.

Si chiama censura, ed è il motivo per cui la vita media dei tuoi clienti calcolata in Excel è più corta della realtà.

La domanda arriva così: «quanto dura in media un cliente?». Il modo naturale di rispondere è aprire lo storico, prendere quelli che se ne sono andati, misurare quanto sono rimasti e fare il conto. Il numero esce, sembra ragionevole, ed è sistematicamente troppo basso.

Il motivo è che hai escluso dal conto tutti quelli che sono ancora qui. E quelli, per definizione, sono i più duraturi: il cliente entrato dieci anni fa e ancora attivo non compare nella tua media, perché la sua durata non è ancora finita. Sai solo che è almeno dieci anni. Quel «almeno» è informazione preziosa, e buttarla via è l'errore più diffuso che vedo su questa domanda.

Il termine tecnico è censura a destra: conosci l'inizio, sai che alla data di oggi non è ancora successo niente, e non sai quando succederà. La statistica ha una risposta a questo problema da settant'anni, si chiama stimatore di Kaplan-Meier, e usa tutti: chi se n'è andato contribuisce con la sua durata, chi è ancora qui contribuisce con il suo «almeno».

Kaplan-Meier: la probabilità di essere ancora qui al tempo t

S(t) =tit ( 1 − di / ni )

Si legge meglio di quanto sembri. A ogni istante ti in cui qualcuno se ne va, guardi di, quanti se ne sono andati in quel momento, e ni, quanti erano ancora presenti e a rischio un attimo prima. Il rapporto è la probabilità di andarsene lì; uno meno il rapporto è la probabilità di sopravvivere a quel momento. Moltiplichi tutte queste probabilità e ottieni la curva. La finezza sta in ni: chi è ancora attivo resta nel denominatore finché lo osservi, e ne esce senza contare come abbandono. È così che il suo «almeno» entra nel conto invece di essere buttato.

Il conto di Excel contro la curva vera

Stessi clienti, stessi dati. In rosso il conto fatto solo su chi è già andato. In arancione Kaplan-Meier, calcolata qui, che usa anche chi è ancora attivo. In verde la verità, che conosco perché i dati li ho generati io.

Kaplan-Meier (usa tutti) mediana di chi è già andato verità (la conosco: ho fatto io i dati)
·mediana di chi è già andato
·mediana Kaplan-Meier
·mediana vera

Da provare Porta i clienti attivi dal 5% all'80%: è quello che succede a un'azienda che cresce, perché i clienti nuovi non hanno ancora avuto il tempo di andarsene. Il conto ingenuo crolla e ti dice che i clienti durano sempre meno. Il business non sta peggiorando: è il conto a essere sbagliato, e con Kaplan-Meier la stima resta al suo posto. Ho visto prendere decisioni sul budget marketing esattamente su questo errore.

Un tecnico in un magazzino luminoso controlla uno scaffale dove le scatole si diradano verso il fondo e guarda l'orologio

Cosa ti dà in più questa famiglia di modelli, oltre a non sbagliare la media:

  1. Una curva invece di un numero. Non «il 12% abbandonerà», ma «ecco la probabilità di essere ancora qui fra 3, 6, 12 mesi». Da lì esce la mediana, che è la domanda che ti fanno: fra quanto ne perdo metà?
  2. Il rischio istantaneo (l'hazard): non «se» ma «quando è pericoloso». Nella maggior parte dei business non è costante: c'è un picco nei primi 90 giorni, poi si calma. Sapere dove sta il picco ti dice quando spendere l'attenzione.
  3. L'effetto delle variabili sul tempo. Con un modello di Cox o con un boosting per sopravvivenza chiedi «questa promozione allunga la vita del cliente, e di quanto?». Risposta in mesi, non in probabilità.

Chiedere «abbandonerà nei prossimi 90 giorni?» invece di «quando?» è comodo, si fa col classificatore che sai già usare, e butta via la metà più utile dell'informazione.

14 · il tempo

«Quando finirà il prodotto»: la previsione che fa alzare il telefono al momento giusto.

È la domanda commercialmente più preziosa di tutta questa pagina, e nel novanta per cento delle aziende nessuno la fa al sistema.

Il cliente compra un consumabile: toner, filtri, reagenti, ricambi, materiale d'irrigazione, qualunque cosa si esaurisca. Tu sai cosa ha comprato e quando. Da lì puoi stimare quando finirà, e chiamarlo la settimana prima. Non quando è troppo tardi, non a caso ogni tre mesi: la settimana prima.

Cosa cambia, in concreto:

  • Il commerciale chiama con un motivo vero e non con una scusa. «Le sta finendo il materiale» è una telefonata che il cliente ringrazia.
  • Il concorrente non fa in tempo a entrare. La finestra in cui si cambia fornitore è esattamente quella in cui il prodotto sta finendo.
  • Le telefonate scendono di numero e salgono di resa. Chiami venti clienti giusti invece di duecento a caso.

Come si costruisce, in ordine di sofisticazione, e il primo gradino basta più spesso di quanto pensi:

  1. Il consumo medio del cliente. Quantità comprata diviso i giorni fra un ordine e l'altro. Ti dà il ritmo personale di quel cliente, che è tutto ciò che serve nella maggior parte dei casi. Costa una query.
  2. Il ritmo che cambia. Il consumo non è costante: c'è stagionalità (l'irrigazione d'estate), ci sono le campagne, ci sono gli anni buoni. Qui entra il forecasting vero, quello della risorsa madre.
  3. La sopravvivenza applicata al riordino. Invece di una data secca, una curva: «probabilità che abbia finito entro il giorno X». E allora la telefonata parte quando quella probabilità supera la soglia che esce dai tuoi costi (capitolo 07). Tutto si tiene.

Le tre trappole, tutte viste sul campo:

  • Il cliente che ha scorte. Ha comprato per sei mesi ma ne usa per tre: ha il magazzino pieno. Se non lo sai, chiami sempre troppo presto e diventi quello che rompe.
  • Il cliente che compra anche altrove. Il tuo consumo stimato è sbagliato per costruzione, perché vedi solo la tua fetta. E questo è proprio il segnale che vorresti: se consuma più di quanto compra da te, qualcun altro sta servendo la differenza.
  • Il dato censurato di nuovo. Chi non ha ancora riordinato sta dicendo «non ancora», e tu lo stai leggendo come «mai più». È lo stesso identico errore del capitolo prima, applicato all'articolo invece che al cliente.

Questa è la previsione che i clienti ti pagano volentieri, perché non chiede a nessuno di cambiare mestiere: dice solo al commerciale chi chiamare lunedì. E si costruisce sopra dati che hai già.

Un professionista in un ufficio luminoso a Milano telefona con un foglio stampato in mano e prende un appunto

Il foglio che vale la telefonata Una previsione di riordino si misura in una cosa sola: quante di queste chiamate arrivano nella settimana giusta. Troppo presto e il cliente ha il magazzino pieno, troppo tardi e ha già comprato da un altro.

15 · il tempo

Il valore futuro del cliente: il numero che rende sensato tutto il resto.

Senza, non sai quanto spendere per tenerti un cliente. E allora spendi uguale per tutti, che è il modo più sicuro di sprecare il budget.

Il valore del ciclo di vita, o CLV, mette insieme i due pezzi dei capitoli precedenti: quanto margine fa un cliente per periodo e per quanti periodi resterà. Il secondo è esattamente la curva di sopravvivenza. È il punto in cui tutta questa matematica smette di essere un esercizio e diventa un budget.

Il valore futuro, scontato e con la sopravvivenza dentro

CLV =t=1T mtS(t)  /  (1+r)t

mt è il margine del periodo t (il margine, non il fatturato: è un errore che vedo continuamente). S(t) è la probabilità che sia ancora cliente in quel periodo, e viene dritta da Kaplan-Meier. r è il tasso di sconto, perché mille euro fra cinque anni non sono mille euro. Nota cosa fa S(t) dentro la somma: pesa ogni euro futuro con la probabilità che quell'euro arrivi davvero. Senza quel fattore stai sommando incassi di clienti che se ne saranno andati da un pezzo, ed è il motivo per cui i CLV fatti in Excel sono quasi sempre gonfi.

A cosa serve, in pratica, e sono tutte decisioni che oggi qualcuno prende a naso:

  1. Quanto posso spendere per acquisire un cliente. Se vale 3.000 euro di margine attualizzato, spenderne 900 per prenderlo è ottimo e spenderne 3.500 è follia. Metà delle campagne che ho visto non sapeva rispondere a questa domanda.
  2. Quanto posso spendere per tenerlo. Lo sconto di retention ha senso finché è sotto il valore che salvi. E il valore che salvi dipende da quanto sarebbe rimasto, non da quanto ha speso finora.
  3. Chi chiamo per primo. Non chi ha la probabilità di abbandono più alta: chi ha probabilità per valore più alto. Un cliente da 200 euro al 90% vale meno di uno da 50.000 al 20%.
  4. Quanto vale l'azienda. Il portafoglio clienti è un attivo, e questo è il modo di stimarlo con dei numeri difendibili.

Due errori che rendono il CLV pericoloso invece che utile:

  • Usare il fatturato al posto del margine. Il cliente che compra tantissimo con lo sconto massimo e chiama l'assistenza ogni giorno può avere un CLV negativo. Succede più spesso di quanto le direzioni commerciali vogliano sapere.
  • Guardare indietro invece che avanti. Sommare quanto ha speso finora produce nostalgia, non una previsione. Il CLV è una previsione, con tutta l'incertezza delle previsioni, e va dato con un intervallo, come spiego nel capitolo sull'incertezza della risorsa madre.

parte sesta

I casi, il conto e la prova

Quattro problemi che arrivano in ogni azienda, con la trappola di ciascuno. Poi il conto in euro, e le domande per misurare quanto di tutto questo è diventato tuo.

16 · i casi

Abbandono, lead, insoluti, guasti: quattro problemi, quattro trappole diverse.

La matematica è la stessa. Quello che cambia, e che decide se funziona, è il dettaglio che non è nei manuali.

Abbandono · il cliente che smette senza dirtelo

La domanda vera: quasi mai «chi abbandonerà», quasi sempre «chi sta rallentando adesso, mentre posso ancora fare qualcosa». Nel B2B nessuno disdice: sfuma.

La trappola: l'etichetta arriva tardi. Se definisci l'abbandono a 180 giorni, il modello impara a riconoscere clienti già persi e ti fa fare telefonate di condoglianze. Sposta l'etichetta indietro, verso il rallentamento (capitolo 01), e la feature chiave diventa il ritmo rispetto al ritmo abituale (capitolo 10).

Il salto di qualità: passare da «se» a «quando» con la sopravvivenza, e ordinare per probabilità per valore invece che per probabilità (capitolo 15).

Lead scoring · quale contatto vale la telefonata

La domanda vera: a parità di venti telefonate, quali venti. È il caso da manuale in cui conta l'ordinamento e la calibrazione serve solo per il conto.

La trappola: il modello impara la politica interna. «Assegnato al senior», «richiamato tre volte», «ha ricevuto il preventivo» predicono benissimo la chiusura e sono tutte conseguenze dell'interesse dell'ufficio, non cause. Togli tutto ciò che accade dopo il primo contatto e il tuo AUC crollerà da 0,93 a 0,71. Quel 0,71 è il numero vero.

Il salto di qualità: distinguere chi comprerà da chi comprerà perché l'hai chiamato (capitolo 08).

Insoluti · chi non pagherà

La domanda vera: non solo chi, ma quando smettere di consegnare. È una decisione con due costi molto asimmetrici: bloccare un cliente buono lo offende, non bloccarne uno cattivo ti costa la merce.

La trappola: i solleciti e tutto ciò che il recupero crediti fa dopo. E la seconda, più sottile: il modello impara dal comportamento passato del tuo ufficio credito. Se hanno sempre bloccato i clienti del sud, il modello dirà che il sud non paga.

Il salto di qualità: il numero entra in un conto («8% di rischio contro 12% di margine»), quindi qui la calibrazione diventa la condizione perché quella frase abbia un senso.

Guasti · la manutenzione predittiva

La domanda vera: «quanto tempo mi resta», non «si romperà». Il manutentore deve programmare, e programmare vuol dire una data.

La trappola: i guasti sono rarissimi e costosissimi. Prevalenza dello 0,3%, e allora vale tutto il capitolo 05: l'accuratezza è inutile, il modello «non si romperà mai» fa 99,7%, e il rilevatore che sembra ottimo ti sommerge di falsi allarmi. Il conto va fatto sul rapporto fra i costi: un fermo impianto vale migliaia di euro l'ora, una manutenzione inutile vale poche centinaia.

Il salto di qualità: sopravvivenza sul tempo residuo, e la certezza che i sensori di oggi siano gli stessi di quando hai addestrato. Cambiano un sensore e il modello smette di valere, in silenzio.

Un manutentore in una fabbrica luminosa appoggia la mano su un macchinario e lo ascolta, con un sensore nell'altra mano

Il collega che non scala Il manutentore esperto sente il guasto tre settimane prima. Sa farlo su otto macchine, non su ottocento, e fra due anni va in pensione. Il modello serve a quello: non a sostituirlo, a moltiplicarlo.

Quattro problemi diversi, una regola sola: la trappola non sta mai nel modello. Sta in una colonna che non potevi avere, in un'etichetta che arriva tardi, o in una decisione umana che il modello ha imparato scambiandola per la realtà.

17 · il conto

Quanto vale davvero: il conto che trasforma un punteggio in un progetto approvato.

Non serve un business case da consulente. Servono quattro numeri, e li sa già la tua azienda.

Il conto si fa così, e ci vuole un foglio. Prendi il caso dell'abbandono, con numeri che vedo spesso:

  1. Quanti eventi all'anno. Diecimila clienti, il 3% se ne va: 300 abbandoni.
  2. Quanto vale ognuno. Non il fatturato: il margine per gli anni che sarebbe rimasto, cioè il CLV del capitolo 15. Diciamo 1.500 euro.
  3. Quanti ne intercetti e quanti ne recuperi. Ed è qui che i business case mentono. Il modello ne segnala 200 dei 300 (recall 67%), tu ne chiami quanti la capacità consente, e di quelli chiamati ne recuperi una frazione. Non il 100%: se va molto bene, il 20%.
  4. Quanto costa la macchina. Le telefonate, il tempo, il presidio del modello.

Con questi numeri: 200 intercettati per 20% recuperato fa 40 clienti salvati, per 1.500 euro fa 60.000 euro l'anno. Poi togli il costo delle telefonate inutili (i falsi positivi, che a 5 euro l'una sono spiccioli) e il presidio. Resta un numero che si può portare in direzione senza vergognarsi, ed è quasi sempre molto più piccolo di quello che promette chi vende software, e molto più credibile.

Il moltiplicatore che tutti dimenticano è il terzo: quanti ne recuperi davvero fra quelli che chiami. Un progetto che assume il 100% è un progetto che non ha mai fatto una telefonata.

E adesso la domanda cattiva, quella che rende questo capitolo diverso da un business case qualunque: quel 20% di recupero, come lo sai? Se non hai mai tenuto un gruppo di clienti che il sistema segnala e che nessuno chiama, non lo sai: lo stai supponendo. E l'unica misura onesta del progetto è la differenza fra i chiamati e i non chiamati. Costa qualche decina di clienti l'anno, e compra l'unica risposta possibile alla domanda che prima o poi arriva dal consiglio. La spiego per intero nel capitolo sulla causalità della risorsa madre, e vale ogni riga.

Mani che fanno un conto a matita su un blocco accanto a una calcolatrice, su una scrivania al sole del mattino
18 · la prova

L'esame del senior: dodici domande sui punteggi.

Da fare a un fornitore, a un collega, a te stesso. Ogni domanda ha la trappola e la risposta.

Se ne reggi otto su dodici senza aprire, questa risorsa ha fatto il suo lavoro.

il punteggio
01«Il modello ha 0,91 di AUC.» Ti basta?

La trappola «Ottimo, mettiamolo in produzione.»

Da senior L'AUC dice che ordina bene. Non dice che i numeri sono veri. Puoi elevare al quadrato tutte le probabilità del modello e l'AUC non si muove: l'ordine è identico. Se quel numero finisce in una lista da chiamare, va bene. Se finisce in una moltiplicazione, serve la calibrazione. Le domande vere: com'è la curva di affidabilità? avete ricampionato per bilanciare le classi (se sì, le probabilità sono gonfie)? e la misura viene da un periodo successivo all'addestramento?

02Perché un modello ottimo può avere probabilità completamente sbagliate?

La trappola «Se ordina bene, le probabilità sono giuste.»

Da senior Ordinare e misurare sono capacità diverse. Tre cause tipiche. Il ricampionamento: hai tenuto tutti i 500 abbandoni e buttato 19.500 fedeli, il modello vive in un mondo al 50% e sputa probabilità di quel mondo. In produzione sono gonfie di venti volte. L'algoritmo: il random forest schiaccia verso il centro, l'SVM dà distanze. Il boosting con log-loss è ragionevole di suo. La deriva: la calibrazione è la prima cosa che si rompe quando il mondo cambia, e l'AUC resta bello, quindi nessuno se ne accorge. Si aggiusta con Platt o isotonic su dati mai visti. Non cambia l'ordine, quindi non perdi niente.

03Il modello ha il 97% di accuratezza sull'abbandono. Commenta.

La trappola «Buon risultato, si può migliorare.»

Da senior Il 97% ce l'ha anche return false, se il 3% abbandona. Sugli eventi rari l'accuratezza va tolta dalle slide. Si guardano precision, recall e PR-AUC, e meglio ancora la precision alla capacità reale: dei venti che diamo al commerciale, quanti erano veri? E si guarda il conto in euro, che è l'unica metrica che descrive il progetto.

04Perché non bilanciare il dataset è spesso meglio che bilanciarlo?

La trappola «Le classi sono sbilanciate, quindi va bilanciato.»

Da senior Perché butti dati veri e ti ritrovi con probabilità di un mondo che non esiste. La strada migliore è pesare gli errori (class_weight, scale_pos_weight): stesso effetto, zero dati gettati, probabilità che restano nel mondo vero. Se ricampioni comunque, ricalibra prima di usare le probabilità in un conto. E diffida dei dati sintetici tipo SMOTE: inventano casi interpolando fra casi veri, e il modello impara a riconoscere la tua interpolazione. Ottimo in laboratorio, peggiore in produzione.

la soglia e la decisione
05Da dove viene la soglia 0,5?

La trappola «È il valore standard.»

Da senior Da predict(). Nessuno l'ha scelta, ed è diventata una decisione aziendale. Lo 0,5 implica che sbagliare nei due sensi costi uguale. La soglia giusta è t* = CFP/(CFP+CFN): con 5 euro contro 500 diventa 0,0099, cioè chiami chiunque abbia l'1% di rischio. Due condizioni: le probabilità devono essere calibrate, e i costi non sono uguali per tutti i clienti (ordina per probabilità per valore). È la leva più economica del mestiere: due righe, zero addestramento, decine di migliaia di euro.

06Il commerciale ha tempo per venti telefonate. Come cambia il problema?

La trappola «Gli diamo tutti quelli sopra soglia.»

Da senior Cambia tutto: la metrica diventa precision@20 e la soglia la decide la capacità. Il modello non produce una probabilità: produce la lista dei venti, ordinata, con il motivo in italiano accanto. E la funzione da massimizzare diventa probabilità × valore × recuperabilità, dove la probabilità da sola è solo il primo dei tre fattori. Il cliente al 95% spesso è già andato; il valore sta in quello al 60%.

07«Chiamiamo chi ha la probabilità di abbandono più alta.» Cosa non torna?

La trappola «È esattamente lo scopo del modello.»

Da senior Che «chi abbandonerà» e «su chi la telefonata cambia l'esito» sono due liste diverse. Ci sono clienti che se ne vanno comunque (chiamarli è teatro), clienti che restano comunque (chiamarli è costo), e la fetta sottile su cui la chiamata sposta davvero l'ago. Solo la terza vale. Distinguerle si chiama uplift modeling e richiede un esperimento: un gruppo chiamato e uno deliberatamente no. Senza quel gruppo, non è misurabile.

i dati e il tempo
08AUC 0,98 sugli insoluti al primo colpo. Che fai?

La trappola «Festeggio.»

Da senior Cerco il leakage, perché il sintomo del leakage è che va troppo bene. Sugli insoluti il colpevole classico sono i solleciti: si mandano dopo il mancato pagamento. Poi le anagrafiche corrette a posteriori, che nel database sembrano dati di allora. La domanda su ogni colonna: «alle nove di lunedì ho questo valore, con questo esatto valore?» Se è «sì ma viene corretto dopo», è no. La difesa strutturale è la point-in-time correctness, e non nasce nel modello: nasce nello strato dati.

09«I nostri clienti durano in media 3 anni.» Come l'avete calcolato?

La trappola «Media della durata dei clienti persi.»

Da senior Allora è sbagliato per difetto, e sistematicamente. Hai escluso chi è ancora qui, cioè proprio i più duraturi. Si chiama censura a destra: di loro sai che è «almeno» tot, e quel «almeno» è informazione. Si usa Kaplan-Meier, che tiene gli attivi nel denominatore senza contarli come persi. Ti dà una curva, la mediana, e il rischio istantaneo nel tempo. Il caso più cattivo: se l'azienda cresce, i clienti nuovi gonfiano la censura e la media ingenua crolla. Sembra che il business peggiori, e invece è il conto sbagliato.

10Il cliente chiede «chi abbandonerà». Cosa gli proponi?

La trappola «Un modello di abbandono.»

Da senior Prima chiedo quando finisce il prodotto che ha comprato. Sui consumabili «quando riordina» batte «se abbandona» quasi sempre: la telefonata parte tre settimane prima invece che tre settimane dopo, e il commerciale ha un motivo vero per chiamare. Stesso storico, matematica diversa, decisione completamente diversa. Il modello di abbandono spesso è corretto e inutile.

11Metà degli articoli ha tre vendite l'anno. Come li tratti?

La trappola «Un modello per articolo.»

Da senior Li faccio imparare dalla famiglia, in proporzione a quanto poco sanno di sé. È il modello gerarchico: θ̂ = w·(dati suoi) + (1−w)·(dati della famiglia), con w = n/(n+k). Con tre vendite w è quasi zero e ti appoggi ai fratelli. La versione povera che funziona: un modello solo, con la famiglia come colonna, e target encoding con smoothing (calcolato solo sul training, o è leakage). E per l'articolo con due vendite: si dice che non si può prevedere, e si mette una regola. Un sistema che risponde sempre è un sistema che mente bene.

12«Il progetto vale 300.000 euro l'anno.» Verifica il conto.

La trappola «300 abbandoni × 1.000 euro di fatturato.»

Da senior Tre errori in una riga sola. Fatturato invece di margine: il cliente che compra tanto con lo sconto massimo può valere zero. Manca il recall: il modello non li vede tutti, e la capacità non li chiama tutti. Manca il tasso di recupero: di quelli chiamati, quanti restano davvero? Se va bene il 20%. Il conto realistico è 300 × recall × capacità × 20% × CLV, che è un numero molto più piccolo e molto più credibile. E la domanda finale: quel 20% da dove viene? Senza un gruppo di controllo, è un'ipotesi vestita da business case.

Un punteggio serve a una cosa sola: far sì che una persona, lunedì mattina, chiami venti clienti giusti invece di duecento a caso. Tutto il resto di questa pagina esiste per rendere quei venti nomi difendibili, e per sapere quanto vale averli azzeccati.

se ti va

Guardiamolo sul tuo caso, non in teoria.

Sono Matteo Migliore, ho fondato Sviluppatore Migliore e sono ventisei anni che costruisco sistemi in cui il software deve decidere qualcosa e poi risponderne. Le cose di questa pagina vengono dalle volte in cui ho creduto a un AUC che era leakage, dalle soglie lasciate a 0,5 per mesi, e dalla telefonata partita tre settimane dopo che il cliente era già andato.

Se hai uno storico di clienti, ordini o macchine, nella maggior parte dei casi in mezza giornata si capisce se c'è un progetto oppure no. E se non c'è, te lo dico: è la cosa che fa risparmiare più tempo a me e più soldi a te.

Scrivimi su WhatsApp, risponde Silvia e fissiamo mezz'ora.

Da qui si continua

Questa risorsa fa parte di un sistema. Ecco dove andare adesso.

la richiesta travestita I quattro mucchi Quasi ogni richiesta di «segmentazione» nasconde la classificazione che leggi qui. Lì c'è perché, e perché il clustering non si può sbagliare e per questo non serve. Leggi la risorsa › cosa succede dopo Il modello nel cassetto Il modello funziona, e sei mesi dopo non lo usa nessuno. I quattro passaggi fra il numero e i soldi, la fiducia di chi lo usa, e chi lo tiene vivo quando il consulente se ne va. Leggi la risorsa › la risorsa madre L'AI che prevede, e quella che indovina Il metodo e l'atlante: come impara una macchina, fin dove si può prevedere, l'incertezza, i costi, e le ventidue analisi che si fanno sui dati. Se questa pagina ti è servita, quella è il quadro dentro cui sta. Leggi la risorsa › il capitolo che ti manca «La campagna ha funzionato?» Il tasso di recupero del capitolo 17 e l'uplift del capitolo 08 finiscono tutti e due lì: senza un gruppo di controllo, il valore del tuo progetto è un'ipotesi vestita da numero. Vai al capitolo › da dove vengono le colonne Il testo che diventa dato Metà delle colonne che alimentano un punteggio di abbandono non sono numeri: sono mail e ticket. Lì c'è come si trasformano in dati, e perché il tetto lo decide l'accordo fra due colleghi. Leggi la risorsa › il passo dopo La campagna ha funzionato? Un punteggio ti dice chi comprerà. Non ti dice chi comprerà grazie a te, e sono due liste diverse. Lì c'è l'uplift, e il gruppo di controllo che serve per stimarlo. Leggi la risorsa › cosa farci col punteggio Dalla previsione alla decisione Il punteggio dice chi. La decisione dice cosa fare, e ha i suoi vincoli: quanti ne puoi chiamare oggi, quanto costa sbagliare da una parte e quanto dall'altra. Leggi la risorsa › le classi rare, all'estremo L'allarme che nessuno legge Il 97% del capitolo 04 qui diventa 99,9%, e tutto si rompe: un modello ottimo produce dieci falsi allarmi per ogni frode. Con in più qualcuno che si adatta a quello che fai. Leggi la risorsa › sotto il modello Entity Framework, il pensiero da architetto La point-in-time correctness del capitolo 11 non nasce nel modello: nasce in come sono scritte le tabelle e in cosa succede quando qualcuno aggiorna una riga senza storicizzarla. Leggi la risorsa ›