[ML] 머신러닝 모델 검증을 위한 레코드 분할

2025. 5. 7. 23:16ML

오늘 배운 내용을 복습할 겸, 머신러닝 모델 검증을 위한 레코드 분할에 대해서 다뤄 보려고 한다.


학습용과 검증용 데이터 나누기

 

데이터 분할은 예측 모델을 평가할 때 필요한 전처리이다.

학습 데이터와 검증 데이터는 같은 전처리를 적용해야 하며(스케일링, 결측치 처리 등), 되도록 같은 데이터로 묶어서 다루고,

예측 모델에 입력하기 직전 분할하는 것이 적절하다.

 

적용 데이터는 정답을 알 수 없는 상태에서 사용하는 데이터이다. 그러므로 흐름이나 수집 시점이 다르기 때문에, 분할할 필요가 없다.

쉽게 말해서, 어차피 "평가용" 데이터가 아니고, 실제로 사용 되는 "운영용" 데이터니까 분할할 필요가 없다.

데이터 레코드 분할

 

위 이미지와 같이 교차 검증은 데이터를 검증용 데이터 / 학습용 데이터로 구분한다.

from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

train_data, test_data, train_target, test_target = \
    train_test_split(production_tb.drop('fault_flg', axis=1),
                     production_tb[['fault_flg']],
                     test_size=0.2)

train_data.reset_index(inplace=True, drop=True)
test_data.reset_index(inplace=True, drop=True)
train_target.reset_index(inplace=True, drop=True)
test_target.reset_index(inplace=True, drop=True)

print(train_data)
print(train_target)

 

모델 학습시, 정답이 없어야 하므로 fault_flg 컬럼을 drop 해주고, 테스트 데이터는 20%로 잡아주었다. 

 

<결과>

type      length  thickness
0      E  226.187113  21.029733
1      B  133.814427  14.083716
2      B  200.142637   2.917706
3      D  142.887310  16.560487
4      E  289.162995  30.476145
..   ...         ...        ...
795    C  212.354175  38.857996
796    D  223.806149  19.650766
797    A  198.988129  31.631090
798    E  162.463041  20.752650
799    B  124.966171   8.337629

[800 rows x 3 columns]
     fault_flg
0        False
1        False
2        False
3        False
4        False
..         ...
795       True
796      False
797      False
798      False
799      False

[800 rows x 1 columns]

 

여기까지 잘 되었다면, 교차 검증을 위해 분할을 해줄 차례이다.

row_no_list = list(range(len(train_target)))

# 교차 검증을 위한 분할
k_fold = KFold(n_splits=4, shuffle=True)

for train_cv_no, test_cv_no in k_fold.split(row_no_list) :
    train_cv = train_data.iloc[train_cv_no, :]
    print(train_cv)
    test_cv = train_data.iloc[test_cv_no, :]

 

 

<결과>

type      length  thickness
0      E  226.187113  21.029733
1      B  133.814427  14.083716
2      B  200.142637   2.917706
3      D  142.887310  16.560487
5      A   81.478578   8.840798
..   ...         ...        ...
795    C  212.354175  38.857996
796    D  223.806149  19.650766
797    A  198.988129  31.631090
798    E  162.463041  20.752650
799    B  124.966171   8.337629

[600 rows x 3 columns]
    type      length  thickness
2      B  200.142637   2.917706
3      D  142.887310  16.560487
4      E  289.162995  30.476145
6      A  135.440179  14.673518
8      E  157.480341  31.257903
..   ...         ...        ...
794    E  142.888025   2.229418
796    D  223.806149  19.650766
797    A  198.988129  31.631090
798    E  162.463041  20.752650
...
795    C  212.354175  38.857996
796    D  223.806149  19.650766

[600 rows x 3 columns]