Machine learning project ideas: 12 builds on real public datasets
A good machine learning project starts from a public dataset you can name, a baseline you can beat and a split that does not leak. Pick tabular data first, such as bike rentals or credit defaults from the UCI repository, then move to images, text, audio and recommendations. Below are 12 projects, each tied to a linked dataset, with the stack, what it teaches, a first model, a stretch goal and a time estimate. Every first model is a simple baseline, because a result means little without one.
How should you run a machine learning project so the result means something?
Most weak machine learning portfolios share one flaw: a single accuracy number with nothing to compare it to. The fix is a routine, not more math. Decide the split before you look at the data, build the dumbest possible baseline, and write down every experiment, including the ones that fail.
| Habit | What to do | What goes wrong without it |
|---|---|---|
| Split first | Hold out the test set before any exploration; for time data, split by date | Test scores that no real use will ever reproduce |
| Baseline first | Predict the mean, the majority class or last week's value | A 90 percent score that a constant guess also gets |
| One metric, chosen for the cost of mistakes | Use precision-recall for rare events, mean absolute error for money | Accuracy that hides the thing you care about |
| Error analysis | Read 20 wrong predictions and group them | Tuning knobs without understanding the failure |
| Write it down | Keep a log of each run: change, score, decision | Repeating experiments and forgetting why you stopped |
Run 07 - 2026-11-02 Question: does adding lag features beat the same-hour-last-week baseline? Change: added demand 1, 24 and 168 hours earlier, nothing else. Split: train 2011-01 to 2012-06, validate 2012-07 to 2012-09, test untouched. Metric: mean absolute error on validate. Result: baseline 74.1, previous model 41.3, this run 36.8. Decision: keep. Next: check that no lag crosses the split boundary. Suspect: validate months share a holiday with train. Look at residuals.
Each dataset below is linked to its source page, and all were checked in October 2026. Read the licence on each one before you publish results: several UCI sets use Creative Commons Attribution 4.0, while the air quality set is limited to research use. Time estimates assume evenings and weekends and a working knowledge of Python and pandas. If you are still learning Python, start with Python project ideas and come back. For real problems that need a model, browse the board of ideas, for example in health or finance.
Which machine learning projects use tabular data?
Rows and columns teach the fundamentals fastest: splitting, leakage, metrics and calibration. Most real jobs also involve tables more than images. Start here.
01 Bike rental demand forecast
Predict hourly bike rentals from weather and calendar features, and beat a same-hour-last-week baseline.
- Dataset
- UCI Bike Sharing: 17,389 hourly records, 13 features, CC BY 4.0.
- Stack
- Python, pandas, scikit-learn, gradient boosting.
- Teaches
- Time-based splits, leakage, lag features, baselines for forecasting.
- Time estimate
- 10 to 15 hours.
First version: the baseline predicts each hour's rentals as the value at the same hour a week earlier. Then fit a gradient boosting regressor on calendar and weather columns, using TimeSeriesSplit for validation. Report mean absolute error for both.
Stretch: add lag features without letting any lag cross the validation boundary, then use quantile loss to predict a range, so an operator knows how many bikes to move with 90 percent confidence.
02 Heart disease classifier with calibrated probabilities
A small-data project about uncertainty: how much can 303 patients tell you, and can you trust the probabilities?
- Dataset
- UCI Heart Disease: 303 instances, 13 features, CC BY 4.0.
- Stack
- Python, scikit-learn, matplotlib.
- Teaches
- Cross-validation on small data, confidence intervals, calibration.
- Time estimate
- 8 to 12 hours.
First version: turn the diagnosis label into present or absent, fit a logistic regression and report ROC AUC across repeated stratified cross-validation, with the spread, not one number.
Stretch: plot a calibration curve, compare against gradient boosting, and show that on 303 rows the difference may sit inside the noise. That honest finding is the point of the project.
03 Credit default model with a cost-based threshold
Predict which cardholders miss a payment, then choose the decision threshold from a stated cost of each kind of mistake.
- Dataset
- UCI Default of Credit Card Clients: 30,000 instances, 23 features, from Taiwan.
- Stack
- Python, scikit-learn, Fairlearn.
- Teaches
- Cost-sensitive decisions, thresholds, group fairness metrics, model cards.
- Time estimate
- 12 to 18 hours.
First version: fit gradient boosting, then pick the threshold that minimises total cost under an assumption you write down, such as a missed default costing five times a false alarm. Show the threshold changes if the ratio changes.
Stretch: compare error rates across groups with Fairlearn and write a short model card that says what the model should not be used for.
04 Wine quality: regression, classification or ordinal?
Model tasters' quality scores from lab measurements, and test which framing of the problem works best.
- Dataset
- UCI Wine Quality: 4,898 instances, 11 features, red and white Portuguese vinho verde.
- Stack
- Python, scikit-learn, SHAP.
- Teaches
- Problem framing, feature importance, duplicate rows across splits.
- Time estimate
- 8 to 12 hours.
First version: a random forest regressor against a predict-the-mean baseline. Report mean absolute error, then round predictions and report accuracy to see how misleading it looks.
Stretch: try an ordinal approach, explain predictions with SHAP, and check whether near-identical rows landed on both sides of your split.
Which machine learning projects work with images, text or audio?
Unstructured data brings neural networks into reach, and also the habit of asking whether a bigger model is worth its cost. In each project below, compare a small classical baseline with a deep model.
01 Fashion-MNIST convolutional network with error analysis
Classify clothing photos and study which classes the model confuses.
- Dataset
- Fashion-MNIST: 60,000 training and 10,000 test images, 28 by 28 grayscale, 10 classes.
- Stack
- Python, PyTorch.
- Teaches
- Data loaders, overfitting, confusion matrices, augmentation.
- Time estimate
- 10 to 15 hours.
First version: a logistic regression baseline on raw pixels, then a small convolutional network following the PyTorch basics tutorial. Report both test accuracies and the confusion matrix.
Stretch: look at the 20 worst mistakes (shirts mistaken for T-shirts are a good start), add augmentation, and measure whether it fixes the confused pair or only raises the average.
02 CIFAR-10: transfer learning against training from scratch
Measure how much a pretrained network saves in data, time and error on small colour images.
- Dataset
- CIFAR-10: 60,000 colour images at 32 by 32, 10 classes, 50,000 for training and 10,000 for testing.
- Stack
- Python, PyTorch, a pretrained image model.
- Teaches
- Fine-tuning, learning-rate schedules, learning curves.
- Time estimate
- 12 to 20 hours.
First version: train a small network from scratch and a pretrained one with only the last layer replaced, using 1,000 training images each. Plot accuracy against training time.
Stretch: draw learning curves at 500, 1,000, 5,000 and 50,000 images, and write down at which point training from scratch catches up, if it does.
03 Movie review sentiment: TF-IDF against a fine-tuned transformer
Compare a few lines of linear classification with a pretrained language model on the same reviews.
- Dataset
- IMDB reviews on Hugging Face: 25,000 training and 25,000 test reviews, plus unlabeled data.
- Stack
- scikit-learn, Hugging Face Transformers.
- Teaches
- Text features, tokenization, cost of bigger models, reading errors.
- Time estimate
- 10 to 15 hours.
First version: TF-IDF and logistic regression, with the 20 most positive and negative words printed. This often scores respectably and takes seconds.
Stretch: fine-tune a small pretrained model with the Hugging Face training guide, compare accuracy, training time and memory, then read 20 mistakes and note how many involve sarcasm or mixed opinions.
04 Environmental sound classifier
Recognise dog barks, rain, sirens and 47 other sounds from five-second clips.
- Dataset
- ESC-50: 2,000 clips, 5 seconds each, 50 classes, split into 5 folds.
- Stack
- Python, librosa, PyTorch or scikit-learn.
- Teaches
- Spectrograms, group-aware cross-validation, small-data deep learning.
- Time estimate
- 15 to 25 hours.
First version: compute mel spectrograms with librosa, average them over time and fit a classical model. Use the dataset's own folds, which keep fragments of one source recording together, so your score is not inflated by near-duplicates.
Stretch: train a small convolutional network on the spectrogram image, add time and frequency masking, and report accuracy per fold.
Which machine learning projects go beyond classification?
Recommendation, segmentation and imbalanced detection are what many applied roles ask for, and each needs a metric that accuracy cannot supply.
01 Movie recommender judged on ranking
Suggest ten movies per user and measure whether the held-out ones appear in the list.
- Dataset
- MovieLens: the 100K set has 100,000 ratings from 1,000 users on 1,700 movies. Read the README licence before publishing.
- Stack
- Python, pandas, NumPy, optionally Surprise.
- Teaches
- Implicit and explicit feedback, ranking metrics, cold start, temporal splits.
- Time estimate
- 15 to 25 hours.
First version: a most-popular baseline and an item-to-item similarity recommender. Hold out each user's last five ratings and report precision at 10.
Stretch: matrix factorization with Surprise or your own gradient descent, plus a report on how many distinct movies each model ever recommends. A model that only recommends blockbusters can score well and still be dull.
02 Customer segments from a year of orders
Turn half a million transaction lines into a handful of customer groups you can describe in plain words.
- Dataset
- UCI Online Retail: 541,909 rows of orders from a UK-based online retailer, December 2010 to December 2011, CC BY 4.0.
- Stack
- Python, pandas, scikit-learn.
- Teaches
- Cleaning cancellations and missing IDs, RFM features, k-means, cluster interpretation.
- Time estimate
- 10 to 15 hours.
First version: drop cancellation invoices (codes that start with the letter c) and rows without a customer, compute recency, frequency and monetary value per customer, scale them and run k-means with four clusters. Name each group by its averages.
Stretch: predict who orders again in the next 90 days using only earlier data, and compare against the rule "anyone with two or more orders".
03 Sensor calibration and drift on air quality readings
Estimate benzene from cheap sensors and show how the model degrades as the sensors age.
- Dataset
- UCI Air Quality: 9,358 hourly records, 15 features, one year in an Italian city. Missing values are marked -200; research use only.
- Stack
- Python, pandas, scikit-learn.
- Teaches
- Sentinel missing values, imputation, time-series validation, concept drift.
- Time estimate
- 10 to 15 hours.
First version: replace the -200 markers with real missing values, then fit ridge regression and gradient boosting to predict the reference benzene reading, training on the first eight months and testing on the last four.
Stretch: plot error by month to show drift, then test a rolling retrain every month and measure how much it recovers.
04 Rare-event fraud detection judged on precision and recall
Find the few fraudulent card transactions among hundreds of thousands, where accuracy is meaningless.
- Dataset
- Kaggle credit card fraud: European card transactions from September 2013, highly imbalanced, features anonymised with PCA. Kaggle asks you to sign in to download.
- Stack
- Python, scikit-learn, imbalanced-learn optional.
- Teaches
- Class imbalance, precision-recall curves, thresholds, stratified and time-based splits.
- Time estimate
- 10 to 15 hours.
First version: show that predicting "never fraud" scores near-perfect accuracy, then fit a model and report average precision instead.
Stretch: split by time rather than at random, choose a threshold for a budget of 100 manual reviews a day and report how much fraud that catches.
What should you do after the first model works?
Package the result so someone else can read it in five minutes. A folder with the dataset link and licence, a script that downloads and splits the data, the experiment log, a results table with baseline and model, and a paragraph on what the model must not be used for.
- Pin library versions and set random seeds, so your numbers reproduce.
- Put the split in code, not in your head: one function, one date or fold column.
- Show the baseline in the same table as the model, always.
- Add one section called "What would change my mind": the result that would show the model is not good enough.
Pair a model with a product question and the project becomes a demo. The AI project ideas page covers applied builds on top of pretrained models, and data science project ideas covers analysis without prediction. To put the work in front of people, see portfolio project ideas.
Frequently asked questions
What are good machine learning projects for beginners?
Start with tabular data from the UCI repository, such as bike rentals or wine quality. They fit in memory, train in seconds and teach splitting, baselines and metrics. Skip image or language models until you can explain why a held-out score might be misleading.
Where can I find datasets for machine learning projects?
The UCI Machine Learning Repository, Kaggle, OpenML, Hugging Face Datasets and scikit-learn's built-in loaders are the usual sources. Check the licence and the collection method on each page, and prefer a dataset with a documented source over a scraped file with no explanation.
How long does a machine learning project take?
Between 8 and 25 hours for the projects above, mostly spent on cleaning, validation and error analysis rather than model fitting. Plan a weekend for a tabular project and two or three weeks of evenings for audio or recommendation work.
Do I need a GPU for machine learning projects?
Not for tabular data, text with classical models, or small image sets like Fashion-MNIST, which run on a laptop CPU. Fine-tuning transformers or training on larger images is faster with a GPU, and free notebook services can provide one for short sessions.
How do I avoid data leakage?
Split before you explore, fit scalers and encoders on the training set only, and split by time when the data has dates. Check for duplicate or near-duplicate rows across the split, and for features that are computed from the target, such as a later status flag.
What should a machine learning project include to look credible?
A named dataset with its licence, a baseline, a clearly stated metric, a held-out test score reported once, an error analysis and a limits section. A credible project also reports spread across folds. Unexplained leaderboard-style scores look less convincing than a modest result with honest comparisons.
Created with AI assistance and edited for this site. Examples are illustrative and do not represent customer research. About the publisher.