Perhaps it is due to this explanation, which suggests that during testing bad blocks are flagged, and effectively removed from the usable storage of the device: https://superuser.com/a/1848067. Probably manufacturers have to cull less inventory if they accept more defective pages per device.
It seems like dropping below the advertised capacity should be forbidden, but most likely there is some super vague disclaimer on the package like “actual usable capacity may vary.”
I suspect you are right. It is probably some type of yield issue. It seems like there should be some reasonable variance though. A capacity loss of nearly 3% seems really unacceptable to me.