본문 바로가기
AI/AI 부트캠프

[AI 부트캠프] DAY 82 - 딥러닝 프로젝트 7

by HOHHOH 2023. 11. 16.

[오늘의 일지]

딥러닝 프로젝트 - 캐글 제출

[상세 내용]

캐글 제출

오류 처리하기

- 이번 캐글의 제출 파일 형식은 데이콘의 방식과는 많이 달랐습니다. 데이콘의 경우는 그냥 제출 파일만 제출하고 리더보드에서 점수만 받으면 끝나는 방식이었는데 캐글의 제출방식은 캐글 노트북에서 모든 코드를 실행시켜서 하나의 에러도 발생하지 않아야 제출이 가능했습니다. 그 이유는 특이하게도 데이터의 test 파일을 api로 불러와서 train 파일과 같은 전처리를 해준 뒤에 학습시켰던 모델에 의해서 예측이 나온 후에 제출 파일이 완성되야만 하는 과정이 들어가 있기 때문입니다. 그래서 여러 번의 반복 과정을 통해서 오류를 처리해야만 했습니다. 저는 중간에 예측파일을 넣는 과정에서 데이터를 torch형태로 바꿔주고 차원을 늘려 줘야만 에러가 나지 않는 상황이었습니다. 또 정규화 과정에서 누락된 값들이 발생해서 제출이 되지 않았던 부분도 결측치를 처리해서 제출파일을 완성시켜 줬습니다. 

# API 불러오기
import optiver2023
env = optiver2023.make_env()
iter_test = env.iter_test()

# 기존 데이터와 칼럼 가져오기
full_submission_data = data_ori.iloc[0:0,:]
full_prediction_data = pd.DataFrame([], columns=[""])
full_submission_data

# 기조 데이터 칼럼과 불러온 test 데이터와 결합후 전처리 진행 후 예측값 저장
counter = 0
for (data_test, _, sample_prediction) in iter_test: 
    if counter == 0:
        full_submission_data = pd.concat((full_submission_data,data_test), axis=0)

        df_test = interpolation(full_submission_data)
        df_test = feature_eng(df_test)
        x_test = df_test.loc[:,x_cols].iloc[-200:,:]
        means = x_test[x_cols].mean(0)
        stds = x_test[x_cols].std(0)
        x_test_normalized = normalize_features(x_test).fillna(0.0).values

        pred = predict(torch.Tensor(x_test_normalized).to(device).unsqueeze(1), model)

    sample_prediction['target'] = pred
    env.predict(sample_prediction)
    counter += 1

 

제출 방식

 - 캐글의 이러한 특이한 제출 방식에 대해서 이유를 생각해 보았습니다. 아마도 가장 큰 이유는 test 데이터를 이용한 학습을 방지하기 위함이 가장 클 거라고 생각했습니다. 여러 차례 대회를 거쳐온 캐글의 입장에서는 대회 참가자들의 상황을 하나하나 잡아내기가 어려웠기 때문에 이런 API로 test 파일을 불러오는 방식가 생겼다고 느꼈습니다. 그래서 앞으로 이 방식을 공식적으로 사용할 것 같아서 이번 일지의 주제로 가져와 봤습니다. 

 

마지막 제출 과정에서 오류 발생

- 모든 오류를 처리하고 저장도 잘 되었고 제출 파일도 잘 나오는 것까지 확인한 뒤에 대회에 제출을 실행하였습니다. 그런데 'submission scoring error'가 발생했고 원인을 밝히는 것은 아직까지 찾지 못했습니다. 이 부분에 대해서 대회 디스커션을 확인해 봤는데 같은 현생을 겪은 사람들이 존재하였지만 어떻게 해결했다고 밝힌 사람은 단 한 명도 없었습니다. 캐글의 자체적인 오류일 가능성도 있다고 생각해서 일단은 해결하는 것을 보류했습니다.

 

[마무리]

 오늘은 학습시킨 모델들을 이용해서 test 데이터로부터 예측파일을 만들어서 제출하는 과정까지 알아보았습니다. 대회를 진행하면서 학습을 시키고 결과를 빠르게 얻어야지 더욱더 동기부여를 얻어서 과정을 진행할 수 있을 거 같은 데 제출하는 것 같이 대회의 결과와는 별개의 부분에서 문제점이 발생하니까 더 답답한 상황이 이어진 것 같습니다. 어떻게든 이 상황을 해결해서 성능개선을 위해 모델을 수정하는 과정으로 이어 나가야 할 거 같습니다.

반응형

댓글