Anomaly detection in synthetic transaction and sales data with Python. Generates realistic data, injects unusual events, and applies Isolation Forest, Local Outlier Factor, and Z-score methods to detect outliers. Produces anomaly reports and visualizations for portfolio-ready demonstration of data science skills.
Detect anomalies in synthetic transaction data using Isolation Forest, Local Outlier Factor (LOF), and a Z-score baseline. The project generates data, injects anomalies, runs detectors, and exports flagged rows and charts for audit.
- Synthetic transaction generator with anomalies (bursts, extreme purchases, negative/zero entries)
- Multi-model detection: Isolation Forest, LOF, Z-score
- Unified anomaly report with model votes and severity score
- Clean visualizations: time-series spikes and amount distribution
- Reproducible scripts with deterministic seeding
anomaly-detection/
├─ README.md
├─ LICENSE
├─ requirements.txt
├─ data/
│ └─ generate_transactions.py
├─ src/
│ ├─ detect_anomalies.py
│ └─ utils.py
└─ outputs/
└─ figures & reports
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
pip install -r requirements.txtpython data/generate_transactions.py --start 2023-01-01 --end 2024-12-31 --seed 42 --n-customers 500 --out data/transactions.csvpython src/detect_anomalies.py --input data/transactions.csv --outdir outputs --contamination 0.02Outputs
outputs/anomalies.csv– flagged rows with anomaly scores & model votesoutputs/fig_amount_time.png– transaction amounts over time with spikesoutputs/fig_amount_hist.png– amount distribution histogram
Shows most transactions are small (0–300 units). A few very large amounts (thousands) appear as outliers.
Transactions are generally stable, but occasional spikes (extreme purchases or errors) appear and are flagged as anomalies.
| column | description |
|---|---|
| tx_id | unique transaction ID |
| date | timestamp (daily resolution) |
| customer_id | customer identifier |
| category | product category |
| amount | transaction amount (float) |