As mentioned, the villager who chooses to move is randomly selected 15 days after the last open plot. The percentages are based on friendship level. A villager with lower friendship is more likely to ask to leave based on percentage distribution, but the selection is still random. There are some exceptions. A villager won't ask to move if they are your newest villager, if their birthday is within 7 days, or if you are moving their house. Villagers also won't ask to leave on event days or days when KK is in town (at least they don't ask on Saturdays, not sure what happens when KK gets bumped to Sunday).
If no one has the move out thought bubble after 15 days, the villager who wants to move might be inside their house, so you can try to reset the game to get them to respawn outside. If it's not the villager you want to leave, you can reset the game before finishing the conversation and wait until the next day. Sometimes the move out thought bubble will transfer to another villager the next day. If you tell a villager to stay, it's 5 days until another move out thought bubble appears.
Ways to increase friendship
- talking to them daily
- giving them gifts
- completing request
- catching their fleas
Ways to decrease friendship
- hitting them with a net three times
- pushing them until they get upset
- gifting them trash
No effect
- letters
- pitfalls
- ignoring
If you don't want to be mean to them, the best way to increase the odds in your favor is to talk to the villagers you want to keep and ignore the villagers you don't want to keep. However, if the villagers you want to leave are already at a high level of friendship, your options would be to try to lower the friendship or just wait it out.
This link breaks down all the percentages if you can figure out what friendship level you are at with each villager:
https://yuexr.github.io/villager-moveout-calculator/
(this is all based on information that has been data mined and could change in future updates)