Engagement Weight Calculator
What Are Engagement Weights?
Not all engagement is equal. When you like, reply, or retweet a tweet, the algorithm assigns each action a different value. These values—called engagement weights—determine how the algorithm scores every tweet in your feed.
How it works: The Heavy Ranker (Twitter's scoring model) predicts 15 different types of engagement for every tweet. Each prediction gets multiplied by its weight, and the sum becomes the tweet's score. Higher score = higher ranking in your feed.
Why weights matter: These weights reveal what Twitter optimizes for. They're not just scoring mechanisms—they shape:
- What content gets amplified - High-weighted engagement (replies: 13.5) drives visibility more than low-weighted engagement (likes: 0.5)
- Your algorithmic identity - Your engagement history (weighted by these values) trains your cluster assignment weekly
- Creator incentives - Creators optimize for high-weighted engagement, not just high volume
- The feedback loop - High-weighted engagement → stronger cluster assignment → see more similar content → more high-weighted engagement
The Core Insight: Conversation Over Consumption
Twitter massively prioritizes conversation (replies, especially with author engagement) over passive consumption (likes, video views):
Conversation (active):
- Reply with author engagement: 75.0 (most valuable)
- Reply: 13.5
- Good profile click: 12.0
Passive consumption:
- Favorite (like): 0.5
- Retweet: 1.0
- Video playback 50%: 0.005 (nearly worthless)
The math: One reply with author engagement (75.0) equals 150 likes (75.0 ÷ 0.5). This isn't a bug—it's the business model.
Why? Conversation drives time on platform:
- Reading replies takes time
- Writing replies takes time
- Waiting for responses keeps users checking back
- Back-and-forth conversations = more ad impressions
The Shape of the Weights
High-value actions (10.0 to 75.0): Deep engagement requiring effort—replies, profile exploration, meaningful clicks. These signal genuine interest.
Low-value actions (0.5 to 1.0): Passive engagement—likes, retweets, basic viewing. Easy to give, minimal signal.
Negative actions (-74.0 to -369.0): Explicit dislike or policy violations. Catastrophic penalties that last weeks to months.
The Engagement Weights Paradox: Favorites (likes) are the most visible metric, tracked by all systems, and the easiest engagement. Yet they have the lowest positive weight (0.5). The algorithm doesn't care what's "popular" by likes—it cares what generates conversation.
Experience How Engagement Weights Work
Use this calculator to see how different engagement patterns score. Notice how high-weighted engagement (conversation) massively outweighs passive engagement (likes) even when volume is much lower.
The 15 Engagement Weights
These weight values come from X's ML training repository. The algorithm multiplies predicted probabilities by these weights.
⚠️ Important Context on Weight Values:
- Parameter structure: The open-source code defines weights as
FSBoundedParamvalues (configurable parameters with default = 0.0 and range ±10,000) - Actual values: The weight values shown here (0.5, 13.5, 75.0, etc.) come from X's separate ML training repository, not the main algorithm repo
- Configurability: X can adjust these weights without deploying new code
- Current production: We don't know if these exact values are still used in production; they represent X's documented configuration from their ML repo
Parameter definitions: HomeGlobalParams.scala:788-930
Weight values source: the-algorithm-ml/projects/home/recap
Tweet Score Calculator
Compare how different tweet types score. Each scenario represents realistic engagement probabilities. Notice how conversation-driven tweets can outscore viral content.
How Weights Train Your Feed
These weights don't just rank tweets—they train the algorithm what YOU care about.
The weekly feedback loop (FavBasedUserInterestedIn - DEFAULT):
- You engage with content - All engagement types (likes, replies, clicks) get tracked
- InterestedIn updates weekly - Your cluster assignment shifts based on engagement patterns
- High-weighted engagements signal stronger interest - Replies (13.5) signal 27x more interest than likes (0.5)
- Algorithm shows you more of what you reply to - Not just what you like
- Loop compounds - More AI replies → stronger AI cluster → see more AI content → even more AI replies
Want to see this in action?
→ Calculate how your engagement shapes your clusters
→ See how your feed drifts over 6 months
Code: InterestedIn uses engagement history: InterestedInFromKnownFor.scala:292
The Technical Details
The Scoring Formula
Every tweet's base score is calculated as a weighted sum of predicted engagement probabilities:
tweet_score = Σ(P(engagement_i) × weight_i) + epsilon
where:
- P(engagement_i) = Heavy Ranker's predicted probability (0.0 to 1.0)
- weight_i = configured weight from the table above
- epsilon = 0.001 (small constant to avoid zero scores)
- i ranges over all 15 engagement types
Concrete Example
Let's score a tweet with realistic predictions:
Heavy Ranker predictions:
- P(favorite) = 0.20 (20% chance user will like)
- P(reply) = 0.05 (5% chance user will reply)
- P(reply_with_author_engagement) = 0.01 (1% chance of reply-back)
- P(retweet) = 0.10 (10% chance of retweet)
- P(good_click) = 0.15 (15% chance of meaningful click)
- P(negative_feedback) = 0.02 (2% chance of "not interested")
Weighted contributions (using March 2023 weights):
- Favorite: 0.20 × 0.5 = 0.10
- Reply: 0.05 × 13.5 = 0.675
- Reply w/ author: 0.01 × 75.0 = 0.75
- Retweet: 0.10 × 1.0 = 0.10
- Good click: 0.15 × 11.0 = 1.65
- Negative: 0.02 × -74.0 = -1.48
- Epsilon: 0.001
Total score = 0.10 + 0.675 + 0.75 + 0.10 + 1.65 - 1.48 + 0.001 = 1.796
Key observation: The 1% reply-with-author-engagement probability (0.75 contribution) contributes more than the 20% favorite probability (0.10 contribution). This is by design.
Why These Specific Weights?
From Twitter's official documentation:
"Each engagement has a different average probability, the weights were originally set so that, on average, each weighted engagement probability contributes a near-equal amount to the score. Since then, we have periodically adjusted the weights to optimize for platform metrics."
Translation:
- Initial design: Normalize by rarity (rare actions get high weights, common actions get low weights)
- Current state: Tuned to optimize Twitter's business goals—time on platform, conversation depth, user retention
Configurability: All Weights Are Tunable
Every weight is defined as an FSBoundedParam, meaning X can adjust them without deploying new code:
// From HomeGlobalParams.scala:788-930
object ReplyEngagedByAuthorParam extends FSBoundedParam[Double](
name = "home_mixer_model_weight_reply_engaged_by_author",
default = 0.0, // Not actual value - just placeholder
min = -10000.0, // Can be negative (penalty)
max = 10000.0 // Can be very positive (amplification)
)
Where the actual weight values come from:
- The open-source algorithm repo shows parameter structure (default = 0.0 is a placeholder)
- X's ML training repo (the-algorithm-ml/projects/home/recap) documents the actual production configuration
- The values we show (0.5, 13.5, 75.0, etc.) come from that ML repo
- These represent X's documented weights, but current production may differ
What this means:
- X can A/B test different weight configurations
- Weights can be adjusted per-user or per-region
- Production values may differ from the documented ML repo values
- X can pivot platform priorities by adjusting weights (more video, less conversation, etc.)
The Complete Weight Table (March 2023)
| Engagement Type | Weight | Relative to Favorite | Category |
|---|---|---|---|
| Reply Engaged by Author | 75.0 | 150x | 🏆 Conversation |
| Reply | 13.5 | 27x | 💬 Conversation |
| Good Profile Click | 12.0 | 24x | 🔍 Deep Engagement |
| Good Click V1 | 11.0 | 22x | 🔍 Deep Engagement |
| Good Click V2 | 10.0 | 20x | 🔍 Deep Engagement |
| Retweet | 1.0 | 2x | 🔄 Sharing |
| Favorite (Like) | 0.5 | 1x (baseline) | ❤️ Passive |
| Video Playback 50% | 0.005 | 0.01x | 📹 Passive |
| Negative Feedback V2 | -74.0 | -148x | ❌ Negative |
| Report | -369.0 | -738x | ☠️ Nuclear |
Note: Bookmark, Share, Dwell, Video Quality View, and Video Extended weights are configurable but not disclosed in March 2023 snapshot
The Nuclear Penalties
Negative Feedback V2: -74.0
Equivalent to -148 favorites of negative value
Triggered by: "Not interested" click, "See less often" click, muting author
Duration: 140-day linear decay
Day 0: 0.2x multiplier (80% penalty - nearly invisible)
Day 70: 0.6x multiplier (40% penalty - recovering)
Day 140: 1.0x multiplier (penalty expires)
Impact: A single "not interested" click suppresses content from that author for 5 months.
Report: -369.0
Equivalent to -738 favorites of negative value
Triggered by: Explicit report for spam, harassment, misinformation, or other policy violations
To overcome ONE report, a tweet would need:
738 favorites (at 0.5 weight each), OR
28 replies (at 13.5 weight each), OR
5 reply-with-author-engagements (at 75.0 weight each)
In practice: Impossible to overcome. Reports are a platform-level harm signal. Content that gets reported is effectively dead.
Code References
Engagement type definitions:
PredictedScoreFeature.scala:62-336
Weight configuration:
HomeGlobalParams.scala:788-930
Scoring implementation:
NaviModelScorer.scala:139-178
Heavy Ranker (MaskNet) details:
External repo: the-algorithm-ml/projects/home/recap/README.md
InterestedIn uses engagement:
InterestedInFromKnownFor.scala:292
What The Algorithm Doesn't Know
The Heavy Ranker predicts engagement probability, not:
- Truth: No fact-checking in the scoring model
- Quality: Only engagement likelihood, not content value
- Intent: Can't distinguish productive debate from toxic conflict
- Context: Replies could be agreement or furious disagreement—same weight either way
The algorithm optimizes for engagement, not for truth, quality, or societal value. This is a business decision, not a technical limitation.
Key Implications
For users trying to shape their feed:
- Your likes barely affect your feed (0.5 weight)
- Your replies HEAVILY affect your feed (13.5 weight, 27x more)
- Want diverse content? Reply to diverse content, not just like it
- "Not interested" clicks are very effective (140-day penalty)
For creators trying to maximize reach:
- Optimize for conversation (replies: 13.5, reply w/ author: 75.0)
- ENGAGE WITH YOUR REPLIES (this is the 75.0 weight—highest value action!)
- Drive curiosity (profile clicks: 12.0)
- Avoid like-bait (0.5 weight, minimal value)
- Avoid negative feedback triggers (-74.0 = death sentence for 5 months)
The conversation advantage:
- One reply-with-author-engagement (75.0) = 150 likes
- Creators who engage with replies have massive algorithmic advantage
- A tweet with 10 likes + 5 engaged replies can compete with 1,000 passive likes