# Cross-class Recommendations Engine for Furniture Product ## Abstract The main objective of our recommender systems in a furniture company is to narrow down vast catalogue to assist customers in finding exactly the products they want. Most recommendation algorithms (Collaborative filtering and Content-based filtering) that are used in ecommerce companies leverage customer’s browsing history, which includes various types of interactions with products, such as clicks, add-to-cart actions, rating and orders. But the uncertainty, diversity, and timeliness of each customer’s profile, as well as the absence of new customers’ history, makes it challenging for such algorithms to be robust to all customers. Moreover, models based on customer interactions are often biased and have a strong trend to recommend low-price and popular items. This is called cold start problem for new products. In furniture industry, these alogrimth might not be ideal since there are 3 main difficulty: - Customer tend to purchase expensive furniture in tradditional mortal and brick showroom rather than on online store. So it is very hard to collect and track customer features (age, interest, demographics, .etc) without the help of tracking engine like Google Analytics, Facebook Pixels - Furniture is slow moving stock, customer only purchase on rare occassion (new home, home reinnovation, moving to new apartment, .etc) so browsing and transaction history is not available enough to build a recommendation system even for big companies - Customer are paying interior consultant to help them pick the most compatible furniture sets, not the most popular one. ![](https://i.imgur.com/ZwyL6pz.png) In my project, I will try to implement newest method for aiding customers in their search for complementary items: the Visual Complements model (ViCs). Rather than depending on customer input, this model leverages an image-based model (CNN) to understand compatibility from product imagery, thereby mimicking the way professional interior designers match pieces of furniture together and eliminating the cold start problem in the process. ## Milestones ### Crawling Data - Crawling data from houzz/wayfair/ikea for individual furniture pieces image and there features - Crawling from domestic furniture suppliers like: tiki, nhaxinh, aconcept, boconcept, baya, jysk, .etc for furniture that will be recommend to users for purchasing - Crawling pinterest, houzz for design of room that are used for product recommendation. We assume that room ideas that appear on these page are designed by professional interior designers. ### Object Detection - Using product image with white background to train yolo model for object detection --> No bounding box need since the image is the bounding box ifself (hopefully this will work) - Pass all image from design of room album through object detection model and detect the product appear in the image. Expected final dataset ![](https://i.imgur.com/4pIqXFM.jpg) ### Embedding Product Image - Train DNN model with transfer learning to detect features of furniture and then take the 2nd last layer as feature vector. ### Recommendation System - From the object detection operation that is performed over our album of room ideas, we get a dataset of furniture that is matched together. - Hit ratio at n (HR@n) will be used as a metric for evaluate matching between pair for furniture. A “hit” is recorded if one of Pair’s top-n recommendations matches interior designs. HR@n can be defined as the number of recommendations with a correct top-n match divided by the total number of recommendations made. Hit ratio close to 1 means Pair recommendations agree well with those of our interior designs, and 0 means poor agreement. ![](https://i.imgur.com/940bf7D.png) - Two-tower model: a neural network with two sub-models that learn representations for queries and candidates separately. The score of a given query-candidate pair is simply the dot product of the outputs of these two towers. ![](https://i.imgur.com/lnmB2SG.png) ### Deploy on Streamlit/Web App - Deploy model through streamlit or flask (depends) ### Optional: GAN-based recommendation system - Try another approach which recommend products using GAN --> We can recommend product that is not available in our inventory. --> AI will design compatible furniture. ## Referrence https://blog.insightdatascience.com/building-a-scalable-online-product-recommender-with-keras-docker-gcp-and-gke-52a5ab2c7688 https://tech.wayfair.com/data-science/2019/09/introducing-harmonia-context-aware-product-recommendation-from-room-images/ https://github.com/IvonaTau/style-search https://arxiv.org/pdf/1801.03002.pdf