{'fraction_non_alphanumeric': 0.03369342350889005, 'fraction_numerical': 0.008752333445542736, 'mean_word_length': 5.129806790470831, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 1, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Sequential Recommendation Model for Next Purchase Prediction

Timeliness and contextual accuracy of recommendations are increasingly important when delivering contemporary digital marketing experiences. Conventional recommender systems (RS) suggest relevant but time-invariant items to users by accounting for their past purchases. These recommendations only map to customers' general preferences rather than a customer's specific needs immediately preceding a purchase. In contrast, RSs that consider the order of transactions, purchases, or experiences to measure evolving preferences can offer more salient and effective recommendations to customers: Sequential RSs not only benefit from a better behavioral understanding of a user's current needs but also better predictive power. In this paper, we demonstrate and rank the effectiveness of a sequential recommendation system by utilizing a production dataset of over 2.7 million credit card transactions for 46K cardholders. The method first employs an autoencoder on raw transaction data and submits observed transaction encodings to a GRU-based sequential model. The sequential model produces a MAP@1 metric of 47% on the out-of-sample test set, in line with existing research. We also discuss implications for embedding real-time predictions using the sequential RS into Nexus, a scalable, low-latency, event-based digital experience architecture.


INTRODUCTION
Recommender systems (RS) suggest relevant items to users by accounting for preferences and past purchases. A RS can narrow down purchase options by marketing attractive items and thereby enhance a user's experience and boost sales. In terms of business value, RSs have been shown to increase clickthrough rates (CTRs) by up to 30 %, lift adoption and conversion rates by 2-5 %, and grow sales revenue [14].
Recommendations in e-commerce emerged in popularity in the early 1990s [20], and they are increasingly being contextualized to a user's recent behaviors, such as purchase or browsing history. The need for a certain product or service, for example an out-of-town meal, may result from recent life events (e.g., a career change) that may in turn be associated with similar transactions (e.g., a hotel stay and airfare). But after a certain period, evolving changes in lifestyle may no longer be influenced by past purchasing behaviors. The goal of recommenders in this context is to anticipate time-sensitive, emergent user needs and surface products, offers, or merchants to address these needs.
Viewing data as a sequence of events -and as a longitudinal set of behavioral indicators -has changed the way researchers and practitioners view recommendation systems. Advances in deep learning have also changed the way recommender systems are built and measured across different domains [8]. For example, music and video recommenders use sequences of audio and images to help isolate defining features of the media and associate those features with user preferences. Some natural language processing methods, on the other hand, read character, word, or phrase tokens and output translations or new chunks of text as output.
One challenge with sequential recommenders in digital marketing and e-commerce is the ability to bring together all necessary data (user, item, and contextual) into an architecture capable of serving insights to users in just the right moment. In other words, it's not enough to just train a performant model: That model must also scale with large datasets, deliver recommendations with lowlatency, and manage long-term data dependencies, feedback loops, testing strategies, and concerns about fairness [4,18]. This paper documents the development of an offers recommendation system using sequential models and highlights the componentry necessary to provide the model's insights to end users. Accordingly, we offer three main contributions: • A sequence and context aware deep learning model capable of delivering high-quality user recommendations. • An evaluation framework that positions our models' performance near the top of other similar models. • A high-level architecture for delivering predictions to end users through EY Nexus product platform.

RELATED WORK AND RECENT PROGRESS
Conventional recommendation systems, including content-based and collaborative filtering RSs, make predictions based on the user's past purchase behavior and/or decisions made by other users with similar preferences [3,20]. Content-based filtering typically relies on item-specific qualities, e.g., the properties of a merchant, product, song, or webpage, whereas collaborative filtering approaches recommend items that similar users have liked, browsed, or purchased previously. Hybrid approaches combine aspects of recommendation techniques, for example aiming to minimize disadvantages of collaborative filtering and content recommenders by considering both user similarity and item information. Regardless of type, a conventional RS assumes all historical user-item interactions are equally important; therefore, they can only capture the users' static and general preferences. Additionally, item information typically remains static, meaning that the relationship between one item and another does not dynamically change over time. However, as noted previously, preferences, needs, and life situations often change the saliency of certain recommendations, and therefore sequential RSs (SRSs) are gaining prominence in both academic and practitioner circles [1,8,17]. Early works like Markov chain (MC) for next action prediction consider the past behavior sequences [23]. The MC method highly depends on past occurrences and calculates the probability of the next state only by depending on the present state with first order MC [13]. Though high-order MC models take additional, previous behaviors into consideration [13], it is still a challenge for MC to deal with long-term sequences, new items and contextual information. In particular, higher-order MC models suffer from two main limitations [16]: Firstly, although earlier actions can independently influence later actions, they cannot jointly do so. For example, purchasing a train ticket and hotel room increases the probability of an out-of-town meal more than either event alone. A second, related limitation of Markov chain-based models is the inability to "skip over" actions that are unrelated to the prediction of the next most likely action. Sequential deep learning-based models can address both of these limitations. That said, most recommendation models, including sequential ones, still are limited by common data availability problems (e.g., data sparsity and cold start) [3,8,16].
More contemporary approaches apply deep-learning based sequential recommendation techniques. This latent representation technique first learns representational embeddings for each user and item and then utilizes matrix factorization to predict the probability of user-item interactions for the recommendation [26]. Sequential neural networks, including RNN, GRU, and LSTM, have been developed to capture the long-term dependencies in a sequence for recommendations in a single domain [6]. For instance, convolutional neural networks (CNNs), though commonly used in the computer vision field, have been applied in sequential movie recommendations [11]. The input is a sequence of embeddings where each embedding represents the watched movie in the past. The CNN-based model treats the sequence of embeddings as an image and learns sequential features by convolving over the "image". Other more complex deep learning structures are used in SRSs, including Graph Neural Networks (GNNs), attention-based models, and memory networks. However, most of these sequential models are for single domain recommendations [8,26].

PROPOSED METHODOLOGY
We propose a sequential recommendation model SEQuential recommendation model for Next Best Transaction (SEQNBT) for predicting the industry code and transaction amount for a user's next most likely transaction. Figure 1 depicts SEQNBT's structure. It consists of an auto-encoder, GRU, and transaction decoder. The auto-encoder model is a self-training model used for generating transactional encodings, which are used as an input to the GRU model to capture sequential dependencies and users' long-term preferences. Assume a set of users ( 1 , 2 , 3 , . . . , ), and a finite set of industry category code (SIC) ( 1 , 2 , 3 , . . . , ): each user has made several transactions within different industry categories from set I in the past. We use S to denote the transaction sequence a user made in chronological order ( 1 , 2 , 3 , . . . , ), where indicates the transaction user made at a relative time step t [22]. SEQNBT takes the user's past L transaction sequence as input and predicts the SIC code and transaction amount of his/her next most likely transaction. Note that the raw recommendations in our model are industry classes (SICs) along with transaction amounts. SICs get mapped to specific nearby and/or affordable merchants to provide business value to end-users.
Our models are trained on a real-world credit card transaction dataset. Each raw transaction record contains the user's hashed cardholder number, transaction date, transaction sequence number, net billed amount, supplier number, merchant category code, industry category code, and industry category description. Detailed information about the transaction dataset will be introduced in Section 4.1.

Auto-encoder
Most existing work utilizes an embeddings matrix [21,25] or 1-of-N encoding [11] to represent items (industry code of transactions in our case) that users interacted with. However, extra item information, such as text descriptions and item images, can also be exploited to improve recommendation performance [8], especially when users' profiles are not available [12]. To better represent users' credit card transactions, we make use of additional information, including textual descriptions of each industry and transformed features of each transaction; from there, we apply a stacked autoencoder to extract efficient representations of each transaction.
A stacked auto-encoder is an unsupervised neural network model capable of learning a dense representations of input data [9]. Figure 2 depicts the architecture diagram of the stacked auto-encoder model. It always consists of two parts: An encoder that maps inputs to a latent representation (encoding), and a decoder that reconstructs the latent representation back to an output in the input  space [9]. The encoder part and decoder are both symmetrical to the central encoding layer (bottleneck layer) We performed extensive feature transformation and generated aggregated features on the user's overall spending behavior (e.g., number of transactions, mean/median/total transaction amount), the user's spending behavior (e.g., reservation price, the highest price a user is willing to pay for a product) within different merchant categories (e.g., restaurant, transportation, hotel), and on each merchant across all users (e.g., total number of transitions, mean/median/total transaction amount). We also used a pre-trained Bidirectional Encoder Representation from Transformers (BERT) model to generate embeddings of SIC descriptions. The pre-trained BERT model, bert-base-uncased, is made available by Huggingface, an AI community provider of open-source NLP technologies [24]. All aggregated transaction features along with transaction amount and SIC embedding are concatenated and fed into the encoder and reconstructed through the decoder. As with all stacked encoders, the difference between original input and reconstructed output are optimized during training.
After obtaining the trained auto-encoder model, each transaction that user made previously is encoded as a d-dimension vector (d=32 in our case) by the encoder model. Therefore, to predict user's next most likely transaction, a user's previous L transactions at time point t are represented as an encoding Matrix ( × ) as equation (1), acting as the primary input to the SEQNBT model.
is 32-dimension encoding for a transaction made by the user u at time step t. The user's next transaction encoding +1 will be used as target value. The decoder is used to decode the predicted transaction and retrieve the original industry code and transaction amount for the next most likely transaction a user is likely to make. The detailed decoding process will be illustrated in Section 3.3. (1)

Gated Recurrent Unit (GRU) layer
Recurrent Neural Networks (RNN) are a class of neural networks that model sequence data and make predictions by considering both the current input as well as what it has learned from the inputs it previously received. RNNs usually have short-term memory and are incapable of capturing long-term dependencies because of gradient vanishing or exploding, (i.e., the gradient is decreasing or increasing exponentially with respect to the number of neural layers and never converges to the optimum). GRU solved these issues by introducing two vectors: an update gate and reset gate, which can be trained to determine (a) what information should be kept without vanishing through time and (b) what information is irrelevant to the prediction that can be removed. GRU has been widely applied in SRSs [10][11][12]. Our proposed SEQNBT model is based on multiple GRU layers to capture dependencies and user preferences from past transaction sequences and to output a next most likely transaction.
(2) The input of these GRU-based models usually consists of item embeddings, and / or user's embeddings, and / or item category embeddings [5], but temporal features are often neglected. Temporal features have a significant impact on the user's purchase behavior. Therefore, in addition to encodings generated from the auto-encoder to represent user's transactions, we also consider time factors in our proposed SEQNBT for next most likely transaction prediction. The temporal features (marked in lavender circle in "Transaction Encoding" box in Figure 1) include day of week, day of month, whether the transaction was on a weekend, and the time delta from previous transactions in days; these features are generated and concatenated with the aforementioned encoded sequence (marked in blue circle in "Transaction Encoding" box in Figure 1). More formally, the input sequence of SEQNBT model for a user u at time step t is denoted as , in which is the transaction encoding of the user u at time step t, and indicates temporal features of the transaction the user made at time step t. The encoded transaction plus the temporal features is then fed into the SEQNBT model to obtain a vector representing the next most likely transaction.

Transaction decoder
Once the SEQNBT model was trained, we evaluated SEQNBT on an out-of-sample testing dataset to predict encodings for each user's next predicted transaction. A predicted transaction encoding (32dimension) is then decoded by the decoder model into two parts: (1) the concatenated transaction features vector (16-dimension), and (2) the SIC embedding vector (768-dimension). We calculated cosine similarity between predicted SIC embedding and all SIC embeddings in the feature store table storing BERT representations for each SIC; the result of these comparisons is an SIC number ranked by cosine similarity score. Predicted transaction amount is among the decoded transaction features (shown as a green circle in Figure 1).

Model Training
3.4.1 Auto-encoder training. The auto-encoder model is trained separately from SEQNBT model. We used a stacked auto-encoder with symmetrical architecture regarding the central hidden layer. To train the auto-encoder model, the pre-transformed aggregated transaction features (marked in gray circles in Figure 2) concatenated with transaction amount and BERT embedding of SIC description of each transaction are used as inputs, and the encoder deterministically maps the input vector (784-dimension) to a hidden representation by: ℎ = ( + ) (3) Where W and b are weights and bias of encoder, and a is activation function Scaled Exponential Linear Unit (SELU) denoted as: The decoder reconstructs the resulting hidden representation ℎ back to 784-dimension vector in input space as: Where ′ and ′ are weights and bias of decoder. We used a custom loss function that calculates the sum of mean square error of the original and reconstructed transaction features (|| 1 − 1 || 2 ), as well as the mean square error of the original and reconstructed SIC embeddings (|| 2 − 2 || 2 ): Where is the total number of training samples. The loss function is minimized to find the optimal parameters = { , ′ , , ′ } during the training process. The hyperparameters, including the number of encoder layers, number of units in each encoding layer, activation functions in each layer, batch size, and learning rate, are tuned by sequential search of hyperparameter space via Hyperopt on a validation dataset. Hyperopt is an open-source python library for optimizing hyperparameters of machine (deep) learning models [2]. We utilized the Adam optimizer for efficient computation. The optimized hyperparameters of auto-encoder are listed in Table 1. Once the auto-encoder model is trained, the encoder model is used to generate transaction encodings for every single transaction in our dataset. The transaction encodings are stored in a specialized database called a Feature Store. Encodings are saved in an Offline Store for lookups while training the SEQNBT model, and they are also saved in an Online Store used for fast lookups data when running real-time scoring in a production environment.

SEQNBT training.
For each user, the transaction encodings are ordered in chronological order by transaction date and transaction sequence number. We extract training observations using a sliding window of size L + 1 over the user transaction encodings, to have L successive transaction encodings as input and the +1 encoding as the target to be predicted. The sliding window moves 2 steps each time to avoid large overlaps on transaction sequences between observations of the same user.
To train the SEQNBT model, the encoding sequence of size L along with temporal features are fed into GRU layers and a fully connected layer to predict a 32-dimension "encoding" of the next transaction. The mean squared deviation between the predicted "encoding" and the target transaction encoding is to be minimized. We adopt an Adam optimizer with batch size of 200. In this paper, we follow the best practices in other research that use similar learning rate decay and dropout methods [9,11]. The learning rate is scheduled to decay exponentially with initial learning rate of 0.001 and decay rate of 0.9 every 10 5 steps. A dropout layer with dropout ratio 0.25 is applied following each except for the last GRU layer, to avoid over-fitting. We optimized the hyperparameters, including number of GRU layers, number of RNN units in GRU layer, epochs, decay rate and batch size, by running 50 experiments at sequential selected points of the parameters space using hyperopt. The best hyperparameters of SEQNBT model are summarized in the Table 1.

EXPERIMENTS
We compared our proposed model with a set of state-of-the-art models, including GRU4Rec [11], a GRU-based model to recommend next item in a session, and AttRec [26], a self-attention based model for next item recommendation, on our real-world banking transaction dataset. These two models, GRU4Rec and AttRec, do not take into account item context but rather employ user and item embeddings. Source code for GRU4Rec and AttRec are available online 1 . We also studied the effect of sequence length L on model performance.

Dataset description
We conducted our experiments on business travel credit card transaction data, containing 2.7M purchase transactions for 46K cardholders at 186K merchants within 251 industry categories from September 30, 2018, to March 31, 2019. Each raw transaction contains hashed cardholder number, transaction date, transaction sequence number, transaction amount, supplier number, merchant category, industry category number, and industry category description. We preprocessed the raw transaction dataset by removing users who made fewer than 10 transactions at fewer than 5 distinct merchant categories to avoid the cold-start issue [26]. Descriptive statistics before and after processing are summarized in Table 2. The density of a dataset is defined as the ratio of total number of interactions and total number of potential interactions between users and items. The density of our transaction dataset is about 34.42% before pre-processing, which is much denser than other 1 https://github.com/slientGe/Sequential_Recommendation_Tensorflow commonly used public datasets, whose density is often less than 7% [15,26]. We observed our model outperforms the two baseline models on our dense transaction dataset; we discuss this further in Section 4.3.2.

Evaluation metrics
We adopt the commonly used evaluation measures of mean average precision (MAP) and Recall at varied cut off values (K = 1,5,10) to evaluate the performance of the SEQNBT model. AP (averaged precision) is the sum of precision@k for different value of k ranging from 1 to K and divided by total number of target items.
Where T is total number of target items ( = 1 throughout the paper). P(k) is the precision of the kth recommendation, and rel(k) indicates whether the kth recommendation was relevant (rel(k)=1) or not (rel(k)=0). MAP@K is averaged AP@K across all users. Higher values approaching 1 for MAP@K are better, whereas 0 signifies no matched industry code. Note that mean reciprocal rank (MRR) at K, an another commonly used evaluation matrix, leads to the same results as MAP@K in terms of predicting the (one) item, therefore, we do not include MRR in our work.
Recall@K evaluates the proportion of desired (target) items that are among the top K predictions in all test cases, without considering the rank of items in the prediction list. It is defined as the ratio of the total number of relevant items among the top K predictions to the total number of target items. Recall@K for each user is either 0 or 1 in the case of predicting the next (one) item. Averaged Recall@K across all users is calculated to evaluate model performance.

Model analysis and discussion
We evaluated the proposed SEQNBT model against two popular baseline models, GRU4Rec and AttRec, on our banking transaction dataset. The two baseline models are first trained to reproduce the performance reported in these two papers [22,26] on the MovieLens-100K dataset, i.e., before being tested our banking transaction dataset. Note we only train the GRU4Rec and AttRec on the MovieLens dataset to extrapolate hyperparameters (e.g., number of layers, learning rate) for use on our credit card dataset. The hyperparameters used in the two baseline models are summarized in Table 3. We also studied the effect of sequence length on performance of SEQNBT model by varying sequence lengths from 3, 5, and 7 to 10.
4.3.1 Impact of sequence length on performance. The impact of sequence length on SEQNBT model performance is presented in Figure 4. The performance of SEQNBT increases as sequence length  increases from 3 to 5, then drops as sequence length gets longer (e.g., to 7 or 10). This may occur because, if the length of input sequence is too short (e.g., L = 3), then there is not enough data to track a user's preferences, especially when the user made three transactions in the same industry category (e.g., a user made three successive transactions in the same restaurant category). The performance reduction when the sequence length is long (L > 5) may result from a smaller number of training samples, a finding which is aligned with previous work [8]. Sequence length exhibits a similar effect on prediction of transaction amount. The lowest mean absolute error (MAE) on predicted transaction amount we obtained so far is $56.73 on the testing dataset with length of input sequence of 5. We observed our model performs slightly better on predicting transaction amount of the next most likely transaction for low-spend industry categories (e.g., retailing stores, taxis, restaurants) than for high-spend industry categories (e.g., airlines, hotels).
The MAE of predicted transaction amount is positively correlated (0.72) with averaged transaction amount across all SIC categories, as shown in Figure 4. This may result from the imbalanced nature of our transaction dataset, where around 59% of transactions are within the low-spend industry category of "restaurant" (31%) and "taxicab" (28%), while transactions within high-spend categories are less frequent. Future work may improve upon the accuracy of predicted transaction amount by: (1) collecting (or performing data augmentation on) more transactions within high-spend categories; (2) optimizing the SEQNBT model specifically on transaction amount. Table 4 summarizes the experimental results of our SEQNBT model and two baseline models on our banking transaction dataset. The two baseline models are pretrained on MovieLens-100K datasets to ensure the model can reproduce the results reported in previous work [11,26]. The length of input sequence and target is five and one, respectively for all the tests. Our model outperforms the other two baseline models in both prediction accuracy and ranking quality. We attribute the superior performance of the SEQNBT model visà-vis AttRec and GRU4Rec due to considering extra item context, including SIC embeddings, as well as temporal information. Previous research found that item context may yield better results than just user and item embeddings [8,12], which are central to the AttRec and GRU4Rec approaches.

ML ARCHITECTURE
ML code is only a small fraction of a real-world ML system: The rest of an ML system relates to configuration, data sourcing, feature extraction, data verification, server management, process management, serving management, and model monitoring [18]. ML systems, as a consequence, not only share design, build, and maintenance challenges with traditional software systems but also introduce new challenges. The use case presented above for next-best transaction prediction requires complex data processing for the SIC BERT embeddings, transaction encoder, sequential model, and transaction decoder. In total we maintain five separate models, aggregate data at the user and merchant levels, employ raw transaction features (e.g., transaction amount), and store reference data and intermediate model outputs in a feature store. In addition, our model outputs are persisted to an insights store to track consumerready predictions that can then be used as labeled data for model retraining and continuous training purposes. Our models and ML architecture assets are part of EY broader product platform, Nexus. Nexus help enables the world's leading financial services firms to re-imagine, create, and run better ways of providing growth in the digital economy. The platform provides a versatile, cloud-ready framework, with ready-to-use building blocks and real-time intelligence. Nexus provides customers with personalized experiences, at the right time, in the right channel to demonstrate situational awareness and orchestrate both front-end journeys and back-end business processes. The platform provides these capabilities by capturing events, processing triggers in realtime, generating insights and nudge actions, harnessing customer responses, and in this use case context, implementing marketing campaigns. Nexus builds on the growing popularity of event-driven architectures, which in terms of industry adoption according to one Figure 4: Comparison between averaged MAE of predicted transaction amount and averaged transaction amount across industry categories (SIC). The blue bar represents the averaged MAE on predicted transaction amount at each SIC category, and the orange bar represents the average transaction amount at each SIC category. recent survey, are followed by lambda, microservices/SOA, layered, and workflow approaches [19]. Figure 5 shows Nexus' logical architecture. The underlying component enabling the Nexus platform is its event engine, which translates incoming signals into directed acyclic graph (DAG) event maps. Depending on the specific context, these events are used to kick-off ETL or feature generation pipelines, scoring procedures (e.g., the SEQNBT framework), customer nudges, etc. The insight engine facilitates model execution and supports feature store lookup, communication with downstream services, and sidecar patterns, such as logging and audit. Lastly, the customer experience management (CEM) module is responsible for deciding which messages to send, i.e., arbitrating amongst multiple, competing use-case driven communications to best support enterprise business objectives and to not overwhelm the end-user.
We can use Nexus to embed the recommendations into offersbased journeys: That is, as soon as a customer enters a qualifying location, we can instantaneously update his or her available offers. While the offers themselves are identified by our SEQNBT and related models, specific delivery and notification preferences are handled by CEM. Nexus, then, is designed to facilitate the following: (1) real-time customer location tracking, (2) regularly scheduled user preference updates, and (3) real-time offer generation, delivery, and qualification. The ML architecture is largely supported by a message queue event handler that first identifies and qualifies customer locations. If the customer has entered a new location, then a set of supporting microservices requests a newly generated set of recommend industries from SEQNBT. SEQNBT is regularly retrained on a scheduled basis on a regularly refreshed set of credit card transactions. Lastly, once we have a list of likely industries for the next most likely transaction, and a list of qualifying merchants in those industries, we perform a re-ranking process whereby only merchants within a nearby vicinity of the customer are recommended.
Modern ML architectures such as Nexus are emerging as the gold standard of contemporary insight service, which should be real-time, contextualized, and measurable in terms of efficacy and business impact. Nike recently published a survey of their recommendation system work; one model, ALSNN, had "won nearly all A/B tests with respect to key APIs, such as revenue-per-viewer and has generated millions of dollars in incremental revenue" (pp. 530) [7]. Nike combines multiple expert and stacked models to leverage several recommendation strategies, even addressing nonpersonalized approaches to solve the cold-start problem.
While Nike's recommendation model is tailored to its business model and core offerings, we anticipate that SEQNBT will work well across different product, digital, and financial data domains: Future work will necessarily entail testing the general SEQNBT framework with interaction and other recurring behavioral data to ascertain how well the framework generalizes. Additionally, we will continue to use the Nexus architecture to deploy, test, and monitor any future iterations of SEQNBT. For example, one planned revision at the time of writing is to incorporate self-attention into SEQNBT to calculate transaction sequence attention scores, which will help to identify more relevant items [26].

CONCLUSION
In this paper, we proposed the SEQNBT model to predict both transaction amount and industry category of a user's next most likely transaction. Our method uses a stacked auto-encoder model to extract insightful transaction representations by incorporating more contextual information. When incorporated into the sequential model, the encodings and temporal features result in better performance compared to the pure GRU-based and Attention-based models. Our approach makes it possible to predict the amount of money a user is willing to pay for his or her next transaction. Further, the predicted SIC helps identify which industry the purchase will be in, so that we can identify a suitable merchant.
We also presented a high-level architecture for delivering predictions to end users through EY Nexus product platform. We anticipate driving future iterations of SEQNBT through Nexus across a variety of data domains to measure business impact in a variety of use case contexts, not just within the offers space but also beyond into experience interaction management, as well.