データサイエンスろぐ

データサイエンスを学ぶ大学4年生の学習ブログ

乃木坂46選抜をブログとモバメの投稿数から予想するロジスティック回帰モデルを実装した

概要

乃木坂46のメンバーが選抜に入れるかどうかを公式ブログとMobileメールの投稿件数から予想する、ロジスティック回帰分析モデルを実装してみた。

2019年3月から2019年8月のブログ・モバメの投稿件数と24thシングルの選抜結果を訓練データとし、2019年9月から2020年2月のブログ・モバメの投稿件数と25thシングルの選抜結果をテストデータとした。

動機

自然言語処理100本ノックの第6章に「ロジスティック回帰モデルを学習せよ」という問題が出てきた。

51で構築した学習データを用いて,ロジスティック回帰モデルを学習せよ.

出典:自然言語処理100本ノック

お恥ずかしい話だが、ロジスティック回帰分析というものを知らず、

「ロジスティック回帰分析?何それ美味しいの?」

「ロジスティック三色パン??」

という状態だったため、ロジスティック回帰分析について調べた。

調べた結果、

ある事象が起きる確率を複数の変数から予測すること

ということまでは理解できたので、手を動かして実装してみたくなった。

どうせ練習なので、(自分にとって)とっつきやすいテーマを題材にしたいと思い、趣味である乃木坂46をテーマにすることに。

ロジステック回帰分析は、

ある事象が起きるかどうか

を分析するものなので、

乃木坂46に当てはまりそうなものを考えると

あるメンバーが選抜に入れるかどうか

を目的変数として思いついた。

また、説明変数としては、ブログとモバメの投稿件数を選んだ。

理由は以下の2点。

  1. 定量的に測れる変数であること
  2. 全メンバーにとって機会が平等であること

「可愛いさ・美人さ」や「ダンス・歌の上手さ」などは定量的に測るのが難しく、握手券の売り上げは、メンバーによって枠が決まっていて不平等なので、ブログとモバメの投稿件数を説明変数とした。

データの収集方法

モバメ投稿件数

モバメの投稿件数は下記サイトの情報を元に数え上げた。

  • 2019年3月〜2019年8月分

nogiradi.com

  • 2019年9月〜2019年12月分

乃木坂46モバメ集計 - 2019年9月

乃木坂46モバメ集計 - 2019年10月

乃木坂46モバメ集計 - 2019年11月

乃木坂46モバメ集計 - 2019年12月

  • 2020年1月〜2020年3月分

www.casalcatala.org

ブログ投稿件数

ブログの投稿件数はWEBスクレイピングを行ってブログを収集した上で、自力で数え上げた。

スクレイピングに際して、下記の記事を参考にした。

qiita.com

モバメ投稿件数は'mail'、ブログ投稿件数は'blog'、選抜に入ったかどうかは選抜の場合1、非選抜(アンダー)の場合0のダミー変数'x'にした。

訓練データ

name mail blog x
堀未央奈 183 71 1
山崎怜奈 385 59 0
阪口珠美 617 57 0
中田花奈 566 47 0
佐藤楓 634 30 0
梅澤美波 470 23 1
岩本蓮加 356 21 0
寺田蘭世 258 20 0
樋口日奈 120 20 0
中村麗乃 77 17 0
秋元真夏 224 16 1
生田絵梨花 75 15 1
松村沙友理 71 15 1
渡辺みり愛 470 13 0
鈴木絢音 307 13 0
伊藤純奈 100 13 0
吉田綾乃クリスティー 458 12 0
向井葉月 797 11 0
和田まあや 256 11 0
久保史緒里 629 7 1
新内眞衣 167 6 1
大園桃子 72 6 0
高山一実 55 6 1
北野日奈子 100 5 1
伊藤理々杏 78 5 0
山下美月 468 4 1
星野みなみ 38 4 1
与田祐希 144 3 1
齋藤飛鳥 333 2 1

テストデータ

name mail blog x
秋元真夏 215 11 1
生田絵梨花 69 13 1
齋藤飛鳥 385 1 1
高山一実 45 4 1
中田花奈 201 46 1
樋口日奈 115 22 1
星野みなみ 33 5 1
松村沙友理 34 5 1
和田まあや 207 14 1
伊藤純奈 281 10 0
北野日奈子 53 2 1
新内眞衣 178 4 1
鈴木絢音 262 9 0
寺田蘭世 341 19 0
堀未央奈 152 45 1
山崎怜奈 321 41 0
渡辺みり愛 492 7 0
伊藤理々杏 68 8 0
岩本蓮加 471 22 1
梅澤美波 476 27 1
大園桃子 47 5 1
久保史緒里 520 9 1
阪口珠美 512 43 0
佐藤楓 569 28 0
中村麗乃 74 16 0
向井葉月 746 7 0
山下美月 531 6 1
吉田綾乃クリスティー 336 6 0
与田祐希 118 3 1

環境

仮想環境

仮想環境はvirtualenvを用いて作成。

Pythonのバージョンは3.7.3にした。

特に大きな理由はない。

pipでインストールしたもの

pipでインストールしたパッケージは以下の通りである。

  • pandas
  • sklearn
  • jupyter

ソースコード

実装にあたって下記の記事を参考にした。

qiita.com

各種モジュールのインポート

import pandas as pd
import numpy as np
from sklearn import linear_model
import joblib

参考にした記事内では、joblibのインポートが

from sklearn.externals import joblib

となっているが、最近のバージョンのscikit-learnではjoblibはsklearn.externalsにバインドされなくなっているみたいなので注意。

参考: Python - sklearn.externalsのjoblibインポートでエラー|teratail

訓練データの取得

train = pd.read_csv("train.csv", sep=",")
explanatory = train.loc[:, ['blog', 'mail']].values # 説明変数
response = train['x'].values # 目的変数

学習

clf = linear_model.LogisticRegression(random_state=0)
clf.fit(explanatory, response)
LogisticRegression(random_state=0)
regression_coefficient = clf.coef_
segment = clf.intercept_

ロジスティック回帰の学習結果

print("回帰係数:{}".format(regression_coefficient))
print("切片:{}".format(segment))
print("決定係数:{}".format(clf.score(explanatory, response)))

学習結果の検証

test = pd.read_csv("test.csv", sep=",", encoding= "shift_JIS")
x_test = test.loc[:, ['blog', 'mail']].values
predict = clf.predict(x_test)
print("検証結果:{}".format(predict)) # 検証結果を表示

結果

出力結果

ロジスティック回帰の学習結果

回帰係数:[[-0.0023152  -0.02353291]]
切片:[0.85851572]
決定係数:0.6206896551724138

学習結果の検証

検証結果:[1 1 0 1 0 1 1 1 1 0 1 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1]

各メンバーの結果

TP(選抜と予想されて実際に選抜)のメンバー

TN(非選抜と予想されて実際に非選抜)のメンバー

FP(選抜と予想されたが実際には非選抜)のメンバー

FN(非選抜と予想されたが実際には選抜)のメンバー

以下の記事を参考にしてロジスティック回帰モデルの評価を行った。

www.salesanalytics.co.jp

正答率

正答率は65.5%となった。

検出率

検出率は61.1%となった。

精度

精度は78.6%となった。

誤検出率

誤検出率は27.3%となった。

考察と所感

やる前から分かってはいたが、ブログとモバメの件数から選抜に入れるかどうかを予想するのは難しそう。 60%を超える正解率と検出率が出るのは、乃木坂46の選抜は大きくメンバーが入れ替わることがなく、メンバー個人のブログやモバメの投稿頻度が大きく変わることもないからだと思われる。 問題設定がおかしいのはさておき、実際に手を動かしたり結果をまとめたりすることで、理解は深まった気がする。

参考

参考にしたサイト一覧

qiita.com

teratail.com

qiita.com

www.salesanalytics.co.jp

www.casalcatala.org

nogiradi.com

乃木坂46モバメ集計 - 2019年9月

乃木坂46モバメ集計 - 2019年10月

乃木坂46モバメ集計 - 2019年11月

乃木坂46モバメ集計 - 2019年12月