How do I read my own engagement data like the algorithm does?
Stop reading totals, start reading the signals the scorer actually uses — and read them against your own baseline. The algorithm doesn't care about your raw view count; it predicts specific actions (replies, dwell, shares, profile clicks, follows) and subtracts negatives (reports, blocks, mutes). So the useful way to read your data is per-signal and relative: which engagement types is this post earning versus your normal, and is anything negative climbing? Your X analytics show totals; reading like the algorithm means decomposing those into the predicted-action signals and comparing to your trailing distribution.
Most people read their analytics the way the algorithm doesn't: as totals. Views, likes, a big number to feel good or bad about. Reading your data the way the system does means looking at the specific signals it scores — and always relative to your own normal.
Read the signals, not the totals
The scorer doesn't rank on "views." It combines predicted probabilities of specific actions. So those actions are what to read:
| read this | because the scorer weights it |
|---|---|
| Replies, and replies you engage back on | Among the heaviest positive signals |
| Dwell / time spent | Hard-to-fake attention — a core positive |
| Shares (incl. DM, copy-link), profile clicks, follows-from-post | Strong "this is good" signals |
| Reports, blocks, mutes, "not interested" | Negative terms that actively subtract — watch these climb |
The current WeightedScorer combines predicted probabilities for: favorite, reply, retweet, photo expand, click, profile click, video quality view, share, share via DM, share via copied link, dwell, quote, quoted click, continuous dwell time, follow author, not interested, block author, mute author, and report.
Read relative, not absolute
The single biggest shift in reading your data well: compare to your own baseline, not to absolute numbers or other accounts. A heavy poster's quiet day and a small account's big day are only legible against their own trailing distribution. "200 replies" means nothing without "...versus your usual 40." Absolute totals mislead; relative-to-baseline is signal.
Watch the negatives especially
Positive signals get all the attention, but the negative terms — report, block, mute,
not-interested — are the underread half. A post can rack up likes and still net out lower if it's
also drawing negative reactions. Reading like the algorithm means watching the negatives as closely
as the positives.
The model explicitly predicts negative actions — not interested, block author, mute author, report — and these carry negative weights in the final score, pushing down content a user would likely dislike.
What the code doesn't say
The weights, so you can't compute your exact algorithmic score from your data. But you don't need
the weights to read directionally: earning more of the positive signals and fewer negatives, against
your baseline, is unambiguously good regardless of the exact multipliers.
The numeric values of the current weights are not included in the open-source release: weighted_scorer.rs references a params module (e.g. p::FAVORITE_WEIGHT, p::REPLY_WEIGHT) whose values are not present anywhere in the published repository.
What to do with this
This is the foundational thing xDoctor does: it ingests your archive and reads it the way the algorithm does — decomposing engagement into the scored signals, comparing each to your trailing baseline, and surfacing where the negatives are climbing. Reading your own data this way is the whole difference between vanity metrics and actually understanding your account.