One-hot (indicator) encoding
One binary column per level.
- Use: linear models, k-NN, SVM, neural nets; low/moderate cardinality.
- scikit-learn:
OneHotEncoder(handle_unknown=..., min_frequency=..., max_categories=..., drop=..., sparse_output=...). - pandas:
pd.get_dummiesonly for exploration: it does not remember categories, so train and serving columns can differ. - Pitfalls: width explodes with cardinality; perfect collinearity without regularisation (use
drop="first"or"if_binary"); trees split one level at a time (inefficient for many levels).
Ordinal encoding
One integer per level, optionally in a given order.
- Use: ordered categories for any model; nominal categories for tree models at low cardinality.
OrdinalEncoder(categories=[["low", "medium", "high"]], handle_unknown="use_encoded_value", unknown_value=-1, encoded_missing_value=-1).- Pitfalls: for linear models a nominal column encoded as 0..k-1 imposes a fake order and spacing.
LabelEncoderis for targets, not features.
Target encoding family
Replace a level by a statistic of the target for that level.
| Variant | Formula / idea |
|---|---|
| Mean (smoothed) | (Σy + m·prior) / (n + m) |
| M-estimate | same with a fixed m |
| Empirical Bayes ("auto") | shrinkage weight from within-level vs between-level variance (sklearn smooth="auto") |
| James-Stein | shrink toward the prior by a variance-based factor |
| Leave-one-out | exclude the row's own label: still leaks through the row count; avoid |
| Weight of evidence (WoE) | ln(P(level |
| CatBoost ordered | statistics over preceding rows in a random permutation |
- Use: high cardinality with enough rows per level; all model families.
- Must be cross-fitted (see target-encoding-and-leakage.md).
- Multiclass: one encoded column per class (sklearn does this). Regression: mean of y (or median for robustness).
Frequency / count encoding
Replace a level by its count or share in the training data.
- Use: high cardinality where popularity matters (merchant size, product popularity); handles unseen levels (count 0) and needs no target.
- Pitfalls: different levels with the same count become indistinguishable; counts drift as data grows (use shares, or recompute on retrain).
freq = train["merchant"].value_counts(normalize=True)
X["merchant_freq"] = X["merchant"].map(freq).fillna(0.0)Feature hashing
Hash each level into one of N buckets.
- Use: very high or unbounded cardinality, streaming/online learning, many unseen levels.
FeatureHasher(n_features=2**10, input_type="string")(needs a list of lists of strings per row).- Pitfalls: collisions (choose N so collisions are rare for frequent levels); not invertible (hard to explain).
Binary / base-N encoding
Ordinal code written in binary digits (log2(k) columns). Compact but arbitrary; rarely better than target or frequency encoding. Available in category_encoders.
Entity embeddings
Learned dense vectors per level (neural nets), optionally reused as features in GBMs. Useful for very high cardinality with lots of data (users, products). Requires a training pipeline; overkill for most tabular projects.
Hierarchical / prefix encoding
For codes with structure: zip -> zip3 -> state; NAICS 6 -> 4 -> 2 digits; ICD-10 code -> category -> chapter. Encode each level of the hierarchy (one-hot for coarse, target for fine) so rare fine levels borrow strength from their parent.
Missing values as a level
For one-hot and target encoding, replace missing with an explicit "missing" level before encoding (or
let the encoder handle NaN: OneHotEncoder treats NaN as a category since 1.0; TargetEncoder treats it
as its own category). GBMs handle missing natively.
Quick reference: scikit-learn parameters
| Encoder | Key parameters |
|---|---|
OneHotEncoder | handle_unknown ("error", "ignore", "infrequent_if_exist", "warn" in 1.6+), min_frequency, max_categories, drop, sparse_output |
OrdinalEncoder | categories, handle_unknown="use_encoded_value", unknown_value, encoded_missing_value, min_frequency, max_categories |
TargetEncoder | target_type ("auto", "binary", "multiclass", "continuous"), smooth ("auto" or float), cv (int or splitter) |
FeatureHasher | n_features, input_type ("dict", "pair", "string"), alternate_sign |
anomaly-detection-model-builder
Build and evaluate anomaly detection for tabular, sensor and transaction data with few or no labels: define the anomaly type (point, contextual, collective), choose detectors (robust z-score/MAD and IQR rules, Mahalanobis with robust covariance, k-NN distance, LOF, Isolation Forest, one-class SVM, PCA reconstruction / autoencoders, forecasting residuals for time series), combine them by rank, explain each alert by its deviating features, set thresholds from an alert budget or the score distribution, and evaluate with precision@k, PR-AUC and recall on known incidents, or detector agreement when no labels exist. Includes pure-Python detectors (robust z, Mahalanobis, kNN, Isolation Forest, ensemble) and an evaluation script.
catboost-model-builder
Build CatBoost models that use its strengths correctly: raw categorical columns as cat_features (ordered target statistics, no manual encoding), text_features, Pool construction with NaN-safe categories, ordered boosting and has_time for temporal data, symmetric (oblivious) trees, overfitting detector with eval_set and use_best_model, losses for classification, regression (Quantile, Poisson, Tweedie) and ranking (YetiRank), class weights, monotone constraints, feature importance (PredictionValuesChange, LossFunctionChange) and SHAP values, GPU training and model export. Plans cat/text/numeric columns from a CSV and generates a runnable training script, and checks parameter sets for the conflicts CatBoost rejects (iterations vs n_estimators, Bayesian bootstrap with subsample, multiple class-weight options, depth > 16, use_best_model without eval_set).
classification-model-selector
Choose the right classification algorithm for tabular, text or mixed data and prove the choice with a fair bake-off: logistic regression (L2, L1, elastic net), linear SVM, naive Bayes, k-NN, RBF SVM, decision trees, random forest, extra trees, HistGradientBoosting, LightGBM, XGBoost, CatBoost, explainable boosting machines (EBM/GAM), points scorecards and MLPs, matched to data size, width, categorical and high-cardinality share, missingness, class imbalance, text, and constraints such as interpretability, monotonic constraints, calibrated probabilities, latency budgets and tiny deployable models. Ranks candidates with starting hyperparameters and cautions, then generates a bake-off script running every candidate on identical CV folds with per-fold metrics, fit time and prediction latency.
clustering-algorithm-selector
Choose the right clustering algorithm and check that clustering makes sense at all: cluster tendency (Hopkins statistic with a correlated-features caveat, nearest-neighbour isolation), then k-means / MiniBatchKMeans, Gaussian mixtures with BIC, agglomerative (Ward, average, complete, single) with dendrograms, DBSCAN, HDBSCAN, OPTICS, spectral clustering, BIRCH, mean shift, k-prototypes and k-modes for mixed or categorical data, and Gower distance, matched to data size, expected shapes, noise, varying density, known k, soft memberships, hierarchy and streaming. Covers preprocessing (scaling, encoding, dimensionality, distance metrics), validation (internal indices, bootstrap stability, external labels, business profiling) and assigning new points.
collaborative-filtering-implementer
Implement collaborative filtering recommenders that beat popularity: item-based kNN with cosine, Jaccard or asymmetric similarity, shrinkage, neighbourhood size, positive-only or mean-centred rating signals and 'because you liked X' explanations; implicit ALS with confidence weighting, BPR pairwise ranking and the closed-form EASE model in plain NumPy, tuned on a temporal validation split by recall@k and NDCG@k and refit on all data; plus user-kNN, explicit matrix factorisation, the implicit/LightFM libraries, hyperparameter ranges, cold-start fallbacks, scaling with sparse matrices and approximate nearest neighbours. Produces top-k lists in the format of the recommendation evaluator.
counterfactual-explanation-generator
Generate counterfactual explanations and algorithmic recourse: the smallest realistic change to a row's features that changes the model's decision. Solves exact minimal-cost recourse for linear and logistic models (MAD-scaled L1 cost, immutable features, increase/decrease directions, bounds, integer and binary features, diverse alternatives, features every counterfactual must change, and a no-recourse finding when immutable features decide), generates DiCE counterfactuals for any scikit-learn model with constraints turned into permitted ranges and every result re-predicted, and validates counterfactuals from any method for constraint violations, implausible values, off-manifold rows, broken derived-feature relations and failure to flip the prediction.