Browser-based GLM workbench for actuarial pricing
Build, fit, diagnose, and iterate on Generalized Linear Models - without leaving your browser.
Traditional actuarial pricing tools like Emblem are expensive, opaque, and tied to legacy platforms. Atelier is a modern, open-source alternative that wraps rustystats - a high-performance Rust-backed GLM engine - in a clean, interactive UI. It runs locally, stores everything on your machine, and follows the same explore-build-fit-iterate workflow actuaries already know.
uv add atel
# or
pip install atelInstalls everything - backend, frontend, engine. No separate build steps.
atel # starts server, opens browser
atel --port 9000 # custom port
atel --no-browser # start server onlyThe atelier command works too - atel is just shorter.
Atelier follows the standard actuarial modelling workflow:
- Upload - drag-and-drop a CSV or Parquet file, column types are auto-detected
- Configure - select the response variable, GLM family, link function, offset, weights, and train/test split
- Explore - pre-fit analysis runs automatically: response distribution, score tests ranking every candidate factor by expected deviance contribution, and a null (intercept-only) baseline model
- Build - add terms from the factor sidebar: right-click any factor to choose categorical, linear, spline, target encoding, or other term types
- Fit - hit fit, review the results: coefficient table, A/E charts, lift, calibration, VIF, and model diagnostics
- Iterate - modify terms and re-fit. Every fit is auto-versioned so you can compare metrics across iterations and restore any previous version
┌─────────────────────────────────────────────┐
│ Browser (React 19 + Tailwind + shadcn/ui) │
└──────────────────┬──────────────────────────┘
│ HTTP/JSON
┌──────────────────▼──────────────────────────┐
│ FastAPI backend │
│ ├── /api/datasets upload, validate │
│ ├── /api/explore EDA + null model │
│ ├── /api/fit GLM fitting │
│ ├── /api/models save, history, restore │
│ └── /api/projects project CRUD │
├──────────────────────────────────────────────┤
│ rustystats Rust GLM engine │
├──────────────────────────────────────────────┤
│ SQLite (async) projects, models, specs │
└──────────────────────────────────────────────┘
All data stays local at ~/.atelier/ - the database, uploaded datasets, and serialized models.
- 8 GLM families - Gaussian, Poisson, Binomial, Gamma, Tweedie, Quasi-Poisson, Quasi-Binomial, Negative Binomial
- Rich term types - categorical, linear, B-splines, natural splines, target encoding, frequency encoding, expressions
- Monotonic constraints - enforce increasing/decreasing effects on splines and linear terms
- Interactions - standard product terms, target-encoded interactions, frequency-encoded interactions
- Regularization - Ridge, Lasso, Elastic Net with cross-validated alpha selection
- Train/test split - holdout validation with stratified splitting
- Factor-level A/E - actual vs expected charts for every factor, fitted or not
- Score tests - chi-squared significance for candidate factors before fitting
- Lift charts - Gini, AUC, KS statistics with decile breakdown
- Calibration - Hosmer-Lemeshow test, decile calibration with confidence intervals
- Residual analysis - deviance, Pearson, and working residuals
- VIF & multicollinearity - variance inflation factors with severity coloring
- Model comparison - side-by-side train/test metrics against a base model
- Pre-fit analysis - response distribution, zero inflation, overdispersion detection
- Correlation matrix - numeric correlations and Cramer's V for categoricals
- Interaction detection - greedy residual-based search for potential interactions
- Auto-versioning - every fit is saved as a new version with full spec, coefficients, and diagnostics
- Change tracking - history panel shows terms added, removed, or modified between versions
- Restore - click any version to restore its terms and results, then continue iterating
