The columns have to match
schema_mismatch before anything is uploaded.
A target= naming a column that is not in the frame raises missing_target_column. Features
and labels can also arrive separately, as fit(X, y).
What is read directly
Numbers and categories go in as they are. A numeric column is read as a magnitude, a string column as a set of labels, and no scaling or encoding is asked of you. Missing values are information. Leave them missing — an imputed median tells the model a value was observed when it was not.What is read poorly
Free text and dates are ordinal-encoded. The model sees which rows share a value, not what the value means or how the values order. Asignup_date column tells it which customers signed up on the same day. It does not tell it
which one came first.
The task is inferred from your target
- Non-numeric or boolean target — classification.
- Numeric, every value whole, 20 or fewer distinct values — classification.
- Anything else — regression.
quality in the wine sample is an integer score with a handful of distinct values, so it is
read as classes. You get whole-number labels and an accuracy metric, never a 6.4.
clf.task_ after any fit on
a numeric target.
Columns that encode the answer
A leaking column will be used, and your evaluation will look excellent. Nothing in the model knows that afailure_code is a restatement of the thing you asked about.
The predictive-maintenance sample drops five per-mode failure columns — TWF, HDF, PWF,
OSF, RNF — before it ships, because the target Machine failure is the outcome they
record. It drops the UDI and Product ID identifiers in the same pass.
Cardinality
The target caps at 160 classes. A 161st raisesdataset_too_large in the SDK, before the
upload starts, and there is no automatic fallback — group the rare labels yourself.
- High-cardinality features are allowed. A postcode column with thousands of values is read as thousands of unordered categories.
- They are heavier to read. The engine’s cost estimate weights a text column four times a numeric one.
- Hashes, emails and row ids are the worst case. One category per row, no signal, full price.
Size
One table has to fit inside 1,000,000 training rows, 2,000 columns, 100,000,000 training cells, and 200,000 rows perpredict. Breaching any of them raises dataset_too_large.
The cell budget is what trades rows against columns: 1,000,000 × 100 and 50,000 × 2,000 both
fit. Upload size and daily quotas are in Limits.
Reading the CSV
pd.read_csv is the errors. It
sniffs the delimiter across comma, tab, semicolon and pipe, and decodes UTF-8, UTF-16 and
Windows-1252, byte-order mark included.
malformed_csv naming the line. No cell contents ever appear in the message.
What the reader does not do is infer types. Every column comes back as text, so cast the
numeric ones before you fit, or they are read as categories.
Checklist
- One row per thing predicted, one column holding the label.
- The columns you predict on match the columns you fit on.
- Numeric columns are actually numeric — check the dtypes after any CSV read.
- Dates and free text replaced by numbers wherever ordering or magnitude matters.
clf.task_inspected after fitting a numeric target.- Identifiers, outcome columns and anything else that restates the label removed.
__hollerith_splitdropped, if the table came from a sample CSV.- Missing values left missing.
- Target at 160 classes or fewer; table inside the row, column and cell budget.
Next
- How Hollerith works — why the table is the model
- Classification — labels, probabilities and class order
- Regression — numeric targets and prediction intervals
- Errors —
schema_mismatch,malformed_csv,dataset_too_large - Limits — the full budget table