A raw column is a fact. A feature is a fact phrased so the model can hear it. Transform a skewed column, multiply two innocent ones, and unpack a timestamp, with a real least-squares fit rerunning on every move to tell you whether the data agrees.
Sign in to save progress
The model can only use what you spell out
A linear model is deliberately simple: it can only add up straight line effects of the columns it is given. Feature engineering is the craft of rewriting the columns so the truth becomes expressible: bend a skewed scale, multiply two columns whose product carries the price, split a timestamp into the rhythms hiding inside it. Two neighboring moves have their own guides: turning categories into numbers is covered in categorical encoding, and putting columns on comparable scales is covered in feature scaling. This guide owns the rest: transforms, bins, interactions, and extraction.
How this playground stays honest: the 120 ad-spend days (seed 20260716), the 90 deliveries (seed 20260717), and the 336 hourly pickup counts (seed 20260718) are generated once with a seeded generator. Every RMSE, R squared, coefficient, and percentage on this page comes from an exact least-squares solve of the normal equations, rerun in your browser on every toggle. Nothing is precomputed.
A growth team logs daily ad spend and daily signups. Spend buys less and less as it grows, so a straight line in raw dollars misses at both ends. Hand the model a reshaped version of the same column and watch the error respond. At least one popular move makes things worse here; find it.
Daily ad spend vs signups: 120 days
fit on xThe model is always the same: an intercept plus one coefficient on one feature, refit from scratch on every click. Only the feature changes. The column as it arrived. A straight line through a curved world.
Feed the model a different feature
Fit error (RMSE)
6.25
signups off, on average
R squared
0.804
2 fitted parameters
Fit error by feature (lower is better)
Bars fill in as you try each feature. The lesson is not that log always wins. It is that the data decides: this world has diminishing returns, so compressing big spends helps and squaring them hurts. Craft means checking, not memorizing a favorite move.
A courier invoices 90 deliveries. Distance matters, weight matters, but part of the price is per km-kg: the two columns act together. Fit distance and weight alone, then add their product as a third feature and watch the residuals collapse toward the diagonal.
Predicted vs actual invoice, 90 deliveries
The dashed diagonal is a perfect prediction. Without the interaction column the additive model overshoots cheap short-and-light runs and undershoots long-and-heavy ones, because no sum of two straight-line effects can express a price that multiplies.
The feature the raw table does not have
Coefficients refit live on the 90 deliveries every time you toggle the column.
Additive model RMSE
$5.61
distance + weight only
With interaction
?
add the column to find out
The courier really does charge partly per km-kg, so the truth lives in a column the raw table never shipped. No coefficient on distance alone or weight alone can bend a plane into that surface. Feature engineering here is not decoration: the model class stays linear, and the new column is what lets a linear model tell the truth.
A bike-share system records one number per hour: pickups, keyed by a timestamp. To a linear model the raw timestamp is almost meaningless, yet the weekday commute peaks and the lazy weekend hump are sitting right inside it. Extract features until you cut the prediction error by at least 30 percent.
Hourly bike pickups, two weeks (336 hours)
The baseline model sees only hours-since-start, so its best move is a nearly flat line through the average. Every feature you extract below is information that was already inside the timestamp, waiting to be spelled out.
Expand the timestamp
Watch the weekday-as-a-number column: it barely moves the error once the weekend flag is in, because demand does not rise or fall steadily from Monday to Sunday. Extraction is a craft call too, and the fit, not the feature name, is the judge.
Raw timestamp RMSE
12.60
model: intercept + t
Your model RMSE
12.60
2 columns
Predictive gain vs raw timestamp
0.0%
goal: cut the error by at least 30%
R squared moves from 0.015 to 0.015 with the current feature set. Same rows, same target, same linear model. The only thing that changed is how much of the timestamp you let the model read.