본문 바로가기
공부/인공지능

블로그 댓글 개수 예측하기(using Random Forest)

by 혼밥맨 2021. 1. 13.
반응형

블로그 댓글 개수 예측하기(using Random Forest)

Blog Feedback Prediction

 

데이터 셋 출처 : https://archive.ics.uci.edu/ml/datasets/BlogFeedback

 

1. project description (프로젝트 개요)
 - problem statement 문제정의
 : 지난 72시간 동안 올라온 블로그 글을 분석하여 24시간 이후 블로그에 달릴 댓글의 개수를 예측합니다.

 - motivation
 : 블로그 포스트를 이용하여 소셜 미디어 마케팅을 위한 가능한 인사이트를 얻는다.

 - method
 : 선형 회귀와 앙상블 학습 모델을 이용하여 블로그에 달릴 댓글의 개수를 예측합니다. 그리고 모델들의 효율을 R2와 평균 제곱오차 (MSE; mean squared error) 결정계수를 계산함으로써 비교합니다.

 

2. dataset description
 - 타겟 변수는 예측하려고 하는 댓글의 개수입니다. 데이터 셋은 281개의 특징 (feature)을 가지고 있고, 총 60,000개의 가까운 블로그 포스트에서 수집했습니다. 데이터 셋을 크게 4가지 특징으로 나눌 수 있습니다. 첫 번재는 데이터 셋을 수집하기 전 블로그에 달린 댓글의 개수, 두 번째는 블로그 포스트 소스에 대한 피드백, 세 번째는 중요한 200개의 단어의 존재, 그리고 마지막 네 번째는 블로그 포스트한 날짜의 이진 표기입니다.

 

3. Initial analysis of train data
 - 훈련 데이터로부터 두 가지 중요한 추론을 할 수 있었습니다. 
 1) 치우진 종속 변수 (Skewed dependent variable) : 훈련 데이터의 종속 변수 (dependent variable) 중 64%가 zero value 였습니다. 그리고 zero value data가 아닌 데이터 중 약 75%가 10보다 작았습니다. 그러나 종속 변수는 1,424 만큼 큰 value를 가질 수 있습니다.

 2) 다른 특징들 (feature, column)과 비교했을 때, 종속변수의 상관관계는 몇몇 특정 columns와 같이 있을 때 높았습니다. 예측대상값 (target value) 열과 가장 큰 상관관계를 가진 독립 특징들 (independent features)은 대부분 블로그 포스트 소스에 달린 댓글 개수의 평균값 혹은 중간값이었습니다. 그러나 많은 다른 특징들은 다른 특징들과 크게 상관관계를 가지고 있었습니다.

 

4. 접근 방법 (Approach) 
 - 사용할 모델은 회귀 모델이고 총 4가지 모델을 데이터셋에 적용할 계획입니다. 첫 번째 모델은 선형 회귀 (Linear regression), 두 번째 모델은 랜덤 포레스트(Random Forest), 세 번째 모델은 그라디언트 부스팅 (Gradient boosting), 마지막 네 번째는 에이다 부스트 (ADA boost) 입니다. 
 - 선형 회귀 모델은 나머지 세 개의 앙상블 모델의 베이스 모델입니다. 
 - 평가 방법은 총 5가지입니다. 첫 번째는 평균절대오류 (Mean Absolute Error), 두 번째는 중간값절대오류 (Median Absolute Error), 세 번째는 평균 제곱오차 (MSE; Mean Squared Error), 네 번째는 Max Error입니다. 마지막 다섯 번째는 R2 Score 입니다. 

5. Average of values over 10 observations
 - 10개의 관찰이 두 달 동안 15일 간격으로 두고 선택된 다섯 개의 다른 테스트 셋들을 통해 발견되었습니다. 싸이킷 런 (Scikit learn)에서 제공하는 기본 회귀 모델들이 블로그에 달린 개수를 예측하기 위해 사용 되었습니다. 랜덤 포레스트 회귀 모델을 적용했을 때 오류값이 가장 낮았습니다. 랜덤 포레스트의 나무 (tree) 개수를 늘려서 다시 시도했지만, 유의미한 개선은 관찰할 수 없었습니다.

 

6. 추론 (Inference)
 - R2 점수는 모델의 독립 변수에 의해 설명되는 분산 비율(y)을 나타냅니다. 최고 점수는 1.0이며 음수일 수도 있습니다. (모델이 임의적으로 더 나쁠 수 있기 때문입니다)
 - 입력 특징 (input features)을 무시하면, R2 점수는 0입니다.
 - 관측된 R2 점수의 최고값은 0.7이었습니다. 데이터에 포함된 대부분의 특징이 단어들과 요일 표시와 같은 이진 표시기이기 때문에 특징 선택 (feature selection)은 문제에 대한 두 번째 접근법이 될 것입니다.

 

7. 특징 선택 (Feature Selection)
 - 이 프로젝트의 동기는 블로그 포스트의 소셜 미디어 측면을 이해하려는 것이었기 때문에, 댓글 개수에 대한 독립적인 특징 세트의 영향 (effect of independent feature sets)을 이해하려고 노력했습니다.
 - 먼저 평일에 등록된 블로그 포스트의 특징들을 고려했습니다. 블로그 포스트를 등록하기에 가장 좋은 날은 월요일과 목요일이라고 한다. 
 - 데이터의 빈도 차트에서 보듯이 화요일과 목요일과 같은 평일에는 실제로 더 많은 수의 댓글이 있음을 확인할 수 있습니다.
 - 그러나 댓글 수와 평일 이진 기능 간의 상관관계는 매우 낮았습니다.

 

 - 다음으로 중요한 특징은 단어셋들이었습니다. 빈도표에서 보듯이 눈에 띄는 단어가 몇 개 있습니다. 빈도가 높은 단어는 불용어 (stop word)일 가능성이 높습니다.
 - 주어진 단어가 나타날 때, 댓글의 조건부확률이 0보다 클 확률은 데이터에 대해 0.4 정도 분포되어 있습니다. 따라서 회귀 분석에 사용할 수 있는 특징이 아닐 수 있습니다.

 

 - 특징 선택을 위해 기존의 필터 (filter) 및 wrapper 방법을 고려했습니다.
 - 특징과 예측대상값 (target values) 사이의 상관 관계를 이용하여, 서로 큰 상관관계가 없는 특징들을 선택하였습니다.
 - 랜덤 포레스트 회귀 모델을 사용하여 5겹 교차 검증 (5-fold cross validation)을 통해 재귀 피처 제거 래퍼 방법 (Recursive Feature Elimination method)을 통해 특징 선택 (feature selection)을 계속했습니다.
 - 이 단계에서 기본 및 부모 특징 세트의 특징 (features from the basic and parent feature sets), 즉 소스 블로그 포스트에 대한 평균, 최소, 최대 피드백, 데이터 기록 전 블로그 포스트에 대한 과거 댓글 수를 포함하는 9가지 특징 (feature)으로 줄였습니다.

 

8. Results (결과)
 - 1) 위에서 보듯이, 파일러 방법 (filer method)이 구현된 후 평균 제곱 오차는 모든 모델들에 대해 낮아집니다. 녹색의 그라데이션 부스트 모델과 빨간색의 에이다 부스트 모델은 일반적으로 트리 수가 증가하면 성능이 향상됩니다. 그러나 랜덤 포레스트 회귀 모델은 낮은 오류 값으로 최상의 성능을 발휘하는 것으로 나타납니다.

 

 
 - 2) R2 점수에 대해 유사한 차트를 작성했으며 특징 선택이 적용되면 점수의 증가를 관찰할 수 있었다. 관찰은 랜덤 포레스트 회귀 모델이 가장 우수한 성능을 보이는 것과 유사합니다. 관측된 경우 선형 회귀 분석에서도 이 차트와 이전 차트의 출력이 균일합니다.

 

9. Conclusion (결론)
 - 다양한 특징들이 있을 때는 특징들의 중요도를 파악, 분석해서 feature selection (특징 선택)을 할 수 있다. Ensemble Model (앙상블 모델)의 퍼포먼스도 훌륭했다. 미래에는 Neural Network Models (신경망 모델)을 적용한다면 좋은 결과가 나올 수 있을 것이다. 

반응형

댓글