팀 프로젝트를 통해 머신러닝과 딥러닝을 배우게 되면서 이론적으로는 알겠는데 실제로 무슨 차이가 있는것인지 궁금하여 시작하게 된 유튜브 조회수에 대한 프로젝트를 진행했다.
Kaggle에서 Youtube Korea에 대한 데이터셋을 제공해주어 이를 토대로 분석을 시도하였다.
조회수가 잘 나오게하려면 어떤 변수들이 상관관계를 가지고 종속변수에 영향을 주는지 확인해보는 방향으로 개발을 진행 하였다.
1. 변수를 선정한다. 조회수는 Views 나머지 변수는 tags, channel_title, comment_count, likes, dislikes 등이 있다.
2. 먼저 데이터셋을 분석하기 위해 각각의 변수를 피처 스케일링 작업을 진행하였다.
피처 스케일링 작업이란 모델의 성능을 더 좋게 만들기 위해서 데이터의 서로 다른 변수의 값을 일정 범위 수준으로 맞추는 작업이다.
방법으로는 Normalization(정규화) 와 Standardization(표준화)가 있다.
정규화는 값들을 0과 1 사이의 범위로 재조정 시킨다. 라이브러리로는 min-max scaling 이 있다.
from sklearn.preprocessing import MinMaxScaler
minmax_scaler = MinMaxScaler()
train_minmax = minmax_scaler.fit_transform(train_X)
train_minmax = pd.DataFrame(train_minmax,
index=train_X.index,
columns=train_X.columns)
표준화는 분산이 1이고, 평균을 0으로 하는 결과 분포표에 범위 사이 값으로 변경해준다. 라이브러리는 StandardScaler 이다.
from sklearn.preprocessing import StandardScaler
standard_scaler = StandardScaler()
train_standard = standard_scaler.fit_transform(train_X)
train_standard = pd.DataFrame(train_standard,
index=train_X.index,
columns=train_X.columns)
3. 피처 스케일링을 통해 변수들을 표준화 한 후, 상관관계를 분석했다.
분석을 통해 확인해보니 조회수와 가장 높은 상관관계를 가지는 변수는 좋아요 갯수였다. 두번쨰로는 댓글 개수가 뒤를 이었다. 의외의 점은 태그 갯수와 기간은 아무런 영향을 주지 못했다.
하지만 이것이 조회수 떄문에 좋아요가 많아진 것인지 다른 요인에 의한 것인지 확신하기는 어렵기 때문에
회귀분석과 인공신경망을 통해서 추가 분석을 시도했다.
4. 모델은 크게 네 가지로 선형회귀, 릿지회귀, 랜덤포레스트, 인공신경망을 교육시켜보았다. 먼저, 전진선택법을 통해 독립변수의 조합을 찾아내어 최상의 SSR 을 찾아내어 그 변수들만을 가지고 모델을 적용해보았다.
선형회귀란 종속변수y(조회수)에 대해서 독립변수x(변수들)이 어떠한 영향을 미치는지 독립변수가 종속변수의 변화를 야기하는 현상이 있는지를 확인할 수 있다.
릿지회귀란 선형회귀에서 모델의 변수가 많아 지나치게 복잡해지면 과대적합의 문제를 발생시킨다. 그렇기 떄문에 설명력에 기여하지 못하는 독립변수의 회귀계수를 0에 근접하도록 축소한다.
랜덤 포레스트란 여러개의 의사결정나무를 만들어서 종합 후 최종 예측하는 모델이다. 앙상블 학습 방법의 일종으로 여러개 기초 알고리즘을 결합하여 더 좋은 성능의 분류/예측 모델을 형성한다. 사용 목적에 따라 배깅, 부스팅, 스택킹으로 분류한다. 작동원리는 1.부트스트랩 샘플링 > 2. 특성 무작위 선택 > 3. 의사결정나무 생성 > 4. 결과 취합
장점은 의사결정나무가 다양하게 생성되어 과적합이 방지되고 높은 정확성이 있다. 하지만 단점으로 모델이 너무 복잡하여 결과 추론이 어렵다.
인공신경망은 흔히 딥러닝이라고 하는 기법의 한 유이며, ANN 이라고도 한다. 상호 연결된 세 개 이상의 레이어를 가지고 있으며 입력층, 은닉층, 출력층이 있따. 모든 계층에서 복잡한 가중치와 활성함수, 출력함수 ,손실함수 등의 파라미터를 필요로하며 이를 이용해 최적의 가중치와 임계값을 찾아낸다. 하지만 수많은 데이터를 필요로 하며, 최적값을 찾기 어려울 뿐더러 결과 해석이 어렵다.
5. Train set 을 통해 모델을 교육시켜 Validation set으로 검증을 시도하였다. 모델의 성능을 비교하기 위해 회귀모델에는 결정계수를 사용한 결과, 아래 모델의 대한 스코어가 나타났다. 랜덤포레스트가 높게 나타나고 기대했던 신경망이 85%로 5% 더 낮은 결과를 보여준다.
6. 신경망에 은닉층과 에포크 수를 조금 더 조절하여 다시 분석을 시도하고 Test set으로 모델테스트를 진행했다.
에포크는 전체 데이터 셋이 신경망을 학습한 횟수를 의미한다.
은닉층과 출력층 사이에는 sigmoid 함수와 ReLU 함수를 비교분석하며 더 좋은 성능을 가진 활성화 함수를 사용하였으며,
은닉층과 같이 에포크도 최적의 개수를 찾아내기 위해 for 문을 사용해 여러모델을 학습해보았다.
## hidden layer를 다르게 하여 loss를 구해보기
end_loss=[]
for i in range(1,5):
## Parameter Settinga
input_nodes = 2
hidden_nodes = i
output_nodes = 1
learning_rate = 0.01
epochs = 1000
## Training for optimization
bdl = BasicDeepLearning(input_nodes, hidden_nodes, output_nodes, learning_rate)
loss = []
for j in range(epochs):
bdl.train( training_data, label)
loss.append(bdl.loss())
end_loss.append(loss[-1])
print("→ hidden layer: ", i ,", end of loss: ", loss[-1])
7. 해당 결과에 따른 Test set 결과이다. 아무래도 신경망에 조금 더 많은 조건을 주었고 활성화함수와 출력함수, 손실함수를 어떻게 맞추냐에 따라 결과가 달라지는 것으로 보인다.
8. 결과적으로 신경망을 이용한 결과도 머신러닝과 마찬가지로 조회수와 좋아요, 댓글 수 는 선형적인 관계를 띄고 있어 조회수에 영향을 주고 있는 것으로 드러났다. 앞으로 유튜브를 할 계획이라면 좋아요와 댓글 수를 높게 올리면 수익을 창출할 수 있을 것이라 생각한다.
아쉬운 점
피처 스케일링을 할 때 표준화는 이상치가 있을 때 평균과 표준편차에 영향을 미쳐 균형 잡힌 척도를 볼 수 없다는 특징이 있었다. 다른 기법을 사용했으면 조금 더 좋은 성능의 모델이 나왔으리라 생각이 든다. 또한, 이전에 이상치를 한번 제거할 수 있는 박스플롯을 만들어 제거하고 시작을 진행했으면 좋았을 것 같다.
범주형 변수가 없었는데 범주형은 One-Hot encoding 으로 더미변수로 변경해주면 된다.
회귀분석 중 라쏘회귀도 함께 모델링해보았으면 좋았을 것 같다.
라쏘회귀란 설명력에 기여하지 못하는 독립변수의 계수를 0으로 만드는 패널티 방법이다.
회귀분석, 릿지회귀분석과 어떠한 차이가 있는지 추후에 분석을 해보고 싶다.
출처 :
꿈 있는 다락방 https://challenge.tistory.com/30
릿지 회귀 / 라쏘 회귀 / 일래스틱 회귀분석
사전 배경 이해 통계 데이터 분석에 있어서 모델의 단순화는 모델 일반화를 위해 매우 중요하다. 일반적인 다중선형회귀에서는 1. 독립변수 갯수가 표본크기에 비해서 지나치게 많을 경우 제대
challenge.tistory.com
jiazzang.log :
[데이터 전처리] 데이터 스케일링(StandardScaler, MinMaxScaler, RobustScaler)
실습 데이터: 캐글 타이타닉 데이터 데이터 스케일링(Data Scaling)이란 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 의미합니다. 값을 조정하는 과정이기 때문에 수치형 변수에만
velog.io
친절한 데이터 사이언티스트 되기 강좌
상관분석 : 회귀분석 = 상관관계 : 인과관계?
회귀를 통해서 인과관계를 밝혀낸다는 말이 너무 많아서, 저도 상관분석은 상관관계, 회귀분석은 인과관계를 증명하고, 밝혀내는 것인가? 엥? 하는 아주 큰 의문을 가슴에 품은 적이 있습니다.
recipesds.tistory.com
우주먼지의 하루
https://rk1993.tistory.com/101
Ridge regression(릿지 회귀)와 Lasso regression(라쏘 회귀) 쉽게 이해하기
Ridge regression와 Lasso regression를 이해하려면 일단 정규화(regularization)를 알아야합니다. 첫번째 그림을 보면 직선 방정식을 이용하여 선을 그었습니다. 데이터와 직선의 차이가 꽤 나네요. 정확한
rk1993.tistory.com
TwoJun;s Tech Blog
https://twojun-space.tistory.com/124#google_vignette
[머신 러닝] - 경사 하강법(Gradient descent)
금일(2023-03-13) 학부에서 머신러닝 수업 중, 기계 학습의 핵심이라고 언급해 주셨던 "경사 하강법(Gradient descent)"에 대해 추가적인 스터디가 필요했고, 이 부분에 대해 간략하게 정리한 글입니다. 1
twojun-space.tistory.com
jayce_97.log
https://velog.io/@jayce_97/Python-%EC%9D%B8%EA%B3%B5%EC%8B%A0%EA%B2%BD%EB%A7%9D
Python 인공신경망
오늘은 인공신경망(Artificial Neural Network,ANN)에 대해서 배워보도록 하겠습니다.인공신경망(Artificial Neural Network,ANN)이란 딥러닝의 기초가 되는 기계학습 알고리즘(컴퓨터가 인지/추론/판단)입니다.
velog.io
준비하는 대학생
[기계학습] 앙상블 학습 - 랜덤포레스트(Random Forest)
앙상블 학습(Ensemble Learning)이란? 앙상블 학습은 여러 개의 기본 학습 모델을 조합하여 더 강력한 모델을 만드는 기법입니다. 비유를 들자면, 한 명의 전문가의 의견보다 여러 명의 전문가들의 의
gsbang.tistory.com
'Portfolio' 카테고리의 다른 글
[Tableau] Business Dashboard 구현 (0) | 2024.07.12 |
---|---|
[Python] Crawling Meta 라이브러리 (0) | 2024.07.12 |
[Tableau] 작업물 (0) | 2024.07.12 |
[DL] RNN / LSTM 태양광 발전량 예측 모델 (0) | 2024.07.12 |
[통계] 시계열분석 ARIMA모형을 이용한 서울지역 대학생 입학 분석 및 예측 (0) | 2021.05.17 |