Your Algorithmic Identity
Every user has two algorithmic profiles: one determines what you see, the other determines who sees you. They're calculated independently and can drift in completely different directions—and you're not fully in control of either.
The Three-Layer Architecture
Twitter's recommendation system is built on three interconnected layers. Understanding how they work together—and how they can diverge—is key to understanding why your feed behaves the way it does.
Layer 1: KnownFor (The Foundation)
KnownFor is the foundation layer that identifies what the top 20 million most popular accounts on X are "known for"—which clusters they belong to.
- Who's included: Top 20M producers on the platform
- What it calculates: Which clusters each producer belongs to (e.g., AI/Tech, Cooking, Politics)
- Update frequency: Weekly (7 days)
- Purpose: Creates the cluster structure that everything else builds on
This is the algorithmic "map" of who creates what kind of content. It's slow to change (weekly updates) because it represents the relatively stable structure of content communities on the platform.
Key insight: KnownFor only covers the top 20M accounts. If you're not in the top 20M, you're not in this foundation layer—but you still get a producer profile (see Layer 3).
Layer 2: InterestedIn (Your Consumer Profile)
InterestedIn is your consumer profile—it determines what content the algorithm shows you. If KnownFor is about what people create and are "known for," InterestedIn is what you are "interested in"—or more precisely, what content the algorithm predicts you'll engage with.
- Who has this: Every user on the platform
- What it calculates: Your cluster interests as a consumer (e.g., 60% AI/Tech, 40% Cooking)
- Update frequency: Every 7 days (weekly batch updates)
- Based on: YOUR engagement choices—what you like, reply to, retweet, click on
- Controls: What content YOU see in your timeline
The 100-Day Half-Life: Here's the catch—your old engagement doesn't disappear. The algorithm uses exponential decay to weight your historical engagement:
Engagement from 3 months ago: 50% weight
Engagement from 6 months ago: 25% weight
Engagement from 9 months ago: 12.5% weight
Old engagement lingers for months, making your cluster scores slow to shift.
What this means in practice: If you engaged heavily with AI content for a week back in January, that engagement will continue influencing your recommendations through July. Your InterestedIn profile is like a slow-moving ship—it takes sustained effort to change course.
Relationship type: ONE-TO-MANY. You (one person) engage with many producers. You choose what to engage with (moderate agency).
Layer 3: Producer Embeddings (Your Producer Profile)
Every user has a second algorithmic representation: your producer profile. This is calculated by Producer Embeddings and determines who sees YOUR content.
- Who has this: Only users with ≥100 followers
- What it calculates: Which audiences should see your content (based on who engages with you)
- Update frequency: Every 7 days (weekly batch updates)
- Based on: OTHERS' engagement with you—who likes, replies to, retweets your content
- Controls: Who sees YOUR content when you post
The 100-Follower Threshold: Below 100 followers, you have no algorithmic boost for exposure. At 99 followers, you're invisible to the recommendation system. At 101 followers, your content starts being calculated and shown to users beyond your immediate followers.
Relationship type: MANY-TO-ONE. Many consumers engage with you (one producer). You DON'T choose who engages with you (low agency).
The Critical Insight: They Can Diverge
Your InterestedIn (consumer profile) and Producer Embeddings (producer profile) are calculated completely independently. They can—and often do—follow completely different paths:
Example: The Divergent Profile
Your InterestedIn (what you consume):
Cooking: 70%
AI/Tech: 30%
→ Algorithm shows you cooking recipes, food content
Your Producer Embeddings (who sees your content):
AI/Tech: 65%
Politics: 25%
Cooking: 10%
→ Algorithm shows your posts to AI and politics audiences
Result: You consume cooking content but produce for AI/politics audiences.
When you post about cooking (your interest), your AI/politics audience
doesn't engage. Your reach collapses.
Why You're Not in Control
| Profile | You Control? | Why/Why Not |
|---|---|---|
| InterestedIn (Consumer) |
Moderate control | You choose what to engage with, BUT: • The algorithm chooses what to show you first • 100-day half-life means old engagement lingers • Multiplicative scoring creates drift you didn't choose |
| Producer Embeddings (Producer) |
Low control | You DON'T choose who engages with you: • One viral tweet can completely reshape your producer profile • You can't control which audience discovers you • Weighted by audience size (50k engagement > 1k engagement) |
The bottom line: Neither profile stays where you want it. Your consumer profile drifts based on what the algorithm shows you and what you engage with. Your producer profile drifts based on who happens to engage with you. Both are moving targets shaped by forces beyond your full control.
The Technical Details
The 100-Day Half-Life Formula
Your engagement doesn't have an expiration date—it decays exponentially with a 100-day half-life:
weight = 2^(-days_elapsed / 100)
Examples:
Day 0: weight = 2^(-0 / 100) = 1.0 (100%)
Day 100: weight = 2^(-100 / 100) = 0.5 (50%)
Day 200: weight = 2^(-200 / 100) = 0.25 (25%)
Day 300: weight = 2^(-300 / 100) = 0.125 (12.5%)
Day 400: weight = 2^(-400 / 100) = 0.0625 (6.25%)
Practical meaning:
• Engagement from 3 months ago: 50% weight
• Engagement from 6 months ago: 25% weight
• Engagement from 1 year ago: 6.25% weight
Your profile is weighted average of months of behavior, not just this week.
InterestedIn Calculation (ONE-TO-MANY)
Your InterestedIn consumer profile is calculated from YOUR engagement with many producers:
For each cluster C:
InterestedIn[C] = Σ (engagement_weight × time_decay × author_KnownFor[C])
for all authors you engaged with
Then L2-normalize so all clusters sum to 1.0
Example:
You engaged with 10 AI authors (decay-weighted engagement: 100)
You engaged with 5 Cooking authors (decay-weighted engagement: 50)
Before normalization:
AI: 100
Cooking: 50
After L2-normalization (sqrt(100² + 50²) = 111.8):
AI: 100 / 111.8 = 0.89 = 89%
Cooking: 50 / 111.8 = 0.45 = 45%
Wait, that doesn't sum to 100%! L2-norm ≠ sum to 1.0
Actually normalize by total: 100 + 50 = 150
AI: 100 / 150 = 67%
Cooking: 50 / 150 = 33%
Your feed becomes 67% AI, 33% Cooking based on your engagement choices.
Producer Embeddings Calculation (MANY-TO-ONE)
Your Producer Embeddings producer profile is calculated from OTHERS' engagement with you:
For each cluster C:
ProducerEmbedding[C] = Σ (engagement_weight × time_decay × consumer_InterestedIn[C])
for all consumers who engaged with you
Then L2-normalize so all clusters sum to 1.0
Example:
1,000 AI enthusiasts engaged with you (avg InterestedIn: AI 75%)
50 Cooking enthusiasts engaged with you (avg InterestedIn: Cooking 80%)
Weighted contributions:
AI: 1,000 × 0.75 = 750
Cooking: 50 × 0.80 = 40
After normalization (750 + 40 = 790):
AI: 750 / 790 = 95%
Cooking: 40 / 790 = 5%
Your content gets shown to 95% AI audiences, 5% Cooking audiences.
Note: You can't choose this! It's determined by who engaged with you.
The 100-Follower Threshold
Producer Embeddings only exist for accounts with ≥100 followers:
Followers < 100:
• No Producer Embedding calculated
• No algorithmic boost beyond your immediate followers
• Your content is essentially invisible to the recommendation system
Followers ≥ 100:
• Producer Embedding calculated weekly
• Your content enters the recommendation pipeline
• Algorithm can show your tweets to users who don't follow you
Practical impact:
At 99 followers: Only your 99 followers might see your tweets
At 101 followers: Potentially millions could see your tweets (if well-matched)
The 0.072 Threshold (Death of a Cluster)
When a cluster in your InterestedIn drops below 0.072 (7.2%), it gets filtered out completely:
Week 0: AI 60%, Cooking 40% (balanced start)
Week 12: AI 70%, Cooking 30% (drifting)
Week 24: AI 76%, Cooking 24% (minority struggling)
Week 40: AI 85%, Cooking 15% (barely visible)
Week 60: AI 93%, Cooking 7% (below threshold!)
Week 61: AI 100%, Cooking 0% (Cooking filtered out permanently)
Result: Complete monopolarization from a balanced starting point.
The 0.072 threshold creates a "death spiral"—once a cluster falls below it,
you stop seeing that content, so you can't engage with it, so it can never
recover. Permanent filter bubble lock-in.
Why Divergence Happens: The Viral Tweet Trap
One viral tweet can completely reshape your Producer Embedding:
Week 0: Your Producer Embedding
AI/Tech: 75% (your core audience, 1,000 followers)
Cooking: 25% (secondary interest, 300 followers)
Week 1: You post one politics joke (human moment, exploring)
Goes viral: 50,000 politics enthusiasts engage
New calculation:
Old engagement: 1,000 × 0.75 (AI) = 750
300 × 0.25 (Cooking) = 75
New engagement: 50,000 × 0.80 (Politics) = 40,000
After normalization (750 + 75 + 40,000 = 40,825):
AI: 750 / 40,825 = 1.8%
Cooking: 75 / 40,825 = 0.2%
Politics: 40,000 / 40,825 = 98%
Your Producer Embedding is now 98% Politics.
Result: When you post AI/Tech content (your passion), algorithm shows it to
Politics audiences who don't care. Engagement collapses. You're trapped.
Recovery Times
Changing your algorithmic identity is slow:
| Scenario | Timeline | Strategy |
|---|---|---|
| Shift InterestedIn consumer profile | 8-12 weeks | Stop engaging with dominant cluster entirely. Over-engage with target cluster (40+ interactions/day). |
| Shift Producer Embeddings producer profile | 12-16+ weeks | Consistently post target content. Manually engage target audience. Accept low reach during transition. |
| Recover from viral misalignment | 16-24 weeks | Wait for viral engagement to decay (100-day half-life). Sustain core audience engagement. Most don't have patience. |
| Recover from threshold death (<0.072) | Impossible algorithmically | Must manually rebuild: unfollow dominant cluster, follow target cluster accounts, use "Following" tab. |
Code References
InterestedIn calculation: InterestedInFromKnownFor.scala:26-30
Producer Embeddings calculation: ProducerEmbeddingsFromInterestedIn.scala:41-54
100-day half-life decay: InterestedInFromKnownFor.scala:88 - val halfLifeInDaysForFavScore = 100
100-follower threshold: ProducerEmbeddingsFromInterestedIn.scala:47 - filters for numFollowers >= minNumFollowers where minNumFollowers = 100
Weekly batch updates: InterestedInFromKnownFor.scala:59 - val batchIncrement: Duration = Days(7)
KnownFor weekly updates: UpdateKnownFor20M145K2020.scala:46 - batchIncrement: Duration = Days(7)
L2 normalization: SimClustersEmbedding.scala:59-72
0.072 threshold filtering: InterestedInParams.scala:63 - default = 0.072
The Bottom Line
You have two algorithmic identities on X:
- InterestedIn (Consumer): Determines what you see. Based on what you engage with. Updates weekly. You have moderate control—but 100-day decay, multiplicative scoring, and threshold death create drift you didn't choose.
- Producer Embeddings (Producer): Determines who sees you. Based on who engages with you. Updates weekly. Requires ≥100 followers. You have low control—one viral moment can reshape it permanently.
These profiles are calculated independently. They can diverge. And you're not fully in control of where either ends up.
The result: Most users drift into algorithmic states they didn't consciously choose—consuming content that reinforces one cluster, producing for audiences that don't match their interests, or both. The architecture creates paths of least resistance, and users follow them without realizing it's happening.