{"id":7303,"date":"2020-06-19T12:03:50","date_gmt":"2020-06-19T12:03:50","guid":{"rendered":"https:\/\/www.price2spy.com\/blog\/?p=7303"},"modified":"2020-07-28T10:52:33","modified_gmt":"2020-07-28T10:52:33","slug":"part-7-product-matching-via-ml-post-processing","status":"publish","type":"post","link":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/","title":{"rendered":"(Part #7) Product matching via ML: Post-processing"},"content":{"rendered":"\n<p> <a rel=\"noreferrer noopener\" aria-label=\"Product matching in Price2Spy (opens in a new tab)\" href=\"https:\/\/www.price2spy.com\/en\/pricing\/product-matching.html\" target=\"_blank\">Product matching in Price2Spy<\/a> <\/p>\n\n\n\n<p> <strong>Previous topic: <\/strong> <a rel=\"noreferrer noopener\" aria-label=\"(Part #6) Evaluating ML training results  (opens in a new tab)\" href=\"https:\/\/www.price2spy.com\/blog\/part-6-evaluating-ml-training-results\/\" target=\"_blank\">(Part #6) Evaluating ML training results <\/a><\/p>\n\n\n\n<p><strong>Next topic:<\/strong>  <a href=\"https:\/\/www.price2spy.com\/blog\/part-8-product-matching-via-ml-testing-on-various-industries-languages\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"(Part #8) Testing on various industries\/languages  (opens in a new tab)\">(Part #8) Testing on various industries\/languages <\/a><\/p>\n\n\n\n<p>This part was logically the most difficult to comprehend, at least for me. Let\u2019s give it a try:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>We have 50K products from Set A and 40K products from Set B.<\/li><li>We have already eliminated the improbable A\/B combinations by blocking<\/li><li>Each A\/B combination which is probably enough has been scored \u2013 it has received a matching score between 0 and 1. So, let&#8217;s say product A has 12 potential matches with the product from B, each with its own matching score<\/li><li>So, which B is it? Should be the one with the highest score, right? Ok, let&#8217;s assume that we have taken the combination with the highest score, and that is A1 and B9. That means:<ul><li><strong>a. <\/strong>A1 is matched with B9, so A1 cannot be matched with any other B<\/li><\/ul><ul><li><strong>b.<\/strong> B9 is matched with A1, so B9 cannot be matched with any other A<\/li><\/ul><\/li><li>That means when we start evaluating the next product from Set A (A2(, B9 should be left out as a potential match<\/li><li>But, can we trust that A1 and B9 are a certain match, and they cannot be used as matches for any other product? If we do trust it but we make a mistake, the result will be a chain reaction of wrong matches \u2013 a disaster for both accuracy and sensitivity.<\/li><\/ul>\n\n\n\n<p>We have done a lot of experimenting on this one, and came with the following solution:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>If the matching score is above X1 (configurable threshold) \u2013 consider it a certain match. Do not consider this A, nor B as a potential match for any other product (consider them exhausted)! The most typical value for X1 is 0.95<\/li><li>If the matching score is below X1, take N best matches (according to matching score). Such matches are not certain, so do not consider either A not be exhausted!<\/li><\/ul>\n\n\n\n<p>Yet, this was not enough \u2013 so we had to introduce some algorithmic rules \u2013 mostly for preventing bad matches to be established.<\/p>\n\n\n\n<p>For example: if both products had the same entity \u2013 but of a different value, disregard it as a potential match. That meant that the following cases were eliminated:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Red vs Black<\/li><li>Red vs Schwartz<\/li><li>100g pack vs 250g pack size<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"314\" src=\"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png\" alt=\"ML post procesing\" class=\"wp-image-7304\" srcset=\"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png 600w, https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1-768x401.png 768w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n\n<p><strong>More information can be found here:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li> <a rel=\"noreferrer noopener\" href=\"https:\/\/www.price2spy.com\/en\/pricing\/product-matching.html\" target=\"_blank\">Product matching in Price2Spy<\/a>  <\/li><li> <strong>Previous topic: <\/strong> <a rel=\"noreferrer noopener\" href=\"https:\/\/www.price2spy.com\/blog\/part-6-evaluating-ml-training-results\/\" target=\"_blank\">(Part #6) Evaluating ML training results <\/a> <\/li><li> <strong>Next topic:<\/strong> <a href=\"https:\/\/www.price2spy.com\/blog\/part-8-product-matching-via-ml-testing-on-various-industries-languages\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"(Part #8) Testing on various industries\/languages (opens in a new tab)\">(Part #8) Testing on various industries\/languages<\/a>  <\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Product matching in Price2Spy Previous topic: (Part #6) Evaluating ML training results Next topic: (Part #8) Testing on various industries\/languages This part was logically the most difficult to comprehend, at least for me. Let\u2019s give it a try: We have 50K products from Set A&#8230;<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[108,167],"tags":[190,645,646,15,81],"class_list":["post-7303","post","type-post","status-publish","format-standard","hentry","category-best-practices","category-new-price2spy-features","tag-ecommerce","tag-machine-learning","tag-ml","tag-price2spy","tag-product-matching"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>(Part #7) Product matching via ML: Post-processing<\/title>\n<meta name=\"description\" content=\"In this article, we&#039;ll explain to you how the Post-processing in the Product matching via ML works.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"(Part #7) Product matching via ML: Post-processing\" \/>\n<meta property=\"og:description\" content=\"In this article, we&#039;ll explain to you how the Post-processing in the Product matching via ML works.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/\" \/>\n<meta property=\"og:site_name\" content=\"Price2Spy\u00ae Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Price2Spy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-19T12:03:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-07-28T10:52:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png\" \/>\n<meta name=\"author\" content=\"Mi\u0161a Kruni\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Price2Spy\" \/>\n<meta name=\"twitter:site\" content=\"@Price2Spy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mi\u0161a Kruni\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"(Part #7) Product matching via ML: Post-processing","description":"In this article, we'll explain to you how the Post-processing in the Product matching via ML works.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/","og_locale":"en_US","og_type":"article","og_title":"(Part #7) Product matching via ML: Post-processing","og_description":"In this article, we'll explain to you how the Post-processing in the Product matching via ML works.","og_url":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/","og_site_name":"Price2Spy\u00ae Blog","article_publisher":"https:\/\/www.facebook.com\/Price2Spy\/","article_published_time":"2020-06-19T12:03:50+00:00","article_modified_time":"2020-07-28T10:52:33+00:00","og_image":[{"url":"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png","type":"","width":"","height":""}],"author":"Mi\u0161a Kruni\u0107","twitter_card":"summary_large_image","twitter_creator":"@Price2Spy","twitter_site":"@Price2Spy","twitter_misc":{"Written by":"Mi\u0161a Kruni\u0107","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#article","isPartOf":{"@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/"},"author":{"name":"Mi\u0161a Kruni\u0107","@id":"https:\/\/www.price2spy.com\/blog\/#\/schema\/person\/08e388ab2e43e97b3618363fbbe94ded"},"headline":"(Part #7) Product matching via ML: Post-processing","datePublished":"2020-06-19T12:03:50+00:00","dateModified":"2020-07-28T10:52:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/"},"wordCount":417,"commentCount":0,"image":{"@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png","keywords":["ecommerce","machine learning","ml","price2spy","product matching"],"articleSection":["Best practices in price monitoring","New Price2Spy features"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/","url":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/","name":"(Part #7) Product matching via ML: Post-processing","isPartOf":{"@id":"https:\/\/www.price2spy.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#primaryimage"},"image":{"@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png","datePublished":"2020-06-19T12:03:50+00:00","dateModified":"2020-07-28T10:52:33+00:00","author":{"@id":"https:\/\/www.price2spy.com\/blog\/#\/schema\/person\/08e388ab2e43e97b3618363fbbe94ded"},"description":"In this article, we'll explain to you how the Post-processing in the Product matching via ML works.","breadcrumb":{"@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#primaryimage","url":"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png","contentUrl":"https:\/\/www.price2spy.com\/blog\/wp-content\/uploads\/2020\/06\/Untitled-design-1.png","width":600,"height":314},{"@type":"BreadcrumbList","@id":"https:\/\/www.price2spy.com\/blog\/part-7-product-matching-via-ml-post-processing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.price2spy.com\/blog\/"},{"@type":"ListItem","position":2,"name":"(Part #7) Product matching via ML: Post-processing"}]},{"@type":"WebSite","@id":"https:\/\/www.price2spy.com\/blog\/#website","url":"https:\/\/www.price2spy.com\/blog\/","name":"Price2Spy\u00ae Blog","description":"Price2Spy\u00ae","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.price2spy.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.price2spy.com\/blog\/#\/schema\/person\/08e388ab2e43e97b3618363fbbe94ded","name":"Mi\u0161a Kruni\u0107","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31aa4afb2464eca1f1ca0c7979628c87e54e7a6b53ebcb371749e9349d27c850?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31aa4afb2464eca1f1ca0c7979628c87e54e7a6b53ebcb371749e9349d27c850?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31aa4afb2464eca1f1ca0c7979628c87e54e7a6b53ebcb371749e9349d27c850?s=96&d=mm&r=g","caption":"Mi\u0161a Kruni\u0107"},"description":"Father of 2, Husband of 1, CEO of 3 :-)","sameAs":["http:\/\/www.price2spy.com"],"url":"https:\/\/www.price2spy.com\/blog\/author\/misha\/"}]}},"_links":{"self":[{"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/posts\/7303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/comments?post=7303"}],"version-history":[{"count":3,"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/posts\/7303\/revisions"}],"predecessor-version":[{"id":7333,"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/posts\/7303\/revisions\/7333"}],"wp:attachment":[{"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/media?parent=7303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/categories?post=7303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.price2spy.com\/blog\/wp-json\/wp\/v2\/tags?post=7303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}