End-to-end AML surveillance system combining rule-based compliance logic with Machine Learning β built to replicate real-world financial crime detection workflows.
This project simulates an AML (Anti-Money Laundering) transaction monitoring system used in banks and financial institutions. It generates synthetic transaction data with realistic red flags, trains an ML model for SAR (Suspicious Activity Report) prediction, and visualizes everything in an interactive compliance dashboard.
Relevance: Directly mirrors day-to-day work in AML/KYC compliance roles at organizations like Oracle, Deloitte, Tazapay, and major banks.
aml-transaction-monitoring/
β
βββ generate_data.py # Synthetic transaction data generator (2,000 txns)
βββ train_model.py # ML model training β Random Forest + Logistic Regression
βββ aml_dashboard.html # Interactive compliance dashboard (Chart.js)
β
βββ transactions.csv # Raw synthetic dataset
βββ transactions_scored.csv # Enriched dataset with ML risk scores & tiers
βββ model_results.json # Model metrics, feature importances, confusion matrix
β
βββ README.md
| Red Flag | Description |
|---|---|
| Structuring | Transactions just below βΉ10,000 reporting threshold |
| High-Risk Countries | Iran, Myanmar, North Korea, Syria, Yemen, Somalia |
| Transaction Velocity | >4 transactions per customer in 24 hours |
| PEP Match | Politically Exposed Person flag |
| Sanctions Hit | OFAC/UN/EU sanctions list match |
| Shell Company | Opaque ownership structure flag |
| Multi-Account Activity | Same customer, multiple accounts, same day |
| Round Number | Suspiciously round transaction amounts |
Algorithm: Random Forest Classifier (200 estimators, balanced class weights)
Comparison: Logistic Regression (baseline)
| Feature | Importance |
|---|---|
| Transaction Velocity (24h) | 39.7% |
| Combined Alert Score | 19.6% |
| Country Risk Encoding | 13.4% |
| Amount (log-transformed) | 12.1% |
| High Value Flag | 4.8% |
| Multi-Account Flag | 2.6% |
| Shell Company Flag | 2.5% |
| PEP Flag | 1.4% |
| Structuring Flag | 1.2% |
| Sanctions Flag | 1.1% |
| Metric | Random Forest | Logistic Regression |
|---|---|---|
| Accuracy | 1.00 | 1.00 |
| Precision | 1.00 | 1.00 |
| Recall | 1.00 | 1.00 |
| F1 Score | 1.00 | 1.00 |
| ROC-AUC | 1.00 | 1.00 |
β οΈ Perfect scores are expected on synthetic data where risk flags directly encode the label. In production, models operate on noisier signals with lower (but still meaningful) AUC ~0.80β0.90.
- Live Clock with IST timezone
- 5 KPI Cards β Total txns, ML alerts, high-risk country count, model accuracy, amount flagged
- Monthly Volume vs Alerts bar chart (JanβDec)
- Alerts by Transaction Type doughnut chart
- Risk Tier Distribution (High / Medium / Low)
- Alerts by Country horizontal bar chart
- ML Model Performance β metrics + confusion matrix
- Feature Importance bar visualization
- AML Red-Flag Breakdown β PEP, Sanctions, Shell Co., Structuring, etc.
- SAR Alert Queue Table β filterable by risk tier, country risk, transaction type, and search
| Layer | Technology |
|---|---|
| Data Generation | Python Β· Pandas Β· NumPy |
| ML Model | scikit-learn (Random Forest, Logistic Regression) |
| Feature Engineering | log-transform, encoding, derived flags |
| Visualization | Chart.js Β· Vanilla JS Β· HTML/CSS |
| AML Domain | KYC/KYB, Sanctions Screening, Transaction Monitoring, SAR logic |
# 1. Clone the repository
git clone https://github.com/yourusername/aml-transaction-monitoring.git
cd aml-transaction-monitoring
# 2. Install dependencies
pip install pandas numpy scikit-learn
# 3. Generate synthetic data
python generate_data.py
# 4. Train the ML model
python train_model.py
# 5. Open the dashboard
open aml_dashboard.html # macOS
# or just double-click aml_dashboard.html in Windows/LinuxThis project replicates the core logic of NICE Actimize's sanctions screening modules:
AML Dashboard (P1) parallels Actimize SAM (Suspicious Activity Monitoring):
- Alert generation logic mirrors Actimize's rule-based + ML hybrid approach
- Risk scoring maps to Actimize's risk tiering: HIGH/MEDIUM/LOW
- SAR queue mirrors Actimize's Case Management workflow
- Feature importance output mirrors Actimize's alert reason codes
Key difference: Actimize operates on real transaction data at bank scale with full regulatory audit trails. This project demonstrates understanding of the same underlying logic in a Python/open-source implementation.
Kishore U.
AML/KYC Compliance Analyst Β· Data Analytics
π§ UKISHORE33@GMAIL.COM Β· π± 6303308133
π LinkedIn
Skills demonstrated: AML | KYC/KYB | Sanctions Screening | Transaction Monitoring | Python | scikit-learn | SQL | Data Visualization | Financial Crime Compliance
All data in this project is 100% synthetic and generated programmatically. No real customer, transaction, or financial data is used. This project is built solely for portfolio and educational demonstration purposes.