Bansi Khachar, Matthew Prado, Lucynda Young, Saurabh Parate
Published
May 6, 2026
Narrative Summary of the Business Problem
The client operates an ecommerce platform struggling to convert site visitors into paying customers. On January 31, 2021, the platform generated 26,489 events from 2,546 distinct users, yet only 17 purchases were completed — a conversion rate of just 0.7%.
The data reveals that users are actively engaging with the platform but are abandoning the funnel at multiple stages before reaching purchase. The core business problem is not a lack of traffic; it is a broken conversion architecture that is leaking potential revenue at every stage of the funnel, with the most severe losses occurring at the product discovery stage.
Why it matters:
High traffic with low conversion signals a disconnect between user intent and purchase completion
Unidentified drop-off points make it impossible to allocate marketing spend efficiently
Without attribution data, the business cannot determine which funnel stages drive the most conversions
Interpretation: The platform recorded 26,489 total events from 2,546 distinct users but completed only 17 purchases, giving an overall conversion rate of 0.7%. Fewer than 1 in 100 users who visited the site ended up buying something.
Interpretation: The bar chart makes the funnel collapse immediately visible. The dramatic drop from 2,499 page views to 539 product views is the single biggest opportunity — most users are bouncing before they ever see a product.
Model used: Markov Chain Attribution (Order 1) — models transition probabilities between each funnel stage and estimates each stage’s contribution using a removal effect. More reliable than first-touch or last-touch because it accounts for the full journey.
Heuristic Attribution — Conversion Counts by Model
Funnel Stage
First-Touch
Last-Touch
page_view
17
0
begin_checkout
0
1
purchase
0
0
add_to_cart
0
2
view_item
0
14
Interpretation: First-touch assigns all 17 conversions to page_view because every buyer started there. Last-touch gives 14 of 17 to view_item because that was typically the final step. Neither model tells the full story — one only sees entry, the other only sees exit.
Number of simulations: 100000 - Convergence reached: 0.47% < 5.00%
Percentage of simulated paths that successfully end before maximum number of steps (40) is reached: 93.79%
[1] "*** Install ChannelAttribution Pro for free running install_pro(). Visit https://channelattribution.io for more info. Set flg_pro=FALSE to hide this message."
Interpretation: The Markov model distributes credit relatively evenly across all five stages, confirming that every touchpoint plays a meaningful role. page_view (26.4%) and view_item (25.9%) carry the highest combined weight at over 52% of total attributed credit, reinforcing that the top of the funnel is where the most conversion influence lies.
[1] "*** Install ChannelAttribution Pro for free running install_pro(). Visit https://channelattribution.io for more info. Set flg_pro=FALSE to hide this message."
Interpretation: The heatmap shows the probability of a user moving from one funnel stage to the next. Darker blue cells indicate stronger transitions. Any light-colored cells on the conversion diagonal show where transition probability is weak — those are your highest-priority friction points.
The 78.4% drop between page_view and view_item is the highest-priority problem. Of 2,499 users who landed on the site, only 539 ever viewed a product. Most users are bouncing before they engage with any product at all.
Actions:
Add prominent product categories and featured items above the fold
Improve internal search and filtering so users find relevant products quickly
A/B test homepage layouts to identify which entry points drive the most view_item events
Expected impact: A 10-point improvement adds approximately 250 more users into the product funnel, more than doubling the downstream conversion pool.
Recommendation 2 — Optimize the Product Detail Page
Of the 539 users who viewed a product, only 98 added one to their cart — an 81.8% drop-off. Users are reaching the product but not acting on it.
Actions:
Add customer reviews and star ratings to all product pages
Introduce urgency signals such as low stock indicators or limited-time offers
Rewrite product descriptions to lead with benefits rather than features
A/B test CTA button copy, size, and placement
Expected impact: A 10-point improvement increases add-to-cart users from 98 to approximately 152, directly expanding the checkout pool.
Recommendation 3 — Reduce Checkout Abandonment
Of the 54 users who began checkout, only 17 completed a purchase — a 68.5% abandonment rate. These users had clear purchase intent, so the barrier is the checkout process itself.
Actions:
Implement guest checkout to remove account creation friction
Reduce required form fields to the minimum necessary
Display security badges, accepted payment methods, and return policy prominently
Ensure checkout is fully optimized for mobile
Expected impact: Reducing abandonment by 20 points would increase purchases from 17 to approximately 27, lifting CVR from 0.7% to approximately 1.1%.
Limitations
Limitation
Detail
Single-day snapshot
Covers only Jan 31, 2021. Cannot account for seasonal variation, day-of-week effects, or campaign cycles. All findings are directional.
Anonymized users
user_pseudo_id does not persist across devices. One real user on mobile and desktop counts as two, inflating distinct user counts and deflating true CVR.
No channel data
Without source and medium attribution, it is impossible to determine whether paid, organic, direct, or referral traffic converts differently.
Small purchase sample
17 purchases carry high statistical uncertainty. Results should not be treated as definitive without replication across a broader time window.
Shapley values undefined
All 17 converting users passed through identical funnel stages, leaving no variation to calculate marginal contribution. A minimum of 50–100 conversions with varied paths is needed.
Reproducible Code & Instructions
Requirements
Install the following R packages before rendering: