1 유튜브 댓글 분류기

TV 홍카콜라유시민의 알릴레오에 달린 댓글을 바탕으로 댓글만 보고 “TV 홍카콜라” 채널에 달릴 댓글인지 “유시민의 알릴레오”에 달릴 댓글인지 예측하는 예측모형을 제작해 보자.

가장 먼저 동영상별로 댓글 자료구조를 준비한다. 그리고 나서 댓글을 예측모형 Basetable 데이터프레임으로 준비하는 과정을 거친고 나서 나이브 베이즈 혹은 GLM 모형을 적합시켜 예측모형을 제작해 나가는 과정을 거친다.

홍준표 vs. 유시민

2 유튜브 트래픽

2.2 채널 트래픽 비교

TV홍카콜라 첫방송이 “2018-12-18” “이 남자, 돌아온다.”라는 티져를 시작으로 본격적으로 방송이 되어 알릴레오와 최대한 유사한 비교 조건을 만든다. “2019-02-01” 시점기준으로 얼추 유사한 동영상 갯수임을 확인할 수 있다.

# A tibble: 2 x 3
  channel                  channel_name stat                  
  <chr>                    <chr>        <list>                
1 UCfmicRK2-WdZMVQDrfcitLA TV홍카콜라   <data.frame [79 x 9]> 
2 UCJS9VvReVkplPwCIbxnbsjQ 알릴레오     <data.frame [274 x 9]>

2.4 유튜브 채널별 동영상 상세

조회수 대비 좋아요 전환은 “TV홍카콜라”가 “알릴레오”에 비해 더 높은 것으로 나타나지만, 파괴력면에서는 “알릴레오”가 “TV홍카콜라”를 넘어서는 것으로 파악된다.

2.5 유튜브 채널 댓글 데이터

tuber 팩키지 get_all_comments() 함수를 사용해서 댓글을 가져온다. 문제는 댓글이 없는 경우 오류가 생기기 때문에 possibly()를 사용해서 오류가 나더라도 후속작업을 진행시킨다.

2.6 댓글 데이터 자료형

트래픽 데이터프레임과 댓글 데이터프레임을 두 유튜브 채널별로 결합시켜 예측모형 개발에 필요한 데이터구조를 만들어낸다.

트래픽 + 댓글

# A tibble: 353 x 4
   channel_name title                           viewCount comment          
   <chr>        <chr>                           <chr>     <list>           
 1 TV홍카콜라   [홍준표의 뉴스콕] 너 이름이 뭐니?~ 114999    <data.frame [440~
 2 TV홍카콜라   [홍준표의 뉴스콕] 文정부, 사라지는 일자리~ 178818    <data.frame [1,9~
 3 TV홍카콜라   [홍준표의 뉴스콕] 누가 뭐라 해도 남북경협 박차~ 74626     <data.frame [771~
 4 TV홍카콜라   [홍준표의 뉴스콕] 효자산업 반도체의 고난~ 54249     <data.frame [522~
 5 TV홍카콜라   [홍준표] 홍준표의 재구성 - 남정욱교수~ 17246     <data.frame [292~
 6 TV홍카콜라   [홍준표의 뉴스콕] 목이 메여 불러보는..~ 105534    <data.frame [683~
 7 TV홍카콜라   [홍준표] 당랑의꿈               49529     <data.frame [778~
 8 TV홍카콜라   [TV홍카콜라 LIVE On-Air] 이벤트 라이브 -~ 86880     <data.frame [689~
 9 TV홍카콜라   [홍준표의 뉴스콕] 중국의 우리하늘 우리어장 침범~ 82345     <data.frame [789~
10 TV홍카콜라   [공식예고] 내 나라 살리는 길, 함께 갑시다 - 홍준~ 215559    <data.frame [2,5~
# ... with 343 more rows

3 자연어 없는 예측모형

3.1 예측모형 데이터

예측모형 구축을 위해 표본 구성을 맞춘다. 즉, 클래스 불균형을 맞추고 시점도 맞추기 위해서 “2018-01-19” 이후로 TV홍카콜라와 알릴레오를 동영상 구성을 맞추고 publication_date에서 날짜 feature만 일부 추출하여 Basetable 모형데이터를 준비시킨다.

# A tibble: 165 x 8
   y     viewCount likeCount dislikeCount favoriteCount commentCount month
   <fct>     <int>     <int>        <int>         <int>        <dbl> <chr>
 1 홍카콜라~    114999     10659          392             1          460 12월 
 2 홍카콜라~    178818     23870          528             1         2146 1월  
 3 홍카콜라~     74626     11163          108             1          851 1월  
 4 홍카콜라~     54249      8236           71             1          596 1월  
 5 홍카콜라~     17246      2681           20             1          318 1월  
 6 홍카콜라~    105534     10641          525             1          720 12월 
 7 홍카콜라~     49529      5328           88             1          901 1월  
 8 홍카콜라~     86880      8564          519             1          671 12월 
 9 홍카콜라~     82345     11731          127             1          834 1월  
10 홍카콜라~    215559     13272         2095             1         2896 12월 
# ... with 155 more rows, and 1 more variable: week <fct>

3.2 예측모형 개발 1

caret 팩키지를 사용해서 예측모형을 개발하고 성능을 파악한다.

9.12 sec elapsed

Call:
summary.resamples(object = resamps)

Models: rpart, glm, rf 
Number of resamples: 30 

Accuracy 
           Min.   1st Qu.    Median      Mean   3rd Qu. Max. NA's
rpart 0.6363636 0.7500000 0.8333333 0.8403263 0.9090909    1    0
glm   0.6666667 0.8333333 0.9166667 0.8807692 0.9807692    1    0
rf    0.7272727 0.8333333 0.9128788 0.8974359 0.9214744    1    0

Kappa 
           Min.   1st Qu.    Median      Mean   3rd Qu. Max. NA's
rpart 0.2413793 0.5000000 0.6666667 0.6806696 0.8196721    1    0
glm   0.3333333 0.6439394 0.8333333 0.7597664 0.9608434    1    0
rf    0.4406780 0.6666667 0.8216008 0.7935792 0.8408635    1    0

Confusion Matrix and Statistics

          Reference
Prediction 홍카콜라 알릴레오
  홍카콜라       22        2
  알릴레오        1       23
                                         
               Accuracy : 0.9375         
                 95% CI : (0.828, 0.9869)
    No Information Rate : 0.5208         
    P-Value [Acc > NIR] : 3.647e-10      
                                         
                  Kappa : 0.875          
 Mcnemar's Test P-Value : 1              
                                         
            Sensitivity : 0.9565         
            Specificity : 0.9200         
         Pos Pred Value : 0.9167         
         Neg Pred Value : 0.9583         
             Prevalence : 0.4792         
         Detection Rate : 0.4583         
   Detection Prevalence : 0.5000         
      Balanced Accuracy : 0.9383         
                                         
       'Positive' Class : 홍카콜라       
                                         

4 댓글 자연어 데이터 분석 2

5 댓글 사용자 예측

유튜브 채널(TV홍카콜라, 알릴레오)에 달린 댓글을 바탕으로 유튜브 채널을 예측하는 분류기를 만들어본다. 이를

5.1 댓글 사용자 예측 BaseTable

댓글 사용자 예측 BaseTable을 댓글로부터 제작한다. 그리고 나서 이를 나이브베이즈 예측모형을 통해 제작한다. “알릴레오” 유튜브 채널에 댓글이 없는 동영상이 많아서 이를 제거한다.

# A tibble: 3 x 4
  check_type channel_name     n  pcnt
  <lgl>      <chr>        <int> <dbl>
1 FALSE      알릴레오       126 0.357
2 TRUE       TV홍카콜라      79 0.224
3 TRUE       알릴레오       148 0.419

댓글을 뽑아내서 형태소 분석을 한 후에 예측모형에 사용된 basetable을 제작한다.

glmnet 팩키지 cv.glmnet() 함수를 사용해서 유튜브 채널에 붙는 댓글을 넣으면 채널을 예측하는 댓글 예측모형을 제작할 수 있다.

Confusion Matrix and Statistics

            Reference
Prediction   TV홍카콜라 알릴레오
  TV홍카콜라         79        0
  알릴레오            0      148
                                     
               Accuracy : 1          
                 95% CI : (0.9839, 1)
    No Information Rate : 0.652      
    P-Value [Acc > NIR] : < 2.2e-16  
                                     
                  Kappa : 1          
 Mcnemar's Test P-Value : NA         
                                     
            Sensitivity : 1.000      
            Specificity : 1.000      
         Pos Pred Value : 1.000      
         Neg Pred Value : 1.000      
             Prevalence : 0.348      
         Detection Rate : 0.348      
   Detection Prevalence : 0.348      
      Balanced Accuracy : 1.000      
                                     
       'Positive' Class : TV홍카콜라 
                                     

6 댓글 사용자 네트워크 분석