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.