So instead I just have squash record the number of successful plays versus the number of skips for each song. That gets turned into a rating and statistics are used to pick the next song based on the ratings' distribution

wont that lead to eating into itself? itll tend to play first what most often played which would make the the next time it plays first what it played last time potentially leaving some music unplayed for huge amounts of time. and the gap would just continue to get bigger.
maybe theres more to it that im not seeing