The first three checks are hard rules in the generator: matchups are balanced and home and away are split before any game gets a date. The rest are scored. Every candidate slot for a game gets a number based on how it affects both teams' counts, and the best one wins. When the season is generated you get a balance report per team, so the answer to "why did we get this" is on screen before the question arrives.
If you would rather build it yourself, the step by step guide covers the same checks in the order to do them.