Rand() returns random values. Sometimes a value will occur more often than other times. That means the number of unique values will be different every time you reload. The number of unique values in a field determines how well that field can be compressed. A good randomizer will create nearly only unique values, so compression will be very low. See this blog post: Symbol Tables and Bit-Stuffed Pointers
Also, chart objects and background images are not loaded with a binary load. That may explain more of the size difference.