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, at least 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, wherein the set of candidate items is determined based, at least in part, on the first set of nearest neighbor items and the second set of nearest neighbor items; causing to be presented, to a user as a recommendation, a candidate item from the set of candidate items, wherein the candidate item is determined based, at least in part, on an affinity weight of the candidate item; and, wherein the method is performed by one or more computing devices.