今回はツイッターでフォローバックしてくれるかどうかを
AIを使って予測してみようと思います。
正確には機械学習・ロジスティック回帰です。
単回帰分析や重回帰分析は販売の台数予測など数値の予測向きです。
今回はフォローを返してくれるかどうかを予測しますので
セオリー通りロジスティック回帰でいきます。
前回まではヒストグラムを使ってノットフォロバさん絞り込んでいきました。
おそらくある程度のフォロバ率を達成できることでしょう。
しかし、正直どこまで行っても50%は超えないと思います。
そこで機械学習に頼ってしまおうというのが今回の趣旨です。
さて、そんなおいしい話があるのか?
では、やっていきます。
全体を見たい方はこちら → 隠れフォロバさんを探せ!!–ツイッターフォロワー獲得プロジェクト
データの情報
今回集めたデータは以下の通りです。
何かうまいことAIが解析して高精度の予測出してくれるんでしょ?
– | 変数名 | 詳細 | 型 |
---|---|---|---|
0 | FollowersCount | フォロワー数 | int64 |
1 | FriendsCount | フォロー数 | int64 |
2 | FavouritesCount | いいねした数 | int64 |
3 | StatusesCount | ツイート数(だと思ってるが謎) | int64 |
4 | TweetElapsedDays | 最終ツイート日からの経過日数 | float64 |
5 | CreateAtElapsedDays | アカウント作成日からの経過日数 | float64 |
6 | IsFriend | 僕がフォローしているかどうか | int64 |
7 | IsFollower | 僕がフォローされているかどうか | int64 |
データの外観は以下の通りです。
相関係数は以下の通りです。
フォロワー数とフォロー数は係数の値が大きすぎるので外した方がよいかもしれません。
多重共線性とかいうやつです。まぁ、軽い実験なのでこのまま行きます。
たぶんさほど状況は変わらない。
処理抜粋。実際に試す人もいないと思うのでご参考まで。
# 説明変数と目的変数の設定
X=df[['FollowersCount','FriendsCount','FavouritesCount','TweetElapsedDays','CreateAtElapsedDays']]
y=df['IsFollower']
# 訓練データとテストデータに分ける
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# ロジスティック回帰クラスの初期化と学習
model = LogisticRegression()
model.fit(x_train, y_train)
print('正解率(train):{:.3f}'.format(model.score(x_train, y_train)))
print('正解率(test):{:.3f}'.format(model.score(x_test, y_test)))
とりあえず正規化して計算した処理はこちら。
# 説明変数と目的変数の設定
X=df[['FollowersCount','FriendsCount','FavouritesCount','TweetElapsedDays','CreateAtElapsedDays']]
y=df['IsFollower']
# 訓練データとテストデータに分ける
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
sc=StandardScaler()
sc.fit(x_train)
x_train_std = sc.transform(x_train)
x_test_std = sc.transform(x_test)
# ロジスティック回帰クラスの初期化と学習
model = LogisticRegression()
model.fit(x_train_std, y_train)
print('正解率(train):{:.3f}'.format(model.score(x_train_std, y_train)))
print('正解率(test):{:.3f}'.format(model.score(x_test_std, y_test)))
結果
トレーニングとテストデータで正解率を出した結果が以下です。
正規化せずに実行したもの。
- 正解率(train):0.735
- 正解率(test):0.750
正規化して実行したもの
- 正解率(train):0.743
- 正解率(test):0.750
トレーニングデータは0.735でテストデータは0.75。
結構正解率高い。何これ。もしかして使える?
で、実際の予測結果がこちら。
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
0:ノットフォロバさん(フォロー返してくれない人) 1:フォロバさん(フォローしたらフォロー返してくれる人)
全部0。何それ。
まとめ
非常に陳腐で残念な結果に終わってしまいました。
天気聞かれて「晴れ」といっておけば、大体あたるのと同じです。
フォロバ率25%なので全部フォロー返さないとしておけば75%はあたります。
そりゃそうだ。
しかし僕お手製AIくんは
お前にフォロー返す人間など存在しない
と、言い切りやがったわけです。
誕生した途端僕に人格否定をしかけてくるAI。
AI暴走。人類への精神攻撃、始まる。
続編 → 隠れフォロバさんを探せ⑧ – 30日間つづけた結果
フォロバさんを探せ⑦ – 機械学習編
おわり
コメントを残す