In a year dominated by the topic of artificial intelligence (AI), it’s only natural that some AI-related terms would also begin making their way into the mainstream. Large Language Models, Natural Language Processing, and deep learning are all subjects no longer confined solely to academic or data science environments – and Graph Neural Networks (GNNs), the subject of this post, are beginning to gain traction too.
If you haven’t come across GNNs before, or have heard of them but aren’t sure exactly what they are, then there are three key things to know:
So, why the focus on graphs in the first place? Graphs have two key elements:
These are a powerful tool in representing real-world phenomena. That could be social interactions, molecular interactions, or even a map of the internet.
Moreover, a lot of information can be thought of as special kinds of graphs. A digital photo, for instance, is just a grid in which all of the individual pixels are connected to their adjacent neighbours. And every sentence is effectively a graph, with preceding and successive words as neighbouring points.
These are rather simple examples, but the point is that graphs can be everywhere – and they are often incredibly complex.
Think about your last trip to the grocery store: what did you buy? Which adverts did you see while you were there? How long were you there for? Which aisles did you browse? Which day of the week was it? Mapping all that information onto a graph and analysing it might be able to tell us some incredibly interesting things about how you shop – but doing so would also take countless hours.
GNNs, on the other hand, can carry out that kind of task far more quickly and efficiently. That’s because they excel at understanding the complex relationships that modern retail is built on, which could also make them incredibly useful for tackling some of the industry’s biggest questions.
How do GNNs work?
A GNN works by passing and aggregating “messages” between each of the nodes. This allows it to a) learn the attributes of each node, and b) understand how each of those nodes are related to one another. The powerful thing about this approach is that a GNN can start to learn and make predictions from raw data, without the need to undertake feature engineering.
Our own research into the capabilities of GNNs is revealing a number of areas where they can play a pivotal role in providing vital customer data for the retail sector.
For example, they can help in the creation of unified prediction models, ones capable of accurately forecasting whether a customer is likely to buy a product at a specific time. By providing a GNN with all the information we can about a customer’s prior purchasing behaviours – and the attributes of the item in question – a GNN could ultimately start to make some very smart predictions about their likelihood to purchase.
As you can imagine, this capability has many potential applications across multiple verticals. It is particularly well suited to the kind of “cold start” problems that go hand-in-hand with new customer sign-ups, where – without any information on an individual and their preferences – it is extremely difficult to recommend any products to them.
Why isn’t everyone already using GNNs?
Since GNNs seem to present such a clear opportunity, the logical question that follows is why they’re not being adopted as quickly as Large Language Models like ChatGPT. Part of the answer lies in the fact that there is currently very little standardisation when it comes to GNN algorithms, meaning there are also very few resources for most data scientists to draw on.
From a technological standpoint, there are three main areas of focus when it comes to the development of a GNN:
Today, all three of these areas' present significant challenges. The way in which we store and sample an underlying graph can have a huge impact on the performance of an algorithm, for instance. The implementation of different architectures can also vary significantly, making it hard to iterate from one to another. Traditional databases are also very inefficient when it comes to even simple graph-related queries. Because of this, spinning up a GNN can quickly escalate from being a fairly simple coding challenge to one that requires a vast amount of resource to get right. Inevitably, that makes the current environment a very slippery slope on which to work.
Given the fast-paced nature of this community, it’s going to be very interesting to watch how this space evolves. It could very well be ruled by some big models like LLM’s which can be used by all and are owned by a few, or by service providers which solve these problems, or it becomes purely open-source - or some combination of all three.
We think it is too soon to comment on what will dominate the GNN space. But, then again, it is our job to be on lookout for change. Let us know in the comments how you feel about the evolution of GNNs, or you think it is some hype that will ultimately die down.
A look at dunnhumby’s unique Customer Data Science, which is at the core of everything we do.
dunnhumby ScienceCookie | Description |
---|---|
cli_user_preference | The cookie is set by the GDPR Cookie Consent plugin and is used to store the yes/no selection the consent given for cookie usage. It does not store any personal data. |
cookielawinfo-checkbox-advertisement | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category . |
cookielawinfo-checkbox-analytics | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Analytics" category . |
cookielawinfo-checkbox-necessary | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
CookieLawInfoConsent | The cookie is set by the GDPR Cookie Consent plugin and is used to store the summary of the consent given for cookie usage. It does not store any personal data. |
viewed_cookie_policy | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
wsaffinity | Set by the dunnhumby website, that allows all subsequent traffic and requests from an initial client session to be passed to the same server in the pool. Session affinity is also referred to as session persistence, server affinity, server persistence, or server sticky. |
Cookie | Description |
---|---|
wordpress_test_cookie | WordPress cookie to read if cookies can be placed, and lasts for the session. |
wp_lang | This cookie is used to remember the language chosen by the user while browsing. |
Cookie | Description |
---|---|
CONSENT | YouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data. |
fs_cid | This cookie is set by FullStory to store the user’s cookie consent preferences for session tracking. |
fs_lua | This cookie is set by FullStory to record the time of the user’s last activity, helping manage session timeouts. |
fs_uid | This cookie is set by FullStory to assign a unique ID to each user and record session replays and interactions. |
osano_consentmanager | This cookie is set by FullStory’s consent management system (Osano) to store the user’s cookie consent preferences and ensure compliance with privacy regulations. |
osano_consentmanager_uuid | This cookie is set by FullStory’s consent management system (Osano) to uniquely identify a user’s consent session for consistent consent tracking. |
vuid | Vimeo installs this cookie to collect tracking information by setting a unique ID to embed videos to the website. |
yt-remote-device-id | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt.innertube::nextId | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |
_fs_tab_id | This temporary session value is used by FullStory to track user activity across multiple tabs. |
_ga | The _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors. |
_gat_gtag_UA_* | This cookie is set by Google Analytics to throttle request rates and limit data collection on high-traffic sites. |
_ga_* | Set by Google Analytics to persist session state. |
_gid | Installed by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously. |
_lfa | This cookie is set by the provider Leadfeeder to identify the IP address of devices visiting the website, in order to retarget multiple users routing from the same IP address. |
__q_state_* | This cookie is set by FullStory to track session state and user interactions across page views. It helps rebuild session context for accurate session replay and analytics. |
Cookie | Description |
---|---|
aam_uuid | Set by LinkedIn, for ID sync for Adobe Audience Manager. |
AEC | Set by Google, ‘AEC’ cookies ensure that requests within a browsing session are made by the user, and not by other sites. These cookies prevent malicious sites from acting on behalf of a user without that user’s knowledge. |
AMCVS_14215E3D5995C57C0A495C55%40AdobeOrg | Set by LinkedIn, indicates the start of a session for Adobe Experience Cloud. |
AMCV_14215E3D5995C57C0A495C55%40AdobeOrg | Set by LinkedIn, Unique Identifier for Adobe Experience Cloud. |
AnalyticsSyncHistory | Set by LinkedIn, used to store information about the time a sync with the lms_analytics cookie took place for users in the Designated Countries (which LinkedIn determines as European Union (EU), European Economic Area (EEA), and Switzerland). |
bcookie | LinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognise browser ID. |
bscookie | LinkedIn sets this cookie to store performed actions on the website. |
DV | Set by Google, used for the purpose of targeted advertising, to collect information about how visitors use our site. |
ELOQUA | This cookie is set by Eloqua Marketing Automation Tool. It contains a unique identifier to recognise returning visitors and track their visit data across multiple visits and multiple OpenText Websites. This data is logged in pseudonymised form, unless a visitor provides us with their personal data through creating a profile, such as when signing up for events or for downloading information that is not available to the public. |
gpv_pn | Set by LinkedIn, used to retain and fetch previous page visited in Adobe Analytics. |
lang | Session-based cookie, set by LinkedIn, used to set default locale/language. |
lidc | LinkedIn sets the lidc cookie to facilitate data center selection. |
lidc | Set by LinkedIn, used for routing from Share buttons and ad tags. |
li_gc | Set by LinkedIn to store consent of guests regarding the use of cookies for non-essential purposes. |
li_sugr | Set by LinkedIn, used to make a probabilistic match of a user's identity outside the Designated Countries (which LinkedIn determines as European Union (EU), European Economic Area (EEA), and Switzerland). |
lms_analytics | Set by LinkedIn to identify LinkedIn Members in the Designated Countries (which LinkedIn determines as European Union (EU), European Economic Area (EEA), and Switzerland) for analytics. |
NID | Set by Google, registers a unique ID that identifies a returning user’s device. The ID is used for targeted ads. |
OGP / OGPC | Set by Google, cookie enables the functionality of Google Maps. |
OTZ | Set by Google, used to support Google’s advertising services. This cookie is used by Google Analytics to provide an analysis of website visitors in aggregate. |
s_cc | Set by LinkedIn, used to determine if cookies are enabled for Adobe Analytics. |
s_ips | Set by LinkedIn, tracks percent of page viewed. |
s_plt | Set by LinkedIn, this cookie tracks the time that the previous page took to load. |
s_pltp | Set by LinkedIn, this cookie provides page name value (URL) for use by Adobe Analytics. |
s_ppv | Set by LinkedIn, used by Adobe Analytics to retain and fetch what percentage of a page was viewed. |
s_sq | Set by LinkedIn, used to store information about the previous link that was clicked on by the user by Adobe Analytics. |
s_tp | Set by LinkedIn, this cookie measures a visitor’s scroll activity to see how much of a page they view before moving on to another page. |
s_tslv | Set by LinkedIn, used to retain and fetch time since last visit in Adobe Analytics. |
test_cookie | Set by doubleclick.net (part of Google), the purpose of the cookie is to determine if the users' browser supports cookies. |
U | Set by LinkedIn, Browser Identifier for users outside the Designated Countries (which LinkedIn determines as European Union (EU), European Economic Area (EEA), and Switzerland). |
UserMatchHistory | LinkedIn sets this cookie for LinkedIn Ads ID syncing. |
UserMatchHistory | This cookie is used by LinkedIn Ads to help dunnhumby measure advertising performance. More information can be found in their cookie policy. |
VISITOR_INFO1_LIVE | A cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface. |
YSC | YSC cookie is set by YouTube and is used to track the views of embedded videos on YouTube pages. |
yt-remote-connected-devices | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
_gcl_au | Set by Google Tag Manager to store and track conversion events. It is typically associated with Google Ads, but may be set even if no active ad campaigns are running, especially when GTM is configured with default settings. The cookie helps measure the effectiveness of ad clicks in relation to site actions. |