In supervised learning, features are the inputs the model is allowed to use when producing a prediction. Labels are the target answers the training process compares those predictions against. If you blur those two roles together, you lose track of what the system can know at prediction time versus what it is trying to predict.
Suppose you are building a churn model. Recent usage, number of support tickets, subscription age, and region might all be features. Whether the customer churned in the next month might be the label. The model reads the features and tries to produce the label.
A useful builder question is: if I deploy this model tomorrow, which fields are available before the prediction is made? Those are the candidate features. Then ask: which field represents the answer I want the model to learn to predict? That is usually the label.
This distinction sounds simple, but it is one of the most important habits in the whole path. Many later problems, including leakage and bad evaluation, begin with confusing the target for an input or treating post-outcome information as if it were available ahead of time.