The activity model computes 7 behavioral metrics per wallet to characterize trading patterns, engagement consistency, and trend direction. It supplements the composite score by providing a richer picture of how each wallet participates in the DeepBook ecosystem.
| Metric | Type | Range | Description |
|---|---|---|---|
| frequency | number | 0+ | Trades per day since season start |
| recency | number | 0+ | Days since last activity (lower = better) |
| consistency | number | [0, 1] | currentPoints / totalPoints ratio (steadiness proxy) |
| breadth | number | 0–12 | Unique protocols interacted with |
| trend | enum | — | "improving" | "stable" | "declining" |
| engagementDurability | number | [0, 1] | Ratio of snapshots wallet appears in |
| notionalConsistency | number | [0, 1] | Trade size stability (higher = more consistent sizing) |
1. Frequency
Measures how often a wallet trades, expressed as trades per day since the season start date (January 22, 2026).
A wallet with 100 trades over 50 days has a frequency of 2.0 trades/day. Higher values indicate more active traders.
2. Recency
The number of days since the wallet's last recorded activity. Lower values mean the wallet has traded recently. If no activity timestamp is available, recency defaults to the total season duration.
A wallet that traded yesterday has recency = ~1.0. One that hasn't traded in a month has recency = ~30.0.
3. Consistency
Ratio of current-epoch points to total lifetime points. Serves as a proxy for steady, ongoing point accrual versus one-time bursts.
A wallet with 80,000 current out of 100,000 total has consistency = 0.80. This is also used as the "cs" factor in the composite score.
4. Breadth
The count of distinct tracked protocols the wallet has interacted with, sourced from the protocol attribution pipeline. Maximum possible value is 12 (the number of tracked protocols).
A wallet using Cetus, Aftermath, and Bluefin has breadth = 3.
5. Trend
Classifies whether a wallet's activity is increasing, stable, or decreasing by comparing the last two historical snapshots.
pctChange = (currentPts - previousPts) / previousPts
if pctChange > 0.05 -> "improving"
if pctChange < -0.02 -> "declining"
else -> "stable"
A wallet that wasn't in the previous snapshot but appears in the current one is classified as "improving" (new entrant). At least 2 historical snapshots are required for trend detection.
6. Engagement Durability
Measures the fraction of historical snapshots in which the wallet appears. A wallet that shows up in every weekly snapshot has durability = 1.0. One that appeared only once in 10 snapshots has 0.1.
This metric distinguishes long-term consistent participants from one-time visitors. Snapshots are stored as data/snapshot-YYYY-MM-DD.json files.
7. Notional Consistency
Measures how consistent a wallet's trade sizes are. Computed as a heuristic based on the consistency ratio scaled to [0, 1]. Requires at least 3 trades to produce a non-zero value.
if tradeCount < 3: notionalConsistency = 0
else: notionalConsistency = min(1, 0.5 + consistency * 0.5)
This filters out wallets with only 1–2 trades (insufficient data to assess consistency) and rewards wallets that maintain steady point ratios alongside regular trading.
Trend detection uses historical snapshot comparison with asymmetric thresholds (it is easier to be classified as improving than declining):
Improving
Points grew by > 5% between the last two snapshots, OR the wallet is a new entrant (not in the previous snapshot).
Stable
Points changed by between -2% and +5%. Activity is holding steady.
Declining
Points dropped by more than 2%. The wallet is losing ground relative to its previous position.
If fewer than 2 snapshots exist (e.g. at the start of a season), all wallets default to "stable".
High-Frequency Trader
frequency: 12.5 trades/day
recency: 0.3 days
consistency: 0.92
breadth: 8 protocols
trend: improving
engagementDurability: 1.0
notionalConsistency: 0.96
Very active, recently traded, consistent, uses many protocols, growing, appears in every snapshot, stable trade sizing. Likely Diamond tier.
Casual User
frequency: 0.05 trades/day
recency: 21.0 days
consistency: 0.15
breadth: 1 protocol
trend: stable
engagementDurability: 0.2
notionalConsistency: 0.58
Low frequency, hasn't traded recently, low consistency, single protocol, flat trend, rarely appears in snapshots. Likely Bronze tier.
Activity metrics serve several purposes in DeepLens:
/api/v2/wallet/[address]/activity endpoint returns the full activity model for any wallet. This powers the wallet detail view.Activity data is computed by the scripts/compute-wallet-activity.mjs script and stored in Redis under deeplens:v2:wallet:activity:v1 with a 48-hour TTL. Wallets are chunked into groups of 5,000 per Redis key to stay under the Upstash 1MB per-key limit.