ISPs have to connect to other ISPs. When two ISPs have roughly the same amount of traffic to/from each other it tends to be free peering. When the load is unequal each asserts the other needs them more and should pay. Normally someone wins that argument and money changes hands. Nontrivial money.
Cable companies tend to be very unequal, they have a lot of consumer traffic, and consumer traffic tends to download way more than upload. Cable companies also (tend to) build their infrastructure to support higher download speeds than upload which makes it hard for the numbers to equal out if customers start doing a lot of outbound traffic (like video traffic!).
Truck rolls are expensive. Bandwidth to other ISPs is expensive. Maintenance can be expensive. Tech support isn’t anywhere near the same level of expensive, but it isn’t cheep.
Also I haven’t worked for an ISP for 15+ years, so this info may be a bit dated.
(Edit: s/then/than/)