Portfolio

Machine learning engineering
I work on the engineering around models—not only experiments in a notebook. These five projects line up with what I'm sharpening: serving a trained model, scoring data in batch, RAG over documents, keeping features consistent from training to scoring, and monitoring data and predictions over time. Repository and live-demo links sit in each card's footer; the text above walks through how the system fits together.
  • Train and serve with the same assumptions: evaluation, thresholds, preprocessing, and what belongs in an API versus a scheduled job
  • Retrieval, embeddings, and LLMs as a service—latency, sources, and the boring parts that keep answers grounded
  • Features and monitoring: one place definitions live, drift and quality checks, outputs that are easy to re-run and compare

My interest sits in applied ML that still makes sense after deployment—how performance is measured, how inference matches training, and which work stays offline or in batch by choice. The repositories here are where I practice that end to end.

All five sit on the ML side of the house: there is always a model, a retrieval stack, or prediction logic that has to run reliably, see the same inputs it was trained on, and stay observable over time. They are compact examples of that—not spreadsheet-style product tours; interactive data apps live under Data tools (/data-tools).

GitHub profile — opens everything public on my account. On this page, each project card links to that repo and its live demo in the footer.

Projects in this track

Stack and hosting differ by project (FastAPI, Docker, scheduled jobs, static inference sites, and similar). On every card, GitHub is the source of truth; Live demo opens the public surface for that project.

Customer churn prediction system
  • FastAPI
  • scikit-learn
  • Classification
  • Joblib

IBM Telco–style churn: compare LogReg, Random Forest, and gradient boosting; serve the ROC-AUC winner behind FastAPI with an F1-tuned threshold—probability, binary label, and risk band from one joblib pipeline.

Live site is inference-only (trained artifact + API); notebooks cover EDA, features, model comparison, and threshold choice. Public teaching dataset—useful for discussing train/serve alignment and what a minimal production slice would add (retrain, drift, monitoring).

Batch scoring pipeline
  • Python
  • Batch
  • pandas
  • pytest
  • joblib

Telco-style CSV in → validated, training-aligned preprocessing, predict_proba, thresholded label, versioned scored CSV out—with model version and UTC timestamp on every row. CLI for cron/CI; pytest-backed.

The live URL is a static showcase (positioning, I/O contract, stack); scoring runs on your machine or in automation, not as a hosted model on that page. Optional JSON manifest, non-zero exit on failure, notebook to review scored output.

RAG document intelligence QA
  • FastAPI
  • FAISS
  • sentence-transformers
  • Docker
  • OpenAI / Ollama

Policy- and handbook-style documents: ingest → chunk → dense embeddings (e.g. all-MiniLM-L6-v2) → FAISS top-k → FastAPI POST /ask with an OpenAI-compatible chat model. Every answer returns explicit sources—document name, page, chunk id—so outputs stay auditable.

The linked page is a full project walkthrough plus a browser-side try-it flow against the deployed API; the stack matches a small production loop: index and metadata built ahead of deploy, Docker image on a VPS, TLS via Caddy, GET /health with a clear ready signal. Optional hardening: API key, rate limits, retrieval score floor, CORS. Repo also includes a Streamlit path for local demos.

Feature store (mini)
  • pandas
  • Versioning
  • Feature table
  • Docs in code

Central definitions and transforms produce one versioned feature table CSV for both training and downstream scoring—documentation and code stay aligned.

Not a commercial feature store: no online mesh or multi-tenant UI. The value is the pattern—single build entry, validation, and feature_version tagging for audits.

ML monitoring & data quality
  • Drift
  • Data quality
  • Batch reports
  • Optional Streamlit

Reference vs current batches: schema and quality checks, numeric and categorical drift (e.g. PSI / KS-style), prediction distribution monitoring, unified reports and alert-style summaries.

Batch-first, not Kafka or per-request logging. Optional Streamlit is for reviewing artifacts after a run; machine-readable outputs are the source of truth for automation.

This page is the portfolio index for these five projects: each card carries its GitHub repository and live-demo URL in one place. I update links when a repo moves or a deploy URL changes.

© 2026 Vahdettin Karataş. All rights reserved.
ML systems, reporting & automation.