본문 바로가기

프로그래밍/AI:ML:DL

[ML|SO번역] 머신러닝에서 Out-of-Fold (OOF) 란?

src : https://stackoverflow.com/a/52396238/100093

(K-Fold 크로스 밸리데이션에서) 매 폴드마다 90%의 데이터로 훈련을 하고, 나머지 10%의 데이터에 대해서는 예측을 합니다. 이 10%로 에러 메트릭(예를 들어 RMSE라고 합시다.)을 계산합니다. 이 과정을 통해 결국 남는 것은, 10차례의 각 폴드마다 RMSE 값 하나와 각 10% 데이터셋에 대한 예측치입니다. 이 결과물을 2가지 방법으로 처리할 수 있습니다.

  1. 10개의 RMSE 값의 평균과 표준편자를 확인합니다. K폴드는 랜덤으로 데이터를 나누므로, 각 폴드에서 나온 에러값(RMSE)들은 서로 비슷해야 합니다. 만약, 값들이 서로 비슷하지 않다면, 이 때의 모델(피쳐와 하이퍼패러미터들)로는 테스트셋에서 안정적인 예측치를 얻기 어려울 것입니다.
  2. 10세트의 예측을 합쳐서 하나의 예측을 만듭니다. 예를들어, 훈련데이터가 1000개였다면, 100개의 예측치로 이루어진 10개의 예측세트를 얻게 됩니다. (10x100 = 1000 이므로) 이 10세트를 하나의 벡터로 만들어서, 1000개의 예측치를 갖는 하나의 전체 예측세트를 얻습니다. 이 전체예측세트를 out-of-folds 예측이라고 합니다. 이 전체 훈련데이터에 대한 예측을 이용해 RMSE 를 계산할 수 있습니다. 즉, rmse = compute_rmse(oof_predictions, y_train) . 이것이 최종적으로 예측모델을 평가하는 가장 깔끔한 방법인 것 같습니다.