A good chunk of our purges (actually, about half of them) are related to a page history (action=history). This happens because we call Title::getCdnUrls in HtmlCacheUpdater:
That function simply adds action=history to the urls to purge, unconditionally
this means that we send a purge request for the page history even for linked page purges, not just for direct edits, unless I'm missing some detail. Inspection of the PURGE requests arriving on varnish seem to confirm my hypothesis.
Now, when a page's cache gets invalidated because of a change in a linked page, the page's own history doesn't change, and thus we send a purge for no good reason.
We might be able to reduce the purge rate at the edge by ~ 40% if we stop sending purges for linked pages, and also improve the cache hit rate for the history pages..