Hello everyone,
it has been a while and I decided to write this article based on the little information there is out there on this topic.
As I was working to build such a filter in Customer Journey Analytics, I wanted to confirm the logic I have been working on with some peers. However, I could not find any relevant post about that subject in the main channel I was looking.
Even internally at Adobe, the construction of such filter or audience has always been vague and only hint could be provided.
Therefore, for my own documentation and for sharing that with the community, I decided to write about it. It would be mostly focused on AEP Web SDK and Customer Journey Analytics, but a translation to Adobe Analytics would not be that hard.
As usual, there may be some elements that are not completely reflecting YOUR implementation and if you have any idea on how to improve that logic, feel free to share in the comments of that post. I will try to update that article later with the most relevant comments (if any).
What is cart abandon ?
The first element that needs to be defined is the cart abandon definition itself.
Would it be a Cart open ? If yes for How long ? Do you consider the cart abandoned after 10mn or a day ? Or 10 days ?
Also, is the user really abandoning the cart if he never check it first ?
Do you mean that the Cart is abandon if the user has added an element on the basket and left ?
What about leaving in the middle of the purchase process ? Is it that funnel abandon? Or the same category ?
As you have understood, while the Cart Abandon topic is a favorite one, not everyone has the same definition of the cart abandon.
You obviously need to define what is your logic or understanding.
There is no right or wrong here, and complex does not always mean better.
In my example, I would define cart abandon in very simple terms:
“Anyone that has opened a cart and did not purchase”
We would be able to do a variant of that so you could define more logic into this. Also, it will be sufficient for the demonstration of what I want to show.
Cart Tracking
There are several ways you can track a cart, and I am a big fan of custom field groups to track your own data points.
I am not the biggest fan of the default field group provided by Adobe Experience Platform, as most of my customers have very specific data model that do not fit in these “out-of-the box data models”.
However, coming up with a relevant and working data model is not something easy.
Especially for newcomers to Adobe Experience Platform, lots of elements to be known and coming from Adobe Analytics is usually hard to represent the possibility of what an XDM schema can do.
Therefore, the default product tracking from Adobe Experience Platform schema is usually a good base to start.
The tracking via out of the box Field Groups consists of 2 main nodes for products:
- productListItems
- commerce
Normally you add both nodes via the addition of the Commerce Details field group.
In the commerce node, you will find different sub nodes available where you could add a value when the event is actually representing that state.
Per example, for Cart Open, the following path will contain the value 1.
commerce.productListOpens.value
We will use that element to define that a Cart has been open. In the Analytics world, the first product added to the basket normally generated this event.
The additional cart addition will only be represented by that path with the value representing the amount of item added:
commerce.productListAdds
Finally, for the order, the following path will contain the value 1.
commerce.purchases.value
Do not confound the value to pass there, with the value to be passed on the following path, that represent the value of the order:
commerce.order.priceTotal
In order to better represent them in the report in CJA and because you could have data coming from your Sale Platform, and we are talking about web tracking in CJA so with Web purchase data, we will rename all elements with the following name:
AEP Path | CJA Name |
commerce.productListOpens.value | Web Cart Open |
commerce.productListAdds | Web Cart Addition |
commerce.purchases.value | Web Purchases |
commerce.order.priceTotal | Web Revenue |
This is, by the way, how I try to name thing for my clients (if they agree)
Cart Abandon Logic
Now it is the time to explain what type of logic will need to be applied on Customer Journey Analytics, or Adobe Analytics if you translate these path to scOpen or purchase event.
Option 1: Simple logical conditions
The first possibility would be to get everyone that has done a CartOpen and did not do a purchase.
This filter would look like this:
The main things of this logic are the following:
- The global scope of that segment is Event. It means that this segment evaluates each event for each container
- The containers inside are People based. It means that it will return the whole data for the people that has matched at least once the condition.
- The 2nd container is an exclude, so anyone that has match this condition is returned and then exclude from the global segment.
- The Logical operator is an AND so both elements are needed for the data to be returned
In a simple manner, we can now get the people that has open a Cart and never purchased. It does what we want.
However, we have a clear flaw on this logic as when you are looking at a long time range, it could be that you are excluding people that has already purchased but still have a cart open.
I would evaluate that this filter is good when you want a filter that looks for very recent events.
In the last 7, max 30 days, you could reasonably use this filter and get good results, but for analysis over long time frame, it is getting bias towards “never purchasers“, and not “abandoners“.
In order to better visualize the different type of journeys that are considered, I tried to add a representation.
You can see that only data from visitor 2 will be returned because of the matching purchase or the lack of Cart Open in the other visitors.
Option 2: Sequential Segment
The 2nd option would be to exclude the people that did a purchase after a cart has been opened.
For that we would need to consider a sequential segment.
At the same time, we need to restrict the condition of the inclusion, we do want to exclude everyone that has purchased after a cart Open but we do not want to include everyone, therefore only including the people that have done a cart Open.
So the filter looks like this:
As you can see, we do have also 2 containers:
- The global filter is Event based, so we evaluate each of the hit.
- The first container is Event based as well, so the container will only return the event when a Web Cart Opens is in the event/payload.
- The 2nd container is People based and is sequential, it means that everyone that did that sequence is considered.
- If you look closely, we are also using the only before capability. It means that the filter is looking Hit by Hit ante chronologically to check if there has been a Web Purchase and before a Web Cart Opens. Once the first match is found (again, ante chronologically), every hits after the first condition is matched.
- We are also excluding that 2nd container and join both with an AND.
As we only exclude the before sequence, if any of the order has been followed by a Cart Opens, they will also be considered in the population of the filters. That is the big plus.
The same way that before, I tried to visualize the different journeys:
You can see that I am differentiating the data that are technically excluded due to the container condition and the events that are not considered to be returned (in red) because they do not match any inclusion condition.
In this example, data from visitor 2 and 4 will be returned.
If you are not sure to understand the concept of only Before and sequential segment, I recommend you to check my articles on the segmentation logic in Adobe Analytics.
It contains all insights related to that matter.
When comparing the results of the 2 filters, and again you should ALWAYS try to validate your filters, you can see that the population returns are different and as expected, the sequential-based filter is returning more people and more Web Cart Opens.
Conclusion
I think both filters can be used depending on the context of your need. You can also time logic on top.
It would usually reduce the discrepancy between the 2, because the chance of creating a new Cart Open event is reduced with the timeframe.
Finally, I would consider these Filters with caution when you want to analyze the data being returned. The main idea of these filters are to be used for creating audience and re-activate them via Adobe Experience Platform.
When doing data analysis on these filters, you would need to remember that both of them are event based and returned only the event that match the condition you have defined.
The sequential segment, per example, would only return data where there has been a Cart Open, while the non-sequential filter would return the whole data of the users as long as they have been doing a cart open.
You can verify that by the event/occurrence metric:
You can play with the scope of the filter of the first filter to only return the session data per example, to be more precise. Just be careful out there.
I hope this article is useful for building and I filled a gap on the Adobe Data Analysis.
If you have other scenarios that you would like to discuss, don’t hesitate to comment as well or send me a note, I will try to cover that.