環境
Windows
R 3.2.5
Microsoft R Open 3.2.5
これからやること
前回( https://qiita.com/gaborotta/items/b248a51f2d1dfb71a062 )の続きで、2019年2月から過去1年間でニコニコ動画ゲームカテゴリのランキングTOP100に入った動画・投稿者の情報を統計的に分析する。
前回はデータを一度でも上位20以内に入った動画と100~20位の動画に分割して、それぞれの傾向を把握した。
それを基に上位20位以内にランクインする動画かどうかを判定するモデルを構築する。
使用するモデル
この問題は、上位20位以内に入るか否かの2分類問題である。
2分類問題といえば定番の二項ロジットモデルを使用することとする。
他のモデルの検討はまた次回。
目的変数は「上位20位以内に入る動画である確率」
説明変数、前回の結果を参考に、
- 投稿時間
- 投稿時間をそのまま連続値として放り込むのはナンセンスなので、1時間ごとにダミー変数として使用。
- 動画再生時間
- 5分前後の動画、10分前後の動画で20位以内に入るかどうかの差がありそうだったので、この2つ+その他の動画に3分類してダミー変数として使用。
- 投稿者のフォロワー数
- 2000人くらいを境に20位以内に入るかどうかの差がありそうだったので、フォロワー数多とフォロワー数少の2つのダミー変数として使用。
- 投稿者の動画投稿数
- これも50本くらいを境に差がありそうだったので、投稿数多と投稿数少の2つのダミー変数として使用。
- 投稿者の登録時ニコニコVer
- 全てをダミー変数として使用。
- 動画につけられたタグ
- 全てのタグを使うのはあまりにも多いので、100回以上使用されているタグを全てダミー変数として使用。
以上のように、説明変数は全てダミー変数として使用する。
それぞれの閾値は今後つめていきます。徐々に機械学習に近づいていきます。
1.データの加工
動画タグ以外
まずは不要データの削除。投稿者情報が公開されていないデータが多数あるので、除いておく。
投稿時間はそのままfactor型に変換してやればOK。
factor型にすることによって、モデル作成時にダミー変数として扱ってくれる。
動画時間は条件分岐式を使って、300~360秒の動画を5分動画(TIME_5m)、540~660秒の動画を10分動画(TIME_10m)、それ以外(other)に分けてからfactor型に変換。
フォロワー数と投稿数、ニコニコVerも同じく条件分岐で分けてからfactor型に変換する。
# 不要データの削除
videoData0<-videoData%>%filter(USER_ID!=0,FOLLOWER_NUM>0,VIDEO_NUM>0,DATE!="",LENGTH!="")
# 投稿時間のダミー変数化
videoData0<-mutate(videoData0,DATE=as.character(DATE))
videoData0<-separate(videoData0,DATE,into = c("day", "time"),sep = "T",extra = "drop")
videoData0<-separate(videoData0,time,into = c("PUSH_HOUR", "minute","second"),sep = ":",extra = "drop")
videoData0<-videoData0%>%select(-minute,-second)%>%mutate(PUSH_HOUR=factor(PUSH_HOUR))
# 動画時間のダミー変数化
videoData0<-videoData0 %>% separate(LENGTH,into = c("minute"),sep = c("秒"),extra = "drop")
videoData0<-videoData0 %>% separate(minute,into = c("minute", "second"),sep = c("分"),extra = "drop")
videoData0<-videoData0 %>% separate(minute,into = c("hour", "minute"),sep = c("時間"),extra = "drop",fill="left")
videoData0<-videoData0 %>% mutate(hour=as.numeric(hour),minute=as.numeric(minute),second=as.numeric(second))
videoData0[is.na(videoData0)]<-0
videoData0<-videoData0 %>% mutate(time=hour*3600+minute*60+second)%>%select(-hour,-minute,-second)
videoData0<-videoData0%>%mutate(TIME_RANGE=
if_else(time>300&time<361,"TIME_5m",
if_else(time>540&time<661,"TIME_10m","other")))
videoData0<-videoData0%>%mutate(TIME_RANGE=factor(TIME_RANGE))
# フォロワー数と動画投稿数のダミー変数化
videoData0<-videoData0%>%mutate(FOLLOWER_RANGE=if_else(FOLLOWER_NUM>=2000,"MANY","FEW"))%>%mutate(FOLLOWER_RANGE=factor(FOLLOWER_RANGE))
videoData0<-videoData0%>%mutate(VIDEO_RANGE=if_else(VIDEO_NUM>=50,"MANY","FEW"))%>%mutate(VIDEO_RANGE=factor(VIDEO_RANGE))
動画タグ
動画タグは一つの動画に対して複数種類つけられるため、先ほどまでの変数のように1列で表現できず、
同じ方法でダミー変数化できない。
そのため、caretパッケージのdummyVars関数を使ってダミー変数を作成する。
参考(https://qiita.com/daifuku_mochi2/items/2885dc02ac4bfc284e06)
これによりダミー変数が列に変換されるが、videoTagDataはタグをベースとしたテーブルであるため、これを動画情報をベースにしたテーブルに変換する必要がある。
そこでdplyrのsummarise_each関数で生成したタグ名列を1動画ごとに足し合わした後、mutate_each関数でfactor型に変換する。
最後に動画情報データ一覧に結合する。
# 動画タグのダミー変数化
tag_name<-group_by(videoTagData,TAG_NAME)
tag_name<-tag_name%>%summarise(count=n())%>%filter(count>=100)%>%setorder(-count)
tag_name<-videoTagData%>%inner_join(tag_name,by="TAG_NAME")
tag_name<-tag_name%>%mutate(TAG_NAME=factor(TAG_NAME))
df_dummy <- dummyVars(~.,data=tag_name)
df_dummy<- data.table(predict(df_dummy, tag_name))
head(df_dummy)
df_dummy_tag<-df_dummy%>%group_by(VIDEO_ID)%>%summarise_each(funs(sum), starts_with("TAG_NAME"))%>%mutate_each(funs(factor),starts_with("TAG_NAME"))
head(df_dummy_tag)
videoData0<-videoData0%>%select(ID,PUSH_HOUR,NICO_VER,isOver20,TIME_RANGE,FOLLOWER_RANGE,VIDEO_RANGE)
sample<-inner_join(videoData0,df_dummy_tag,by=c("ID"="VIDEO_ID"))
2.モデル構築
パラメータ推定
glm関数に突っ込むだけ。
ID情報はいらないので除去。
20位以内かどうかを目的変数とし、それ以外を説明変数とする式を定義(isOver20 ~.)
family=binomial(link="logit")で2項ロジットモデルを指定。
最尤推定法でパラメータの推定をしてくれます。
結果はsummary関数で見れます。
# モデル化
# 一般化線形モデル 二項ロジットモデル
sample0<-sample%>%select(-ID)%>%mutate_all(funs(factor))
head(sample0)
result <- glm(isOver20 ~., data=sample0, family=binomial(link="logit"))
summary(result)
結果
Estimateがパラメータの値です。
「Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1」を参考に、各パラメータが有意かどうかが分かります。
> summary(result)
Call:
glm(formula = isOver20 ~ ., family = binomial(link = "logit"),
data = sample0)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.2887 -0.7790 -0.4222 0.7324 3.1454
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.643247 0.311667 -2.064 0.039028 *
PUSH_HOUR 01 0.378723 0.131442 2.881 0.003961 **
PUSH_HOUR 02 -0.058561 0.179148 -0.327 0.743754
PUSH_HOUR 03 -0.018363 0.188210 -0.098 0.922277
PUSH_HOUR 04 -0.063572 0.214696 -0.296 0.767152
PUSH_HOUR 05 0.359182 0.150207 2.391 0.016792 *
PUSH_HOUR 06 0.105936 0.131115 0.808 0.419110
PUSH_HOUR 07 0.177164 0.121802 1.455 0.145800
PUSH_HOUR 08 0.221059 0.133946 1.650 0.098870 .
PUSH_HOUR 09 0.294460 0.136749 2.153 0.031296 *
PUSH_HOUR 10 -0.222854 0.137386 -1.622 0.104782
PUSH_HOUR 11 -0.024765 0.144301 -0.172 0.863738
PUSH_HOUR 12 0.013992 0.129561 0.108 0.913999
PUSH_HOUR 13 0.096252 0.141671 0.679 0.496882
PUSH_HOUR 14 -0.066901 0.147869 -0.452 0.650955
PUSH_HOUR 15 -0.068405 0.141526 -0.483 0.628853
PUSH_HOUR 16 -0.137984 0.146316 -0.943 0.345654
PUSH_HOUR 17 -0.037844 0.114608 -0.330 0.741247
PUSH_HOUR 18 0.038922 0.100557 0.387 0.698707
PUSH_HOUR 19 0.001442 0.101646 0.014 0.988679
PUSH_HOUR 20 0.039287 0.104764 0.375 0.707659
PUSH_HOUR 21 -0.337744 0.116521 -2.899 0.003749 **
PUSH_HOUR 22 -0.208088 0.116478 -1.787 0.074018 .
PUSH_HOUR 23 -0.158840 0.117906 -1.347 0.177923
NICO_VERGINZA 0.252150 0.094247 2.675 0.007464 **
NICO_VERQ 0.021300 0.125559 0.170 0.865291
NICO_VERRC 0.309489 0.105155 2.943 0.003249 **
NICO_VERRC2 0.354412 0.123414 2.872 0.004082 **
NICO_VERSP1 0.372684 0.114190 3.264 0.001100 **
NICO_VERZero 0.042642 0.151370 0.282 0.778169
NICO_VERβ 0.745265 0.136759 5.449 5.05e-08 ***
NICO_VERββ 0.014975 0.111879 0.134 0.893519
NICO_VERγ 0.120253 0.096558 1.245 0.212986
NICO_VERく -0.717475 0.319674 -2.244 0.024807 *
NICO_VER夏 -0.210218 0.176766 -1.189 0.234342
NICO_VER原宿 0.002068 0.111183 0.019 0.985160
NICO_VER秋 -0.124539 0.205102 -0.607 0.543715
NICO_VER冬 -10.208028 109.482768 -0.093 0.925714
TIME_RANGETIME_10m -0.066270 0.061467 -1.078 0.280975
TIME_RANGETIME_5m -0.002515 0.124600 -0.020 0.983898
FOLLOWER_RANGEMANY 2.062799 0.056083 36.781 < 2e-16 ***
VIDEO_RANGEMANY -0.433786 0.054252 -7.996 1.29e-15 ***
TAG_NAME.1080p1 -0.119760 0.260540 -0.460 0.645761
TAG_NAME.7_days_to_die1 0.679914 0.236734 2.872 0.004078 **
TAG_NAME.7DTD1 0.730199 0.394529 1.851 0.064197 .
TAG_NAME.biimシステム1 -0.116507 0.105748 -1.102 0.270574
TAG_NAME.biimシステムpart1リンク1 0.504448 0.245285 2.057 0.039727 *
TAG_NAME.biimシステム単発リンク1 0.888891 0.226805 3.919 8.88e-05 ***
TAG_NAME.biim兄貴リスペクト1 -0.125852 0.111165 -1.132 0.257588
TAG_NAME.CeVIO実況プレイ1 -0.346238 0.209447 -1.653 0.098310 .
TAG_NAME.dbd1 0.545283 0.225296 2.420 0.015508 *
TAG_NAME.DbD1 0.012907 0.209341 0.062 0.950835
TAG_NAME.Dead_by_Daylight1 0.251441 0.171066 1.470 0.141603
TAG_NAME.EDF51 -0.295358 0.309690 -0.954 0.340225
TAG_NAME.Fate1 -0.327458 0.286481 -1.143 0.253024
`TAG_NAME.fate/go`1 -0.623181 0.328783 -1.895 0.058037 .
`TAG_NAME.Fate/go`1 -0.829671 0.280716 -2.956 0.003121 **
`TAG_NAME.Fate/Grand_Order`1 -0.243913 0.203880 -1.196 0.231557
`TAG_NAME.fate/grandorder`1 -0.546936 0.306288 -1.786 0.074149 .
TAG_NAME.FGO1 1.010131 0.197305 5.120 3.06e-07 ***
TAG_NAME.FGO宝具1 0.421589 0.332065 1.270 0.204228
TAG_NAME.gdgdゆっくりーず1 -0.752672 0.246281 -3.056 0.002242 **
TAG_NAME.Hearthstone1 -0.301526 1.119753 -0.269 0.787715
TAG_NAME.IA実況プレイ1 1.115433 0.319850 3.487 0.000488 ***
TAG_NAME.Kenshi1 0.399070 0.159369 2.504 0.012277 *
TAG_NAME.MHW1 0.096330 0.253755 0.380 0.704228
TAG_NAME.MikuMikuDance1 -0.748511 0.432749 -1.730 0.083690 .
TAG_NAME.Minecraft1 -0.289551 0.141441 -2.047 0.040644 *
TAG_NAME.MMD艦これ1 0.439434 0.444246 0.989 0.322580
TAG_NAME.MO1 0.439953 0.686532 0.641 0.521631
TAG_NAME.moco781 1.394452 0.335132 4.161 3.17e-05 ***
TAG_NAME.MTG1 -1.485666 0.630546 -2.356 0.018465 *
TAG_NAME.MUGEN1 -0.351582 0.127943 -2.748 0.005997 **
TAG_NAME.Nintendo_Switch1 0.987509 0.344691 2.865 0.004171 **
TAG_NAME.nintendoswitch1 -1.591042 0.258691 -6.150 7.73e-10 ***
TAG_NAME.ONE実況プレイ1 0.037926 0.318418 0.119 0.905191
TAG_NAME.PCゲーム1 0.630201 0.188326 3.346 0.000819 ***
`TAG_NAME.PLAYERUNKNOWN'S_BATTLEGROUNDS`1 0.169232 0.198222 0.854 0.393244
TAG_NAME.PS41 0.103827 0.153536 0.676 0.498888
TAG_NAME.pubg1 1.307507 0.250975 5.210 1.89e-07 ***
TAG_NAME.PUBG1 0.887158 0.170944 5.190 2.11e-07 ***
TAG_NAME.RimWorld1 -0.461862 0.230812 -2.001 0.045389 *
TAG_NAME.RTA1 0.197473 0.116660 1.693 0.090509 .
TAG_NAME.Skyrim1 0.490241 0.324675 1.510 0.131058
TAG_NAME.Splatoon21 -0.143791 0.390605 -0.368 0.712782
TAG_NAME.steam1 0.461013 0.156616 2.944 0.003244 **
TAG_NAME.Steam1 -0.138646 0.088120 -1.573 0.115629
TAG_NAME.TAS1 0.377089 0.161601 2.333 0.019624 *
TAG_NAME.TRPG1 -0.608992 0.260363 -2.339 0.019335 *
TAG_NAME.VOICEROID1 -0.475681 0.285268 -1.667 0.095418 .
`TAG_NAME.VOICEROID+_琴葉_茜・葵`1 -0.076573 0.176459 -0.434 0.664332
TAG_NAME.VOICEROID実況プレイ1 -0.167211 0.079207 -2.111 0.034766 *
TAG_NAME.VOICEROID実況プレイPart1リンク1 -0.088004 0.117491 -0.749 0.453843
TAG_NAME.VOICEROID実況プレイ最終回リンク1 0.959147 0.216672 4.427 9.57e-06 ***
TAG_NAME.VOICEROID実況プレイ単発リンク1 0.055946 0.240778 0.232 0.816261
TAG_NAME.VOICEROID遊劇場1 0.443553 0.191890 2.312 0.020805 *
TAG_NAME.World_of_Tanks1 -0.717739 0.469014 -1.530 0.125939
TAG_NAME.WoT1 0.735085 0.514458 1.429 0.153046
TAG_NAME.アニメ1 0.175126 0.240535 0.728 0.466572
TAG_NAME.ガンオン1 0.690010 0.682084 1.012 0.311720
TAG_NAME.ガンダムオンライン1 0.317492 0.630719 0.503 0.614697
TAG_NAME.クトゥルフ神話TRPG1 -0.362804 0.164452 -2.206 0.027374 *
TAG_NAME.クトゥルフ神話TRPG第一話リンク1 -0.312469 0.340030 -0.919 0.358124
TAG_NAME.ゲーム1 -1.711786 0.282899 -6.051 1.44e-09 ***
TAG_NAME.ゲームPV1 -0.635166 0.238111 -2.668 0.007641 **
TAG_NAME.ゲームエフェクト集1 -0.396289 0.384731 -1.030 0.302990
TAG_NAME.ゲーム実況1 0.393026 0.212466 1.850 0.064338 .
TAG_NAME.さとうささら実況プレイ1 0.110030 0.248334 0.443 0.657713
TAG_NAME.サムネホイホイ1 0.651252 0.214242 3.040 0.002367 **
TAG_NAME.シノビガミ1 -1.111485 0.259683 -4.280 1.87e-05 ***
TAG_NAME.スパロボ1 -0.357577 0.288685 -1.239 0.215479
TAG_NAME.スプラトゥーン21 -0.392959 0.389432 -1.009 0.312948
TAG_NAME.スマブラ1 0.305719 0.361722 0.845 0.398012
TAG_NAME.スマブラSP1 0.011065 0.495475 0.022 0.982182
TAG_NAME.とらねずの人1 1.781407 0.165046 10.793 < 2e-16 ***
TAG_NAME.どんたこす1 -2.853507 0.827008 -3.450 0.000560 ***
TAG_NAME.ニンテンドースイッチ1 -0.160483 0.340780 -0.471 0.637692
TAG_NAME.ネタが多すぎてタグに困る動画1 0.354755 0.227716 1.558 0.119261
TAG_NAME.ハースストーン1 -1.077673 1.092636 -0.986 0.323984
TAG_NAME.バーチャルYouTuber1 0.399030 0.175854 2.269 0.023262 *
TAG_NAME.パワプロ1 -0.970091 0.435760 -2.226 0.026000 *
TAG_NAME.パワプロ20181 -0.463125 0.606934 -0.763 0.445429
TAG_NAME.ヒテッマンリスペクト1 -1.996962 0.391956 -5.095 3.49e-07 ***
TAG_NAME.ファミコン1 0.273050 0.248377 1.099 0.271621
TAG_NAME.プレイ動画1 -0.062514 0.282497 -0.221 0.824865
`TAG_NAME.ボイロ×mtg`1 0.186053 0.655745 0.284 0.776619
`TAG_NAME.ボイロ×MTG`1 0.212828 0.604363 0.352 0.724724
TAG_NAME.ポケモン1 0.435511 0.224213 1.942 0.052089 .
TAG_NAME.ポケモンUSM1 -0.212605 0.393618 -0.540 0.589108
TAG_NAME.ポケモンusm対戦リンク1 -1.247113 0.284237 -4.388 1.15e-05 ***
TAG_NAME.ポケモンUSM対戦リンク1 -1.457755 0.455683 -3.199 0.001379 **
TAG_NAME.ポケモン手描き実況リンク1 0.158531 0.461397 0.344 0.731155
TAG_NAME.マインクラフト1 0.585107 0.192560 3.039 0.002377 **
`TAG_NAME.モダン(mtg)`1 -1.597390 0.783778 -2.038 0.041544 *
TAG_NAME.もっと評価されるべき1 -0.577322 0.175897 -3.282 0.001030 **
TAG_NAME.モンスターハンターワールド1 0.529660 0.295956 1.790 0.073509 .
TAG_NAME.ゆづきず実況プレイ1 -0.329650 0.314180 -1.049 0.294069
TAG_NAME.ゆっくりTRPG1 -0.467650 0.162359 -2.880 0.003972 **
TAG_NAME.ゆっくりTRPG第一話リンク1 -0.098032 0.293639 -0.334 0.738491
TAG_NAME.ゆっくり解説1 0.476938 0.151240 3.154 0.001613 **
TAG_NAME.ゆっくり実況1 -0.339193 0.170583 -1.988 0.046763 *
TAG_NAME.ゆっくり実況プレイ1 -0.057851 0.059690 -0.969 0.332449
TAG_NAME.ゆっくり実況プレイPart1リンク1 0.153139 0.155682 0.984 0.325282
TAG_NAME.ゆっくり実況プレイ最終回リンク1 0.905366 0.209399 4.324 1.53e-05 ***
TAG_NAME.ゆっくり実況プレイ単発リンク1 0.291059 0.280585 1.037 0.299582
TAG_NAME.リアルタイムアタックpart1リンク1 0.618549 0.303729 2.037 0.041699 *
TAG_NAME.リアルタイムアタックPart1リンク1 0.754112 0.261145 2.888 0.003881 **
TAG_NAME.リターン1 1.116500 0.325788 3.427 0.000610 ***
TAG_NAME.レトロゲーム1 0.872534 0.192353 4.536 5.73e-06 ***
TAG_NAME.嘘字幕シリーズ1 -0.968910 0.311829 -3.107 0.001889 **
TAG_NAME.音街ウナ実況プレイ1 -0.011365 0.183453 -0.062 0.950600
TAG_NAME.課金観戦リンク1 0.121020 0.255250 0.474 0.635412
TAG_NAME.艦これ1 0.447382 0.288901 1.549 0.121487
TAG_NAME.艦隊これくしょん1 -0.298465 0.305759 -0.976 0.328992
TAG_NAME.京町セイカ実況プレイ1 -0.361205 0.191830 -1.883 0.059707 .
TAG_NAME.琴葉葵1 -0.106301 0.220816 -0.481 0.630234
TAG_NAME.琴葉葵実況プレイ1 0.185813 0.119504 1.555 0.119979
TAG_NAME.琴葉茜1 0.447557 0.207941 2.152 0.031371 *
`TAG_NAME.琴葉茜・葵実況プレイ`1 0.393414 0.078661 5.001 5.69e-07 ***
TAG_NAME.琴葉茜実況プレイ1 0.315731 0.115781 2.727 0.006392 **
TAG_NAME.琴葉姉妹実況プレイ1 -0.813480 0.212996 -3.819 0.000134 ***
TAG_NAME.結月ゆかり1 -0.291373 0.207370 -1.405 0.159995
TAG_NAME.結月ゆかり実況プレイ1 0.121339 0.075152 1.615 0.106402
TAG_NAME.弦巻マキ実況プレイ1 -0.041612 0.090390 -0.460 0.645255
TAG_NAME.字幕プレイ動画1 -1.397778 0.416374 -3.357 0.000788 ***
TAG_NAME.字幕プレイ動物園1 -4.127953 0.780276 -5.290 1.22e-07 ***
TAG_NAME.実況プレイ動画1 -0.218803 0.094138 -2.324 0.020110 *
TAG_NAME.衝撃のラスト1 0.460224 0.249862 1.842 0.065488 .
TAG_NAME.神回1 0.397291 0.169675 2.341 0.019207 *
TAG_NAME.声優1 0.252770 0.293013 0.863 0.388326
TAG_NAME.千年戦争アイギス1 -1.834336 0.721835 -2.541 0.011047 *
TAG_NAME.多人数VOICEROID実況プレイ1 0.830210 0.210854 3.937 8.24e-05 ***
TAG_NAME.大乱闘スマッシュブラザーズSPECIAL1 -0.682698 0.498819 -1.369 0.171115
TAG_NAME.地球防衛軍51 -0.412492 0.244845 -1.685 0.092045 .
TAG_NAME.刀剣乱舞1 0.513853 0.333226 1.542 0.123060
TAG_NAME.刀剣乱舞偽実況1 -1.455755 0.547128 -2.661 0.007797 **
TAG_NAME.東北きりたん1 0.300364 0.181221 1.657 0.097429 .
TAG_NAME.東北きりたん実況プレイ1 0.125783 0.084940 1.481 0.138647
TAG_NAME.東北ずん子1 0.291033 0.284453 1.023 0.306246
TAG_NAME.東北ずん子実況プレイ1 -0.206326 0.121320 -1.701 0.089005 .
TAG_NAME.東北姉妹実況プレイ1 -0.102716 0.240651 -0.427 0.669507
TAG_NAME.日本語読めない卓1 0.498172 0.225508 2.209 0.027167 *
TAG_NAME.任天堂1 0.406735 0.302979 1.342 0.179449
TAG_NAME.任天堂ゲーム配信1 0.512865 0.249129 2.059 0.039529 *
TAG_NAME.縛りプレイ1 -0.123123 0.163877 -0.751 0.452466
TAG_NAME.裏影P1 2.178431 0.418622 5.204 1.95e-07 ***
TAG_NAME.紲星あかり1 0.448681 0.186183 2.410 0.015957 *
TAG_NAME.紲星あかり実況プレイ1 -0.017078 0.104652 -0.163 0.870371
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 21458 on 18254 degrees of freedom
Residual deviance: 16980 on 18067 degrees of freedom
AIC: 17356
Number of Fisher Scoring iterations: 11
考察
有意がどうかについてだが、サンプル数が多いと、それ自体あまり意味がなくなってしまうことがある。
今回はサンプル数が18255とそれなりに多いので、そこまで有意かどうかについて拘る必要はないと思われる。
(もちろん、有意であればそのパラメータ自体に統計的に意味があるという事ではあるので、まったく考える必要がないということはない。)
まずはモデルの適合度を見る。
fitted関数によってサンプルデータを入れた際のモデルの結果を計算する。
20位以内である確率が50%以上のデータを20以内に入る動画とし、モデルの適合度を見る
次に、各パラメータの値を棒グラフで示し、各説明変数の影響度を見る。
# モデルの適合度
sample1<-sample0%>%mutate(fit=fitted(result))
sample1<-sample1%>%select(isOver20,FOLLOWER_RANGE,VIDEO_RANGE,PUSH_HOUR,NICO_VER,TIME_RANGE,fit)
sample1<-sample1%>%mutate(isOver20=if_else(isOver20=="1",1,0))%>%mutate(d2=(isOver20-fit)^2)
sample1<-sample1%>%mutate(isOver20_Simu=if_else(fit>=0.5,1,0))
re<-sample1%>%mutate(judge=isOver20==isOver20_Simu)%>%group_by(judge)%>%summarise(count=n())
# パラメータについて
smma<-summary(result)
coe<-data.table(rownames(smma[["coefficients"]]),smma[["coefficients"]])
g1 <- ggplot(coe, aes(x = V1, y = Estimate, fill = V1))
g1 <- g1 + geom_bar(stat = "identity")+theme(legend.position = 'none')+theme(axis.text.x = element_text(angle = 90, hjust = 1))
plot(g1)
適合度は以下より約77.6%となった。
割と適当に閾値を決めたにしては良いモデルが作れたかと思われる。
> head(re)
# A tibble: 2 x 2
judge count
<lgl> <int>
1 FALSE 4095
2 TRUE 14160
> 14160/(14160+4095)
[1] 0.7756779
Interceptに比べて各説明変数が高いか低いかで評価する。
まず目につくのが、ニコニコVerが冬の投稿者が切なすぎる。
冬であるというだけでパラメータがここまで負の値を取るのだからやばさが分かる。
良い要因としては、
・フォロワー数が2000人以上いること
・ニコニコVerがβであること
・投稿時間は1時や5時がいいこと(前回の分析では目立たなかったが、確かに20位以内に入りがち)
・7DTD,Part1リンク、DbD、FGO、IA実況プレイ、Kenshi、PCゲーム、PUBG、最終回、任天堂 等のタグが正の要因に。
・投稿者固有のタグはかなり高いor低い要因に。
・動画時間は5分、10分にすると他よりは少し良い程度。それよりも有効なタグをつけた方が効果的。
・投稿数はむしろマイナスに。
さて、上の結果だが、前回の分析とは少し違った結果にもなっている。
交互作用や多重共線性を全く考えていないからである。(この投稿者はこのタグを使いやすい、このタグがつくとこのタグがつきやすい等)
つまり、今回のモデルの結果はある程度は参考になるが、それほどではない。
さらに今回はテストデータそのままで適合度を見ているので、適合度がそれなりに高いのは当然である。
同意義のタグをまとめて分析したり、さらなるなんやかんやの工夫が必要である。
まとめ
glmを使ってロジスティック回帰をしました。
入力データが微妙なので、結果も微妙なことに。
さらなるデータ加工が必要であることが分かります。
あと投稿者に着目して分析した方がいいかと。
フォロワー数が多い方がいいとか、特定の投稿者タグが高いとか、投稿者に依存している部分がかなり多いです。