이럴때는 어떻게 해야하나요..?(과대적합)

2023.03.18 16:38 1,514 조회

초보자라서,, 많은 도움을 주시면 감사할 것 같습니다..!

train데이터를 cross_validation으로 분석한 결과 0.96이라는 높은 결과값이 나왔습니다.

이 결과를 토대로 test데이터를 예측해서 값을 제출했는데, 0.78이라는 결과가 나왔습니다.


제가 생각한 과대적합이란 다음과 같이 train_test_split한 데이터 중, train데이터에서는 높은 결과가 나오지만, test데이터에서는 낮은 결과가 나올 경우를 과대적합이라고 생각합니다.

하지만 이렇게 train.csv에서 높은 결과가 나왔는데, test.csv의 예측 정확도가 낮은 경우도 과대적합이라고 하는 것은 맞겠지만

모델엔 train.csv데이터만 학습가능함에도 불구하고, 결과제출 시, f1_macro점수가 이렇게 낮게 나오는 이유와 해결방법을 알고싶습니다.


데이터는 데이콘 전화 해지 여부 분류 ai경진대회입니다. 제가 말을 잘 못한거 같은데 댓글달아주시면 감사하겠습니다.

긴 글 읽어주셔서 감사합니다.

로그인이 필요합니다
0 / 1000
EISLab_이희원
2023.03.18 20:27

train_test_split에서 stratify 변수에 train_y를 할당하면 overfitting이 어느정도 해소 됩니다.
# train_test_split(train_x, train_y, random_state=42, stratify=train_y)
또한, 결과 제출 시 f1_score가 낮게 나오는 이유는 train set과 test set의 distribution 차이로 인한 결과입니다.
모델의 일반화 작업을 해야 score가 좀 더 높게 나오실 수 있을겁니다.

오븐
2023.03.18 23:48

train_set에 비해 test_set의 예측 결과가 낮게 나왔다는 것은, 결국 근본적인 문제는 train_set과 test_set이 다르기 때문입니다. 모델이 train_set의 데이터를 기준으로 하이퍼 파라미터를 귀납적으로 추론해 나간 결과물이 test_set에서 항상 100% 적용이 되지 않는다는 것이죠. 왜냐면 데이터셋 자체가 다르니까요. 이 문제는 머신러닝 분야에서 항상 일어나는 일이고, 동시에 통계학의 특성이기도 합니다. 다른 방법으로 과적합을 줄여보거나, 혹은 모델을 바꿔볼 필요가 있으실겁니다 

롤케잌
2023.03.19 00:48

오버샘플링을 valid 데이터에 적용하지 마시고 train 데이터에만 적용해보세요.

제출수늘려주세요
2023.03.20 10:13

추천 드리는 검증/학습 방식은 fold 방식을 추천 드립니다. 올리신 코드만 보면 test로 나눠진 데이터가 모델에 학습에 관여하지 못해서 학습에서의 손해와 검증에서의 손해가 발생함으로 항상 fold를 고려해주시면 더 강건한 모델을 구성하실 수 있습니다.