Il rilevamento di anomalie nelle transazioni significa identificare modelli insoliti o imprevisti all'interno delle transazioni o delle attività correlate. Questi modelli, noti come anomalie o valori anomali, si discostano in modo significativo dalla norma prevista e potrebbero indicare comportamenti irregolari o fraudolenti.
Se vuoi imparare come rilevare anomalie nelle transazioni, questo articolo fa per te. In questo articolo ti guiderò attraverso l'attività di rilevamento delle anomalie nelle transazioni con machine learning utilizzando Python.
Non ti va di leggere l'articolo ? Scarica gratis tutto il progetto con dataset e codice !
Rilevamento di anomalie nelle transazioni
Il rilevamento delle anomalie svolge un ruolo cruciale in varie attività, in particolare quelle che si occupano di transazioni finanziarie, attività online e operazioni sensibili alla sicurezza.
Possiamo seguire un processo sistematico per affrontare la sfida del rilevamento delle anomalie. Possiamo iniziare raccogliendo e preparando i dati delle transazioni, garantendone l'accuratezza e la coerenza.
Quindi, possiamo trovare modelli nei dati per individuare anomalie e utilizzare algoritmi specializzati di rilevamento delle anomalie come la foresta di isolamento per rilevare le anomalie.
Quindi il processo iniziamo con la raccolta dei dati. Ho trovato un set di dati ideale che può essere utilizzato per rilevare anomalie nelle transazioni.
Rilevamento di anomalie nelle transazioni utilizzando Python
Ora iniziamo con l'attività di rilevamento delle anomalie nelle transazioni importando le librerie Python necessarie.
import pandas as pd
import plotly.express as px
from sklearn.model_selection import train_test_split
from sklearn.ensemble import IsolationForest
from sklearn.metrics import classification_report
data = pd.read_csv("/content/transaction_anomalies_dataset.csv")
print(data.head())
Diamo un'occhiata se i dati hanno valori nulli:
print(data.isnull().sum())
Ora diamo un'occhiata agli approfondimenti della colonna prima di andare avanti:
print(data.info())
Ora diamo un'occhiata alle statistiche descrittive dei dati:
print(data.describe())
Non ti va di leggere l'articolo ? Scarica gratis tutto il progetto con dataset e codice !
Ora diamo un'occhiata alla distribuzione dell'importo delle transazioni nei dati:
# Distribuzione della trnsazioni
fig_amount = px.histogram(data, x='Transaction_Amount',
nbins=20,
title='Distribution of Transaction Amount')
fig_amount.show()
Ora diamo un'occhiata alla distribuzione dell'importo delle transazioni per tipo di conto:
# Distribuzione importo pe tipo account
fig_box_amount = px.box(data,
x='Account_Type',
y='Transaction_Amount',
title='Transaction Amount by Account Type')
fig_box_amount.show()
Ora diamo un'occhiata all'importo medio della transazione per età:
# Importo medio transazione per età
fig_scatter_avg_amount_age = px.scatter(data, x='Age',
y='Average_Transaction_Amount',
color='Account_Type',
title='Average Transaction Amount vs. Age',
trendline='ols')
fig_scatter_avg_amount_age.show()
Non c'è differenza nell'importo medio della transazione in base all'età. Ora diamo un'occhiata al conteggio delle transazioni per giorno della settimana:
# Conteggio trnasazioni per giorno settimana
fig_day_of_week = px.bar(data, x='Day_of_Week',
title='Count of Transactions by Day of the Week')
fig_day_of_week.show()
Non ti va di leggere l'articolo ? Scarica gratis tutto il progetto con dataset e codice !
Ora diamo un'occhiata alla correlazione tra tutte le colonne nei dati:
# Correlation Heatmap
correlation_matrix = data.corr()
fig_corr_heatmap = px.imshow(correlation_matrix,
title='Correlation Heatmap')
fig_corr_heatmap.show()
Ora ecco come possiamo visualizzare le anomalie nei dati:
# Calcoliamo la media e la derivazione della Transaction_Amount
mean_amount = data['Transaction_Amount'].mean()
std_amount = data['Transaction_Amount'].std()
# Definiamo l'anomaly threshold
anomaly_threshold = mean_amount + 2 * std_amount
# Flag anomalies
data['Is_Anomaly'] = data['Transaction_Amount'] > anomaly_threshold
# Scatter plot
fig_anomalies = px.scatter(data, x='Transaction_Amount', y='Average_Transaction_Amount',
color='Is_Anomaly', title='Anomalies in Transaction Amount')
fig_anomalies.update_traces(marker=dict(size=12),
selector=dict(mode='markers', marker_size=1))
fig_anomalies.show()
Ora calcoliamo il numero di anomalie nei dati per trovare il rapporto delle anomalie nei dati, che sarà utile durante l'utilizzo di algoritmi di rilevamento delle anomalie come la foresta di isolamento:
# Calcoliamo il numero di anomalie
num_anomalies = data['Is_Anomaly'].sum()
# Calcoliamo il numero delle istanze nei dati
total_instances = data.shape[0]
# Calcoliamo il ratio delle anomalie
anomaly_ratio = num_anomalies / total_instances
print(anomaly_ratio)
Ora ecco come possiamo addestrare un modello di Machine Learning per il rilevamento di anomalie:
relevant_features = ['Transaction_Amount',
'Average_Transaction_Amount',
'Frequency_of_Transactions']
# Split data in features (X) e target (y)
X = data[relevant_features]
y = data['Is_Anomaly']
# Split data inì train e test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Alleniamo l'Isolation Forest model
model = IsolationForest(contamination=0.02, random_state=42)
model.fit(X_train)
Qui stiamo addestrando un modello di rilevamento delle anomalie utilizzando l'algoritmo Isolation Forest. Innanzitutto, abbiamo selezionato le funzionalità rilevanti per il rilevamento, vale a dire Transaction_Amount, Average_Transaction_Amount e Frequency_of_Transactions.
Dividiamo il set di dati in caratteristiche (X) e variabile di destinazione (y), dove X contiene le caratteristiche selezionate e y contiene le etichette binarie che indicano se un'istanza è un'anomalia o meno. Quindi, dividiamo ulteriormente i dati in set di training e test utilizzando un rapporto di suddivisione 80-20. Successivamente, abbiamo creato un modello di foresta di isolamento con un parametro di contaminazione specificato di 0,02 (che indica il rapporto atteso di anomalie) e un seme casuale per la riproducibilità. Il modello viene quindi addestrato sul set di addestramento (X_train).
Ora diamo un'occhiata alle prestazioni di questo modello di rilevamento delle anomalie:
# Prevediamo le anomalie nel set di dati
y_pred = model.predict(X_test)
# Convertiamole in valori binari(0: normal, 1: anomaly)
y_pred_binary = [1 if pred == -1 else 0 for pred in y_pred]
# Valutiamo il modello
report = classification_report(y_test, y_pred_binary, target_names=['Normal', 'Anomaly'])
print(report)
Non ti va di leggere l'articolo ? Scarica gratis tutto il progetto con dataset e codice !
Infine, ecco come possiamo utilizzare il nostro modello addestrato per rilevare anomalie:
# features rilevanti usate nell'allenamento del modello
relevant_features = ['Transaction_Amount', 'Average_Transaction_Amount', 'Frequency_of_Transactions']
# user inputs per le features
user_inputs = []
for feature in relevant_features:
user_input = float(input(f"Inserisci un valore per '{feature}': "))
user_inputs.append(user_input)
# Creiamo un DataFrame dall' user inputs
user_df = pd.DataFrame([user_inputs], columns=relevant_features)
# Prevediamo le anomalie usando il modello
user_anomaly_pred = model.predict(user_df)
# Convertiamo la previsione in valori binari(0: normal, 1: anomaly)
user_anomaly_pred_binary = 1 if user_anomaly_pred == -1 else 0
if user_anomaly_pred_binary == 1:
print("Anomaly detected: Questa transazione risulta anomala.")
else:
print("No anomaly detected: Questa transazione sembra normale.")
Conclusione sul Rilevamento anomalie nelle transazioni utilizzando Python
Ecco come eseguire il rilevamento delle anomalie nelle transazioni utilizzando Machine Learning e Python.
Il rilevamento di anomalie nelle transazioni significa identificare modelli insoliti o imprevisti all'interno delle transazioni o delle attività correlate. Questi modelli, noti come anomalie o valori anomali, si discostano in modo significativo dalla norma prevista e potrebbero indicare comportamenti irregolari o fraudolenti.
Spero che questo articolo sul rilevamento delle anomalie nelle transazioni utilizzando Python ti sia piaciuto. Sentiti libero di porre domande preziose nella sezione commenti qui sotto.
1 Comment