Test score greater than train score

The accuracy score of the GridSearch pipeline is 0.88
(This is using data test and target test). And

model_grid_search.best_score_ = 0.87 (This is normally in the data_train and target_train)

Is this normal ?

It seems that the title of your post is misleading. There is no train score involved here:

The accuracy score of the GridSearch pipeline is 0.88 (This is using data test and target test).

So 0.88 is the test score of the model with the best parameters found by grid-search and trained on the full training set or the original train-test split, so this is not the train score.

Furthermore model_grid_search.best_score_ = 0.87 is the mean cross-validation score: this is the average of the test scores computed in the internal cross-validation loop. So it’s not a train score either.

Since the final model is trained on a dataset that is slightly larger than the models trained in the internal cross-validation procedure, it can have a slightly better score. But beware that there can be small random variations because the final test set is small.