What are the factors affecting the rate of orphan blocks?
The one I can think of is network latency, the higher it is, the higher the rate of orphan blocks. Any other suggestions?
Orphan rate is primarily influenced by latency but by any source of latency, not just network latency.
There are many sources of latency:
Network latency and serialization delay (transmission time) to communicate a block between nodes. The transmission time can be influenced by how predictable the content of the block is due to the use of efficient transmission techniques like BIP152 and FIBRE.
Disk and processing time to validate a block.
Time to select transactions and produce a block template.
Polling interval and/or notification delays to downstream pool software after a new block has been accepted.
Queuing and buffering in pool software.
Network latency between miners and the pool.
Queuing and buffering in mining hardware.
etc.
Orphans can also be created by miners strategically ignoring third party blocks or accidentally or intentionally delaying their own block transmission. See also: selfish mining.
It's worth keeping in mind that since 2017 or so speedups in block relay mean that orphans are no longer especially well propagated in the network. Any single node will only ever see a small subset of the total orphans that exist.
According to Blockchain.info, here is what orphaned blocks are:
Detached or Orphaned blocks are valid blocks which are not part of the main chain. They can occur naturally when two miners produce blocks at similar times or they can be caused by an attacker (with enough hashing power) attempting to reverse transactions.
Thus, even something like lag time, which is not even that much, won't really affect the rate of orphaned blocks. Any time a miner completes a block within minutes or seconds of another miner, one block will be orphaned.