Building an ML Portfolio That Gets Interviews
A GitHub profile full of Kaggle notebooks and tutorial follow-alongs will not get you interviews. Here is what a portfolio that actually moves the needle looks like.
Most ML portfolios share the same problem: they demonstrate that you can follow tutorials, not that you can solve problems. Recruiters and hiring managers have seen hundreds of MNIST classifiers and Titanic survival models. Here is what makes a portfolio stand out.
The Bar You Are Clearing
Hiring managers reviewing your portfolio are asking two questions:
- Can this person formulate a real problem and build an ML solution for it?
- Can this person turn that solution into something production-like?
A Jupyter notebook with perfect cells does not answer either question compellingly. A documented GitHub repository with a deployed endpoint, evaluation code, and a clear explanation of decisions does.
What Makes a Good Portfolio Project
Good portfolio project checklist:
- Solves a genuine problem (not a pre-cleaned Kaggle benchmark)
- Shows end-to-end work: data collection or cleaning, feature engineering, modeling, evaluation
- Includes a clear write-up explaining decisions, not just results
- Has a deployed component (API, Gradio interface, Streamlit app) OR a well-explained reason why it is not deployed
- Documents what did not work as prominently as what did
Bad portfolio project:
- MNIST/CIFAR classification with PyTorch (tutorial reproduction)
- Titanic or House Prices from Kaggle (everyone has these)
- Notebook with no README and no explanation of choices
- "I got 94% accuracy" with no baseline, no metric context, no explanation
Project Ideas by Track
ML Engineering track:
Real-time pricing anomaly detector: Scrape product prices from a public source, build a time series anomaly detection system, serve predictions via a FastAPI endpoint, alert on anomalies. Demonstrates: time series ML, serving, real-world data.
Personal recommendation engine: Build a recommendation system for content you personally consume (books, papers, music). Collect your own interaction data, implement collaborative filtering + content-based hybrid, serve via a simple interface. Demonstrates: recommendation systems, cold start handling, end-to-end thinking.
Document QA with RAG: Pick a large public document corpus (SEC filings, Wikipedia category, research papers in a field you care about). Build a RAG system that answers questions. Evaluate it with LLM-as-judge. Demonstrates: embeddings, vector search, RAG architecture, evaluation.
Applied Science track:
Reproduce a paper: Pick a recent ML paper (NeurIPS/ICML) with code released, reproduce its results, then try one modification of your own. Document the process. Demonstrates: deep technical understanding, research process.
Novel dataset + problem: Find a public API or dataset in a domain you know well. Frame an ML problem that has not been solved on that data. Solve it. Demonstrates: problem formulation, domain knowledge, end-to-end pipeline.
Data Science track:
Causal inference study: Find a natural experiment (policy change, product launch with phased rollout) in public data. Use difference-in-differences or propensity score matching to estimate causal effects. Demonstrates: statistical rigor, experimental thinking.
Dashboard with data storytelling: Collect an interesting public dataset, clean it, analyze it, build a dashboard (Streamlit, Observable). Tell a story about what you found. Demonstrates: communication, analytical thinking.
How to Structure Each Project
my-project/
├── README.md ← This is your cover letter for this project
├── data/
│ └── README.md ← What the data is, where it comes from, what you did to it
├── notebooks/
│ ├── 01_exploration.ipynb
│ ├── 02_feature_engineering.ipynb
│ └── 03_modeling.ipynb
├── src/
│ ├── features.py ← Feature computation (importable, not notebook-only)
│ ├── model.py ← Model training and evaluation
│ └── serve.py ← FastAPI or Gradio serving
├── tests/
│ └── test_features.py
└── requirements.txt
The README is the most important file. It should contain:
- What problem this solves and why it is interesting
- What data you used and how you got it
- What you tried and why you chose the approach you took
- What the results were (with context - is 0.82 AUC good for this problem?)
- What you would do next
- How to run it
The Deployment Requirement
Not deploying your projects is a common mistake. Deployment matters because:
- It forces you to think about the model as a service, not just a script
- It gives recruiters something to click
- It signals production-mindedness
Easy deployment options:
- Hugging Face Spaces: Free hosting for Gradio apps. Easiest for models with natural demo UIs.
- Fly.io / Railway: Simple Docker deployment. Good for FastAPI endpoints.
- Streamlit Community Cloud: Free for public Streamlit apps.
Your first deployed project does not need to be impressive - a simple API that takes an input and returns a prediction is sufficient to demonstrate that you understand the concept.
Writing About Your Projects
Your project write-up (README, blog post, or portfolio page) should follow the same structure as a good interview answer:
- The problem: What does it solve? Why does it matter?
- The approach: What did you build and why? What alternatives did you consider?
- What did not work: One honest failure and what you learned from it
- Results: With context. "AUC of 0.84 compared to a baseline of 0.71 (majority class)"
- What is next: What would you do with more time?
Avoid: "I used XGBoost because it is a powerful algorithm." That is not reasoning; it is name-dropping. Say: "I tried logistic regression first as a baseline (AUC 0.71). I then tried XGBoost because the feature interactions - the combination of user tenure AND declining activity - seemed likely to be non-linear. XGBoost improved AUC to 0.84."
How Many Projects
Depth beats breadth. Two well-executed projects with full write-ups and deployed endpoints will get more interviews than ten Kaggle notebooks.
Aim for:
- 1–2 flagship projects (end-to-end, deployed, well-documented)
- 2–3 supporting projects (demonstrates range, but less polished)
- Optional: 1 paper reproduction or research contribution
Your flagship projects should represent the type of work you want to do. If you are targeting recommendation systems roles, have a recommendation project. If you want to work on LLM applications, have a RAG or agent project.
The Timing Problem
Do not wait until your portfolio is "ready." Ship something early, keep improving it. A deployed project with known flaws is better than a perfect project that is still in progress. Recruiters can see a GitHub history - last committed three years ago is worse than committed last week, even if the older one is more polished.
One strong project shipped now is worth more than five perfect projects planned.
Stay in the loop
Get new ML/AI lessons in your inbox.
No account needed. We will send curriculum updates, launch notes, and practical learning resources.
Related Posts
More postsThe AI Evals Engineer: A New Role and How to Get It
Evals engineer went from a task to a job title in about two years. Here is what the role actually does day to day, why companies are hiring for it, the skills that matter (and the ones that do not), what the interview looks like, and a portfolio that gets you in.
ML Interview Questions: What Actually Gets Asked
The questions that show up in ML interviews consistently. Not the textbook version - the version that gets asked at top companies, with the depth of answer they expect.
How to Explain Your ML Project in an Interview
Most candidates undersell their ML work. They either go too deep into math no one asked about, or stay too surface-level. Here is the structure that gets you to a compelling story.