So, there are two problems.
- Recording impressions (shows)
- How to deal with non-impressions
For (1) you should be recording this information. If it is not currently being recorded you should start recording this information. Given that you do not have this information you want to provide recommendations. Fortunately, with just click data you can still create a utility matrix, see 9.1.1.
You could then use user- or item-based collaborative filtering as described in the paper. This is basically an exercise in populating the utility matrix and trying to find "scores" for unclicked items. Your recommendation would be an unclicked item with the highest score.
For (2) you will still make recommendations on unclicked items. So, that alone is not an issue. You will want to optimize your impressions however. You also cannot have full knowledge where a user can see all possible options. You need to record impressions and understand a number of things.
- show rate of an item
- click rate of an item
- how to incorporate new items
- how to optimize which items to show
This is a huge topic and basically this is the problem domain of online advertising. However, a recommendation engine tries to find items of interest in the long tail, which is a bit different from ad optimization. This is a feedback loop to evaluate your recommendation. A/B tests are common. You will want to test click rates and recommendation errors between your current system and new system.
Also see here and here.