I agree with MM's ideas. In addition, when you 'shout to' a person, you probably want and/or expect some sort of response. When you 'shout at' a person, you may not actually be interested in, want or expect a response. You might 'shout at someone' simply because you're angry. In addition, 'shout to someone' suggests that the other person is not close.