To add upon user208574’s answer regarding ring colors: By toying with GamePress’s catch calculator or just by catching a lot of common Pokémon, you can get a feel for how often common Pokémon escape from certain throws. GamePress writes:
According to u/paanvaannd's extensive research, Ditto most often disguises as:
Ditto has a Base Capture Rate (BCR) of 16%, among the lowest in-game for an unevolved Pokemon. In comparison, the common Pokemon it disguises as all have BCR of 40% or 56%. This means Ditto is 3-4 times harder to catch. If you throw an excellent curved Ultra Ball and that Pidgey still breaks out, it might be a Ditto (or knowing your luck, it might not).
Baserate neglect is a common human bias, so due to the low Ditto baserate you’ll still be disappointed a lot, but for me it means that when a Pidgey escapes from my Razz Berry–augmented curved great Poké Ball (and I’m lucky enough that it doesn’t flee), I’ll switch to Razz-Berried Ultra Balls just in case.