Load from MongoDB
Read records into a feature store and create a repeatable train/test split.
CASE STUDY · MACHINE LEARNING / MLOPS
An end-to-end classification system that turns website signals into predictions—and treats data validation, experiment tracking, serving, and delivery as part of the model.
Each website is represented by 30 numeric warning signs—from URL structure and SSL behavior to domain age—and classified as phishing or legitimate. The modeling task is only one part of the challenge.
The larger goal was to build the full operating loop: data from a database, validated training data, reproducible transformations, model comparison, saved artifacts, an API for predictions, and a path to automated deployment.
The training workflow is split into explicit components so data problems, model problems, and serving problems can be traced independently rather than disappearing inside one notebook.
Read records into a feature store and create a repeatable train/test split.
Verify the expected columns and produce a distribution-shift report before training.
Fit a KNN imputer, normalize the target labels, and preserve the preprocessor.
Tune candidate classifiers and select the strongest result with classification metrics.
FastAPI applies the saved preprocessor and model together for batch CSV predictions.
Docker and CI connect the tested application to an AWS ECR and EC2 deployment design.
I corrected configuration mismatches, removed exposed credentials, fixed model serialization and MLflow logging, replaced a regression score with classification metrics, strengthened validation, and aligned the API, Dockerfile, tests, and CI workflow.
This project taught me to evaluate an ML system as a chain: data contracts, transformations, experiments, artifacts, API behavior, security, and deployment all affect whether a prediction can be trusted.