• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

random_state 관련하여 질문이 있습니다.

21.05.04 17:43 작성 조회수 453

0

안녕하세요! 항상 강의를 통해 열심히 배우고 있습니다!

random_state 관련하여 질문이 있습니다

강의에서는 코드를 통해 실습할때 동일한 결과값을 내기 위해 random_state를 넣어서 결과를 도출하는 것으로 알고 있습니다.

제가 갑자기 든 의문점이 학습 목적이 아닌 실제 분석을 할 경우 random_state를 이용하는지 궁금합니다. 

1. 만약에 제가 random_state를 이용하지 않고 결과를 낼경우 가령 같은 hyperparameter 값을 이용해도 매번 evaluation score가 다르기 마련인데

그렇다면 실제로 분석을 시행할때 (binary 문제라고 가정을 하고) random_state를 넣지 않는다면 score (ex. precision score)값이 매번 달라지는데 제가 적용한 hyper parameter 혹은 feature engineering 등이 가장 최적의 방법인지 어떻게 판단하게 되나요? 

(예를 들어 feature를 scaling 했을 때의 evaluation score와 scaling 하지 않았을때의 score 값을 비교한다고 했을때 random_state = 10일 때는 feature를 scaling 했을때 evaluation score가 높고,

random_state = 20일 때는 feature를 scaling하지 않았을때 evaluation score가 더 좋은 경우엔 제가 분석을 잘못 한 것인가요?)

강의의 어느 특정 부분에서 의문점이 생긴것이 아니여서 강의의 어느 부분인지는 넣지 않았습니다!

답변 1

답변을 작성해보세요.

0

안녕하십니까,

좋은 질문이군요(살짝 어렵기도 합니다 ^^)

일반적으로 운영에 Deploy할 학습 모델은 random_state를 고정하지 않습니다(개인 전문가 별로 다를 순 있습니다만, 전 고정하지 않습니다)

random_state로 고정을 하면, 예를 들어 train과 test세트를 나눌때 부터 특정 test 세트가 만들어질 우려가 있습니다. validation역시 마찬가지 입니다. 모델 알고리즘 역시 특정 상황에 너무 고착화될 우려가 있습니다. 운영에 Deploy될 모델이라면  조금의 성능 향상을 위해서  불안정한 성능을 나타낼 우려가 있는 모델보다는 살짝 성능은 떨어지더라도 안정적인 성능을 보이는 모델이 더 좋습니다.

random_state로 특정 값을 고정해서 테스트 환경에서는 약간 성능이 향상 되었지만, 운영에서는 우리가 설정한 테스트 데이터 보다 더 다양한 유형으로 데이터가 입력 됩니다. 때문에 학습, 검증, 테스트 시에 여러번 검증, 테스트를 수행해서 성능 결과를 지속적으로 확인할 필요가 있습니다. 비록 테스트 할때마다 성능이 달라지더라도, 문제가 나오지 않는지 확인하는 게 중요하기 때문에 random_state를 잘 적용하지 않습니다.

일반적으로 특정 random_state를 고정해서 성능이 약간 좋아졌다면(개인적인 의견으로는 0.5% 미만) 무시해도 좋습니다. 하지만 만약 random_state를 고정해서 성능이 월등히 좋아졌다면, 왜 그런지 이유를 찾아야 합니다. 특정 데이터값 분포도로 유도 되면서 모델의 성능이 달라지지 않았는지, 학습, 검증, 테스트 데이터는 제대로 잘 쪼개어 졌는지 반드시 먼저 확인해야 합니다. 가급적이면 random_state에 영향을 받지 않는 모델로 만들어 지는게 좋습니다.

만약 kaggle과 같은 경연대회라면 random_state를 적용해 볼수도 있습니다.  물론 경연 대회에서는 테스트 데이터를 오픈하지 않기 때문에 random_state를 설정하고 K-Fold로 검증한 모델이 테스트 데이터에서 성능이 좋다는 보장을 할 수는 없습니다. 하지만 특정 random_state가 다른 random_state보다 월등히 성능이 좋았다면, 시도해 볼 가치는 있습니다. 

조심해야 할 사항은 Kaggle 경연대회의 경우 테스트 데이터 값의 유형을 학습 데이터와는 다르게 하는 경우가 많으므로 특정 random_state 고정시 오히려 부작용이 나타날 수도 있습니다.

제 생각을 요약 드리자면

1. random_state를 고정한 것과 그렇지 않은 것의 성능 차이는 크지 않음. 어느정도 성능 차이는 무시해도 좋음.

2. 만약 크다면 왜 그런지 이유를 찾는게 필요. 일반적으로 검증/테스트 데이터 세트가 작아서 그럴 수 있음.

3. random은 통제할 수 없음. 운영 데이터는 테스트용 데이터 보다 더 다양하게 들어옴.  학습/검증/테스트 시에 random을 고정하지 않고 더 다양하게 테스트 해보는게 좋음

4. 경연 대회 같은 경우에 random_state를 고정해서 성능을 올린 경우도 있음. 단 부작용도 함께 고려 필요.

감사합니다.