Identity Resolution

Linking information about people and households in private identity graphs

What is Identity Resolution?

Identity resolution is the process of forming identity clusters from identifier profiles that you have loaded into your Optable DCN from your sites, applications, and other sources. The process is automatically and continuously performed by your Optable DCN, and underpins the audience building, insights, and matching capabilities.

Conceptually, identity clusters represent individual people and contain identifiers and traits associated with these. An identity cluster may also include household identifiers. See household data below for a description of how identity resolution takes household data into account.

Identity Resolution Logic

ID profiles are assembled into identity clusters when they are loaded into your DCN. Two ID profiles are part of the same identity cluster if they share a common ID. A chained list of ID profiles (chained by neighbor links) will get merged into a single identity cluster.

Example

The following two ID profiles and their associated data will be merged into the same identity cluster.

Assuming that the following ID profile is loaded first from source #1:

{
  "id": "e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1",
  "neighbors": [
    {
      "id": "c1:ed1b94a0c6ea1095a439d8399734e47379c204c4fbcf8aeaf6f8594da4e72873"
    },
    {
      "id": "c:0ujsswThIGTUYm2K8FjOOfXtY1K"
    }
  ],
  "traits": [
    {
      "key": "foo",
      "value": "1234"
    },
    {
      "key": "bar",
      "value": "baz"
    }
  ]
}

and the second ID profile is loaded sometime later from source #2:

{
  "id": "c:0ujsswThIGTUYm2K8FjOOfXtY1K",
  "traits": [
    {
      "key": "lorem",
      "value": "ipsum"
    },
    {
      "key": "bar",
      "value": "blue"
    }
  ]
}

The resulting identity cluster will look like:

{
  "ids": [
    "c:0ujsswThIGTUYm2K8FjOOfXtY1K",
    "c1:ed1b94a0c6ea1095a439d8399734e47379c204c4fbcf8aeaf6f8594da4e72873",
    "e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1"
  ],
  "traits": [
    {
      "key": "foo",
      "value": "1234"
    },
    {
      "key": "lorem",
      "value": "ipsum"
    },
    {
      "key": "bar",
      "value": "blue"
    }
  ],
  "sources": [
    1,
    2
  ]
}

Note that the resulting identity cluster contains data from both ID profiles. The list of ids includes all of the identifiers appearing in the ID profile data (including in the neighbors attribute). The traits includes the merged set of traits. For the conflicting trait "bar" the value "blue" from source #2 is selected as described below.

Finally, suppose that a third ID profile is finally loaded from source #3 and looks like:

{
  "id": "c2:AA8eBcff01",
  "neighbors": [
    {
      "id": "c:0ujsswThIGTUYm2K8FjOOfXtY1K"
    }
  ],
  "traits": [
    {
      "key": "bar",
      "value": "pink"
    }
  ]
}

The updated identity cluster will contain the new ID "c2:AA8eBcff01" as well as the updated trait:

{
  "ids": [
    "c2:AA8eBcff01",
    "c:0ujsswThIGTUYm2K8FjOOfXtY1K",
    "c1:ed1b94a0c6ea1095a439d8399734e47379c204c4fbcf8aeaf6f8594da4e72873",
    "e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1"
  ],
  "traits": [
    {
      "key": "foo",
      "value": "1234"
    },
    {
      "key": "lorem",
      "value": "ipsum"
    },
    {
      "key": "bar",
      "value": "pink"
    }
  ],
  "sources": [
    1,
    2,
    3
  ]
}

Trait Key Conflict Resolution

When ID profiles are joined into an identity cluster and several traits with the same key are specified among the profile records, the last updated value will be selected for the trait added in the associated identity cluster.

When Does Identity Resolution Happen?

Identity resolution happens in real-time for audience activation. Identity resolution is recomputed daily by default. It also computes whenever an Audience or a Source is created, updated or archived, and when a user logs into the DCN to ensure freshness of audience insights, exports, and clean room operations such as secure matching.

Identity Resolution Scope and Household Data

By default, all ID profiles describe an individual person's identifiers and traits. This is why all neighboring identifiers are joined together in a single identity cluster representing the individual person. You can also optionally associate household identifiers to identity clusters by loading household scoped ID profiles.

Household Data Identity Resolution Logic

Identity resolution matching logic on household scoped ID profiles is different from the default identity resolution logic described above. For person scoped ID profiles (the default), neighbor-linked IDs get merged into a single identity cluster. However, household ID profiles are ignored during the initial identity cluster resolution process. Instead, once a personal identity cluster is computed, if there are any household ID profiles linked to any of the identity cluster's personal identifiers, the data from these is separately resolved and added to the cluster.

The household ID profiles may be linked directly to one of the personal identity cluster's IDs, or indirectly through other household ID profiles, but not indirectly through other personal ID profiles.

Note that the same household data may be added to multiple identity clusters, and that a logical household, formed by the resolution of a set of joined household ID profiles, is therefore shared by one or more identity clusters.

Here's a quick visual overview of identity cluster resolution with a mix of person and household data:

Complete Example

It's easiest to understand how personal and household data are treated during identity cluster resolution by looking at an example.

If you first load the following person scoped ID profiles:

{
  "id": "e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1",
  "neighbors": [
    {
      "id": "c:0ujsswThIGTUYm2K8FjOOfXtY1K"
    }
  ],
  "traits": [
    {
      "key": "age",
      "value": "28"
    }
  ]
}

and:

{
  "id": "e:274e44d98f150bdaff591268419d09f488c22a617e34e15434e5ac1f8db3b216",
  "neighbors": [
    {
      "id": "c:e27125c588fbe72cda4a"
    },
    {
      "id": "r:0b179df0-6cd5-49f1-be21-425d002e0d22"
    }
  ],
  "traits": [
    {
      "key": "age",
      "value": "32"
    }
  ]
}

The resulting identity graph structure looks like:

If you subsequently load the following household scoped ID profile, along with traits:

{
  "id": "r:0b179df0-6cd5-49f1-be21-425d002e0d22",
  "scope": "household",
  "neighbors": [
    {
      "id": "i4:192.168.3.12"
    },
    {
      "id": "e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1"
    }
  ],
  "traits": [
    {
      "key": "tenure",
      "value": "rental"
    },
    {
      "key": "hhi",
      "value": "90K"
    }
  ]
}

and:

{
  "id": "s:e0ef86a8-6ebf-4c9d-9127-e69407fe748d",
  "scope": "household",
  "neighbors": [
    {
      "id": "e:274e44d98f150bdaff591268419d09f488c22a617e34e15434e5ac1f8db3b216"
    }
  ],
  "traits": [
    {
      "key": "hhi",
      "value": "125K"
    }
  ]
}

The resulting private ID graph after the household ID profiles have been loaded looks like:

Note that the r:0b179df0-6cd5-49f1-be21-425d002e0d22 ID was initially created as a person scoped identifier (blue circle in the first diagram), and was updated to household scope identifier later (reddish brown circle in the second diagram).

The resulting identity clusters will share the same directly neighboring household data. For completeness, here is what they look like:

{
  "ids": [
    "c:0ujsswThIGTUYm2K8FjOOfXtY1K",
    "e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1"
  ],
  "traits": [
    {
      "key": "age",
      "value": "28"
    },
    {
      "key": "hhi",
      "value": "90K"
    },
    {
      "key": "tenure",
      "value": "rental"
    }
  ],
  "household": {
    "ids": [
      "r:0b179df0-6cd5-49f1-be21-425d002e0d22",
      "i4:192.168.3.12"
    ]
  }
}

and:

{
  "ids": [
    "c:e27125c588fbe72cda4a",
    "e:274e44d98f150bdaff591268419d09f488c22a617e34e15434e5ac1f8db3b216"
  ],
  "traits": [
    {
      "key": "age",
      "value": "32"
    },
    {
      "key": "hhi",
      "value": "125K"
    },
    {
      "key": "tenure",
      "value": "rental"
    }
  ],
  "household": {
    "ids": [
      "r:0b179df0-6cd5-49f1-be21-425d002e0d22",
      "s:e0ef86a8-6ebf-4c9d-9127-e69407fe748d",
      "i4:192.168.3.12"
    ]
  }
}

Note that the hhi trait appearing in each of the resolved identity clusters has not been updated to the value 125K for the first cluster. This is because that the last household-scoped ID profile describing s:e0ef86a8-6ebf-4c9d-9127-e69407fe748d, specifying the 125K value, is not directly neighbouring the IDs c:0ujsswThIGTUYm2K8FjOOfXtY1K nor e:3b2b95279a401a9e27125c588fbe72cda4a2fe9bb551684ea3a11d63be0a63e1.

Last updated