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.

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.

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.

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:

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