Encoder Selection
Start with Kumo’s inferred encoders. Override a column only when it needs a specific transformation or feature representation.
First check each column’s semantic type (stype): an integer category needs "categorical", not "numerical".
Kumo selects encoders from semantic types and column statistics, so an explicit constructor can replace a useful inferred configuration.
An override changes the encoding, not the semantic type or the graph’s relationships.
Set column types when preparing Tables, then follow Graphs to connect the tables and create a snapshot.
Apply optional encoder overrides through plan.column_processing before training.
The examples below assume you have created a plan as shown in the Model Plan Guide.
Supported Encoders
Import encoders from kumoapi.encoder and Stype from kumoapi.typing.
ID is uppercase. Compatible encoders for each type are listed above; Null is also available for every type.
Constructor defaults in the tables below describe explicit instances, not the configuration Kumo will infer.
Null() excludes a feature; it does not remove a primary key or foreign key relationship from the graph.
Image encoding is not part of this guide’s supported input types.
Numerical Encoders
The logarithmic encoders compress a long tail on the corresponding side of the distribution.
They do not accept a scaler argument.
The legacy "raise" missing-value setting is retained for compatibility and should not be used in new plans.
Categorical and ID Encoders
Index assigns retained categories their own learned representations.
Hash bounds the number of distinct representations, so different values can share a bucket.
The model architecture’s channel count controls the representation size.
Hash does not accept min_occ or na_strategy="zero".
For a categorical products.brand column, this example caps hashing at 4096 buckets; that count is illustrative, not an inferred or optimal value:
Multicategorical Encoder
Kumo processes each category in the value and combines the results.
The separator is inferred from column statistics; MultiCategorical does not accept a sep argument.
Sequence and Embedding Encoder
Use NumericalList for stype="sequence", including vectors computed outside Kumo.
These scaler choices differ from Numerical: "minmax" and "robust" are not sequence scaler options.
Timestamp Encoder
Datetime extracts calendar features from stype="timestamp" columns.
Text Encoder
Use TextEmbedding for columns with stype="text", such as product descriptions and reviews.
It looks up pretrained vectors for recognized words in each cell and averages them into a feature vector.
Unknown words are ignored; missing cells and cells with no recognized words produce a zero vector.
Text Embedding Models
The default model is GloVe 6B with 50 dimensions. Add its vector package to the Python environment where Kumo Engine runs:
Use the package index configured during environment setup.
That index must provide compatible builds of both Kumo Engine and its optional kumo-glove-6b-50d dependency.
Kumo Engine does not download word vectors during training.
Automatic encoder selection can choose Null() to exclude text columns whose values are too short or contain too few recognized words.
To encode products.description explicitly, merge a text override into your plan before constructing the trainer:
Replace products.description with a text column in your graph.
If training reports a missing embedding model, install its vector package or register it as shown below.
To exclude the column instead, use Null() in its encoder override.
Only columns that use TextEmbedding require word vectors.
Use Another GloVe Model
Use another vector vocabulary when it better matches your text; retain the default when you have no specific alternative to evaluate.
Download and register another GloVe model
Download one of the supported original GloVe release archives from the GloVe project.
Pass the unchanged .zip file to GloVeVectors; it also accepts a directory of previously converted files.
For example, download glove.42B.300d.zip, replace the path below with its local path, and register it as "descriptions":
The registration name is your choice and must match the encoder’s model value.
Installed models, including the default from the text extra, are also available in the store.
An archive is converted on first use into ~/.cache/kumo/embeddings.
Pass a writable cache_dir= to GloVeVectors to use another directory, and keep the model files accessible to training and prediction workers.
Reload a Trained Text Model
A saved model still needs the word vectors used during training. For the default model, keep the text package installed in the prediction environment. For a registered model, recreate the store with the same vectors and pass it when loading:
Replace bundle_dir with your saved model bundle directory.
Kumo matches the vectors by model identity, so the registration name can change but the vectors and tokenization must match.
Custom Word Vectors
Use custom vectors when you already have a vocabulary and embeddings suited to your text. Keep an installed model when you do not need a custom vocabulary or tokenizer.
Implement a custom token embedding model
To register your own word vectors, implement the TokenEmbeddingModel interface in an importable Python module.
The following two vectors only illustrate the protocol; they are not a useful pretrained language model.
Save this as example_vectors.py in your application package, available to every training and prediction worker:
The vocabulary order matches the vector rows. vectors() returns a float32 matrix with shape (vocabulary_size, dim).
For each input cell, tokenize() returns its vocabulary row indices between consecutive rowptr offsets.
Unknown words and null cells contribute no tokens.
For pd.Series(["Red shoe", None, "sock"]), this example returns rowptr=[0, 2, 2, 2] and rows=[0, 1].
Register the importable model and merge the text override into your existing plan:
Use the products.description column from the preceding example or replace it with a text column in your graph.
Keep the module importable after restart; defining the class only in a notebook does not make it available to worker processes.
For large models, load vectors lazily from accessible files instead of storing them all in the pickled object.
The model identity includes its family, dimension, and fingerprint.
Update the fingerprint whenever vectors, vocabulary order, or tokenization behavior changes.
When loading a saved model, supply the same model identity through Trainer.load(bundle_dir, embedding_models=store).
Changing the registration name alone does not change that identity.
Encoder Overrides
Set encoder_overrides to a dictionary of case-sensitive "table.column" names and encoder instances.
Use the table names in your graph, not a warehouse’s fully qualified table path.
Leave it as None to retain inferred encoders.
For a graph containing products.price, products.category, and products.description, with semantic types numerical, categorical, and text respectively:
This scales prices, imputes missing prices with zero, groups rare categories as missing, and excludes descriptions from input features. Assigning this dictionary replaces any earlier encoder overrides. To retain earlier overrides, merge them into the new dictionary.
Transform a Regression Target
Use the special key "train_table.TARGET" to override the generated target encoder.
This controls the value the model learns to predict, rather than an input feature such as products.price.
For a scalar numerical regression target with a long upper tail:
Pass this plan to Trainer before fitting your regression training table.
The transform uses log(x - min + 1), where min comes from the target statistics.
Values below that fitted minimum are clamped to the same transformed value as the minimum, so decoding cannot recover those lower values.
Kumo reverses the target transform when producing regression predictions, so TARGET_PRED is in the original target units. Do not exponentiate it again.
Keep the saved model’s target encoder when reloading. This example does not apply to categorical, list, or forecasting targets, and a logarithmic transform does not guarantee better predictions.
Missing Values
Set plan.column_processing.na_strategy to choose missing-value defaults by semantic type.
Kumo applies each default to compatible inferred feature encoders of that type.
Leave a type out of the dictionary to keep its inferred strategy.
Use encoder_overrides for column-specific exceptions.
Before constructing Trainer(plan), this example sets numerical features to zero imputation while using mean imputation for products.price:
Replace products.price with a numerical column in your graph.
The dictionary merge preserves other encoder overrides; the na_strategy assignment replaces any earlier type-wide defaults.
Choose strategies supported by the semantic type and encoder:
Precedence
A per-column override replaces the inferred encoder, including its missing-value configuration.
The type-wide default does not apply to a column with an explicit override.
If you omit na_strategy from an explicit Numerical() instance, it uses "mean" even when the type-wide numerical default is "zero".
A warm start reuses the source checkpoint’s fitted encoders ahead of both settings. Changing the destination plan’s missing-value defaults or overrides does not replace those fitted encoders. Use a fresh training run to fit different encoders.
Unsupported Strategies
An invalid type/strategy combination, such as "most_frequent" for Stype.numerical, fails model plan validation.
Assignment to the public plan alone does not establish that the combination is valid.
Use the supported values in the encoder tables above.
A strategy can be valid for a semantic type but unsupported by a particular inferred encoder.
For example, Stype.categorical: "zero" works with Index, but an inferred Hash encoder keeps its default strategy and emits a warning naming the column and allowed strategies.
Choose one of those strategies or use a compatible explicit encoder override.
Encoders without a missing-value option, such as Null, are left unchanged without this warning.
Check Your Configuration
Inspect plan.as_json() before passing the plan to Trainer.
Encoder constructors reject unsupported arguments and invalid option values.
During plan validation, Kumo checks that override columns exist and that each encoder supports the column’s semantic type.
If it reports an invalid column name, use the case-sensitive table and column names in the graph.
If it reports an incompatible encoder, correct the semantic type or select a compatible encoder from the table above.
For a missing text model, install the text extra, register the required model, or exclude the affected text column with Null().
When your graph snapshot and plan are ready, follow Training to fit the model. Return to the Model Plan Guide for architecture and optimization settings.