Skip to content
All work
2026Independent project · published on PyPIplainml

PlainML: explainable AutoML that runs in the browser

A spreadsheet goes in; a trained, explained, deployable model comes out, with no install and no server.

Pythonscikit-learnXGBoostPyTorchFastAPIPyodide / WASMSHAPOptuna
Models compared
52
Tests
170+
CI matrix
15 jobs

Overview

PlainML turns a spreadsheet into a trained model, an explanation of what drives it, and a deployable artifact, through a CLI, a guided wizard, a Python API or a web app. It is a ground-up rewrite of curdrice, my earlier one-command ML tool, with the scope widened from training a few models to covering the whole path from raw file to served prediction.

It detects the task, then selects across 22 classification and 30 regression models (scikit-learn, XGBoost, LightGBM, CatBoost and PyTorch) using 5-fold cross-validation, a held-out test set, ensembles, and a do-nothing baseline so you can see whether the model beats doing nothing at all.

Challenges

Most AutoML failures are data failures, not model failures, so profiling runs before training: it flags ID columns, target leakage, class imbalance and messy formats like currency text and day-first dates, and handles rare classes with class weights, SMOTE and threshold tuning.

Feature-importance methods disagree with each other, so the platform runs a 19-method consensus (SHAP, permutation, RFE, Boruta, stability selection) with shadow-feature bias correction and a standard-error rule for how many columns to actually keep.

Running the full stack client-side meant porting it to WebAssembly under Pyodide with IndexedDB storage, so training happens in the user's own browser: private, zero-install, and free to host.

Decisions

The calls that shaped this project, the alternatives they beat, and what each one cost.

  • Port the whole stack to WebAssembly

    over run training on a server

    Why

    Uploading a spreadsheet to someone else's machine is the thing that stops people trying a tool on real data. Pyodide plus IndexedDB keeps training on the user's own machine: private, zero-install, and free to host as a static deploy.

    Trade-off

    A large initial payload, slower training than native Python, and a ceiling set by the browser's memory.

  • Score every run against a do-nothing baseline

    over report the best model's metrics

    Why

    An AutoML tool that always returns a model will happily return one that is worse than predicting the mean. A baseline makes it possible for the honest answer to be that nothing worked.

    Trade-off

    Costs the tool its best headline numbers on weak datasets, which is the point.

  • A 19-method feature-importance consensus

    over report SHAP values alone

    Why

    Importance methods disagree, and which one you pick changes the answer. A consensus with shadow-feature bias correction produces a ranking that survives method choice instead of depending on it.

    Trade-off

    Much more computation per run, and a harder number to explain than one SHAP plot.

  • Profile the data before training

    over let problems surface at model time

    Why

    Leakage, ID columns and day-first dates produce models that look excellent and are worthless. Catching them up front converts a silent wrong answer into a warning.

    Trade-off

    An extra pass over the data, and false positives on columns that merely look like identifiers.

Outcomes

Explanations come out in plain English, such as more support calls raising churn risk from 24% to 38%, backed by SHAP, per-row explanations, HTML reports, model cards and calibration checks (Brier score, ECE).

Beyond tabular prediction: multi-series forecasting with backtests, prediction intervals and holidays; clustering with K-Means, GMM and HDBSCAN; anomaly detection with per-row reasons; PSI drift monitoring; and Optuna tuning.

Shipped with 170+ pytest tests, a 15-job CI matrix across Linux, macOS and Windows on Python 3.10–3.14, OIDC Trusted Publishing to PyPI and a MkDocs site, plus production paths through FastAPI REST serving, generated Docker builds, ONNX export and MLflow logging.

Next projectMulti-agent RAG research assistant