Data & backend engineer. Currently a Junior Quantitative Analyst in the credit risk team at Ålandsbanken, a regulated Finnish bank, where I do data quality work in SQL and Python against a Snowflake warehouse. B.Sc. Computer Engineering; finishing a two-year ICT qualification at grit:lab in Åland.
I build the parts of a system that have to be right rather than clever: schemas that hold as they grow, loads that stay correct when they are re-run, and models somebody can actually interrogate.
Portfolio · LinkedIn · mahdikheirkhah060@gmail.com
Credit Scoring & Audit Dashboard
An explainable credit-risk model reaching AUC 0.778, against 0.773 for a logistic baseline
and 0.785 for LightGBM — most of the black box's accuracy while staying auditable. 500+ raw
features cut to a defensible set using Weight-of-Evidence monotonic binning and RFE rather than
PCA, with per-variable SHAP contributions behind a Plotly Dash dashboard deployed on Google
Cloud Run.
Python scikit-learn LightGBM SHAP Plotly Dash Docker GCP
Multilingual Document Processing
A DistilBERT classifier across English, Swedish and Finnish at 90.3% accuracy / 0.894
macro-F1, no language below 88.9%. Magnitude pruning and int8 quantization written from
scratch in core TensorFlow when the standard toolkit would not wrap Hugging Face's layers, taking
the served model from 541 MB to 137 MB with no accuracy loss.
TensorFlow Hugging Face spaCy NLP
NLP Scraper — Risk Intelligence Pipeline
End-to-end pipeline pulling documents from 13 external sources, classifying topics at over 95%
accuracy on an external test set, and loading them into a Snowflake warehouse through a SQL
MERGE upsert keyed on a natural key — so re-running the job cannot duplicate a row.
Python Snowflake SQL scikit-learn spaCy GloVe
buy-01 — E-Commerce Microservices
Six independently deployable Spring Boot services in Java — Eureka registry, Spring Cloud
Gateway with JWT validation, tokens in HTTP-only SameSite=Strict cookies. Behind them a
10-stage Jenkins pipeline with SonarQube quality gates that restores the previous image tag
automatically on a failed deploy. Built solo over 8.5 months.
Java Spring Boot Kafka MongoDB Angular Jenkins Docker
Emotions Detector
A VGG-style CNN written from scratch reaching 63.2% accuracy on 7,178 held-out FER-2013
faces, beating a fine-tuned VGG16 baseline with 10× fewer parameters. The decision I would
defend hardest: MD5-deduplicating all 35,887 images before splitting, since duplicates
straddling the train/test boundary would have inflated the number. 431 pytest tests, CI on every
push.
TensorFlow Keras OpenCV Streamlit pytest
NSGA-II — Multi-Objective Location-Allocation
A from-scratch multi-objective genetic algorithm — fast non-dominated sorting, crowding-distance
tournament selection, SBX crossover — collapsing a 42⁴⁴ ≈ 10⁷² feasible space to ~100
Pareto-optimal emergency shelter assignments, with its own hyperparameters tuned by a nested GA.
Python NumPy evolutionary algorithms operations research
Languages Python · SQL · Java · Go · JavaScript/TypeScript · C++
Data Snowflake · PostgreSQL · MongoDB · Redis · SQLite · ETL/ELT · data modelling · data quality & governance
ML TensorFlow/Keras · PyTorch · scikit-learn · Hugging Face Transformers · spaCy · model pruning & quantization · ONNX
Backend & infrastructure Spring Boot · Kafka · REST APIs · Docker · Jenkins · GitHub Actions · Google Cloud Run · Nginx
Also MQTT and embedded sensor work (Arduino/ESP8266) · Claude Code as a daily build tool




