New to ML? Start with Learn ML from scratch — plain English, live pictures you generate yourself, and a real model trained in your browser before you finish reading. Snippets marked Run here execute live.
Never done machine learning before? Start here. No maths, no jargon, just plain English and pictures in your head. By the end of this page you will understand what a model is, and you will have trained a real one in your browser.
What is machine learning?
Imagine teaching a child to recognise a cat. You do not write down rules like 'four legs, whiskers, pointy ears'. You just show them lots of cats, and soon they can spot a new cat they have never seen. Machine learning is the same idea for computers: instead of writing rules, we show the computer many examples, and it learns the pattern by itself. That learned pattern is called a MODEL.
Data, features, and the target
features = the clues · target = the answer
Think of a spreadsheet. Each ROW is one example (say, one flower). Each COLUMN is a FEATURE, a fact about it (petal length, petal width, colour). One special column is the TARGET, the thing we want to predict (which species of flower). BreezeML learns the link between the features and the target. That is why you only ever tell it two things: your table, and the name of the target column.
Two big jobs: sorting vs guessing a number
classification = buckets · regression = a numberRun here
Almost every ML problem is one of two jobs. CLASSIFICATION is sorting things into buckets: spam or not spam, cat or dog, which of 3 flowers. REGRESSION is guessing a number: tomorrow's temperature, a house price, how many visitors. BreezeML looks at your target column and picks the right job automatically. Press Run to SEE both side by side.
Try it yourself
Output
Press Run to execute this snippet.
See how a model carves up the world
decision boundaryRun here
A classifier draws invisible borders between the groups. Anything that lands in a green region is called green; in a red region, red. Press Run to watch a real model draw those borders around 150 flowers using just two measurements. This picture IS the model.
Try it yourself
Output
Press Run to execute this snippet.
Training and testing (no cheating!)
When you study for an exam, you practise on some questions and then the real test uses NEW questions you have not seen. If the teacher tested you on the exact practice questions, a good score would not mean you actually learned. Models are the same: we TRAIN on some rows and TEST on other, unseen rows. BreezeML always keeps a fair, unseen test set for you, so its scores are honest.
See it: train a real model now
Run here
Enough theory. Press Run. This loads 150 real flowers, learns to tell three species apart, and prints how often it is right, all inside this web page. You just did machine learning.
Try it yourself
Output
Press Run to execute this snippet.
What makes a score 'good'?
accuracy · F1 · ROC AUC
ACCURACY means 'out of 100 guesses, how many were right?'. Simple, but it can lie. If 99 out of 100 emails are NOT spam, a lazy model that always says 'not spam' is 99% accurate and completely useless. That is why BreezeML also shows F1 (a fairer score when the buckets are uneven) and, for yes/no problems, ROC AUC (how well it ranks the risky cases). More than one number keeps you honest.
Overfitting: memorising vs understanding
overfittingRun here
A student who memorises the answer key gets 100% on practice and fails the real exam. A model can do this too: it 'memorises' the training rows instead of learning the real pattern, so it looks amazing in practice and flops on new data. This is OVERFITTING. Press Run to watch it happen: as the model gets more complex, the practice score keeps climbing while the real (unseen) score stalls and dips.
Try it yourself
Output
Press Run to execute this snippet.
Cross-validation: five fair grades
5-fold cross-validation, always onRun here
One test could be lucky or unlucky. So BreezeML splits your data into 5 parts, trains on 4 and tests on the 1 left out, then rotates until every part has been the test once. Averaging those 5 grades gives a score you can trust. Press Run to see all five grades and their average.
Try it yourself
Output
Press Run to execute this snippet.
Data leakage: the sneaky trap
breezeml.audit(df, target)Run here
Imagine predicting whether a patient is sick, but one column is 'medicine already prescribed'. The model will look brilliant, because that column basically contains the answer, but it is useless in real life where you do not know it yet. This is LEAKAGE. BreezeML's audit() hunts for these traps before you train. Honesty first.
BreezeML wraps scikit-learn so a beginner can go from a spreadsheet to an honest, deployable model in three lines, while an expert keeps full control. Here is what makes it special. Every promise below is a real feature.
A model in three lines
fit(df, target) -> modelRun here
No pipelines to wire, no config files. Give it a table and the name of the column you want to predict. BreezeML figures out the rest (classification vs regression, cleaning, encoding, scaling, cross-validation) and hands back a trained model.
Try it yourself
Output
Press Run to execute this snippet.
It explains itself
auto(df, target, explain_decisions=True)
Set explain_decisions=True and BreezeML narrates every choice it makes in plain English as it makes it: why it picked a model, how it cleaned the data, which metric it optimized. It teaches while it works.
export() writes a standalone scikit-learn script that reproduces your exact pipeline with NO breezeml import. Delete the library and your model still runs. You are never trapped.
Exampleruns locally after pip install
import breezeml
df = breezeml.datasets.iris()
model = breezeml.fit(df, "species")
breezeml.export(model, "train.py") # pure sklearn
Four dependencies. Always.
scikit-learn · pandas · numpy · joblib
The core installs with only four packages, and a CI test fails the build if anyone adds a fifth. That discipline is why the whole library can even run inside this web page.
Exampleruns locally after pip install
# the entire core dependency list
# scikit-learn, pandas, numpy, joblib
# (xgboost, lightgbm, onnx, etc. are optional extras)
It is honest by default
audit() · conformal · fairness · drift · significanceRun here
Most tools shout a single accuracy number. BreezeML ships a whole honesty toolkit: leakage detection, fairness gaps, drift monitoring, statistical significance, and distribution-free uncertainty. See the Honesty section.
Try it yourself
Output
Press Run to execute this snippet.
AI agents can use it
breezeml-mcp
A built-in Model Context Protocol server lets Claude and other agents train, compare, explain, and deploy models with sound statistical defaults, and get the same explanations you would.
Exampleruns locally after pip install
pip install "breezeml[mcp]"
claude mcp add breezeml -- breezeml-mcp
It has a soul
zen() · haiku() · fortune() · sensei()
When the work is done, breezeml.zen() rakes the gravel: a breathing pause, a haiku about your model, a fortune, or a word from the sensei. Machine learning, with calm.
Practice datasets return a pandas DataFrame with a named target column. Available: iris, wine, breast_cancer, diabetes (regression), and penguins (needs seaborn).
🌱
In plain English: Ready-made practice tables so you can learn without hunting for data. Each one already has its answer column named for you.
Try it yourself
Output
Press Run to execute this snippet.
fit()
fit(df, target, task='auto') -> ModelRun here
The main entry point, and usually the only function a beginner needs. Name the target column and BreezeML detects the task, cleans and encodes the data, and trains a solid model scored with 5-fold cross-validation. It returns a fitted Model you can evaluate, explain, or ship. task='auto' picks classification vs regression for you; pass task='classification' or 'regression' to force it. Pitfall: the target must be a real column in df, not a separate array.
🌱
In plain English: Give it a table and point at the answer column. It does the cleaning, training, and grading for you, then hands back a ready model.
Try it yourself
Output
Press Run to execute this snippet.
predict()
predict(model, X) -> arrayRun here
Use a trained model on new rows and get back an array of predictions, one per row. X is a DataFrame with the same feature columns you trained on; the target column does not need to be present. When to use: scoring fresh data after training. Pitfall: if a column is missing or renamed the call fails, so keep your input schema stable.
🌱
In plain English: Show a trained model new rows and it tells you its best guess for each one.
Try it yourself
Output
Press Run to execute this snippet.
model.evaluate()
Model.evaluate() -> dictRun here
Read the honest, cross-validated scores of a fitted model, for example accuracy and macro-F1 for classification, or R2 and RMSE for regression. It returns a dict of metric names to values and prints them for you. When to use: right after fit, to see how good the model really is before trusting it. Pitfall: these are cross-validated scores on your training table, not a promise about a different population, so keep an eye on drift once you deploy.
🌱
In plain English: The report card. How often is it right, judged fairly on data it never saw during training.
A trained model can hand you calibrated uncertainty, not just a point guess. For regression, predict_interval() returns lower, point, and upper bounds that cover the truth at your chosen level; for classification, predict_set() returns a set of labels guaranteed to contain the right one. alpha controls the level, so alpha=0.1 aims for 90% coverage. When to use: decisions where being wrong quietly is costly. Pitfall: both need a held-out calibration set, because honest coverage needs unseen data, and a tiny calibration set gives shaky intervals.
🌱
In plain English: Instead of one confident answer, it gives a range or a short list that contains the truth about 90% of the time, on purpose.
Exampleruns locally after pip install
import breezeml
from sklearn.model_selection import train_test_split
df = breezeml.datasets.wine()
train, calib = train_test_split(df, test_size=0.3, random_state=0)
model = breezeml.fit(train, "wine_class")
# a label set that covers the true class ~90% of the time
sets = model.predict_set(calib.drop(columns=["wine_class"]).head(), calib, alpha=0.1)
print(sets)
The teaching entry point. It trains the best default model AND returns a report, so you learn what happened, not just the score. It hands back a (model, report) tuple: the model behaves like fit's, and the report summarizes the metrics and the decisions it made. Set explain_decisions=True to narrate every step in plain English, or balanced=True to reweight for class imbalance. When to use: when you want to understand the pipeline, not just run it.
🌱
In plain English: Same as fit, but it also explains what it did and why, so you learn the reasoning, not just the score.
Skip the pandas step: from_csv reads the file and trains in one call. save writes the fitted model to a .joblib file and load reads it back, so you can train once and reuse the model in another script or a server. When to use: moving a model between training and serving. Pitfall: joblib files are tied to library versions, so pin scikit-learn if you plan to load a model months later.
🌱
In plain English: Train straight from a file, freeze the finished model to disk, and thaw it later in another program. Train once, reuse anywhere.
Exampleruns locally after pip install
import breezeml
model = breezeml.from_csv("data.csv", "target")
breezeml.save(model, "model.joblib")
same = breezeml.load("model.joblib")
Copy-paste workflows that string the pieces together, from a raw table to a model you can trust and ship. The first two run right here in your browser; the rest are real local code.
Classification, start to ship
fit -> compare -> report -> card -> exportRun here
The full arc for a category-prediction problem. Train a first model, compare it against the alternatives on the same folds, get an honest SHIP/WARN/STOP verdict, write a model card, then export a standalone script. Press Run to do the first four steps live; the final export line runs locally.
🌱
In plain English: The full journey for a which-category problem: train, pick the best, get an honest go or no-go, write the paperwork, and export a portable script.
Try it yourself
Output
Press Run to execute this snippet.
Validate honestly before you deploy
fit -> report -> auditRun here
Never ship on a single accuracy number. Train, ask report() for the one-word verdict, and only trust a SHIP. Run audit() to see the leakage and balance detail behind it. Press Run: this clean model ships, but the pattern is the same when it does not.
🌱
In plain English: Never trust a single accuracy number. Get the one-word verdict first, and only ship on a SHIP.
Try it yourself
Output
Press Run to execute this snippet.
Honest uncertainty, not just a guess
predict_interval / predict_set on a calibration split
Give every prediction a calibrated range instead of a bare point. Split off a calibration set, then ask the model for a label set (classification) or an interval (regression) with guaranteed coverage. Run this locally, calibration needs unseen data.
🌱
In plain English: Attach an honest range to every prediction instead of a bare guess, using a slice of held-back data to keep it truthful.
Exampleruns locally after pip install
import breezeml
from sklearn.model_selection import train_test_split
df = breezeml.datasets.wine()
train, calib = train_test_split(df, test_size=0.3, random_state=0)
m = breezeml.fit(train, "wine_class")
X = calib.drop(columns=["wine_class"]).head()
# a label set that covers the true class ~90% of the time
print(m.predict_set(X, calib, alpha=0.1))
# for regression targets, use an interval instead:
# lo, point, hi = m.predict_interval(X, calib, alpha=0.1)
Let an AI agent do it
MCP: train -> report -> confirm SHIP -> deploy
Hand the whole loop to Claude through the MCP server. The agent trains a model, runs report(), and is instructed to confirm a SHIP verdict before it deploys. A WARN or STOP stops the line and the agent reports back instead of shipping a broken model.
🌱
In plain English: Hand the whole loop to an AI agent, which is required to prove the model is safe before it is allowed to deploy.
Exampleruns locally after pip install
# one-time setup
pip install "breezeml[mcp]"
claude mcp add breezeml -- breezeml-mcp
# then, in the agent conversation:
# train(churn.csv, churn) -> model_1, f1 0.81
# report(model_1, churn.csv, churn) -> verdict SHIP
# (agent confirms SHIP)
# deploy(model_1, api/) -> FastAPI app written
Predicting a category (spam or not, which species, which class). BreezeML ships 24 classifiers. Use classifiers.compare() to rank them all on your data, or call any one directly. Each returns a fitted model plus an honest cross-validated report.
Test any modelRun here
Pick a model, press Run, and it trains and cross-validates on the spot, in your browser.
Results will appear here.
All 24 classifiers
call as breezeml.classifiers.<name>(df, target). Marked * need the optional [boost] extra and run locally, not in the browser.
Model
Call
Good for
Logistic Regression
logistic
Fast, interpretable baseline. Always try this first.
Random Forest
random_forest
Robust all-rounder. Great default on tabular data.
Gradient Boosting
gradient_boosting
Strong accuracy by correcting its own mistakes.
Hist Gradient Boosting
hist_gradient_boosting
Fast boosting for larger datasets.
Extra Trees
extra_trees
Like random forest, more randomness, often faster.
AdaBoost
adaboost
Boosts weak learners; good on clean data.
Decision Tree
decision_tree
One readable tree of if/else rules.
K-Nearest Neighbors
knn
Predicts from the closest examples. No training.
SVM (RBF)
svm
Powerful non-linear boundaries on small/medium data.
Linear SVM
linear_svm
Fast linear margin classifier for many features.
MLP (neural net)
mlp
A small neural network for non-linear patterns.
Ridge Classifier
ridge
Regularized linear classifier, resists overfitting.
SGD Classifier
sgd
Scales to huge datasets via online learning.
Passive Aggressive
passive_aggressive
Online learner for streaming text/data.
LDA
lda
Linear discriminant analysis, elegant on Gaussian data.
QDA
qda
Quadratic version, curved boundaries.
Gaussian NB
gaussian_nb
Naive Bayes for continuous features. Very fast.
Multinomial NB
multinomial_nb
Naive Bayes for counts, classic for text.
Complement NB
complement_nb
Naive Bayes tuned for imbalanced text.
Bernoulli NB
bernoulli_nb
Naive Bayes for binary features.
Nearest Centroid
nearest_centroid
Assigns to the closest class average. Tiny + fast.
Bagging
bagging
Averages many models to cut variance.
XGBoostextra
xgboost
Kaggle-winning gradient boosting.
LightGBMextra
lightgbm
Very fast, memory-light boosting.
compare()
classifiers.compare(df, target) -> leaderboardRun here
The signature move: rank every classifier on the SAME cross-validation folds, then light the winner. Fair by construction. (The browser runs a fast subset; run locally for all 24.)
🌱
In plain English: A fair race: every model runs on the exact same splits, and the real winner lights up. No cherry-picking.
Try it yourself
Output
Press Run to execute this snippet.
See where a model gets confused
confusion matrixRun here
A confusion matrix shows, for every true class, what the model guessed. Bright squares on the diagonal are correct; anything off-diagonal is a mix-up. Press Run to see one for real wine classes.
🌱
In plain English: A grid of right versus wrong. The bright diagonal is what it got correct; off-diagonal squares show which classes it mixes up.
Clustering gets NO answer column. It groups points purely by how close they are. Press Run to watch it rediscover the flower groups using only two measurements, no labels at all.
🌱
In plain English: No answer key at all. It groups points just by how close together they sit, and often rediscovers the real groups on its own.
A score is a claim. These tools test that claim against the ways models quietly lie, before production does. This is the heart of BreezeML.
report() - one honest verdict
breezeml.report(model, df) -> SHIP | WARN | STOPRun here
The whole honesty toolkit in a single call. It cross-validates the model against a naive baseline, scans for target leakage, and checks class balance (and fairness, if you pass a sensitive column), then returns a Report whose verdict is SHIP, WARN, or STOP. Read report.verdict for the decision and report.reasons for why. When to use: as the last gate before you deploy or export anything. Pitfall: a SHIP verdict means no blocking issues were found, not that the model is perfect, so still read the warnings. Press Run: the clean model ships.
🌱
In plain English: The final go or no-go. One call checks the model for cheating, weak performance, and lopsided classes, then says SHIP, WARN, or STOP.
Try it yourself
Output
Press Run to execute this snippet.
report() catches a leak
STOP on target leakageRun here
Give the data a column that secretly contains the answer, and report() refuses to ship it. This is the guardrail that keeps a too-good-to-be-true score from reaching production. Press Run to watch it say STOP.
🌱
In plain English: Proof the guard works: hide the answer inside a column and report() refuses to ship the too-good-to-be-true score.
Try it yourself
Output
Press Run to execute this snippet.
audit()
audit(df, target, show=True) -> dictRun here
Scans your raw table for the traps that quietly ruin models: target leakage (a feature that secretly contains the answer), duplicate rows, ID-like columns, constants, and class imbalance. It returns a dict whose 'ok' flag is False when a critical issue is found, and prints a readable summary when show=True. When to use: before you train, and as a CI gate (the CLI exits 1 when it fails). Pitfall: audit reads the data, not the model, so run report() after training as well.
🌱
In plain English: A pre-flight check of your raw data for the traps that quietly wreck models, like a column that secretly gives away the answer.
Checks whether rows leaked between your train and test sets, the sneakiest way to fool yourself with a great score. It compares the two tables for exact and near-duplicate rows and returns a dict describing the overlap. When to use: whenever you split data by hand instead of letting BreezeML do it. Pitfall: a model that memorized rows it also gets tested on looks brilliant and is worthless in production.
🌱
In plain English: Catches the same rows sneaking into both your practice and test sets, which fakes a great score.
Measures whether your model treats groups differently. Pass the name of a sensitive column and it returns per-group accuracy, the demographic parity ratio, and a four-fifths-rule verdict, so you learn who the model is worse for. When to use: any model that touches people. Pitfall: overall accuracy can look great while one group is badly served, which is exactly what this surfaces.
🌱
In plain English: Checks whether the model is quietly worse for one group of people than another, even when the overall score looks fine.
Measures how far new data has drifted from the data the model was trained on, using the population stability index (PSI), and flags unseen categories and out-of-range values. It returns a dict of per-feature drift scores with a flag when any crosses the threshold. When to use: on a schedule in production, and it runs live in every deployed API. Pitfall: a model does not tell you when the world changed under it, so silent drift is how good models quietly go stale.
🌱
In plain English: Warns you when new data has wandered away from what the model learned on, which is how good models silently go stale.
Is model A's 2% edge real or luck? McNemar's test and a paired cross-validated t-test compare two models on the same rows and return a p-value instead of a hunch. When to use: before you replace a working model with a slightly better looking one. Pitfall: small score gaps are often noise, and shipping the wrong winner costs you real accuracy.
🌱
In plain English: Tells you whether one model is really better than another, or just luckier this time.
Distribution-free prediction sets with a guaranteed coverage level. Instead of one guess you get 'the answer is in {A, B} with 90% coverage', honest uncertainty on every prediction. alpha sets the miss rate you tolerate, so alpha=0.1 targets 90% coverage. When to use: high-stakes calls where you need to know when the model is unsure. Pitfall: coverage is only honest on a held-out calibration set, so never calibrate on the training rows.
🌱
In plain English: Turns a single guess into a short list that is right a chosen percentage of the time, so you know when the model is unsure.
For rare-event problems like fraud or disease, where a lazy model can score 99% by always guessing the majority. Summarize the imbalance, move the decision threshold to the metric you care about, calibrate the probabilities, and cost out false positives against false negatives. When to use: any time one class is much rarer than the other. Pitfall: the default 0.5 threshold is almost never right for rare events, so tune it to your real costs.
🌱
In plain English: For rare events like fraud, where guessing 'no' every time scores 99% and helps no one. It tunes the model to actually catch the rare case.
The core public functions, with real signatures and plain-English notes. Everything you import as breezeml.<name>, in one place.
fit()
breezeml.fit(df, target, task='auto') -> ModelRun here
Train a solid model in one line. Pass your table and the name of the column you want to predict; BreezeML cleans, encodes, cross-validates, and returns a fitted Model. Leave task='auto' to let it detect classification vs regression.
🌱
In plain English: One line to a trained model: your table plus the answer column. It figures out the rest.
Try it yourself
Output
Press Run to execute this snippet.
predict()
breezeml.predict(model, X) -> arrayRun here
Run a fitted model on new rows and get back an array of predictions. X is a DataFrame with the same feature columns you trained on.
🌱
In plain English: Point a trained model at new rows, get back its guesses.
The teaching entry point. It trains the best default model AND hands back a report of what it did. Set explain_decisions=True to narrate every step in plain English, or balanced=True to handle class imbalance.
🌱
In plain English: fit() that also teaches: it returns the model and a written account of what it decided.
The honest verdict. Runs the whole honesty gauntlet (performance vs a naive baseline, leakage and data-quality audit, class balance, optional fairness) and returns a Report whose verdict is SHIP, WARN, or STOP. Check report.verdict before you ship anything.
🌱
In plain English: The one call that says SHIP, WARN, or STOP after checking the model for every common way it could be lying.
Every fitted Model carries the workflow on itself, so you rarely need the module-level helpers. model.evaluate() reads the cross-validated scores, model.report(df) gives the SHIP/WARN/STOP verdict, model.explain(df) narrates the drivers, model.card() writes a model card, and model.export()/model.deploy() ship it. model.predict_interval() and model.predict_set() add calibrated uncertainty.
🌱
In plain English: The model carries its whole toolkit on itself, so you just call m.evaluate(), m.report(), m.explain(), m.export(), and so on.
Honest uncertainty on top of a point guess. For regression, predict_interval() returns lower, point, and upper bounds that cover the truth at your chosen level; for classification, predict_set() returns a set of labels guaranteed to contain the right one. Both need a held-out calibration set, because honest coverage needs unseen data.
🌱
In plain English: Add an honest range or short list to any prediction, using a slice of held-back data.
Exampleruns locally after pip install
import breezeml
from sklearn.model_selection import train_test_split
df = breezeml.datasets.wine()
train, calib = train_test_split(df, test_size=0.3, random_state=0)
m = breezeml.fit(train, "wine_class")
X = calib.drop(columns=["wine_class"]).head()
print(m.predict_set(X, calib, alpha=0.1))
Turn a trained model into artifacts you own. export() writes a standalone scikit-learn script with zero breezeml import, deploy() emits a FastAPI app plus Dockerfile and pinned requirements, and card() writes an honest Markdown model card. No lock-in, ever.
🌱
In plain English: Three ways to leave with your model: a plain script, a running service, or a written model card. No lock-in.
Persist a model to disk with joblib and read it back later, or train straight from a CSV file without loading it into pandas yourself.
🌱
In plain English: Freeze a model to a file and load it back later, or train straight from a CSV.
Exampleruns locally after pip install
import breezeml
m = breezeml.from_csv("data.csv", "target")
breezeml.save(m, "model.joblib")
same = breezeml.load("model.joblib")
datasets
breezeml.datasets.iris() · wine() · breast_cancer() · diabetes()Run here
Practice datasets that each return a pandas DataFrame with a named target column, so every example on this site is one line from a real table. iris, wine, and breast_cancer are classification; diabetes is regression.
🌱
In plain English: The ready-made practice tables used all over this site, each with its answer column already named.
BreezeML ships a Model Context Protocol server so AI agents like Claude can train, compare, audit, report, and deploy models with sound statistical defaults. The design rule is simple: an agent must call report() and confirm a SHIP verdict before it deploys or exports anything.
Install & connect
pip install "breezeml[mcp]" · claude mcp add breezeml -- breezeml-mcp
Install the MCP extra, then register the breezeml-mcp server with your agent. The console script speaks stdio transport, so one line wires it into Claude Code. Once connected, the agent sees eleven tools: inspect_data, audit, train, compare, predict, explain, report, model_card, export, deploy, and save.
🌱
In plain English: Two commands wire BreezeML into an AI agent, which then sees a small set of safe tools for training and shipping models.
Exampleruns locally after pip install
pip install "breezeml[mcp]"
# register the server with Claude Code
claude mcp add breezeml -- breezeml-mcp
Look before you leap. inspect_data profiles a CSV (rows, features, missing values, class balance) and audit scans it for target leakage, ID columns, constants, duplicates, and label noise. Both return JSON so the agent can reason about whether the data is even worth training on.
🌱
In plain English: Lets the agent look before it leaps: profile the data and scan it for traps, all as JSON it can reason about.
Trains the auto-selected model and stores it in the session under a model_id the agent reuses for later calls. The result includes the task, the chosen estimator, the cross-validated report, and a plain-English list of every pipeline decision.
🌱
In plain English: The agent trains a model and gets back a handle plus a full account of what was decided.
Benchmarks every built-in model on the same cross-validation folds and returns a ranked leaderboard, so the agent picks a winner fairly instead of guessing an algorithm.
🌱
In plain English: The agent runs a fair race across models and gets a ranked board, so it picks a winner instead of guessing.
The gate. Runs the full honesty gauntlet on a trained model and returns a single SHIP, WARN, or STOP verdict with reasons. Agents are instructed to call this and confirm SHIP before they deploy or export. Pass a sensitive column to add a fairness check.
🌱
In plain English: The safety gate for agents: one call returns SHIP, WARN, or STOP, and a good agent must see SHIP before it ships.
The shipping tools. deploy writes a complete FastAPI plus Docker serving directory, export writes a standalone scikit-learn script, model_card writes a Markdown governance doc, and save persists the model to a .joblib file. An honest agent only reaches for these after report returns SHIP.
🌱
In plain English: The shipping tools, which a well-behaved agent only touches after the report says SHIP.
Exampleruns locally after pip install
// tool: deploy (only after a SHIP verdict)
{ "model_id": "model_1", "out_dir": "api/" }
// result
"Serving app written to api/ (run: cd api/ && pip install -r requirements.txt && uvicorn app:app)"
The whole point: the server nudges agents toward a sound workflow. Inspect the data, compare models, train the winner, then run report. Only if the verdict is SHIP does the agent deploy. A WARN or STOP stops the line and the agent reports back instead of shipping a broken model.
🌱
In plain English: The intended habit: look, compare, train, check, and deploy only on a clean bill of health.
Sound ML without opening Python. The breezeml command trains, compares, audits, and deploys straight from your terminal, so it drops neatly into shell scripts and CI pipelines.
Trains the auto-selected model on a CSV, prints its report, and saves it to disk. Add --explain to narrate every pipeline decision in plain English as it works.
🌱
In plain English: Train a model from a spreadsheet without writing any Python, straight from your terminal.
Prints a leaderboard of every built-in model ranked on the same cross-validation folds, so you can eyeball the winner before committing to one.
🌱
In plain English: Print a leaderboard of models from the command line before you commit to one.
Exampleruns locally after pip install
breezeml compare data.csv --target churn
breezeml audit
breezeml audit data.csv --target churn
Scans a CSV for leakage and data-quality problems and exits with status 1 on critical findings. That non-zero exit makes it a natural CI gate: wire it before training and a broken dataset fails the build instead of shipping a fantasy score.
🌱
In plain English: Scan a dataset for problems and fail the build if it finds any, perfect as a safety check in CI.
Exampleruns locally after pip install
# fails the pipeline (exit 1) if the data is broken
breezeml audit data.csv --target churn
Why BreezeML is built the way it is. Four ideas shape every function in this reference.
Four dependencies, always
scikit-learn · pandas · numpy · joblib
The core installs with only four packages, and a CI test fails the build if anyone adds a fifth. Small footprint means fast installs, fewer version conflicts, and code you can actually read. It is also why the whole library can run inside this web page. Heavy extras like xgboost and the MCP server stay strictly opt-in.
Zero lock-in
export writes standalone scikit-learn
export() writes a plain scikit-learn script that reproduces your exact pipeline with no breezeml import anywhere. Delete the library and your model still trains and runs. You adopt BreezeML for the workflow, never because you are trapped.
Honesty by default
report -> SHIP | WARN | STOP
Most tools shout a single accuracy number. BreezeML assumes a score is a claim that has to survive leakage checks, a naive baseline, class balance, and fairness before you trust it. report() folds all of that into one verdict, so the honest path is also the easy path.
Beginner-first, expert-ready
three lines to start, full control when you need it
A newcomer should go from a spreadsheet to an honest model in three lines, learning the ideas along the way, while an expert keeps every knob. Plain-English explanations, sensible defaults, and a calm tone are features, not decoration. Good tools teach while they work.