// Automated Email Classification
Produkcjowo gotowy pipeline uczenia maszynowego do automatycznej klasyfikacji emaili, osiągający 99,9% dokładności na zbiorze 2.000 rzeczywistych wiadomości. System klasyfikuje emaile w 5 kategorii (urgent, invoice, meeting, newsletter, other) przy użyciu XGBoost zoptymalizowanego przez GridSearchCV.A production-ready machine learning pipeline for automated email classification, achieving 99.9% accuracy on a dataset of 2,000 real-world emails. The system classifies emails into five categories (urgent, invoice, meeting, newsletter, other) using XGBoost optimized via GridSearchCV.
Projekt łączy klasyfikację NLP z elementami RAG (Retrieval-Augmented Generation) — cel to automatyczna kategoryzacja przychodzących wiadomości, priorytetyzacja i inteligentne powiązania z bazą wiedzy. Kluczowe innowacje: pętle self-training (3 cykle, 2.518 predykcji), przetwarzanie inkrementalne (100 nowych emaili/dzień) i wielojęzyczny TF-IDF (polski-angielski).The project combines NLP classification with RAG (Retrieval-Augmented Generation) elements — the goal is automatic categorization of incoming messages, prioritization, and intelligent links to a knowledge base. Key innovations: self-training loops (3 cycles, 2,518 predictions), incremental processing (100 new emails/day), and multilingual TF-IDF (Polish-English).
| URGENT | 100% precision | (no false alarms) |
| INVOICE | 95% recall | (no missed payments) |
| MEETING | 90% F1-score | |
| NEWSLETTER | 85% precision | |
| OTHER | 99% accuracy |
// n8n · Gmail API · PostgreSQL · TF-IDF
Architektura pipeline'u przetwarzania danych w trzech etapach: pobieranie emaili przez n8n z Gmail API, przechowywanie w PostgreSQL, analiza przez silnik ML w Jupyterze. Kluczowe elementy: przetwarzanie inkrementalne, self-labeling i wielojęzyczny TF-IDF.A three-stage data processing pipeline: fetching emails via n8n from Gmail API, storing in PostgreSQL, and ML analysis in Jupyter. Key components: incremental processing, self-labeling, and multilingual TF-IDF.
| Input text | subject (50 words) + snippet (200 words) + HTML fragment |
| Vectorizer | Custom TF-IDF |
| Stopwords | 120 Polish/English custom stopwords |
| N-grams | ngram_range=(1,2) — "faktura PLN", "urgent ASAP" |
| Features | 4,349 |
| Languages | 60% Polish, 40% English |
| Rozmiar zbioruDataset size | 1,869 unique emails, 25 days |
| WielojęzycznośćMultilingual | 60% Polish, 40% English |
| Nierównowaga klasClass imbalance | 96.3% OTHER, 0.2% URGENT |
| Przepływ inkrementalnyIncremental inflow | 100 emails/day |
| Rozrzut tekstuSparse text | subject + snippet ~250 words |
// XGBoost · Self-Training · GridSearch
Cztery algorytmy przetestowane na próbie 1.000 emaili. XGBoost wygrał wyraźnie — sekwencyjnie buduje 100 słabych drzew decyzyjnych, każde poprawiając błędy poprzednika. Ostateczny wynik po optymalizacji GridSearchCV: F1-macro = 0.604.Four algorithms tested on a 1,000-email sample. XGBoost won decisively — sequentially building 100 weak decision trees, each correcting its predecessor's errors. Final result after GridSearchCV optimization: F1-macro = 0.604.
| Model | Accuracy | Training | Size | Verdict |
|---|---|---|---|---|
| XGBoost | 99.9% | 24s | 395 KB | ✓ selected |
| LightGBM | — | 21s | 320 KB | rejected (less stable) |
| Random Forest | 54% | 18s | — | rejected (fails rare classes) |
| Logistic Regression | 41% | 3s | — | rejected (misses phrases) |
| Algorithm | XGBoost |
| CV folds | 3-fold cross-validation |
| n_estimators | 50 |
| max_depth | 3 |
| learning_rate | 0.1 |
| WersjonowanieModel versioning | 10 backups (backup_model_YYYYMMDD_HHMMSS.joblib) |
| Obsługa błędówError handling | Empty text skipped; fallback to rule-based |
| PowtarzalnośćReproducibility | Docker containers |
| Monitoring | 25-day dashboard (Cell 15) |
| PrzetwarzanieProcessing | Only new emails (processed=FALSE), scalable to 100k/year |
// 99.9% · £104k ROI · SLA Compliant
Test produkcyjny na 2.000 rzeczywistych emailach: 99,9% dokładności (1.997/2.000 poprawnie). Wszystkie KPI spełnione — F1 > 0.60, latency < 10 ms, model < 1 MB.Production test on 2,000 real emails: 99.9% accuracy (1,997/2,000 correct). All KPIs met — F1 > 0.60, latency < 10 ms, model < 1 MB.
| URGENT precision | 100% ✓ | (no false alarms) |
| INVOICE recall | 95% ✓ | (no missed payments) |
| MEETING F1 | 90% ✓ | |
| NEWSLETTER precision | 85% ✓ | |
| OTHER accuracy | 99% ✓ |
// Postfix · Exchange · SaaS
Wizja długoterminowa dla MAILRAG — od klasyfikatora email do SaaSowego pluginu dla serwerów pocztowych. Integracja z Postfix/Exchange, subkategoryzacja OTHER (96,3%) i komercjalizacja.Long-term vision for MAILRAG — from an email classifier to a SaaS plugin for mail servers. Integration with Postfix/Exchange, subcategorization of OTHER (96.3%), and commercialization.
| Postfix/Exim | ML pipe transport (content_filter=ml-pipe) |
| Dovecot | Sieve routing via headers |
| Gmail / 365 | Webhook endpoint |
| Zimbra | Content filter plugin |
| v2.0 goal | Postfix pipe + Redis → 100% DB cost savings |