{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This R environment comes with many helpful analytics packages installed\n# It is defined by the kaggle/rstats Docker image: https://github.com/kaggle/docker-rstats\n# For example, here's a helpful package to load\n\nlibrary(tidyverse) # metapackage of all tidyverse packages\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nlist.files(path = \"../input\")\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","execution":{"iopub.status.busy":"2022-03-01T02:47:11.260190Z","iopub.execute_input":"2022-03-01T02:47:11.291486Z","iopub.status.idle":"2022-03-01T02:47:11.311090Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"library(data.table)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:47:47.292149Z","iopub.execute_input":"2022-03-01T02:47:47.293683Z","iopub.status.idle":"2022-03-01T02:47:47.305272Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### Content based recommendation \n\nlibrary(cluster)\n\nlibrary(dplyr)\n\nlibrary(tidyr)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:47:41.580154Z","iopub.execute_input":"2022-03-01T02:47:41.581703Z","iopub.status.idle":"2022-03-01T02:47:41.626734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\narticles <- fread(\"../input/h-and-m-personalized-fashion-recommendations/articles.csv\", header = TRUE)\n\n\n\ncustomer <- fread(\"../input/h-and-m-personalized-fashion-recommendations/customers.csv\", header = TRUE)\n\n\n\nsample_submission <- fread(\"../input/h-and-m-personalized-fashion-recommendations/sample_submission.csv\", header = TRUE)\n\n\ntrain <- fread(\"../input/h-and-m-personalized-fashion-recommendations/transactions_train.csv\", header = TRUE)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:49:20.739565Z","iopub.execute_input":"2022-03-01T02:49:20.741080Z","iopub.status.idle":"2022-03-01T02:49:35.278352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Content based recommendation","metadata":{}},{"cell_type":"code","source":"articles$article_id = as.factor(articles$article_id)\n\narticles$prod_name = as.factor(articles$prod_name)\n\narticles$product_type_name =as.factor(articles$product_type_name)\n","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:49:36.575801Z","iopub.execute_input":"2022-03-01T02:49:36.577316Z","iopub.status.idle":"2022-03-01T02:49:37.008469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\narticle_distance <- articles[1:10000, c(\"article_id\", \"prod_name\", \"product_type_name\")]\n\nhead(article_distance, 20)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:50:20.825221Z","iopub.execute_input":"2022-03-01T02:50:20.827204Z","iopub.status.idle":"2022-03-01T02:50:20.865214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Check dissimilarity close to 0 = similar, close to 1 = dissimilar ","metadata":{}},{"cell_type":"code","source":"\ndissimilarity = daisy(article_distance, metric =\"gower\")\n\ndissimilarity = as.matrix(dissimilarity)\n\nrow.names(dissimilarity) <-  articles$article_id[1:10000]\n\ncolnames(dissimilarity) <-  articles$article_id[1:10000]\n\ndissimilarity[1:15,1:15]\n","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:51:09.926192Z","iopub.execute_input":"2022-03-01T02:51:09.928327Z","iopub.status.idle":"2022-03-01T02:51:38.941083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### See customer 1 as an example ","metadata":{}},{"cell_type":"code","source":"customer1 = \"00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2\"\n","metadata":{"execution":{"iopub.status.busy":"2022-03-01T02:51:52.698857Z","iopub.execute_input":"2022-03-01T02:51:52.700556Z","iopub.status.idle":"2022-03-01T02:51:52.713385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ncustomer_purchase = train %>% filter(customer_id == customer1 & article_id %in% articles$article_id[1:10000])\n\ncustomer_purchase$article_id =as.character(customer_purchase$article_id)\n\narticle_by_product = articles %>% select(article_id, prod_name, product_type_name, index_group_no)\n\n","metadata":{"execution":{"iopub.status.busy":"2022-03-01T03:07:48.470340Z","iopub.execute_input":"2022-03-01T03:07:48.471919Z","iopub.status.idle":"2022-03-01T03:08:02.883594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"head(article_by_product,10)\nhead(customer_purchase,10)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T03:08:09.640751Z","iopub.execute_input":"2022-03-01T03:08:09.642290Z","iopub.status.idle":"2022-03-01T03:08:09.680586Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"customer_purchase = merge(x =customer_purchase, y= article_by_product, by= \"article_id\")\n\n\nhead(customer_purchase, 10)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T03:08:48.170769Z","iopub.execute_input":"2022-03-01T03:08:48.172377Z","iopub.status.idle":"2022-03-01T03:08:48.258320Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"articles$article_id = as.character(articles$article_id)\n\narticle_selection = customer_purchase[ ,c(\"article_id\", \"index_group_no\")]\n\nrecommend = function(article_selection, dissimilarity, article_by_product) {\n  article_selection_indexs = which(colnames(dissimilarity) %in% article_selection$article_id)\n  \n  \n  result = data.frame(dissimilarity[ , article_selection_indexs],\n                      recommend_product = row.names(dissimilarity),\n                      stringsAsFactors = FALSE)\n  \n  recommendation = result %>% pivot_longer(cols = c(- \"recommend_product\"), names_to = \"item_purchase\",\n                                           values_to = \"dissimilarity\") %>% \n    left_join(article_selection, by = c(\"recommend_product\" = \"article_id\")) %>% \n    arrange(desc(dissimilarity)) %>%\n    filter(recommend_product != item_purchase) %>% \n    mutate(similarity = 1- dissimilarity) %>% left_join(article_by_product, by = c(\"recommend_product\" = \"article_id\"))\n  \n    return(recommendation)\n\n}\n\n","metadata":{"execution":{"iopub.status.busy":"2022-03-01T03:09:03.517629Z","iopub.execute_input":"2022-03-01T03:09:03.519504Z","iopub.status.idle":"2022-03-01T03:09:03.549616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"recommendations = recommend(article_selection, dissimilarity, article_by_product)\n\nrecommendations","metadata":{"execution":{"iopub.status.busy":"2022-03-01T03:10:33.048323Z","iopub.execute_input":"2022-03-01T03:10:33.049994Z","iopub.status.idle":"2022-03-01T03:10:33.430723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Filter similiarity > 0.6","metadata":{}},{"cell_type":"code","source":"recommendations_filter = recommendations %>% filter(similarity > 0.5) \n\nhead(recommendations_filter, 100)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T03:11:56.561708Z","iopub.execute_input":"2022-03-01T03:11:56.563633Z","iopub.status.idle":"2022-03-01T03:11:56.660670Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"As we can see, when similarity = 1, they are same product.","metadata":{}}]}