Here's how our Shopify recommendations app decides which products to display. You get to configure how many products are shown, and then we fill each of those products slots as described here.
Product Page
Here's how we pick recommendations for a product:
If you've set up are any manual recommendations for this product we'll show them first.
Next we show the similar items that our recommendation engine calculated, based on the purchase history on the store - but if there aren't enough orders containing this product, or if we haven't found any good correlations yet, we may not have any good similar items...
If we're on a collection-specific page, we'll fill any remaining spaces with the most popular items from that collection. Or if we're not on a collection-specific page, we'll use items that have the most collections in common with this product, ranking them in popularity order.
If there are still slots to fill we'll fall back simply to the most popular items on the store.
As you get more orders through your store, the similarity calculations will get better and we'll show more recommendations calculated in step 2.
At all stages, if you're using Shopify inventory control we will skip over any items that are out of stock. We also don't recommend items if they don't have an image.
Cart page
We look for products that have the highest similarity score (again calculated by our recommendation engine, based on purchase history) when summed across all the items in the basket. A manual recommendation counts as a high similarity score, so if you have manual recommendations set up for any of those items, they are likely to appear in the recommended products.
If we don't have enough items we'll fall back to the most popular items on the store, making sure we don't recommend any items that are already in the basket.
If you see any recommendations that don't look "right" on your store please let us know and we'll be happy to investigate.
You can also specify a collection of items that you never want to appear as recommendations.