랜덤포레스트 회귀모델 실습

2024. 5. 16. 10:43학습/머신러닝

 

01 랜덤포레스트 하이퍼파라미터


트리수10 시간0.0초 정확도0.3675
트리수100 시간2.2초 정확도0.3961
트리수200 시간4.5초 정확도0.4005
트리수300 시간6.8초 정확도0.4014
트리수400 시간9.4초 정확도0.4007
트리수500 시간11.4초 정확도0.4010
트리수600 시간13.9초 정확도0.4014

 

서론: 머신러닝 모델 최적화를 위해 트리 수와 정확도, 그리고 실행 시간을 고려하여 가장 효율적인 트리 수를 결정한다. 여기서 효율성은 높은 정확도를 유지하면서도 계산 비용(시간)을 최소화하는 것을 의미한다.

본론: 정확도는 트리 수가 증가함에 따라 점진적으로 증가하지만 300트리 이후로 정확도의 증가량은 상대적으로 미미하다. 실행 시간은 트리 수와 거의 선형적으로 증가한다. 즉, 트리 수가 많아질수록 모델을 훈련시키는 데 더 많은 시간이 소요된다.

 

분석 결과:
1) 100트리와 200트리 사이에서 정확도가 상당히 증가하며 (약 0.004), 시간 증가는 2.3초가 소요된다.
2) 200트리에서 300트리로 넘어갈 때의 정확도 증가는 약 0.0008로, 이는 상대적으로 작은 향상이며, 시간은 추가로 2.3초가 소요된다.
3) 300트리 이후로는 정확도의 증가가 더욱 미비하며, 시간 비용은 계속 증가한다.


결론: 200트리에서 300트리 사이가 정확도와 시간 사이의 균형이 잘 이루어져 가장 효율적인 트리 수의 범위로 보인다. 가장 균형 잡힌 점을 선택해야 한다면, 200트리가 가장 효율적이다. 이 때의 정확도는 0.4005이며, 실행 시간은 4.5초로, 상대적으로 높은 정확도를 합리적인 시간 비용으로 달성할 수 있다. 비용을 조금 더 투자할 수 있다면 300도 괜찮은 선택이라고 본다.

 

02 코드 기록


비교할 수 없는 데이터 삭제
ml_Data =  ml_Data[ml_Data['ranking'].apply(len) > 1]

numpy는 pop이 안된다. 대신 np.delete를 추가한다. 이것은 직접 변환하지 않고 값을 반환해서 람다에 적합함.

 

리스트 중 첫번째 데이터만 삭제 후 반환
ml_Data['tmp'] = ml_Data['ranking'].apply(lambda x: np.delete(x,0))

 

X_test 자리에 스케일러된 데이터를 입력해야 한다.
y_pred = model.predict(X_test)

 

작가, 출판사를 제거 후 다시 병합하는 코드

zero_df_selected = zero_df_selected.drop_duplicates(subset='title')

merge_df = pd.merge(data, zero_df_selected)

 

03 테스트 기록


1. X = 컬럼 7개 (기본 컬럼)
R² Score: 0.3682120817960085
RandomForest Regressor score: 0.368224920901135
Linear Regression score: 0.24256376499093923

2. X = 컬럼 8개 - best(최근랭킹제외) 추가
R² Score: 0.3973600458185117
RandomForest Regressor score: 0.39746349381659474
Linear Regression score: 0.2786522385762441

3. X = 컬럼 9개 - best(최근랭킹제외), first 추가
R² Score: 0.4014250975046889
트리수200 RandomForest Regressor score: 0.40059825178589004
트리수300 RandomForest Regressor score: 0.40140598549679063
Linear Regression score: 0.2781695197479187

 

4. Feature Selection - 가격 제거
RandomForest Regressor score: 0.3916574665341619

 

5. Feature Selection - 판매지수 제거
RandomForest Regressor score: 0.3166905154913804

 

6. Feature Selection - 리뷰 수 제거
RandomForest Regressor score: 0.3836313940957271

 

7. Feature Selection - 평점 제거
RandomForest Regressor score: 0.40015621974425875

 

8. Feature Selection - 출판일부터 현재까지 기간 제거
RandomForest Regressor score: 0.39673042395337876

 

9. Feature Selection - 이전랭킹에서 현재일자 기간 제거
RandomForest Regressor score: 0.3943315417549732

 

10. Feature Selection - 베스트랭킹 제거
RandomForest Regressor score: 0.39290119685529634