Features are the questions you decide to ask about each row.
The model can only use what you hand it.
If you never recorded the neighbourhood, it cannot learn that neighbourhood matters.
Choosing features is a judgement call, not a calculation.
Two features that say the same thing add cost and no information.
A feature that is nearly always the same value tells the model nothing.
Numbers on very different scales confuse some models badly.
Salary in the thousands sitting next to age in the tens is the usual example.
Text and categories have to become numbers before most models will accept them.
Some models care deeply about feature quality, and some barely notice.
Trees cope well with raw messy features, while distance-based models do not.
Adding features is not free, since each one is another way to overfit.
A useful habit is to ask what a human expert would look at.
Then check whether that information is actually present in your data.
Very often it is not, and that absence is the real finding.