The page cache is cleared on cron every time if the minimum cache lifetime is set at the default of none. If the minimum cache lifetime is set, cron deletes all cache entries no more than once per the minimum cache lifetime setting.
Inside of drupal_page_set_cache() you can see that
'expire' => CACHE_TEMPORARY,.
With the core database cache, it ignores the minimum cache lifetime on clears. When you look at the code in DrupalDatabaseCache::clear; there is zero code in there that has to do with when the cache was created; thus the minimum cache lifetime is not enforced. Inside of system_cron one of the caches that gets cleared is cache_page.
If you wish to change this you can change how often system_cron runs; elysia cron is a good way to do this. But be aware that any node save from the GUI will also clear the page cache as well; see node_form_submit, at the bottom it will clear the page cache. Same is true for any comments saved, see comment_form_submit().
The best solution is to change how the page cache works. Have it respect the minimum cache lifetime. There are 2 modules that enforce this:
https://www.drupal.org/project/apdqc Asynchronous Prefetch Database Query Cache
https://www.drupal.org/project/adbc Alternative Database Cache
ADBC was created to make the minimum cache lifetime more useable & is database agnostic. APDQC has all of ADBC in it but it also gets rid of deadlock and metadata lock issues when using MySQL as well as speeding up cache get and set calls; only works with MySQL. If you're using MySQL I would recommend using APDQC; if you're using a different database then ADBC is the way to go.
Once the minimum is enforced you do need a way to update that cached page if it was actually updated. The Cache Expiration module can do this for you.
D7 issue: https://www.drupal.org/node/891600