Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@Akira-Isegawa

Twitterのフォロワー数に意味があるのか?実験してみると意外な結果に

More than 1 year has passed since last update.

こんにちは。minmeetingの伊勢川です。

最近よく見かける、Twitterの相互フォローやリツイート企画。
企業の広告などでも見かけるほど流行ってきていますが、本当に意味があるのでしょうか?

相互フォローとは、フォローしてくれたお礼に相手をフォローすることです。
相互フォローのハッシュタグで検索をして、その人達(bot?)をフォローしていけば、フォローバックされて数だけが増えるという仕組みです。

確かにそれをやればフォロワーは増えるのでしょうが、数だけ増やして何かいいことがあるのでしょうか?
フォロワー数だけを増やすゲームに対して、プラットフォーマーはどう対処しているのでしょうか?

そんなことが気になり、試しに実験してみることにしました。
まずは、その実験結果についてご紹介をして、
後にTwitter APIを用いた相互フォローを自動化するためのコードもご紹介します。

当初の仮説

  • フォロワーが増えればインプレッションが高まる
  • フォロワーを増やしたいだけの人が集まるため、エンゲージメントは下がる
  • フォロー&リツイート企画で、リンクを拡散してもらえば、リンクのアクセス数が増える

これらが当初考えていた仮説でした。
結論から言うと、まあまあ間違っていました
以下で順次解説します。

全体の数字での比較

Twitterのアナリティクスの画面にて、アカウント全体で比較してみましょう。

普段マジメに運用しているアカウント@a_isegawa(140 followers)のパフォーマンスはこちら。
スクリーンショット 2019-11-29 20.57.47.png

相互フォロー実験アカウント@ise_test(1100 followers)のパフォーマンスはこちら。
スクリーンショット 2019-11-29 20.58.46.png

相互フォローの方がインプレッションも高く、プロフィールのアクセスも高い。
一見すると、相互フォローの方がいいように見えます。
仮説どおりかな?

しかし、細かく見ていくとそうとも言い切れないことが分かりました。

同じツイートの同時投稿で実験

では、同じ内容を2つのアカウントにほぼ同時に投稿してみると、どのような結果になるでしょうか。

比較してみると意外なことに、フォロワー数の多い相互フォローアカウントには、拡散力が非常に弱いことが分かりました。
普段マジメに運用しているアカウントの方が、フォロワー数が圧倒的に少ないのに、パフォーマンスが高かったのです。

Twitterのタイムライン表示アルゴリズムはよくできていますね。以下、詳細を説明します。

本アカウント @a_isegawa (140 followers) の投稿

image.png

相互フォロー実験アカウント @ise_test (1100 followers) の投稿

image.png

両者を比較

インプレッション数の比較

インプレッションの数を比較すると、当初の仮説に反して、フォロワー数の少ないアカウントの方が倍近く伸びています。
image.png

エンゲージメント率の比較

エンゲージメント率を比較すると、こちらは当初の仮説通り、真面目アカウントの方が高いという結果になりました。
image.png

リンクの拡散は意味があるか

次にリンクの拡散についての実験です。
下記のように、フォロー&リツイートしてくれたら、相手をフォロー&リツイートしますよという投稿を、リツイート企画などと言ったりします。

これをやると、自分のタイムラインがほぼ無意味なリツイートだらけになるため、非常に抵抗がありましたが、拡散効果も大きいため、実験してみることにしました。
とにかくたくさんリツイートされるため、ここにリンクを貼ったら、リンク先に誘導できるかもしれない。
そうすれば、SEO的にも効果があるかと思って、リツイート企画にリンクを貼り付けてみました。

その結果は下記の通り。
image.png
インプレッションも、エンゲージメント数も高く、一見うまくいったかのように見えますが、惨敗でした。
リンクのクリック数はたったの2件

リツイート企画は、参照系のAPIの制限が厳しく、それを回避しながらプログラムを書くのが面倒だなと思って、手動でやってしまったので、時間の無駄でした。

プロフィールの表示は多かったので、そこにリンクを貼って、いかにインパクトのあるプロフィールを作るかが重要なポイントだったようです。

フォロワーの属性と比率

フォロワー1126人のアカウント名とプロフィール欄にあるキーワードを分析したところ、下記のような結果となりました。
image.png

約4割の472人「相互フォロー」や「フォロバ」などのキーワードを入れていました。
なお、相互フォローを謳っている人のうち、約12%(57人)の人が、フォロー数よりフォロワー数が1割以上多いという結果でした。
つまり、相互フォローを謳っていても、約1割の人は厳密な相互フォローではないと言うことです。
これはフォロワーの中での集計のため数字が低く出ている可能性がありますが、実際には相互フォローを謳いながらフォロワーの方が圧倒的に多いアカウントも多数存在するようです。

次に多いのが副業系のアカウントで、167人(14.8%)が「副業」、「稼ぐ」、「不労所得」、「権利収入」などのキーワードをプロフィールに入れていました。
そこに投資系のアカウント100人(8.8%)が続きます。「FX」、「投資」、「トレーダー」、「バイナリーオプション」などのキーワードがよく出てきます。
そんなに儲かっているのなら、なぜTwitterで無駄な拡散を行い、熱心にDMを送ってくるのでしょうか。

次に、ゲーム89人(7.9%)、大学69人(6.1%)、アニメ67人(6.0%)、コンサル30人(2.7%)と続きます。
ゲーム、アニメは人気ですね。
コンサルは、副業コンサルの人が多いようなので、副業系に分類してもよいかもしれません。

エロ系は案外少なく、17人(1.5%)でした。エッチなお姉さんからDMがいっぱい来るので、もっといっぱいいるかと思いましたが、DMが多いだけでした。

わざわざプロフィールに「暇」とか「ヒマ」と書いている人が8人ぐらいいましたが、書かなくてもこんなことをやっている時点でヒマなのは分かっています。

相互フォローの互恵関係は維持されるのか

では、上記のようなエンゲージメント率が低い人たちは、フォローを維持してくれるのでしょうか。

毎日フォロワーは増えるので、全体のフォロワー数だけ見ていると、減っていることに気づきにくいのですが、実は毎日かなりのフォロワーが減っています。

一日平均で26人ぐらいのフォロワーが離脱します。

フォロワーが減る原因は大きく分けて2つあります。

一つはいわゆるフォローはずしです。フォロー数よりも圧倒的にフォロワー数の方が多くすることで、インフレンサーかのように見せかける方法です。

もう一つは次に紹介するアカウントの停止です。相互フォローをやりすぎて、不審なアカウントとみなされアカウントが一時的にロックされます。

正確な数字は分かりませんが、ざっと見た感じだと、6割以上がアカウントロックでした。
案外フォローはずしをする悪意のユーザーの方が少数派のようです。

プラットフォーマーの対処はどうだったか

Twitterは、このようなフォロワー数遊びについて、どのような対処をしているのでしょうか。

まず、不審な操作を行ったとして、アカウントを一時的に停止する措置を取っているようです。
ただ、いきなりアカウントを永久に削除する訳ではなく、一時停止です。
reCAPTCHAによって人間の操作であることを確認したり、電話番号によるSMS認証で確認をすれば復活することができます。
@ise_testも何度か一時停止されましたが、なんとか生き残りました。

次に、ツイートの表示アルゴリズムがフォロワー数ではなく、エンゲージメントに比例するようになっているように見えます(裏付けをとった訳ではなく、事象から推定しただけです)。
これによって、単にフォロワー数だけ稼いでも意味がなく、初期のエンゲージメントが高い投稿をしないと拡散できないような仕組みにしているようです。

さすが、長年の運用実績があるプラットフォームなので、昔からよく知られた抜け穴には対処をしているようです。

検証結果のまとめ

  • 相互フォローでは、インプレッションが伸びないため拡散力は低い。8分の1のフォロワー数でも、真面目に情報発信をしているアカウントの方が、インプレッションもエンゲージメント率も高い。
  • 相互フォローでは、プロフィールの閲覧数がかなり高まる。そのため、プロフィールに拡散したいインパクトのある画像を掲載すれば、拡散効果が見込める。
  • フォロー&リツイート企画で、リンクを拡散してもらっても、リンクにアクセスする人は悲しいほど少ない
  • 総合的に見ると、広告を打った方が圧倒的に楽。

今後の展望

今後、相互フォローの実験用アカウント(@ise_test)は、量から入って質に転換できるかを実験していきます。
内容を客層に合わせていくのか、それとも、時間をかけて客層自体を変えていくのかは悩みどころですが、いろいろ試行錯誤をしていく必要があるでしょう。

マジメに頑張っているアカウント@a_isegawa)は、これからもそのまま継続していきます。

どっちのアプローチが良いのか、また進展があれば報告します。

【付録】実験に用いたコードの紹介

相互フォローの実験は、最初は手動で始めましたが、途中で手に負えなくなって自動化しました。
日によっては100人以上フォロワーが増えたり、70人くらい一気にフォロワーが凍結されたりします。
これを手動でやっていると、鬱々としてくるので、オススメしません。

環境

mac OS
python 3.7
brew

pipenvをインストール

brew install pipenv

ソースコードを置く場所を作成

mkdir TwitterTools
cd TwitterTools

pythonのバージョンを指定

pipenv --python 3.7

依存するライブラリをインストール

pip install requests requests_oauthlib

pipenvを立ち上げ

pipenv shell

TwitterAPIに登録する

TwitterAPIの認証情報を設定する

vi config.py
CONSUMER_KEY = "[YOUR_KEY]"
CONSUMER_SECRET = "[YOUR_SECRET]"
ACCESS_TOKEN = "[YOUR_TOKEN]"
ACCESS_TOKEN_SECRET = "[YOUR_TOKEN_SECRET]"

TwitterAPIに認証するコードを書く

vi oauth.py
import config
from requests_oauthlib import OAuth1Session

def getClient():
  return OAuth1Session(config.CONSUMER_KEY, config.CONSUMER_SECRET, config.ACCESS_TOKEN, config.ACCESS_TOKEN_SECRET)

相互フォローのコードを書く

vi follow4Follow.py 
import json, time, oauth, sys

#---------------------------------------------------------------
# サブルーチン
#---------------------------------------------------------------
PAGE_SIZE = 5000 #取得数 最大5000
BASE_URL = "https://api.twitter.com/1.1"

twitter = oauth.getClient()

# フォロワーのID一覧を取得
def getFollowerIds():
  res = twitter.get(BASE_URL + "/followers/ids.json", params = {'count' : PAGE_SIZE})
  if 200 == res.status_code:
    body = json.loads(res.text)
    return body["ids"]
  else:
    print("Failed: %d" % res.status_code)
    return None

# フォローしている人のID一覧を取得
def getFriendIds():
    res = twitter.get(BASE_URL + "/friends/ids.json", params = {'count' : PAGE_SIZE})
    if 200 == res.status_code:
      body = json.loads(res.text)
      return body["ids"]
    else:
      print("Failed: %d" % res.status_code)
      return None

# リストをマップに変換
def mapFromList(list):
  mapData = {}
  for data in list:
    mapData[data] = data
  return mapData

# フォローをやめる
def destroyFriendships(userId):
  res = twitter.post(BASE_URL + "/friendships/destroy.json", data = {'user_id' : userId})
  if res.status_code != 200:
    print("Failed: %d" % res.status_code)

# フォローする
def createFriendships(userId):
  res = twitter.post(BASE_URL + "/friendships/create.json", data = {'user_id' : userId})
  if res.status_code != 200:
    print("Failed: %d" % res.status_code)

#---------------------------------------------------------------
# メイン処理
#---------------------------------------------------------------

# フォロワーのID一覧を取得
followerIds = getFollowerIds()
if followerIds is None:
  print("Failed to get Followers Ids.")
  sys.exit(1)
followersMap = mapFromList(followerIds)

# フォローしているユーザーの一覧を取得
friendIds = getFriendIds()
if friendIds is None:
  print("Failed to get Friends Ids.")
  sys.exit(1)

# フォロワーとフォローユーザーの件数を出力
print("followers: %d" % len(followerIds))
print("friends: %d" % len(friendIds))
print("------------------------------------------------")

# アンフォローしたフォロワーを削除
for friendId in friendIds:
  if friendId not in followersMap:
    destroyFriendships(friendId)
    print("destroyed %d" % friendId)
    time.sleep(5)

# フォローしてくれた人をフォローバック
friendsMap = mapFromList(friendIds)
for followerId in followerIds:
  if followerId not in friendsMap:
    createFriendships(followerId)
    print("followed %d" % followerId)
    time.sleep(5)

上記のコードは、フォローを外した人や凍結された人を削除、フォローしてくれた人をフォローバックするというものです。
コマンド実行するだけなので、シェルスクリプトっぽい書き方にしてみました。

フォロー関連のAPIのドキュメントはこちら。
https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference

GET followers/listでもフォロワーの一覧を取得できるが、一度に200件しか取得できない上、リクエスト数の制限が非常に厳しいため、無料ではほぼ使い物になりません。

他方で、GET followers/idsのように、ID一覧を取得するAPIは、一度に5000件取得できるため、リクエスト数を減らすことができ、制限にひっかかりにくくなりません。

相互フォローのコードを実行

python follow4Follow.py 

コードの紹介は以上です。

参考サイト

TwitterのDeveloperサイト
https://developer.twitter.com/content/developer-twitter/ja.html

Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報
https://qiita.com/kngsym2018/items/2524d21455aac111cdee

Pythonでサクッと簡単にTwitterAPIを叩いてみる
https://qiita.com/ogrew/items/0b267f57b8aaa24f1b73

PythonでTwitter API を利用していろいろ遊んでみる
https://qiita.com/bakira/items/00743d10ec42993f85eb

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Akira-Isegawa
AIによる会議計測ツール「minmeeting」を開発。TOKYO STARTUP GATEWAY2018ファイナリスト、TOKYO STARTUP DEGAWA優勝。日経BP社と共同通信社にコラム連載。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?