[5회차 코드] 모델 수정
https://dacon.io/competitions/official/236381/overview/description
데이터·AI를 활용한 물가 예측 경진대회 : 농산물 가격을 중심으로 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
LightGBM 모델을 사용해봤지만 성능이 예상보다는 좋았지만, 기존의 0.12보다는 낮은 정확도였습니다.
그래서 LSTM 모델을 그대로 사용하되, 모델을 무작위로 구성하지 말고 이전 대회에서 높은 성과를 보인 모델들을 찾아보기로 했었죠.
비슷한 주제로 21년에 진행되었던 농산물 가격 예측 대회의 순위권에서 사용했던 모델 구조를 차용해보기로 했습니다.
1. 모델 구조 변경
# 모델 정의
model = Sequential()
model.add(layers.Activation('relu'))
model.add(LSTM(100, input_shape=(X.shape[1], 1)))
model.add(Dropout(0.1))
model.add(Dense(30, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(3))
# 모델 컴파일
model.compile(optimizer='adam', loss='mse')
# 조기 종료 콜백 설정
early_stopping = EarlyStopping(patience=30, restore_best_weights=True)
Keras를 사용해 모델을 구성하는데, Dropout을 사용해 일부 노드들을 종료하는 구조입니다.
이 모델 같은 경우에는 다음과 같이 구성되어 있습니다.
1. LSTM 레이어 (100개 노드)
2. 드롭아웃 (10% 종료)
3. Dense 레이어 (30개 노드)
4. 드롭아웃 (10% 종료)
5. Dense 레이어 (3개 노드, 최종 결과)
그리고 early_stopping, 즉 조기 종료를 사용해서 30번 내에 손실값이 줄어들지 않는다면 학습을 종료하는 것으로 최적 손실값을 구할 수 있습니다.
2. 모델 학습
# 모델 학습
model.fit(X, y, epochs=1000, batch_size=32, validation_split=0.2,
callbacks=[early_stopping], verbose=1)
배치 사이즈는 32, 검증 데이터셋은 20%, 에포크는 1000번입니다.
callback에는 조기 종료 구조를 넣었습니다.
3. 결과 확인
이정도면 개선을 시도했던 것 중에서는 가장 좋습니다.
드롭아웃 레이어를 사용해서 일반화 성능이 좋아진 것 같네요.
기간동안 할 일이 있어서 이 이상의 시도를 하지 못했습니다.
아무래도 meta 폴더에 있는 데이터를 사용했으면 조금 달라지지 않았나? 하는 생각도 들고요.
레이어를 수정하는 것도 제가 원하는 만큼의 성과가 나오지 않아서 아쉬웠었습니다.
다음에 도전하게 된다면 데이터 전처리와 피처 엔지니어링 쪽을 더 시도해보고 싶네요.
예측해야 하는 열이 오히려 적어서 갈팡질팡했었던 것 같습니다.