I build ML systems
that actually work
Clinical ML · LLM engineering · production deployment — from ICU mortality models to LLM-powered wealth analytics.
M.Sc. Data Science, RWTH Aachen · Research Assistant at Uniklinik RWTH · Working Student at Aixigo AG. Full ML lifecycle: data engineering, model training, SHAP explainability, Docker/Azure deployment, and model monitoring. Open to MLE roles in Munich and Germany.
Featured Projects
ICU Mortality Prediction System
LSTM-based predictor on MIMIC-III/IV. Full ETL → feature engineering → training → containerised inference API. XGBoost + SHAP explainability dashboards validated by ICU clinicians.
Clinical Notes RAG Pipeline
Hybrid retrieval over discharge summaries. Bio_ClinicalBERT dense embeddings + keyword search, DSPy-optimised prompt chains, local LLaMA generation — precision@k + faithfulness eval harness.
Smart Portfolio Insider
LLM-powered analytics over financial dataframes at Aixigo AG. LangChain + DSPy RAG, prompt guardrails, streaming UX. Integrated into the Bloxx wealth platform in production.
Experience & Education
CITI Program (MIT): Human Research & Data/Specimens Only Research 2 · Conflicts of Interest
German — A2, actively pursuing B1
What I've Built
Four projects spanning clinical ML, LLM/RAG engineering, financial ML, and process mining. Real engineering work — systems built with production discipline.
ICU Mortality Prediction System
End-to-end mortality prediction on MIMIC-III/IV ICU data. Strict patient-level splits, temporal windowing (6–12h bins), leakage controls, model calibration. XGBoost + SHAP clinician dashboards. Deployed on Azure via Docker CI/CD. Built under PhysioNet/IRB protocols.
ICU teams generate massive volumes of time-series EHR data. Early identification of deteriorating patients is manually demanding and inconsistent. The system flags high-risk patients using historical ICU trajectories with an explainable probability score clinicians can act on at 3am.
Data governance: the repo uses a synthetic data generator replicating MIMIC schema distributions. Anyone can clone and run the full pipeline without PhysioNet credentials — a design choice I now cite in interviews as proof of data governance awareness.
- AUC-ROC 0.978 and AP 0.892 on held-out cohort with strict patient-level splits
- Temporal windowing using 6–12 hour bins; leakage controls enforced at data splitting level
- Model calibration verified across risk deciles — not just raw AUC
- SHAP explanations validated by ICU clinicians, reducing black-box concerns for high-risk flags
- Prediction drift detection and automated retraining triggers in production monitoring
- p95 inference latency under 800ms; containerised FastAPI served on Azure
LSTM trained on 48-hour ICU windows with strict patient-level train/test splits to prevent temporal leakage — a common failure mode in clinical ML. Feature engineering: forward-fill imputation, time-step delta features, rolling statistics over physiological signals.
Two complementary models: LSTM for sequence modelling, XGBoost for explainability. Tree SHAP values are faster and more interpretable than gradient attribution on recurrent networks, making XGBoost the right choice for the clinician-facing dashboard.
Introduce a feature store (Feast or Hopsworks) to decouple feature engineering from training. Add multi-task learning for additional clinical outcomes. Replace ad-hoc monitoring with a proper ML observability platform like Arize or WhyLabs.
Clinical Notes RAG Pipeline
Hybrid retrieval-augmented generation over clinical discharge summaries. Dense + sparse retrieval, DSPy-driven prompt optimisation, local LLaMA generation, privacy-preserving on-premise inference. Full precision@k + faithfulness + hallucination rate eval harness.
Clinical notes are dense and unstructured — discharge summaries, progress notes, radiology reports. Keyword search fails on medical abbreviations and terminology. A semantic QA system needs to retrieve the right passages and generate grounded answers without hallucinating clinical facts.
Privacy: local LLaMA generation keeps all inference on-premise. No patient data leaves the network. Built on public datasets (PubMedQA, MedQA, synthetic clinical notes) for open reproducibility. Also used DSPy-driven prompt optimisation to generate augmented clinical notes grounded in historical data, expanding rare-case coverage in offline evaluations.
- Precision@k retrieval evaluation with configurable k and score thresholds
- Answer faithfulness scoring comparing generated answers to reference ground truth
- Hallucination rate tracked as a first-class metric — not an afterthought
- DSPy compiler automatically searches demonstration space; outperforms manual prompt templates
- Full Docker Compose stack — clone and run in one command, no proprietary data needed
- W&B experiment tracking + DVC data versioning for reproducible lineage
Bio_ClinicalBERT over general encoders: domain-adapted on MIMIC notes, it substantially outperforms sentence-transformers on clinical abbreviation resolution and entity matching. Hybrid retrieval adds keyword recall for rare drug names and ICD codes that dense search misses.
DSPy over raw prompting: the DSPy compiler searches the few-shot demonstration space programmatically. You define the signature; DSPy finds the optimal examples. This cuts prompt engineering iteration time significantly and produces more robust chains.
Local LLaMA over API: privacy-preserving, no data egress, reproducible behaviour across runs, zero inference cost at scale.
Smart Portfolio Insider (Aixigo AG)
LLM-powered analytics over financial dataframes built during my working student role at Aixigo AG. RAG with LangChain + DSPy, prompt guardrails, streaming UX. Integrated into the Bloxx wealth platform for live client use.
Aixigo AG is a wealth management software company. The Smart Portfolio Insider is an LLM-powered analytics layer over time-series financial dataframes, allowing analysts to query portfolio data in natural language. Schema-aware prompt templates ensure the LLM understands the financial data model. Output guardrails validate generated analysis before it reaches clients. Streaming I/O keeps the UX responsive on large portfolio datasets.
- Smart Portfolio Insider shipped to production and integrated into the Bloxx wealth platform
- ML microservices (PyTorch, scikit-learn) via Flask/FastAPI + Docker with GitLab/Jenkins CI — significantly reduced manual deployment overhead
- Shell/Python ETL pipelines for large-scale portfolio data; improved data freshness for downstream model training
- Automated testing (FitNesse), developer documentation (MkDocs), Agile delivery via Jira sprints
- Java API services for platform integration
A public demo replicates the same LLM + dataframe pattern using Yahoo Finance data — fully open-source, no proprietary data required. Demonstrates schema-aware prompting, output validation, and reproducible evaluation.
Process Mining — Ticket System Analysis
Descriptive, predictive, and prescriptive analysis on IT ticket event logs. Conformance checking, bottleneck identification, and KPI impact reporting to stakeholders.
Applied the three-tier process mining methodology to an IT service desk ticket system. Descriptive analysis revealed the actual process model from event logs (vs. the assumed process). Predictive analysis identified ticket attributes correlating with SLA breaches. Prescriptive analysis recommended routing and prioritisation changes.
- Process discovery: actual vs. intended ticket resolution flow from raw event logs
- Conformance checking to flag deviations and non-compliant cases
- Bottleneck identification with queue time and waiting time breakdown per activity
- KPI impact reporting to stakeholders — actionable recommendations for process improvement
The Story So Far
I started as a software developer — building APIs, backend systems, and full-stack products at EBMAC and MADD Solutions in Pakistan, alongside more than 10 years of freelance work on Fiverr. At some point, writing systems that moved data around wasn't enough. I wanted to build systems that could learn from it.
So I came to Germany. My M.Sc. in Data Science at RWTH Aachen was genuinely demanding — signal processing, combinatorial optimisation, statistical learning at depth. My thesis took me into CUDA territory: GPU-accelerated branch and bound for vertex elimination in graphs on NVIDIA GPUs. That intersection of algorithms and hardware performance is something I keep coming back to.
At Uniklinik RWTH I worked with real ICU data under PhysioNet/IRB protocols, with clinicians who would actually use the outputs. Building a mortality predictor that hit AUC 0.978 and AP 0.892 mattered less than making the SHAP explanations meaningful to a doctor at 3am. That experience shaped how I think about ML: models are only as good as the trust they earn.
At Aixigo AG I learned what production ML engineering actually demands: versioned models, monitored services, LLM integrations with guardrails, CI/CD pipelines, and code other engineers can extend. Not notebooks — systems.
What I'm looking for next: a team building real ML products, where the work is measurable and the engineering discipline is serious. Based in Aachen, open to Munich, willing to relocate. German A2 and actively working toward B1.
Technical Skills
Writing
Honest technical write-ups on what I'm building and learning. Not tutorials — accounts of real engineering decisions, what worked, what didn't, and why.
Building an ICU Mortality Prediction System with LSTM and SHAP
How I designed a fully reproducible clinical ML pipeline under data governance constraints — and what AUC 0.978 + AP 0.892 actually required to achieve.
How I Added MLflow Experiment Tracking to My MIMIC Project
Integrating MLflow into an existing PyTorch training loop — runs, artifacts, model registry, and what it changes about how you iterate.
Coming SoonDetecting Data Drift Between MIMIC-III and MIMIC-IV with Evidently AI
Measuring feature distribution shifts across two MIMIC versions and what it implies for model reliability when training and serving distributions diverge.
Coming SoonOptimising LSTM Inference: PyTorch vs ONNX Benchmarks
Exporting my ICU mortality LSTM to ONNX and benchmarking against the PyTorch baseline. Targeting 2–5× speedup — what I measured and where the gains came from.
Coming SoonWhat I Learned Building a RAG Pipeline for Clinical Notes
Embedding model selection (why Bio_ClinicalBERT beats general encoders here), DSPy vs. raw prompting, and measuring answer faithfulness without a human eval loop.
Coming SoonAdding Model Monitoring to My ML Pipeline with Evidently AI
End-to-end monitoring: Prometheus metrics on FastAPI, Evidently drift reports, and automated retraining triggers in a production-like CI loop.
Coming SoonLet's Talk
I'm currently looking for Machine Learning Engineer positions in Germany — Munich is the top preference, but I'm open to NRW, Berlin, and remote across Germany.
If you're building ML systems in production and need an engineer who cares about the full lifecycle — data, models, deployment, monitoring — let's connect.
Recruiters, hiring managers, and engineers are all welcome. Response time: typically within 24 hours.
Or email directly: ik_khan1@icloud.com
- Machine Learning Engineer roles in Germany (Munich preferred)
- Companies with ML actually running in production — not just planning it
- Teams that care about engineering quality, not just model accuracy
- Remote-friendly or hybrid setups considered across Germany / EU
- Open to relocation — Aachen → Munich is an easy move