The difference between hash-code and checksum functions is, they are being designed for different purposes.
A checksum is used to find out if something in the input has changed.
A hash-code is used to find out if something in the input has changed and to have as much "distance" between individual hash-code values as possible.
Also, there might be further requirements for a hash-function, in opposition to this rule, like the ability to form trees/clusters/buckets of hash-code values early.
And if you add some shared initial randomization, you get to the concept for modern encryption/key-exchanges.
About Probability:
For example, lets assume that the input data actually always changes (100% of the time). And lets assume you have a "perfect" hash/checksum function, that generates a 1-bit hash/checksum value. Therefore, you will get different hash/checksum values, 50% of the time, for random input-data.
If exactly 1 bit in your random input data has changed, you will be able to detect that 100% of the time, no matter how large the input data is.
If 2 bits in your random input data have changed, your probability of detecting "a change" is divided by 2, because both changes could neutralize each other, and no hash/checksum function would detect that 2 bits are actually different in the input data.
...
This means, If the number of bits in your input data is multiple times larger than the number of bits in your hash/checksum value, your probability of actually getting different hash/checksum values, for different input values, gets reduced and is not a constant.