Disclaimer: I am not a native speaker either.
The first thing that came to my mind is you hear some times in the news that some automaker needs to recall some vehicles because of some issues. But usually, they only recall cars based on some criteria. So not all cars with the problem are "recalled". To rephrase, while some of those with the issues (true ...
Not every seed is the same.
Here is a definitive function that sets ALL of your seeds and you can expect complete reproducibility:
os.environ['PYTHONHASHSEED'] = str(seed)
A 1/3 - 2/3 repartition is not that unbalanced. Your problem shouldn't require balancing.
The train/test set partition seems to be done correctly, as it seems implied by checking data histograms. Doing that randomly is usually ok, and when it's not it will inflate your test performance with data leakage, which doesn't seems to be the case here.
Imo the ...
You are correct, such a difference between training and test implies that the model is overfitting.
Here are some best practices to improve the process:
1. Accuracy is not a great metric for imbalanced classes and I would recommend moving to f1-score.
2. Balance the training set by over-sampling the minority class or under-sampling the majority class.
Features maybe good enough but obviously you have covariate shift, or some similiar distrubancd. In other words distribution of your train and test features is different and that confuses your model, in other words it doesnt learn to differentiate on train dataset.