Platform Guide • Behavioral Model Series
Part 9 of 10

Conversion Readiness, Hover Signals, and Scroll Intelligence

Two shipped models — conversion readiness and scroll depth intelligence — plus the hover and cursor signals that feed them: how ClickStream scores purchase likelihood in real time and reads how visitors move through your content.

March 2026

Introduction Part 1: Intent, Frustration & Engagement Part 2: Value & Anomaly Part 3: Confusion & Emotion Part 4: Decision & Regret Part 5: Churn & LTV Part 6: Abandonment & Timing Part 7: Affinity, Friction & Next Action Part 8: Momentum, Entropy & Attention Part 9: Conversion, Hover & Scroll Part 10: Price, Loyalty, Micro-Conversion & Bot Detection

What You'll See in the Dashboard

Open the Intelligence tab to find the Conversion Readiness and Scroll Depth Intelligence cards. Conversion Readiness shows a real-time 0–100 score, recomputed on every event. Scroll Intelligence shows a visual heatmap of where this visitor paused, re-read, and skipped.

Business Actions: Create a Rule to trigger a limited-time offer when Conversion Readiness exceeds 65. Feed Scroll Intelligence into your content team to identify which sections lose readers.

Model 19: Conversion Readiness

The conversion readiness model produces a single number that answers the most important question in real-time analytics: How close is this visitor to converting during this session?

Unlike the intent score (Model 1), which classifies motivation level, conversion readiness is a 0–100 score computed deterministically from weighted behavioral signals on every event — there is no batch retraining cycle, because there is nothing to retrain: the same event stream always produces the same score, in real time at the edge.

The 9 Conversion Signals

The signal names and weights below are illustrative of how weighted behavioral scoring works — the shipped model's exact inputs differ, and model weights are tunable per site.

SignalWeightDescription
Funnel stage reached0.22Deepest conversion funnel stage visited (browse → product → cart → checkout → payment)
Historical conversion rate0.16This visitor's personal conversion rate from prior sessions
Session intent score0.14Current intent model output (Model 1), providing behavioral context
Time in conversion zone0.12Active time spent on checkout, pricing, or payment pages
Cart value momentum0.10Whether the cart value is increasing (adding items) or decreasing (removing)
Form completion progress0.08Percentage of required checkout/signup form fields completed
Device & channel context0.07Conversion rates vary by device type, traffic source, and time of day
Frustration dampening0.06Current frustration score inversely affects conversion probability
Social proof exposure0.05Whether the visitor has seen reviews, testimonials, or trust badges

Score Freshness

Scores are recomputed synchronously as each event is ingested — the full 26-model scoring pass benchmarks at p95 under 3 ms per event (a CI-enforced benchmark), so conversion readiness is always current as of the visitor's most recent action. There is no recalibration cadence or refresh schedule: real-time scoring is the only mode.

Readiness Bands

Score (0–100)TierWhat It MeansAction
0–15ColdVery unlikely to convert this sessionContent nurturing, email capture
16–35WarmingSome conversion signals presentSocial proof, case studies
36–55ConsideringActive evaluation, could go either wayUrgency messaging, limited offers
56–80LikelyStrong conversion trajectoryRemove friction, streamline checkout
81–100ImminentStrongest readiness signals presentUpsell/cross-sell, order bump
How You Could Calibrate Readiness Scores Against Your Own Conversion Data

Note: this is not part of the ClickStream platform. Readiness is a deterministic heuristic score with no training loop. If you want calibrated conversion probabilities, you can fit Platt scaling downstream against your own conversion outcomes:

function calibrateProbability(rawScore: number, params: PlattParams): number { // Platt scaling: P(y=1|f) = 1 / (1 + exp(A*f + B)) const calibrated = 1 / (1 + Math.exp(params.A * rawScore + params.B)); return Math.round(calibrated * 100); } // Example: fit Platt params on your own predictions/outcomes pairs function fitPlattParams(predictions: number[], outcomes: boolean[]): PlattParams { // Gradient descent to minimize log-loss between // calibrated predictions and actual outcomes let A = -1, B = 0; const lr = 0.001; for (let epoch = 0; epoch < 1000; epoch++) { let gradA = 0, gradB = 0; for (let i = 0; i < predictions.length; i++) { const p = 1 / (1 + Math.exp(A * predictions[i] + B)); const y = outcomes[i] ? 1 : 0; gradA += (p - y) * predictions[i]; gradB += (p - y); } A -= lr * gradA / predictions.length; B -= lr * gradB / predictions.length; } return { A, B }; }

Hover and Cursor Signals

Cursor behavior — dwell, hesitation over CTAs, erratic movement — feeds several of ClickStream's shipped models, including frustration detection, engagement scoring, and stealth-bot detection (mouse entropy). ClickStream does not ship a standalone "hover intent" score; these signals surface through the intent, engagement, and frustration scores in the Signals snapshot.

Model 17: Scroll Depth Intelligence

Scroll depth intelligence goes far beyond "the user scrolled 73% of the page." It analyzes how the visitor scrolled — the rhythm, pauses, re-reads, and velocity changes — to extract rich behavioral signals about content engagement and interest.

The 8 Scroll Intelligence Signals

The signal names and weights below are illustrative of how weighted scroll scoring works — the shipped model's exact inputs differ, and model weights are tunable per site.

SignalWeightDescription
Maximum depth reached0.20Deepest scroll position as a percentage of total page height
Content completion rate0.18Percentage of content sections the viewport has paused on (300ms+ per section)
Scroll velocity profile0.15Speed pattern: fast-skip vs. slow-read sections mapped to content zones
Pause-to-read ratio0.14Time spent paused vs. actively scrolling (high ratio = careful reading)
Re-scroll events0.12Scrolling back up to re-read a previously viewed section
Fold interaction0.08Whether the visitor scrolled past the initial viewport fold (and how quickly)
Scroll-to-action correlation0.07Whether scrolling to a CTA section correlates with interaction
Content zone dwell time0.06Time spent in each content zone (hero, body, pricing, footer)

Scroll Patterns and What They Reveal

Five archetypes worth watching for — a useful way to read scroll telemetry, not a fixed ClickStream classification:

PatternScroll BehaviorInterpretationAction
The ReaderSlow, steady scroll with regular pausesCarefully consuming content top-to-bottomServe related content, newsletter prompt
The ScannerFast scroll with brief pauses at headingsLooking for specific informationImprove headings, add table of contents
The Bottom-LinerFast scroll to bottom, then slow scroll upChecking conclusion first, then reading detailsPut key info in summary/conclusion
The BouncerScrolls to fold, stops, leavesAbove-the-fold content did not convince them to continueOptimize hero section, value proposition
The Re-ReaderMultiple scroll-up events to specific sectionsComplex content requiring re-reading, or comparison with later contentAdd anchored navigation, expandable details
Under the Hood: Scroll Zone Analysis (Illustrative Pseudocode)
interface ScrollZone { startPercent: number; endPercent: number; dwellMs: number; scrollVelocity: number; // px/sec within zone revisits: number; contentType: 'hero' | 'body' | 'pricing' | 'cta' | 'footer'; } function analyzeScrollDepth(zones: ScrollZone[]): ScrollIntelligence { const maxDepth = Math.max(...zones.map(z => z.endPercent)); const totalDwell = zones.reduce((sum, z) => sum + z.dwellMs, 0); const totalScroll = zones.reduce((sum, z) => sum + Math.abs(z.endPercent - z.startPercent), 0); const pauseRatio = totalDwell / (totalDwell + totalScroll); const reReadCount = zones.filter(z => z.revisits > 0).length; // Content completion: sections with 300ms+ dwell const completedSections = zones.filter(z => z.dwellMs >= 300).length; const completionRate = completedSections / zones.length; return { maxDepth, completionRate: Math.round(completionRate * 100), pauseRatio: Math.round(pauseRatio * 100), reReadSections: reReadCount, pattern: classifyScrollPattern(zones), score: calculateScrollScore(maxDepth, completionRate, pauseRatio, reReadCount) }; }

How Readiness, Frustration, and Scroll Interact

These scores provide overlapping but distinct views of purchase readiness:

CombinationInterpretationAction
High Readiness + Low Frustration + Deep ScrollReady to buy: has read everything and is moving smoothly toward checkoutMinimize checkout friction, show trust badges
High Readiness + High Frustration + Shallow ScrollWants to buy but something is in the way (skipped product details, hit friction)Surface reviews, guarantees, key product info; fix the friction point
Low Readiness + Low Frustration + Re-Read ScrollDeep research phase: comparing options carefullyComparison tools, side-by-side features
Low Readiness + Low Engagement + Bouncer ScrollNot engaged: landing page failed to hook themA/B test hero section, improve value proposition

Conversion readiness tells you how close the visitor is to buying. Frustration tells you what is getting in the way. Scroll intelligence tells you how deeply they have evaluated your offering. Together, they enable truly intelligent real-time personalization.

Configuration & Tuning

Scoring is tunable per site — ClickStream's per-site scoring configuration lets you adjust how models weigh their behavioral inputs:

Previous in Series ← Part 8: Momentum, Entropy & Attention

Predict Conversions Before They Happen

Real-time conversion readiness, cursor signals, and scroll intelligence tell you exactly when and how to act. Stop reacting — start predicting.

Start free