1. A method comprising: determining a set of item-item affinities between a first item and a first plurality of items; determining a first set of nearest neighbor items from the first plurality of items based in part on the set of item-item affinities; determining a set of user feature-item affinities between a second plurality of items and a set of user features; determining a second set of nearest neighbor items based at least in part on the set of user feature-item affinities; determining affinity weights for a set of candidate items, the set of candidate items to be determined at least in part on the first set of nearest neighbor items and the second set of nearest neighbor items; presenting to a user as a recommendation a candidate item from the set of candidate items, the candidate item to be determined at least in part based on an affinity weight of the candidate item; and, wherein the method is performed by one or more computing devices programmed to be special purpose machines pursuant to program instructions.