autoencoder-fraud-detection / project_problem.md
Ashutosh
Upload folder using huggingface_hub
2d6e4cc verified
|
Raw
History Blame Contribute Delete
10.3 kB

Project 10 β€” Autoencoder Anomaly Detection

Level: Advanced | Dataset: Credit Card Fraud (Kaggle) | Framework: PyTorch


Objective

Build an Autoencoder that learns the distribution of normal transactions and flags anomalies via high reconstruction error. Cover: encoder-decoder architecture, bottleneck, reconstruction loss, threshold tuning, unsupervised anomaly detection.


Project Structure

10_autoencoder_anomaly/
β”œβ”€β”€ notebooks/
β”‚   β”œβ”€β”€ 01_eda.ipynb
β”‚   β”œβ”€β”€ 02_preprocessing.ipynb
β”‚   └── 03_train_evaluate.ipynb
β”œβ”€β”€ data/raw/creditcard.csv
β”œβ”€β”€ data/processed/
β”œβ”€β”€ models/model.pkl
β”œβ”€β”€ charts/
β”œβ”€β”€ path_utils.py
β”œβ”€β”€ dashboard_core.py
└── app.py

Dataset: mlg-ulb/credit-card-fraud-detection β€” Kaggle. 284,807 transactions, 492 fraud (0.17% fraud rate). Features: V1-V28 (PCA-transformed), Amount, Time. Target: Class (0=normal, 1=fraud).


Notebook 01 β€” EDA (01_eda.ipynb)

STOP 1 β€” Load & Class Distribution

  • Load creditcard.csv
  • Print class distribution: 284,315 normal, 492 fraud
  • This is extreme imbalance: 99.83% vs 0.17%
  • Agent stops here. Explain:
    • Why this is a perfect Autoencoder use case: we have very few fraud examples
    • The unsupervised insight: train ONLY on normal β†’ AE learns to reconstruct normal well β†’ fraud reconstructed poorly
    • Why supervised models struggle here: too few fraud examples even with class weights
    • Real-world context: in production, fraud patterns change constantly β€” unsupervised is more robust
  • Wait for user confirmation before continuing

STOP 2 β€” Feature Analysis

  • Plot distribution of Amount β€” heavily skewed, log transform
  • Plot distribution of V1, V5, V14 (most fraud-discriminative PCA components)
  • Overlay normal vs fraud distributions for V14
  • Agent stops here. Explain:
    • What V1-V28 are: principal components of original transaction features (anonymized by Kaggle)
    • Why Amount needs special treatment (raw dollar amount vs scaled PCA features)
    • What overlapping distributions mean: fraud and normal transactions look similar to linear models
    • How the AE exploits the subtle difference: it learns the joint distribution of all features
  • Wait for confirmation

STOP 3 β€” Reconstruction Concept Walkthrough

  • Explain (with markdown cells) what reconstruction means:
    • AE takes input x β†’ compresses to z (bottleneck) β†’ reconstructs xΜ‚
    • Loss: MSE(x, xΜ‚) averaged over all features
    • At inference: high MSE = anomalous
  • Agent stops here. Explain:
    • The information bottleneck principle: compression forces the model to learn the "essence"
    • Why bottleneck width matters: too wide = AE memorizes everything (no anomaly detection), too narrow = loses normal patterns too
    • What reconstruction error distribution looks like for normal vs fraud
  • Wait for confirmation

Notebook 02 β€” Preprocessing (02_preprocessing.ipynb)

STOP 4 β€” Isolation of Normal Class

  • Separate: normal_df = df[df['Class'] == 0]
  • Training set: 80% of normal only (no fraud in training)
  • Validation set: 10% normal + ALL 492 fraud (to tune threshold)
  • Test set: remaining 10% normal + reserved 100 fraud
  • Agent stops here. Explain:
    • Why we train ONLY on normal data β€” this is the core principle of AE-based anomaly detection
    • Why we include fraud in validation: to find the optimal reconstruction error threshold
    • The correct split strategy for unsupervised anomaly detection
  • Wait for confirmation

STOP 5 β€” Feature Scaling

  • Log transform Amount: np.log1p(df['Amount'])
  • Drop Time column (not informative after PCA)
  • StandardScaler fit on normal train features only
  • Apply to normal train, val (normal+fraud), test (normal+fraud)
  • Agent stops here. Explain:
    • Why log1p for Amount: log(1+x) handles zero correctly, compresses large values
    • Why StandardScaler fit only on normal train: we're assuming normal distribution of normal transactions
    • What happens if we scale fraud using fraud statistics (leakage, defeats the purpose)
  • Wait for confirmation

STOP 6 β€” Tensor Dataset

  • Normal train: X only (no labels needed for training β€” unsupervised)
  • Val/Test: (X, y) pairs where y is the fraud label for evaluation
  • DataLoader for train: batch_size=256, shuffle=True
  • Agent stops here. Explain:
    • Why training DataLoader has no labels: AE is trained to minimize reconstruction error, not classify
    • How this is fundamentally different from all previous supervised projects
    • What "unsupervised learning" means in practice
  • Wait for confirmation

Notebook 03 β€” Train & Evaluate (03_train_evaluate.ipynb)

STOP 7 β€” Autoencoder Architecture

Encoder:
  Linear(29, 64) β†’ ReLU β†’ Dropout(0.1)
  Linear(64, 32) β†’ ReLU
  Linear(32, 16) β†’ ReLU  [bottleneck = 16]

Decoder:
  Linear(16, 32) β†’ ReLU
  Linear(32, 64) β†’ ReLU
  Linear(64, 29)          [no activation β€” reconstruct any value]

Forward: x β†’ z = encode(x) β†’ x_hat = decode(z) β†’ return x_hat

  • Agent stops here. Explain:
    • Symmetric encoder-decoder: decoder mirrors encoder structure
    • Bottleneck dimension=16: compresses 29 features to 16 (forced information bottleneck)
    • Why no activation at decoder output: output must match input range (any real value after scaling)
    • What the latent space z represents: compressed representation of the transaction
    • How to choose bottleneck size: experiment β€” too small loses normal patterns, too large = no compression
  • Wait for confirmation

STOP 8 β€” Reconstruction Loss

  • Use nn.MSELoss(reduction='none') β€” keep per-sample, per-feature losses
  • Average over features for per-sample reconstruction error
  • Training loss: mean of per-sample errors
  • Agent stops here. Explain:
    • Why reduction='none': we need per-sample error at inference time
    • What reconstruction error for ONE sample looks like: scalar value (mean over 29 features)
    • Why MSE penalizes large reconstruction errors quadratically β€” good for detecting anomalies
    • Alternative: MAE loss β€” less sensitive to outliers (sometimes better for AE)
  • Wait for confirmation

STOP 9 β€” Training Loop

  • Train on NORMAL ONLY for 50 epochs
  • Track train reconstruction error per epoch
  • Also compute val reconstruction error for normal vs fraud separately
  • Plot: normal reconstruction error distribution vs fraud reconstruction error distribution
  • Agent stops here. Explain:
    • What we expect to see: two distributions, fraud shifted right (higher error)
    • Why the distributions might overlap: some fraud looks like normal, some normal looks weird
    • The separation quality directly predicts AUC
    • What "collapse" looks like if bottleneck is too wide: both distributions identical
  • Wait for confirmation

STOP 10 β€” Threshold Tuning

  • Compute reconstruction error for ALL validation samples (normal + fraud)
  • Try thresholds from min to max error at 100 steps
  • For each threshold: compute Precision, Recall, F1
  • Plot F1 vs threshold curve
  • Select threshold that maximizes F1 (or recall, depending on business requirement)
  • Agent stops here. Explain:
    • What threshold selection is: converting a continuous score to binary prediction
    • The precision-recall tradeoff at different thresholds
    • In fraud detection, what is worse: false positive (block good transaction) vs false negative (miss fraud)?
    • Why we tune on val, evaluate on test (never touch test during tuning)
  • Wait for confirmation

STOP 11 β€” Evaluation on Test Set

  • Apply tuned threshold to test set
  • Compute: Precision, Recall, F1, AUC-ROC, AUC-PR
  • Plot ROC curve and Precision-Recall curve
  • Agent stops here. Explain:
    • Why AUC-PR is more informative than AUC-ROC for extreme imbalance
    • What AUC-PR = 0.5 means on a 0.17% fraud rate (baseline = 0.0017!)
    • Why ROC can be misleadingly optimistic with extreme imbalance
    • The business metric: catch rate (recall on fraud) at a given false positive rate
  • Wait for confirmation

STOP 12 β€” Latent Space Visualization

  • Encode all test samples (normal + fraud) to get z vectors [N, 16]
  • Apply t-SNE or PCA to reduce to 2D
  • Plot with color: blue=normal, red=fraud
  • Agent stops here. Explain:
    • What we hope to see: fraud forming clusters away from normal
    • What t-SNE shows that PCA doesn't: non-linear clustering structure
    • Why fraud might not perfectly separate in latent space (some fraud IS similar to normal transactions)
    • How this visualization helps in understanding model failure modes
  • Wait for confirmation

STOP 13 β€” Save & Inference

  • Save model.state_dict(), scaler, threshold
  • Write predict_fraud(transaction_dict) β†’ label, reconstruction_error, is_fraud
  • Agent stops here. Explain:
    • Complete inference pipeline: dict β†’ preprocess (log Amount, scale) β†’ tensor β†’ model.eval() β†’ reconstruct β†’ MSE β†’ compare to threshold β†’ return
    • Why we save the threshold with the model (it's part of the "model")
    • How to update threshold in production as fraud patterns evolve
  • Wait for confirmation

dashboard_core.py

Functions:

  • load_model_scaler_threshold() β†’ model, scaler, threshold
  • predict_fraud(transaction_dict) β†’ reconstruction_error, is_fraud, bool
  • get_error_distributions() β†’ (normal_errors, fraud_errors) arrays
  • get_roc_pr_curves() β†’ dict of curve data
  • get_latent_viz() β†’ 2D coords + labels

app.py β€” Streamlit (~80 lines)

Sections:

  1. Sidebar: sliders for V1, V14, V17, Amount (most discriminative features)
  2. Main: "Analyze Transaction" β†’ show reconstruction error + fraud/normal verdict
  3. Tab 1: Training reconstruction error curve
  4. Tab 2: Error distribution histogram (normal vs fraud overlap)
  5. Tab 3: ROC + PR curves

Key Concepts Covered

  • Autoencoder architecture (encoder, bottleneck, decoder)
  • Information bottleneck principle
  • Training on normal only (unsupervised anomaly detection)
  • Reconstruction loss (MSE reduction='none' for per-sample)
  • Threshold tuning on validation set
  • AUC-PR vs AUC-ROC for imbalanced data
  • Latent space visualization with t-SNE
  • Full unsupervised learning pipeline