Before evaluating the model, evaluate the data, since the data caps everything.
No architecture recovers from labels that are wrong.
Label noise is the first thing to look for and the most commonly ignored.
Have two people label the same hundred rows and see how often they agree.
If humans agree only 80 per cent of the time, no model will exceed that by much.
Duplicates are the second thing, and the dangerous ones straddle the train and test split.
A row appearing in both means the model is scored on something it memorised.
That single mistake produces impossible-looking results more often than any other.
Check near-duplicates too, since a reworded sentence is effectively the same row.
Look at the class balance and at how missing values are distributed.
Ask whether the data represents the population you will actually serve.
A model trained on one region's customers will not transfer quietly to another.
Look at the collection date, since old data describes a world that has moved on.
Read a hundred rows by hand, because problems are visible and rarely caught by script.
Time spent here beats time spent tuning by a wide margin.