この記事は『 X のアルゴリズム・ルール・専門用語について Advent Calendar 2024 』(https://qiita.com/advent-calendar/2024/x-tips )の 2 日目の記事です。
X のアルゴリズムが公開され、FF 比がポストの表示に影響する重要な要素であることが明らかになりました。実は、フォロー数とフォロワー数の比率(以下:FF 比)が大きいことによって、あなたのポストは拡散される可能性が下がります。
この記事では、フォロワー数よりもフォロー数の方が多い場合に起こる、アカウントへのデメリットについて説明します。
本記事の内容
・FF 比が 0.6 以上のアカウントは、アカウントの「信頼度」が落ちるためにポストが表示されにくくなります。
・例えば、フォロー数が 600 人でフォロワー数が 1000人 の場合の FF 比は 0.6 となります。
・ただし、このペナルティはフォロー数が 2500 人以上のアカウントのみ対象です。相互フォローによってフォロワーを増やしたアカウントを抑制する狙いがあります。
FF 比の大きいアカウントにペナルティ
結論、FF 比が 0.6 を超えるアカウントは、アカウントの「信頼度」が落ちるためにポストがほかの人のタイムラインに表示されにくくなります。
タイムラインは、たくさんのポストから各ユーザーごとに「おすすめ」のポストが表示されています。しかし、FF 比が 0.6 を超えるアカウントは、自身のポストがほかのユーザーのおすすめとして表示されにくくなるのです。
ポストの表示機会が下がることは X 運用において致命的で、アカウント認知が低下したり、フォロワーが増えにくくなったりと、さまざまな悪影響を引き起こします。
以下に、信頼度を計算するソースコードを示します。
// these constants are take from repo reputations, config/production.conf
private val threshAbsNumFriendsReps = 2500
private val constantDivisionFactorGt_threshFriendsToFollowersRatioReps = 3.0
private val threshFriendsToFollowersRatioUMass = 0.6
private val maxDivFactorReps = 50
/**
* reduce pagerank of users with low followers but high followings
*/
def adjustReputationsPostCalculation(mass: Double, numFollowers: Int, numFollowings: Int) = {
if (numFollowings > threshAbsNumFriendsReps) {
val friendsToFollowersRatio = (1.0 + numFollowings) / (1.0 + numFollowers)
val divFactor =
scala.math.exp(
constantDivisionFactorGt_threshFriendsToFollowersRatioReps *
(friendsToFollowersRatio - threshFriendsToFollowersRatioUMass) *
scala.math.log(scala.math.log(numFollowings))
)
mass / ((divFactor min maxDivFactorReps) max 1.0)
} else {
mass
}
}
出典:GitHub - X (fka Twitter).『twitter/the-algorithm』
https://github.com/twitter/the-algorithm/blob/main/src/scala/com/twitter/graph/batch/job/tweepcred/Reputation.scala
ただし、このペナルティを受けるのはフォロー数が 2500 以上のアカウントに限られます。これは想像ですが、相互フォローでフォロワーを稼いだユーザーや、大量のフォローを行うスパムアカウントを抑制していると考えています。
X は相互フォローによってフォロワーを増やしたユーザーを「インフルエンサー」として扱わないようです。じっさい、影響力のあるインフルエンサーはフォロー数に比べてフォロワー数が多く、そのポストに需要があることは明確です。
--
◆TIPS
FF 比について、サービスや人によって計算方法がちがいます。次の 2 つの計算方法があり、私の感覚ですが ② の計算式を使っている人が多い印象を受けます。
①フォロ-数 / フォロワー数
②フォロワー数 / フォロー数
しかし、X のソースコードは以下であることから、① が公式なのかなと思います。細かいことまでいうのであれば、0では除算できないため、必ず1を足すのが公式流といったところでしょうか。
val friendsToFollowersRatio = (1.0 + numFollowings) / (1.0 + numFollowers)
「信頼度」はどれくらい落ちるのか?
では、FF 比によってどれくらい信頼度は落ちるのでしょうか。アカウントが持っているスコアを 100 とした場合、次のような減少率になります。
FF 比 | 信頼度 |
---|---|
0.6 以下 | 100(最大値) |
0.7 | 50 |
0.8 | 25 |
0.9 | 15 |
1.0 | 5 |
1.1 | 3 |
1.2 以上 | 2(最小値) |
※信頼度はおよその値を記載してます。
※計算上、スコアの最低値は「2」となります。
このように、FF 比が大きいほど信頼度は下がります。フォロー数とフォロワー数が同じでも、ほぼ最低値になることから、FF 比はかなり重要な要素であることが分かります。
ただし、誤解のないように書いておきますが、信頼度はタイムラインに表示するポストを選定するための要素の「ひとつ」でしかありません。
つまり「信頼度が低いからポストが表示されない!」というのは、正確ではないということです。信頼度が 50 %減ることは「表示されるポストが 50 %減ること」にはならないからです。
また、信頼度によってポストの表示がどれくらい下がるのかは公開されていません。FF 比が多くてもあまり悲観する必要はないかもしれません。
以上が、フォロー数とフォロワー数の比率(FF 比)による悪影響です。
Appendix
減少率を確認するために、PowerShell で計算するスクリプトを自作してみました。
# 定数の定義
$numFollowings = 6000 # 任意(フォロー数)
$numFollowers = 10000 # 任意(フォロワー数)
$mass = 100.0 # 前提として100とするが、ユーザーによって変わる。
$threshAbsNumFriendsReps = 2500
$constantDivisionFactorGt_threshFriendsToFollowersRatioReps = 3.0
$threshFriendsToFollowersRatioUMass = 0.6
$maxDivFactorReps = 50
if ($numFollowings -gt $threshAbsNumFriendsReps) {
# friendsToFollowersRatioの計算
$friendsToFollowersRatio = (1.0 + $numFollowings) / (1.0 + $numFollowers)
# log(log(numFollowings))の計算
$logLogNumFollowings = [Math]::Log([Math]::Log($numFollowings))
# divFactorの計算
$divFactor = [Math]::Exp(
$constantDivisionFactorGt_threshFriendsToFollowersRatioReps *
($friendsToFollowersRatio - $threshFriendsToFollowersRatioUMass) *
$logLogNumFollowings
)
# divFactorの範囲を1から$maxDivFactorRepsに制限
$divFactor = [Math]::Max(1.0, [Math]::Min($divFactor, $maxDivFactorReps))
# massをdivFactorで割る
$result = $mass / $divFactor
} else {
# フォロー数が閾値以下の場合はmassをそのまま返す
$result = $mass
}