validation set은 machine learning 또는 통계에서 기본적인 개념 중 하나입니다. 하지만 실무를 할때 귀찮은 부분 중 하나이며 간과되기도 합니다. 그냥 training set으로 training을 하고 test만 하면 되지 왜 귀찮게 validation set을 나누는 것일까요?


validation set을 사용하는 이유는 간단합니다. 바로 "모델의 성능을 평가하기 위해서" 입니다.  training을 한 후에 만들어진 모형이 잘 예측을 하는지 그 성능을 평가하기 위해서 사용합니다. training set의 일부를 모델의 성능을 평가하기 위해서 희생하는 것입니다. 하지만 이 희생을 감수하지 못할만큼 data set의 크기가 작다면 cross-validation이라는 방법을 쓰기도 합니다. cross-validation은 training set을 k-fold 방식을 통해 쪼개서 모든 데이터를 training과 validation 과정에 사용할 수 있게 합니다. 


그러면 모델의 성능을 평가하면 뭐가 좋을까요? 첫 번째는 test accuracy를 가늠해볼 수 있다는 것입니다. machine learning의 목적은 결국 unseen data 즉, test data에 대해 좋은 성능을 내는 것입니다. 그러므로 모델을 만든 후 이 모델이 unseen data에 대해 얼마나 잘 동작할지에 대해서 반드시 확인이 필요합니다. 하지만 training data를 사용해 성능을 평가하면 안되기 때문에 따로 validation set을 만들어 정확도를 측정하는 것입니다. 두 번째는 모델을 튜닝하여 모델의 성능을 높일 수 있습니다. 예를 들어 overfitting 등을 막을 수 있습니다. 예를 들어 training accuracy는 높은데 validation accuracy는 낮다면 데이터가 training set에 overfitting이 일어났을 가능성을 생각해볼 수 있습니다. 그렇다면 overfitting을 막아서 training accuracy를 희생하더라도 validation accuracy와 training accuracy를 비슷하게 맞춰줄 필요가 있습니다. 예를 들어 Deep learing을 모델을 구축한다면 regularization 과정을 한다거나 epoch을 줄이는 등의 방식으로 overfitting을 막을 수 있습니다. 


/* 2018/03/18 추가 */


validation test set과의 차이점은 test set은 모델의 '최종 성능' 을 평가하기 위해서 쓰이며, training의 과정에 관여하지 않는 차이가 있습니다. 반면 validation set은 여러 모델 중에서 최종 모델을 선정하기 위한 성능 평가에 관여한다 보시면됩니다. 따라서 validation set은 training과정에 관여하게 됩니다. 즉, validation set은 training 과정에 관여를 하며, training이 된 여러가지 모델 중 가장 좋은 하나의 모델을 고르기 위한 셋입니다. test set은 모든 training 과정이 완료된 후에 최종적으로 모델의 성능을 평가하기 위한 셋입니다. 만약 test set이 모델을 개선하는데 쓰인다면, 그건 test set이 아니라 validation set입니다. 만약 여러 모델을 성능 평가하여 그 중에서 가장 좋은 모델을 선택하고 싶지 않은 경우에는 validation set을 만들지 않아도 됩니다. 하지만 이 경우에는문제가 생길 것입니다. (test accuracy를 예측할 수도 없고, 모델 튜닝을 통해 overfitting을 방지할 수도 없습니다.)