Well, private spend keys are 64 character hex strings, see here:
https://moneroaddress.org
That will give you around 1e77 possible private keys. If n is the number of possible private keys, and you only generated two private spend keys, the odds they would be the same is:
1 - (n-1)/n
Which Python tells me is 0.0 due to floating point arithmetic.
In order to estimate how many keys you would need to generate to produce a collision you can just take the square root of n, which is about 3e38, which is a lot of keys.
See this page for more info:
https://stackoverflow.com/questions/22029012/probability-of-64bit-hash-code-collisions
Bitcoin uses the same 64 character hex string for private keys, so I think it should be the same.
Disclaimer: I'm no mathologist.