My nearly stock Postfix setup with a few basic anti-spam settings, rejects about 80% of spam. Then stock SpamAssassin config (with a nightly sa-update cron job) gets accuracy somewhere into the 90s. The SpamAssassin Bayes plugin takes it to very close to 100% (maybe 2 or 3 Spams per year).
The best part is that I'm in control -- when someone continues to send annoying email even after being asked to stop (like our daughter's old childcare provider), I can add a Postfix rule to reject their mail at SMTP time and enjoy knowing that for every email they send, they'll get a Non-delivery report from their SMTP server complete with a personal message from me.
Another example: an acquaintance liked to send mass mailers to everyone in his address book of the quality on par with most people's facebook/twitter status updates, followed by a barrage of useless replies from people I don't know. After realizing I never want to see those kinds of messages from anyone, I added a regex to Postfix header_checks to reject messages with more that 15 @ symbols in To: or Cc:.
Another benefit of self hosting is unlimited temporary email aliases (e.g. temp123@example.com). Many places don't accept the standard myemail+temp123@example.com sub-address that gmail supports (and a spammer can easily identify), and it's nice to be able to tell when companies abuse my email.