Rilevamento delle anomalie delle transazioni finanziarie e derivazione dei dati con Delta Lake
Introduzione
Nel settore finanziario, il rilevamento di anomalie nei dati delle transazioni è fondamentale per la prevenzione delle frodi, la conformità e la gestione del rischio. Importi di transazione insoliti, tipi di transazione irregolari e modelli atipici possono indicare attività fraudolente o errori che richiedono un'attenzione immediata. L'utilizzo delle tecnologie dei big data e dei framework avanzati di elaborazione dei dati può migliorare la capacità di rilevare tali anomalie in modo efficace.
Questo esempio presenta un semplificato caso d'uso che illustra come eseguire il rilevamento delle anomalie delle transazioni finanziarie utilizzando Spark SQL e Lago Delta. La soluzione si integra anche con il OpenLineage Framework per acquisire informazioni dettagliate sulla derivazione dei dati in tutta la pipeline di elaborazione dei dati.
La stessa cosa può essere ottenuta con l'uso di Iceberg o Hudi. Abbiamo scelto Delta perché è un formato di tabella predefinito in Ilum.
Il cruscotto BI viene eseguito con l'uso di Apache Superset, che è uno dei moduli disponibili in Ilum. Puoi trovare la dashboard per questo caso d'uso qui
Descrizione del set di dati
Il set di dati utilizzato in questo caso d'uso è costituito da record di transazioni finanziarie simulate con le seguenti colonne:
- TransactionTimestamp: Timestamp di quando è avvenuta la transazione.
- ID transazione: identificatore univoco per ogni transazione.
- ID account: Identificatore univoco del conto bancario interessato.
- Importo: Valore monetario della transazione.
- Mercante: l'esercente o l'entità coinvolta nella transazione.
- Tipo di transazione: Tipo di transazione (ad esempio, Acquisto, Prelievo, Trasferimento).
- Ubicazione: Posizione geografica in cui è avvenuta la transazione.
Dati di esempio:
| TransactionTimestamp | ID transazione | ID account | Importo | Mercante | Tipo di transazione | Ubicazione |
|---|---|---|---|---|---|---|
| 2023-01-01 08:00:00 | TXN1127 | ACC4 | 95071.92 | Commerciante H | Acquista | Tokyo |
| 2023-01-01 08:01:00 | TXN1639 | ACC10 | 15607.89 | Commerciante H | Acquista | Londra |
| 2023-01-01 08:02:00 | TXN872 | ACC8 | 65092.34 | Commerciante | Ritiro | Londra |
| 2023-01-01 08:03:00 | TXN2001 | ACC4 | 500.50 | Commerciante A | Trasferimento | New York |
| 2023-01-01 08:04:00 | TXN2002 | ACC10 | 1200.00 | Mercante B | Acquista | Parigi |
| 2023-01-01 08:05:00 | TXN2003 | ACC8 | 300.00 | Commerciante C | Ritiro | Tokyo |
Obiettivi
Gli obiettivi principali di questo caso d'uso sono:
- Rilevamento anomalie: Identificare le transazioni che sono anomalie in base all'importo che supera un limite superiore derivato dalla distribuzione dei dati.
- Identificazione irregolare delle transazioni: Rileva i tipi di transazione irregolari per account specifici.
- Riconoscimento: Riconosci modelli insoliti in base ai timestamp e alle posizioni delle transazioni.
- Analisi comportamentale: Monitora i comportamenti di spesa in base ai commercianti.
- Riepiloghi statistici: Calcola le transazioni totali, gli importi medi, minimi e massimi delle transazioni per account.
- Integrazione Delta Lake: Utilizza le funzionalità di Delta Lake come il viaggio nel tempo, il feed di dati delle modifiche e l'evoluzione dello schema per migliorare l'elaborazione dei dati.
- Monitoraggio della derivazione dei dati: Acquisisci e visualizza la derivazione dei dati utilizzando il framework OpenLineage.
Panoramica della soluzione
La soluzione prevede la creazione di una serie di tabelle Delta Lake per elaborare e analizzare i dati delle transazioni. I passaggi includono:
- Acquisizione dei dati: carica i dati della transazione in una tabella Delta Lake.
- Analisi statistica: consente di calcolare i parametri statistici per definire le soglie di anomalia.
- Rilevamento anomalie: Identifica le transazioni e i conti che superano i limiti definiti.
- Analisi dei modelli: Rileva tipi di transazione irregolari e modelli temporali.
- Analisi comportamentale: analizza i comportamenti di spesa in base ai commercianti.
- Miglioramento dei dati: utilizza le funzionalità Delta Lake per gli aggiornamenti dei dati, l'evoluzione dello schema e i viaggi nel tempo.
- Cronaca: genera report di riepilogo per approfondimenti aziendali.
- Derivazione dei dati: Sfrutta OpenLineage per acquisire la derivazione dei dati in tutta la pipeline.
Implementazione tecnica
Passaggio 1: Creare la tabella Delta delle transazioni
Iniziamo creando il Transazioni tabella come tabella Delta Lake per memorizzare i dati delle transazioni finanziarie.
Codice SQL:
CREARE TAVOLO Transazioni (
TransactionTimestamp TIMESTAMP COMMENTO «Data e ora in cui è avvenuta la transazione»,
TransactionID STRING COMMENTO «Identificativo unico per la transazione»,
STRINGA AccountID COMMENTO "Identificatore univoco per l'account interessato",
Importo DECIMALE(18, 2) COMMENTO «Valore monetario dell'operazione»,
STRINGA commerciante COMMENTO "Commerciante coinvolto nella transazione",
TransactionType STRING COMMENTO "Tipo di transazione (ad esempio, acquisto, prelievo)",
Posizione STRING COMMENTO «Luogo in cui è avvenuta la transazione»
)
UTILIZZANDO DELTA
COMMENTO «Tabella contenente le operazioni finanziarie»;
Inserisci dati di esempio:
- Importa dati da file
- Inserire i dati manualmente
Il link al file di esempio può essere trovato qui
È necessario caricare il file nello storage collegato all'istanza Ilum.
INSERIRE SOVRASCRIVERE TAVOLO Transazioni
SELEZIONARE
_c0,_c1,_c2,_c3,_c4,_c5,_c6
DA CSV.`s3a://ilum-data/financial_anomaly_data.csv`
INSERIRE IN Transazioni VALORI
(TIMESTAMP('2023-01-01 08:00:00'), 'TXN1127', 'ACC4', 95071.92, 'MercanteH', 'Acquisto', 'Tokyo'),
(TIMESTAMP('2023-01-01 08:01:00'), 'TXN1639', 'ACC10', 15607.89, 'MercanteH', 'Acquisto', 'Londra'),
(TIMESTAMP('2023-01-01 08:02:00'), 'TXN872', 'ACC8', 65092.34, 'CommercianteE', 'Ritiro', 'Londra'),
(TIMESTAMP('2023-01-01 08:03:00'), 'TXN2001', 'ACC4', 500.50, 'MercanteA', 'Trasferimento', 'New York'),
(TIMESTAMP('2023-01-01 08:04:00'), 'TXN2002', 'ACC10', 1200.00, 'Mercante B', 'Acquisto', 'Parigi'),
(TIMESTAMP('2023-01-01 08:05:00'), 'TXN2003', 'ACC8', 300.00, 'MercanteC', 'Ritiro', 'Tokyo'),
(TIMESTAMP('2023-01-01 09:15:00'), 'TXN2004', 'ACC5', 25000.00, 'Mercante D', 'Deposito', 'Berlino'),
(TIMESTAMP('2023-01-01 10:30:00'), 'TXN2005', 'ACC6', 75000.00, 'CommercianteE', 'Acquisto', 'Sydney'),
(TIMESTAMP('2023-01-01 11:45:00'), 'TXN2006', 'ACC7', 500.00, 'Mercante F', 'Ritiro', 'Toronto'),
(TIMESTAMP('2023-01-01 12:00:00'), 'TXN2007', 'ACC4', 300000.00, 'MerchantG', 'Trasferimento', 'Dubai'),
(TIMESTAMP('2023-01-01 13:15:00'), 'TXN2008', 'ACC8', 150.00, 'MercanteH', 'Acquisto', 'Tokyo'),
(TIMESTAMP('2023-01-01 14:30:00'), 'TXN2009', 'ACC10', 2000.00, 'MercanteI', 'Deposito', 'New York'),
(TIMESTAMP('2023-01-01 15:45:00'), 'TXN2010', 'ACC5', 800.00, 'Mercante J', 'Ritiro', 'Londra'),
(TIMESTAMP('2023-01-01 16:00:00'), 'TXN2011', 'ACC6', 45000.00, 'CommercianteK', 'Acquisto', 'Parigi'),
(TIMESTAMP('2023-01-01 17:15:00'), 'TXN2012', 'ACC7', 600.00, 'Commerciante', 'Trasferimento', 'Berlino'),
(TIMESTAMP('2023-01-01 18:30:00'), 'TXN2013', 'ACC4', 70000.00, 'Mercante M', 'Acquisto', 'Tokyo'),
(TIMESTAMP('2023-01-01 19:45:00'), 'TXN2014', 'ACC8', 500000.00, 'Mercante', 'Ritiro', 'Sydney'),
(TIMESTAMP('2023-01-01 20:00:00'), 'TXN2015', 'ACC10', 120000.00, 'Mercante O', 'Acquisto', 'Dubai'),
(TIMESTAMP('2023-01-01 21:15:00'), 'TXN2016', 'ACC5', 350.00, 'Commerciante P', 'Deposito', 'Toronto'),
(TIMESTAMP('2023-01-01 22:30:00'), 'TXN2017', 'ACC6', 1000.00, 'CommercianteQ', 'Ritiro', 'New York'),
(TIMESTAMP('2023-01-01 23:45:00'), 'TXN2018', 'ACC7', 90000.00, 'Commerciante', 'Trasferimento', 'Parigi'),
(TIMESTAMP('2023-01-02 00:00:00'), 'TXN2019', 'ACC4', 250.00, 'Mercanti', 'Acquisto', 'Londra'),
(TIMESTAMP('2023-01-02 01:15:00'), 'TXN2020', 'ACC8', 400.00, 'MerchantT', 'Ritiro', 'Tokyo'),
(TIMESTAMP('2023-01-02 02:30:00'), 'TXN2021', 'ACC10', 5000.00, 'MercantileU', 'Deposito', 'Berlino'),
(TIMESTAMP('2023-01-02 03:45:00'), 'TXN2022', 'ACC5', 600000.00, 'Commerciante V', 'Acquisto', 'Dubai'),
(TIMESTAMP('2023-01-02 04:00:00'), 'TXN2023', 'ACC6', 50.00, 'MercanteW', 'Trasferimento', 'Sydney'),
(TIMESTAMP('2023-01-02 05:15:00'), 'TXN2024', 'ACC7', 800.00, 'Commerciante X', 'Acquisto', 'New York'),
(TIMESTAMP('2023-01-02 06:30:00'), 'TXN2025', 'ACC4', 1000000.00, 'Mercante', 'Ritiro', 'Tokyo'),
(TIMESTAMP('2023-01-02 07:45:00'), 'TXN2026', 'ACC8', 100.00, 'MerchantZ', 'Deposito', 'Londra');
Spiegazione:
- UTILIZZO DI DELTA: specifica che la tabella è una tabella Delta Lake.
- COMMENTI: Fornisci metadati per una migliore documentazione e comprensione.
Output di esempio:
Esempio di visualizzazione:
Passaggio 2: rilevamento di anomalie negli importi delle transazioni
Il nostro obiettivo è identificare le transazioni in cui l'importo supera un limite massimo in base alla distribuzione del Importo colonna.
2.1 Calcola i parametri statistici
Codice SQL:
CREARE VISTA amount_stats COME
SELEZIONARE
MEDIO(Importo) COME avg_amount,
STDDEV(Importo) COME stddev_amount,
PERCENTILE(Importo, 0.95) COME percentile_95
DA
Transazioni;
Spiegazione:
- AVG(Importo): calcola l'importo medio della transazione.
- STDDEV(Importo): Calcola la deviazione standard, utile per comprendere la dispersione dei dati.
- PERCENTILE(Importo, 0,95): calcola il 95° percentile, utilizzato come limite superiore per le normali transazioni.
Output di esempio:
2.2 Identificare le transazioni che superano il limite
Codice SQL:
CREARE VISTA Anomalie
COME
SELEZIONARE
ID transazione,
ID account,
Importo,
CASO
QUANDO Importo > (SELEZIONARE percentile_95 DA amount_stats) ALLORA 'Supera il limite'
ALTRO 'Entro il limite'
FINE COME AnomalyStatus
DA
Transazioni;
Spiegazione:
- AnomalyStatus: una nuova colonna che indica se la transazione supera il limite.
Output di esempio:
| ID transazione | ID account | Importo | AnomalyStatus |
|---|---|---|---|
| TXN1127 | ACC4 | 95071.92 | Supera il limite |
| ... | ... | ... | ... |
Esempio di visualizzazione:
Passaggio 3: calcolo delle statistiche dell'account
Calcola le transazioni totali, gli importi medi, minimi e massimi delle transazioni per account.
Codice SQL:
CREARE TAVOLO account_totals
UTILIZZANDO DELTA
COME
SELEZIONARE
ID account,
CONTARE(ID transazione) COME Conteggio transazioni,
SOMMA(Importo) COME Importo totale,
MEDIO(Importo) COME Importo medio,
MIN(Importo) COME Importo minimo,
MAX(Importo) COME Importo massimo
DA
Transazioni
GRUPPO PRESSO
ID account;
Spiegazione:
- RAGGRUPPA PER AccountID: aggrega i dati per account.
- Funzioni di aggregazione: Calcola le misure statistiche per ogni account.
Output di esempio:
| ID account | Conteggio transazioni | Importo totale | Importo medio | Importo minimo | Importo massimo |
|---|---|---|---|---|---|
| ACC4 | 2 | 95572.42 | 47786.21 | 500.50 | 95071.92 |
| ... | ... | ... | ... | ... | ... |
Passaggio 4: identificare gli account che superano i limiti
Identifica i conti con transazioni che superano il limite predefinito.
4.1 Determinare i conti eccedenti
Codice SQL:
CREARE VISTA exceeding_accounts COME
SELEZIONARE DISTINTO ID account
DA Anomalie
DOVE AnomalyStatus = 'Supera il limite';
4.2 Conteggio superiore e non superiore
Codice SQL:
SELEZIONARE
(SELEZIONARE CONTARE(*) DA exceeding_accounts) COME ExceedingAccounts,
(SELEZIONARE CONTARE(DISTINTO ID account) DA Transazioni) - (SELEZIONARE CONTARE(*) DA exceeding_accounts) COME NonExceedingAccounts;
Output di esempio:
| ExceedingAccounts | NonExceedingAccounts |
|---|---|
| 12 | 3 |
Passaggio 5: Riconoscere modelli temporali insoliti
Rileva le transazioni che si verificano al di fuori del normale orario lavorativo (ad esempio, dalle 9 alle 17).
Codice SQL:
CREARE VISTA after_hours_transactions
COME
SELEZIONARE
*,
ORA(TransactionTimestamp) COME TransactionHour
DA
Transazioni
DOVE
ORA(TransactionTimestamp) NON TRA 9 E 17;
Spiegazione:
- ORA(Timestamp transazione): estrae l'ora dal timestamp.
- NON TRA I 9 E I 17 ANNI: filtra le transazioni al di fuori dell'orario di lavoro.
Passaggio 7: analisi dei comportamenti di spesa per commerciante
Aggrega i dati di spesa per comprendere i comportamenti dei clienti in base alle interazioni con i commercianti.
Codice SQL:
CREARE TAVOLO merchant_spending
UTILIZZANDO DELTA
COME
SELEZIONARE
Mercante,
CONTARE(*) COME Conteggio transazioni,
SOMMA(Importo) COME TotaleSpeso,
MEDIO(Importo) COME AverageTransactionAmount,
MIN(Importo) COME Importo minimo,
MAX(Importo) COME Importo massimo
DA
Transazioni
GRUPPO PRESSO
Mercante;
Output di esempio:
| Mercante | Conteggio transazioni | TotaleSpeso | AverageTransactionAmount | Importo minimo | Importo massimo |
|---|---|---|---|---|---|
| Commerciante H | 2 | 110679.81 | 55339.91 | 15607.89 | 95071.92 |
| ... | ... | ... | ... | ... | ... |
Esempio di visualizzazione:
Passaggio 8: Utilizzo delle funzionalità di Delta Lake
8.1 Abilita il feed di dati delle modifiche
Abilita il feed di dati delle modifiche di Delta Lake per tenere traccia delle modifiche nel Transazioni tavolo.
Codice SQL:
ALTERARE TAVOLO Transazioni
METTERE TBLPROPRIETÀ (delta.enableChangeDataFeed = vero);
8.2 Eseguire aggiornamenti e tenere traccia delle modifiche
Aggiorna gli importi delle transazioni dovuti alle correzioni e tieni traccia di queste modifiche.
Codice SQL:
-- Aggiornare una transazione
AGGIORNARE Transazioni
METTERE Importo = 1300.00
DOVE ID transazione = 'TXN1127';
-- Controlla l'ultima versione
DESCRIVERE STORIA Transazioni;
-- Interroga le modifiche utilizzando il feed di dati delle modifiche con la versione corretta della tabella
SELEZIONARE *
DA table_changes(«operazioni», 3)
DOVE ID transazione = 'TXN1127';
8.3 Evoluzione dello schema: aggiunta di una nuova colonna
Aggiungere una nuova colonna Segnalazione di frode per segnalare transazioni sospette di frode.
Codice SQL:
ALTERARE TAVOLO Transazioni
AGGIUNGERE COLONNE (Segnalazione di frode BOOLEANO COMMENTO "Indicatore che indica una sospetta frode");
8.4 Aggiornamento delle transazioni fraudolente
Contrassegna le transazioni che superano il limite massimo.
Codice SQL:
AGGIORNARE Transazioni
METTERE Segnalazione di frode = VERO
DOVE Importo > 95071.92;
8.5 Viaggio nel tempo e ripristino della tabella
Visualizza la cronologia delle tabelle
Codice SQL:
DESCRIVERE STORIA Transazioni;
Interrogare una versione precedente
Codice SQL:
SELEZIONARE * DA Transazioni VERSIONE COME DI 3;
Ripristino della tabella a una versione precedente
Codice SQL:
RESTAURARE TAVOLO Transazioni A VERSIONE COME DI 3;
Spiegazione:
- Viaggio nel tempo: consente di accedere alle versioni precedenti dei dati per il controllo o il ripristino.
- Ripristino tabella: Ripristina la tabella a uno stato valido noto dopo modifiche non intenzionali.
Passaggio 9: Generazione dei rapporti di riepilogo finali
Genera report che riepilogano i conti che superano i limiti e calcola le medie.
Codice SQL:
CREARE TAVOLO account_exceeding_summary
UTILIZZANDO DELTA
COME
SELEZIONARE
un.ID account,
un.Conteggio transazioni,
un.Importo totale,
un.Importo medio,
un.Importo minimo,
un.Importo massimo,
CASO
QUANDO e.ID account È NON NULLO ALLORA 'Supera il limite'
ALTRO 'Entro il limite'
FINE COME ExceedingStatus
DA
account_totals un
A sinistra UNIRE
exceeding_accounts e SU un.ID account = e.ID account;
-- Calcola le medie per i conti eccedenti e non eccedenti
SELEZIONARE
ExceedingStatus,
CONTARE(ID account) COME Conteggio account,
MEDIO(Importo totale) COME AverageTotalAmount,
MEDIO(Importo medio) COME AverageTransactionAmount
DA
account_exceeding_summary
GRUPPO PRESSO
ExceedingStatus;
Funzionalità del Delta Lake utilizzate
- Tabelle Delta: tutte le tabelle vengono create utilizzando Delta Lake per sfruttare le transazioni ACID e l'applicazione dello schema.
- Viaggio nel tempo: consente di accedere alle versioni precedenti dei dati per il controllo e il ripristino.
- Ripristino tabella: se necessario, ripristina le tabelle a uno stato precedente.
- Feed di dati di modifica: tenere traccia delle modifiche apportate ai dati per l'elaborazione incrementale e il controllo.
- Evoluzione dello schema: Aggiungere nuove colonne (
Segnalazione di frode) senza alterare i dati esistenti. - Vincoli e Verifiche: Applicare l'integrità dei dati tramite le definizioni dello schema.
- Partizionamento: anche se non viene utilizzato in modo esplicito in questo caso, Delta Lake supporta il partizionamento per l'ottimizzazione delle prestazioni.
Integrazione di Data Lineage e OpenLineage
Eseguendo queste operazioni SQL in un ambiente integrato con OpenLineage, ogni operazione genera metadati di derivazione. Questi metadati acquisiscono:
- Flusso di dati: come i dati si spostano da una tabella all'altra (ad esempio, da
TransazioniAAnomalie). - Trasformazioni: le trasformazioni specifiche applicate ai dati (ad esempio, l'aggiunta di
AnomalyStatus). - Modifiche allo schema: Modifiche allo schema della tabella (ad esempio, l'aggiunta di
Segnalazione di frodecolonna). - Controllo delle versioni: Modifiche alle versioni delle tabelle dovute ad aggiornamenti e ripristini.
Benefici:
- Trasparenza: Chiara comprensione di come i dati vengono elaborati e trasformati.
- Controllo: Capacità di tracciare la derivazione dei dati per scopi di conformità e controllo.
- Debug: Identificazione più semplice dei problemi nelle pipeline di elaborazione dei dati.
- Ottimizzazione: le informazioni dettagliate sul flusso di dati possono aiutare a ottimizzare le prestazioni.
Conclusione
Questo caso d'uso illustra come eseguire il rilevamento delle anomalie finanziarie usando Spark SQL e Delta Lake, incorporando funzionalità chiave come il viaggio nel tempo, il feed di dati delle modifiche e l'evoluzione dello schema. Grazie all'integrazione con OpenLineage, la soluzione fornisce un monitoraggio completo della derivazione dei dati, migliorando la trasparenza e la conformità.
Punti chiave:
- Rilevamento efficace delle anomalie: Utilizzo di metodi statistici per identificare le transazioni e i conti che si discostano dai normali schemi.
- Solida gestione dei dati: Sfruttare le funzionalità di Delta Lake per garantire l'integrità dei dati, facilitare le modifiche allo schema e abilitare le opzioni di ripristino.
- Visibilità della derivazione dei dati: acquisizione di informazioni dettagliate sulla derivazione per supportare i requisiti di controllo e conformità.
- Approfondimenti aziendali: Generazione di report e analisi che forniscono informazioni preziose sui comportamenti dei clienti e sui potenziali rischi.
Appendice
Schema del set di dati
Schema della tabella delle transazioni:
| Colonna | Tipo di dati | Descrizione |
|---|---|---|
| TransactionTimestamp | TIMESTAMP | Data e ora in cui è avvenuta la transazione |
| ID transazione | CORDA | Identificatore univoco della transazione |
| ID account | CORDA | Identificatore univoco per l'account coinvolto |
| Importo | DECIMALE(18,2) | Valore monetario dell'operazione |
| Mercante | CORDA | Commerciante coinvolto nella transazione |
| Tipo di transazione | CORDA | Tipo di transazione (ad esempio, Acquisto, Prelievo) |
| Ubicazione | CORDA | Luogo in cui è avvenuta la transazione |
| Segnalazione di frode | BOOLEANO | Contrassegno che indica sospetta frode (aggiunto in seguito) |
Referenze: