I think number of 1 tx blocks should be a) per n blocks solved by entity rather than by time period to reduce variance, and b) be normalised by the size of the tx queue at the time the block was solved.
b) is hard and I haven't figured out a good way to do that yet. I think I should be able to use my mempool, but how do I determine the number of tx in mempool when the block was solved? Just use the local maxima before I got the block notification?
I don't see much point in B. I doubt there has been a time in 2015 where a block has ever been solved with the mempool being *empty* of valid transactions that the pool would not include if it were operating without purposely making empty blocks to make up for poor optimization.
Similarly, I don't see why A would matter much when it's already being expressed as a percentage of their blocks solved. The network is so big at this point that it is virtually impossible for a pool to have an empty memory pool. Pools don't push out block templates every time they see a new transaction, so the only way it could possibly happen is if the pool pushes out a block template including their entire memory pool, and a miner solves the block, sends it back to the pool, the pool verifies it, and broadcasts that block clearing their entire memory pool before a single new transaction arrives. Yes, it could happen, but the likelihood of that event happening enough to actually taint your results seems slim-to-none.