How to Detect Credit Card Fraud Transaction Using Deep Neural Networks from Keras in Python?
Share
Condition for Detecting Credit Card Fraud Transaction Using Deep Neural Networks from Keras in Python
Description: This code uses an Artificial Neural Network (ANN) to detect fraudulent credit card transactions. It preprocesses the data, handles class imbalance, and trains the model using the training set. Performance is evaluated using classification metrics and visualized through a confusion matrix.
Step-by-Step Process
Step1: The dataset containing credit card transaction data is loaded from a CSV file.
Step2: Null and NaN values are checked to ensure data quality.
Step3: The class distribution (fraudulent vs. non-fraudulent transactions) is visualized to detect class imbalance.
Step4: The features are scaled using StandardScaler to standardize the data.
Step5: The data is split into training and testing sets (80% for training and 20% for testing).
Step6: An ANN model with two hidden layers and dropout layers is defined for binary classification.
Step7: The model is compiled using the Adam optimizer and binary crossentropy loss function.
Step8: The ANN model is trained on the training data for 10 epochs, with validation data used for evaluation.
Step9: The model's performance is evaluated using metrics like accuracy, F1 score, recall, precision, and a confusion matrix.
Step10: The confusion matrix is plotted to visualize the true vs. predicted labels, showing the model's effectiveness in detecting fraudulent transactions.
Sample Code
#Import Necessary Libraries
import pandas as pd
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings("ignore")
from tensorflow.keras.layers import Dense,Dropout,Input
from tensorflow.keras.models import Model
from sklearn.metrics import (classification_report,confusion_matrix,accuracy_score,
f1_score,recall_score,precision_score)
df = pd.read_csv("/home/soft12/Downloads/sample_dataset/Website/Dataset/creditcard_2023.csv")
#Check null values
print("Check null values\n")
print(df.isnull().sum())
#Check Nan Values
print("Check Nan Values\n")
print(df.isna().sum())
#Seperate Dependent and Independent Variable
x = df.drop('Class',axis=1)
y = df['Class']
class_counts = y.value_counts()
# Plotting the class imbalance
plt.figure(figsize=(8,6))
sns.barplot(x=class_counts.index, y=class_counts.values)
plt.title('Class Imbalance')
plt.xlabel('Class')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.show()
scaler = StandardScaler()
x = scaler.fit_transform(x)
#Split the train_test_data
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=.2,random_state=42)
def ANN_model(input_shape):
# Input layer
inputs = Input(shape=(input_shape,))
# Hidden layers
layer1 = Dense(32, activation='relu')(inputs)
Dropout1 = Dropout(0.2)(layer1)
layer2 = Dense(16, activation='relu')(Dropout1)
Dropout2 = Dropout(0.2)(layer2)
# Output layer
output_layer = Dense(1, activation='sigmoid')(Dropout2)
# Build the model
ann_model = Model(inputs=inputs, outputs=output_layer)
ann_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return ann_model
model = ANN_model(X_train.shape[1])
model.fit(X_train,y_train,batch_size=16,epochs=10,validation_data=(X_test,y_test))
y_pred = model.predict(X_test)
y_pred = [1 if i>0.5 else 0 for i in y_pred]
print("___Performance_Metrics___\n")
print('Classification_Report:\n',classification_report(y_test, y_pred))
print('Confusion_Matrix:\n',confusion_matrix(y_test, y_pred))
print('Accuracy_Score: ',accuracy_score(y_test, y_pred))
print('F1_Score: ',f1_score(y_test, y_pred))
print('Recall_Score: ',recall_score(y_test, y_pred))
print('Precision_Score: ',precision_score(y_test, y_pred))
#Plot Confusion Matrix
# Compute confusion matrix
cm = confusion_matrix(y_test, y_pred)
# Plot confusion matrix using seaborn heatmap
plt.figure(figsize=(6,6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Not', 'Fraudulent'], yticklabels=['Not', 'Fraudulent'])
plt.title('Confusion Matrix')
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.show()