Raw features are often not linearly separable. Feature engineering creates new axes — polynomial terms, logs, or interaction products — that can turn a tangled 2D scatter into a scene where a simple decision boundary (here, a flat plane) separates the two classes cleanly. The z-height of every point is literally the engineered feature value.
score(x,y) = w0 + w1*x + w2*y + w3*f(x,y)
poly: f = x² + y² log: f = ln(1+x²+y²)
interaction: f = x*y accuracy ≈ P(sign(score) = class)
- Transform buttons — switch which engineered feature is added as height/color, morphing the point cloud.
- Noise — adds label noise, making the classes overlap and separability drop.
- Point count — changes how many instanced points are drawn.
- Boundary toggle — shows/hides the fitted decision-boundary plane.
In practice, adding polynomial or interaction features before fitting a linear/logistic model is a cheap way to capture non-linear relationships without switching to a more complex model.