Skip to end of banner
Go to start of banner

CJP - Personalized Product Affinities - Reorder & Discover

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

Introduction

The purchase history should clearly play a role to define what other products a customer might be interested to buy (of what products he might want to buy again).

However, a customer who bought a type of product twice or three times doesn’t have the same affinity towards these products if he bought twice or three times in total, or if he bought already 20 times or more. The first gives (so far) a clear indication of a strong affinity while the second might have stronger affinities to other products.

To make the matter worse, some types of products have very difference purchase frequencies than others. For example, chewing toys are typically bought much less often than dog food. Therefore, simply using order frequency doesn’t suffice either.

The goal of calculating what we call Product Segment Affinities is to identify products individually for each of your customers where a reorder is really likely or which they buy so often that they might be interested in other best-selling products in the same segment which they never bought before.

Boxalino as developed two types of Affinities:

  • Local Affinities for Reorder - where the individual purchase frequency is compared to other customers who also bought products in the same segment

  • Global Affinities for Discover - where the individual purchase frequency is compared to all other customers regardless if they already bought products in the same segment or not

What is it?

The Collaborative Filtering on Purchases generates a small quantity (typically around 10) product recommendations which are generated for each customer individually based on their purchase history.

The best practice matches other customers with similar purchases and make recommendations based on the patterns of what is often bought by these matching customers.

These recommendations can be used to be put on top of any widget. One of the most common cases are WELCOME: Product suggestions on start pages, RE-BUY: Product Suggestions on My Account Page and INDIVIDUALIZE: Product Suggestions in E-Mails, but we have seen very positive results also to put such products on top of SEARCH/NAVI: In-site Search and Product Listings when such product match with the search term or category/brand context.

This is a great way to personalize your entire E-shop.

Best Practice Strategy

Neural Collaborative Filtering for personalized recommendations leveraging the patterns in the purchase behaviors of other customers.

WPOS

Use Cases

Mode

Requirements

ALL

Customer Correlation-based Promoter

RANKER

You need to confirm with Boxalino that this Collaborative Filtering has been computed for your account

Variables

  • Reorder products already bought: “boxalino_std_affinities-rebuy-customer”

  • Discover products not bought yet: “boxalino_std_affinities-discover-customer”

Cases to consider

There is only one standard case

How to configure it?

You can import the JSON below directly in the Admin (use the Import button on the top right), as in this screen-shot.

Typically, you don’t need to configure any parameter and can use it as is.

 Use-Cases (JSON) - click copy on the top right
[
  {
    "useCaseModelSource": "library",
    "useCaseModelId": 188,
    "useCaseModelVersion": 1,
    "useCaseModelSubVersion": 1,
    "name": "Collaborative Filtering Purchases",
    "order": "1",
    "orGroup": null,
    "fromIndex": -1,
    "toIndex": -1,
    "maxWeight": null,
    "variant": "",
    "scope": "local",
    "overwriteLevel": 1,
    "overwriteLabel": [
      null
    ],
    "globalTargetTags": [
      null
    ],
    "active": true,
    "parameters": [
      {
        "name": "type",
        "value": {
          "format": "StringParameterValue",
          "value": "boxalino_std_affinities-rebuy-customer"
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "source",
        "value": {
          "format": "StringParameterValue",
          "value": ""
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "valuesConditionMapKey",
        "value": {
          "format": "StringParameterValue",
          "value": null
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "targetAsValue",
        "value": {
          "format": "BooleanParameterValue",
          "value": true
        },
        "scope": "global"
      },
      {
        "name": "valuesConditionValueIndex",
        "value": {
          "format": "StringParameterValue",
          "value": "0"
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "factor",
        "value": {
          "format": "NumberParameterValue",
          "value": null
        },
        "scope": "global"
      },
      {
        "name": "targetSeparator",
        "value": {
          "format": "StringParameterValue",
          "value": "\\\\|"
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "field",
        "value": {
          "format": "FieldParameterValue",
          "value": "id"
        },
        "scope": "global"
      },
      {
        "name": "boostFilter",
        "value": {
          "format": "BooleanParameterValue",
          "value": true
        },
        "scope": "global"
      },
      {
        "name": "boostWeight",
        "value": {
          "format": "StringParameterValue",
          "value": "1000000"
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "orCondition",
        "value": {
          "format": "BooleanParameterValue",
          "value": true
        },
        "scope": "global"
      },
      {
        "name": "required",
        "value": {
          "format": "BooleanParameterValue",
          "value": false
        },
        "scope": "global"
      },
      {
        "name": "topWeightNbValuesMaxThreshold",
        "value": {
          "format": "StringParameterValue",
          "value": "0"
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "topWeightMinThreshold",
        "value": {
          "format": "StringParameterValue",
          "value": "0"
        },
        "scope": "global",
        "startval": {},
        "schema": ""
      },
      {
        "name": "limitFieldValues",
        "value": {
          "format": "StringParameterValues",
          "values": [
            "*"
          ]
        },
        "scope": "global"
      }
    ],
    "segmentationIds": null,
    "segmentationUniqueKeys": [],
    "CPOInitiativeId": null,
    "notes": null,
    "options": {
      "status": null,
      "includeWidgets": null,
      "excludeWidgets": null,
      "allWidgets": null,
      "conditionalSegments": null,
      "conditionalProductSelections": null,
      "ordering": null,
      "parameters": [
        {
          "name": "system",
          "values": [
            "false"
          ]
        }
      ],
      "allLinkedAccounts": null,
      "accounts": null
    },
    "icons": {
      "strategy": {
        "value": "cpo_journey.png",
        "tooltip": "JOURNEY OPTIMIZATION"
      },
      "level": {
        "value": "L1",
        "tooltip": "LEVEL 1 - ENGAGEMENT JOURNEYS (4+1+4)"
      },
      "initiative": {
        "value": "fa-folder",
        "tooltip": "RETURNING CUSTOMERS"
      },
      "character": {
        "value": "",
        "tooltip": ""
      },
      "mode": {
        "label": "",
        "value": "",
        "tooltip": ""
      }
    },
    "sections": [
      {
        "id": "main",
        "label": "Values",
        "active": true
      },
      {
        "id": "advanced",
        "label": "Advanced",
        "active": false
      }
    ],
    "isSelected": true,
    "status": true
  }
]
  • No labels