Everything a model sees is numbers
The step nobody writes about
Every course starts at "the model learns from data". It skips the step before, which is the one that decides how well anything afterwards can possibly work. A neural network cannot see a photograph, a Tuesday, or the word shukriya. It sees a list of numbers, and somebody chose that list.
That choice is called the representation, and it is not neutral. If you throw information away here, no amount of training recovers it.
Four things, and how they become numbers
A photograph. A 224×224 colour image is a grid of 224 rows, 224 columns and 3 colour channels. That is 224 × 224 × 3 = 150,528 numbers, each usually between 0 and 255 before scaling. The famous MNIST digit images are 28 × 28 greyscale, so 784 numbers each. When you read that a vision model "takes 224×224 input", that is the whole content of the claim: it eats a list of 150,528 numbers.
A word. Text is split into tokens, each token has an integer id, and each id indexes a row of a big lookup table. In a model with a 50,000-token vocabulary and 768-dimensional embeddings, that table is 50,000 × 768 = 38.4 million numbers. The word itself has vanished by the time the first layer runs. What remains is row number 8,417, whatever that row contains.
A category. Suppose a column holds north, south, east, west. The obvious move is to write 1, 2, 3, 4. This is almost always wrong, because it tells the model that west is four times north and that south sits between north and east. The standard fix is one-hot encoding: four columns, exactly one of them 1. Alternatively you learn an embedding, which is what a model does with words.
The same trap catches postcodes, phone area codes, and customer ids. A pincode of 400001 is a name written with digits, not a quantity. Feeding it as a number invites the model to conclude that 400001 and 400002 are nearly identical, which is true of Mumbai's Fort and Ballard Estate but false of the boundary between two states.
A time. Hours run 0 to 23, and then wrap. Encode the hour as a plain number and the model believes 23:00 and 00:00 are as far apart as two numbers can be within a day. The usual repair is two columns, sin(2π·hour/24) and cos(2π·hour/24), which places the hours on a circle so that 23 and 0 sit next to each other. It is a small trick and it routinely improves a demand-forecasting model more than a bigger network does.
Scaling, and why it is not cosmetic
Put two columns side by side: annual income in rupees, ranging over hundreds of thousands, and number of children, ranging 0 to 5. Any method based on distance — nearest neighbours, k-means, anything with a gradient — is now driven almost entirely by income, because a difference of ₹50,000 dwarfs a difference of 2 children numerically. The maths has no idea these are different units.
Two standard repairs:
- Min-max scaling maps each column onto 0 to 1:
(x − min) / (max − min). Simple, and badly damaged by a single outlier. - Standardisation subtracts the mean and divides by the standard deviation, so each column has mean 0 and spread 1. This is the default in most pipelines and the one to reach for first.
Both are computed on the training data and then applied unchanged to test data. Computing them over the whole dataset first is a genuine leak: your test numbers have quietly informed the scaling.
What you have already decided
By the time the first matrix multiplication happens, you have committed to several claims without stating them: that these columns matter and others do not, that this ordering is meaningful and that one is not, that a missing value should be filled with the median rather than flagged as missing. Each is a modelling decision made in the data-loading code, usually by whoever wrote it in a hurry.
The honest limitation is this: representation errors are invisible in the loss curve. A model fed pincodes as quantities will train perfectly happily, converge, and produce a respectable-looking number. It has learned a real pattern in a fictional space. Nothing in the training process can tell you that the space was fictional, because the training process only ever saw the numbers.
The free path
You do not need anything paid to do any of this. pandas and NumPy handle loading and scaling; scikit-learn has StandardScaler, MinMaxScaler and OneHotEncoder; all three are free and run on a laptop with no GPU. If you have no Python at all, GNU Octave does the array arithmetic and Google Colab gives you a free browser notebook. The maths in this course never needs hardware you have to buy.
The one thing to keep
A model never sees your data, only the numbers you chose to represent it with, and information discarded in that step cannot be recovered by any amount of model capacity.
Before you move on
A team encodes a six-digit Indian pincode as a single numeric column and trains a delivery-time model. The model trains cleanly and reports a good validation score. What has most likely gone wrong?
Pick the one you would defend. Nobody sees your answer.