You simply don't have all the information.
My instance is a Swedish one, it's aimed at Swedish users. In the 1st few months of operation I was getting a lot of spam users registering and noticed this was a wide spread issue among instance admins.
So I made the decision to use a basic GeoIP block on the path used to register new accounts, blocking all IPs outside of EU to make the area wide in order to avoid blocking Swedes.
This caused my spam to go down to zero. At the same time I use several ActivityPub relay servers that make my public timeline so active that you can see posts appear every second. I'm quite happy with this solution and consider it a good method to use in general with federation.
I'd much rather see smaller localized communities using AP relaying to stay in touch with each other, than huge monolithic instances that vacuum up all the users.
What I mean when I say that you shouldn't block entire instances from federating just because of a few hateful users is that they're being blocked from the public timeline. Not being blocked from registering.