안녕하세요
삼성SDS Brightics 서포터즈 3기, 비전공생입니다!

오늘은 벌써 개인 프로젝트의 마지막 포스팅 데이입니다.
짧지는 않은 시간이었는데, 금새 이렇게 끝이 다가오니 아쉬운 마음이 크네요!
일단, 지난 주에는 랜덤포레스트, XGB, AdaBoost 분류 모델을 통해 비교를 진행했는데요.
랜덤 포레스트가 Accuracy 99%, f1 83%, Precision 86%, Recall 81%의 가장 좋은 성능을 보여서,
이번주는 랜덤 포레스트 모델 내에서 최대 깊이나 트리의 수 등을 바꾸면서
최적의 성능을 가지는 하이퍼파라미터를 탐색해보도록 하겠습니다.
추가로, 해당 데이터셋에서 저는 오버샘플링(SMOTE)를 활용해 불균형 데이터 문제를 해결해주었는데
언더샘플링을 진행했을 때는 어떤 결과값이 나오는지 비교해보며,
이번 프로젝트에 대한 마무리 정리를 해보도록 하겠습니다.
Random Forest Hyperparameter
그 전에, 랜덤 포레스트의 하이퍼파라미터를 먼저 짚고 넘어가보도록 하겠습니다.
하이퍼파라미터 종류
|
설명
|
n_estimators
(Number of Trees)
|
- 결정트리의 갯수를 지정
- Default = 10
- 무작정 트리 갯수를 늘리면 성능 좋아지는 것 대비 시간이 오래 걸림
|
max_features
|
- 최적의 분할을 위해 고려할 최대 feature 갯수
- Default = 'auto'
- int형으로 지정 -> feature 갯수 / float형으로 지정 -> 비중
- sqrt 또는 auto : 전체 feature 중 √(feature갯수) 만큼 선정
- log : 전체 feature 중 log2(전체 feature 갯수) 만큼 선정
|
max_depth
|
- 트리의 최대 깊이
- default = None
-> 완벽하게 클래스 값이 결정될 때까지 분할 또는 데이터 갯수가 min_samples_split보다 작아질 때까지 분할
- 깊이가 깊어지면 과적합될 수 있으므로 적절히 제어 필요
|
class_weight
|
불균형(Imbalanced)클래스인 경우 사용
|
min_samples_split
|
- 리프노드가 되기 위해 필요한 최소한의 샘플 데이터 수
- min_samples_split과 함께 과적합 제어 용도
- 불균형 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 작세 설정 필요
|
min_samples_leaf
|
- 노드를 분할하기 위한 최소한의 샘플 데이터 수
-> 과적합 제어하는 데 사용
- Default =2
-> 작게 설정할 수록 분할 노드가 많아서 과적합 가능성 증가
|
max_leaf_nodes
|
- 리프노드의 최대 갯수
|
그럼 본격적으로 진행해볼게요!
1. Train/Validation/Test 으로 재분리, 정규화
하이퍼파라미터 튜닝을 위해서는 검증 데이터셋이 필요한데요.
이를 위해 우선, 학습/검증/테스트 데이터 셋으로 다시 분리를 진행하도록 하겠습니다.

split data 함수를 통해 Train 데이터에서 다시 Train과 Validation 데이터로 분리한 후,
기존의 Normalization과 Over Sampling에 새로 분리한 Train 데이터를 적용하겠습니다.

지난번 Test 데이터셋에 Train과 동일한 정규화 모델을 적용하되, 샘플링은 진행하지 않았던 것과 동일하게
Validation 데이터셋에도 적용해보도록 하겠습니다.

오른쪽 결과값을 보면, 동일한 모델로 정규화가 잘 진행된 것을 확인할 수 있습니다!
2. 하이퍼파라미터 튜닝, 최적 탐색
그럼 이제 본격적으로 하이퍼파라미터 튜닝을 진행해보고
최적의 하이퍼파라미터를 탐색해보는 시간을 갖겠습니다.
다양한 하이퍼파라미터 튜닝을 해보았는데, 그 중 그래도 결과값에 차이가 있는 것으로 정리해보았는데요.
우선, Number of Trees(트리의 수)라는 하이퍼파라미터를 디폴트 10에서 20, 그리고 100으로 돌려보았습니다.
아래는 트리의 수를 20으로 적용한 결과값입니다.


음 결과값을 보면 아시겠지만, 디폴트인 10개로 진행했던 지난주 모델과 큰 차이가 없습니다.
사실 오히려 점수가 안좋게 나왔습니다. 도움이 되지 않는 튜닝인 것 같습니다.
그럼 100개로 적용해본 모델도 확인해볼까요?


20개로 설정한 모델과 거의 차이가 없습니다.
그 외에, max_depth(최대 깊이) 하이퍼파라미터도 2, 4, 6 등을 적용해 비교해보았으나
의미있는 성능 개선이 없었습니다..!
해당 데이터의 경우, 불균형이 심한 데이터셋이므로
class_weight 이라는 하이퍼파라미터를 더 손보고 싶었는데요!
이미 앞단에서 oversampling으로 클래스의 비중을 맞추었기 때문에
이 프로젝트에서는 설정하지 않아도 무방할 것 같다는 피드백을 받았습니다.
그래서 결론적으로, 하이퍼파라미터 튜닝은 성능에 큰 도움이 되지 않았기 때문에
오버샘플링과 언더샘플링 기법의 적용 결과를 비교해보며
어떤 기법이 더 효과적이었는지 확인해보도록 하겠습니다.
3. Over Sampling(SMOTE) & Under Sampling
추가로, 아래의 프로세스를 통해 오버샘플링과 언더샘플링 적용 시의
랜덤포레스트 분류 모델의 성능을 비교해보겠습니다.

왼쪽 결과값은 지난 번에 오버샘플링을 통해 학습시킨 모델을 Test 데이터셋에 적용한 결과입니다.
정확도 99%에 다른 평가지표들도 전반적으로 안정적이었습니다.


왼) Over Sampling(SMOTE) 오) Under Sampling
한편, 오른쪽은 언더샘플링한 데이터셋을 기반으로 학습시킨 모델을 Test 데이터셋에 적용한 결과입니다.
(오버샘플링과의 방식과 동일합니다)
결과값에서 차이가 크게 보이죠!
정확도도 99%에서 58%로 차이가 있고, f1 score, precision 모두 거의 0에 수렴해서
recall값은 높지만 이를 좋은 모델이라고 평가하기 어렵습니다.
즉, 오버샘플링 방식을 선택하여 데이터 불균형 이슈를 해결한 것은 좋은 선택이었던 것으로 정리가 되겠네요!
4. 마무리
그럼 오늘부로 (사실 이후로도 하이퍼파라미터는 조금 더 손볼 예정)
공식적인 프로젝트 포스팅은 마무리가 되는데요.


결론적으로는, 위의 결과값 처럼
Normalization(정규화) - Over Sampling(SMOTE) - Random Forest 분류 모델
데이터 정규화와 오버샘플링을 진행한 랜덤 포레스트 분류 모델이
FDS 이상거래 탐지 모델에서 Accuracy 99%, f1 83%, Precision 86%, Recall 81% 의
가장 좋은 예측 성능을 보여주었습니다!
하지만 여전히 정상거래(0)이지만, 이상거래(1)이라고 예측한 비율이 19%로 존재하고 있습니다.
만약 실제로 이 모델이 카드사의 이상거래 탐지 모델로 적용된다면,
평소처럼 정상거래를 진행한 고객이 이상거래로 인지되어 결제와 출금이 막히는 등의
큰 불편함을 야기할 수 있고, 고객으로 부터 신뢰를 잃는 문제로 커질 수 있겠죠.
이를 개선하기 위해 이상거래를 이상거래라고 예측하는 관점도 중요하지만,
정상거래를 이상거래라고 예측하는 양을 줄이는 것에 초점을 맞추는 것도
개선 사항으로 중요한 포인트가 아닐까 싶습니다.
그럼 다음주에는 브라이틱스 수료식 및 활동 후기
그리고 최종 보고서에 대한 공유로 다시 찾아오겠습니다.
오늘도 시간내어 긴 글 읽어주셔서 감사합니다.
피드백 사항이 있으시다면, 어떤 것이라도 좋으니 꼭꼭 남겨주시면 감사하겠습니다!
*본 포스팅은 삼성SDS Brightics 서포터즈 3기 활동의 일환으로 작성하였습니다.
'삼성SDS Brightics > 브라이틱스 서포터즈' 카테고리의 다른 글
[삼성SDS Brightics] 서포터즈 활동 후기, FDS 이상거래 탐지 모델 보고서 공유 (0) | 2022.11.16 |
---|---|
[삼성SDS Brightics] FDS 이상거래 탐지 #5편- 머신러닝 모델링 (Random Forest, XGB, AdaBoost) (0) | 2022.11.01 |
[삼성SDS Brightics] FDS 이상거래 탐지 #4편- 머신러닝 모델링 (Descision Tree Classification) (0) | 2022.10.25 |
[삼성SDS Brightics] FDS 이상거래 탐지 #3편- 불균형 데이터 처리 (언더샘플링, 오버샘플링, SMOTE 활용) (0) | 2022.10.19 |
[삼성SDS Brightics] FDS 신용카드 이상거래 탐지 #2편 (0) | 2022.10.12 |