Start here. This is the direct spoken answer to practice first.
Overview
The choice communicates who owns the value and how changes cross the component boundary.
I use an input when the parent owns a value and the child reads it, and an output when the child reports an event that the parent decides how to handle. A model signal is for a deliberately writable two-way contract, such as a reusable control whose value belongs to the caller but can be changed through the child. I do not use model merely to avoid writing an output because that makes ownership less clear.