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:

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:

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 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.

Select a Tweet Scenario

📚 Educational Thread

"How to build a neural network from scratch (10 tweet thread with code examples)"

High replies with author engagement, good clicks, moderate likes

📰 Breaking News

"BREAKING: Major tech company announces layoffs. Thread with details ↓"

Very high engagement across all types, some profile clicks

🔧 Useful Resource

"I've compiled 100 free resources for learning data science: [link]"

High good clicks, retweets, bookmarks, moderate replies

❤️ Wholesome Content

"My daughter just wrote her first line of code. So proud! [cute photo]"

Very high likes, low replies, some retweets

😂 Viral Meme

"me: I'll just check Twitter for 5 minutes [4 hours later meme]"

Extremely high likes/retweets, low replies, good clicks

💭 Personal Story

"Thread about my journey from bootcamp to senior engineer (authentic, relatable)"

Balanced engagement, good reply-with-engagement rate

🔥 Hot Take

"Unpopular opinion: [controversial tech opinion that sparks debate]"

Very high replies, moderate negative feedback, low likes

💢 Quote Tweet Dunk

"lmao imagine actually believing this [quote tweets bad take]"

High replies (debate), high negative feedback, mixed signals

🎣 Engagement Bait

"Drop a 🔥 if you agree! Follow me for more content like this! #engagement"

Moderate replies/likes, HIGH negative feedback (users hate this)

🚫 Spam/Low Quality

"CHECK OUT MY CRYPTO COURSE!!! 🚀💰 LINK IN BIO [generic spam]"

Very low positive engagement, high negative feedback, reports

😬 Reply Guy

"Actually, [unsolicited correction on someone's casual tweet]"

Low engagement, moderate negative feedback

🤖 Algorithm Gaming

"Agree or disagree? Comment below! ⬇️ [intentionally vague to drive replies]"

High replies but also high negative feedback

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):

  1. You engage with content - All engagement types (likes, replies, clicks) get tracked
  2. InterestedIn updates weekly - Your cluster assignment shifts based on engagement patterns
  3. High-weighted engagements signal stronger interest - Replies (13.5) signal 27x more interest than likes (0.5)
  4. Algorithm shows you more of what you reply to - Not just what you like
  5. 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:

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:

What this means:

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:

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:

For creators trying to maximize reach:

The conversation advantage: