# Taking Neural Network's false positives as the recommendation system result?

I am creating a recommendation system and considering two parallel ways of formalizing the problem. One classical, using proximity (recommend the product to the customer if a majority vote of 2k+1 customers closest by has the product), and another one that I have trouble understanding but seems valid to some extent.

The approach I'm thinking about is:

1) Fit a highly regularized neural network (to make sure it doesn't overfit the training set) for a classification task that can predict if the person does or doesn't have given product

2) Make sure test accuracy is as close to train accuracy as possible

3) Take false positives (customers who don't have the product originally but the NN predicted that they have it) predicted on the whole dataset (the training set as well) as the result - the people I should recommend the product to

Now, I am aware of why in general one wouldn't want to take that approach but I also can't exactly explain why it wouldn't return people 'close by' to each other that 'should' have given product in a similar sense like the KNN-based approach. I'm not sure how to analyse this problem exactly to validate, modify or reject the idea altogether.

• Can you clarify what your data looks like? Do you have a complete or only partial list of which customers own which products? – Imran Aug 29 '18 at 20:01
• I have a complete list of products owned by all customers and a few information about each customer. What's not certain is if they chose not to own the product or did they never consider owning it. So a 0 is really all the other cases besides the case when someone decided to buy a product which then shows up as a 1. I hope that explains what you were after with your question. – m3h0w Aug 30 '18 at 11:21

1) Is regression, not classification.

Since the task is regression, all leafs of the decision tree will have the label 0 (if the decision path leads to the statement that the customer doesn't have the product) or the label 1 if the decision path leads to the statement that the customer has the product.

When building the decision tree, we start at the root where we have to decide which attribute we will use as the first node from where all the customers will take the corresponding branch depending on their value of the chosen attribute. This attribute is choosen by using entropy to calculate the attribute with the highest information-gain value. This simply means that we choose the attribute, that divides the customers into sets where each set has ideally the same amount of customers with 0 and 1.

This is repeated for each new node that branch from the parent node as long as there is an attribute left with information-gain above a threshold value or when the tree becomes to deep (since it is NP-complete). Now we count at each leaf the amount of zeros and ones and label the leaf as max(0,1). The conclusion of this: if a customer landed at a 1-leaf although he was 0 means, the highest information-gain attributes have the same values for this customer as they much more often do for customers who are 1.

I'll try to explain the intuition behind these two approaches. The customer similarity is usually based on an interaction (e.g., viewing, buying) with a product. Then on can use each interaction as a feature leading to claims like $P(Harry Potter 2| Harry Potter 1)$ is high. The use of customer helps us avoid explicitly referring to product or even working directly in this space.

As for the second approach I see it as based on the assumption that $P(Like|Own)$ is high. It sounds reasonable and is you have the proper data, you will be able to ground it with numbers. So, you have a model that classifies for ownership and that is a proxy for liking/purchasing an item.

Both intuitions are good but devil hides in the detail. What customer similarly measure is proper for your data? How to cope with the sparsity of ownership. That is before that human nature to like more that we own...

I think that you should break your work into small steps and get supporting evidence for you direction as you go. This way you will be able to develop that intuitions into a working system.

• Thanks for the answer. I'm not sure I understand how you're avoiding referring to the product in the first case. For the second approach, I'm completely comfortable with the assumption of using Own as a proxy for Like but what I can't wrap my head around is how would I ever tune a model when I actually want it to make errors. So an accuracy of 100% would not produce any false positives in this case which are really what I'm after. So how would I measure quality of my results in the model training phase. – m3h0w Aug 30 '18 at 11:22
• For the customer similarity you avoid referring the products directly. You can say that Alice and Bob has similar taste since they like the same products. That will stay true if the like Harry Potter's books, James Bond's moves or classical music. – DaL Aug 30 '18 at 12:41
• As for the Own vs. Like, I suggest that you will build a model for own and aim for high accuracy. Once you have such a model, you can use it as a building block that takes into account other factors that influence whether the item will be liked. Using the own model directly for like will probably give some benefit but not all possible one. I read in the remark that you have only data about owning items, not liking them. Do you have some auxiliary data (about items or customers) than can help moving from own to like? – DaL Aug 30 '18 at 12:46
• Another direction: If your goal is selling, own might be a better target than like. Let say there is an expensive item that people like but don't own. The price will be problematic in the purchase too and if you consider owning, it is already taken into account. – DaL Aug 30 '18 at 12:48
• I feel like we're missing each other's points. You're saying that I should aim for high accuracy but then I'm really also trying to remove all False Positives, which in turn gives me no results. There's also the issue of training vs testing, where I want to predict on the same people that I train the model on. – m3h0w Sep 6 '18 at 7:25