2024. 10. 23. 18:00ㆍ데이콘/데이터·AI를 활용한 물가 예측 경진대회 : 농산물 가격을 중심으로
https://dacon.io/competitions/official/236381/overview/description
데이터·AI를 활용한 물가 예측 경진대회 : 농산물 가격을 중심으로 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
2회차부터는 두 가지 방향에 대해 고민했습니다.
첫 번째는 meta 폴더에 있는 산지공판장과 전국도매 데이터를 추가시켜 학습하는 방법이었고, 두 번째는 모델을 수정하는 방법이었습니다.
meta 데이터를 살짝 훑어보았는데 있는 품목이 있고 없는 품목이 있었기 때문에 첫 번째는 보류한 뒤, 두 번째를 시도해보았습니다.
1. 모델 구조 수정
원래 사용하던 모델은 다음과 같았습니다.
# 시계열 예측을 위한 LSTM 모델 구축
model = Sequential()
model.add(Input(shape=(X.shape[1], 1))) # Input 레이어 사용
model.add(LSTM(50, activation='relu', return_sequences=True)) # return_sequences=True 추가
model.add(LSTM(6, activation='relu'))
model.add(Dense(3)) # T+1, T+2, T+3 예측
두 개의 중첩 LSTM 레이어, 기울기 함수는 relu, 마지막 Dense 레이어에서 총 3개를 예측하는 구조였습니다.
우선 여기서 레이어층을 변환해보면 성능이 상승하지 않을까 싶어 아래처럼 수정해보았습니다.
# 시계열 예측을 위한 LSTM 모델 구축
model = Sequential()
model.add(Input(shape=(X.shape[1], 1))) # Input 레이어 사용
model.add(LSTM(40, activation='relu', return_sequences=True)) # 첫 번째 LSTM 레이어
model.add(LSTM(20, activation='relu')) # 두 번째 LSTM 레이어 유닛 수 증가
model.add(Dense(3)) # T+1, T+2, T+3 예측
2. 옵티마이저 수정
1회차에서 사용하던 옵티마이저는 adam으로, 기본 학습률이 0.001이었습니다.
학습률이 높으면 과적합될 확률이 높아지지만, 어디까지가 적당한 학습률인지는 모르니 이 값을 0.0001로 수정해보았습니다.
# 모델의 최적화는 Adam, 손실값은 MSE 사용
optimizer = Adam(learning_rate=0.0001) # 학습률 조정
model.compile(optimizer=optimizer, loss='mse')
3. 검증 데이터 (20%) 설정
처음 시도했을 때 train을 모두 사용해도 생각보다 성능이 잘 나왔었습니다.
하지만 이러면 학습 데이터에만 너무 과적합된 모델이 생성될 가능성이 높죠. 따라서 검증 데이터를 설정해서 좀 더 일반적인 모델을 생성하면 어떨까? 하는 생각으로 접근해보았습니다.
# 모델 학습. 에포크 수 조정 및 검증 데이터 분할
history = model.fit(X_3d, y, epochs=100, batch_size=32, validation_split=0.2)
이제서야 알았는데 validation_split을 저렇게 설정하면 무작위로 20%가 추출되더라고요.
시계열 데이터는 순서가 중요한 만큼, 직접 검증 데이터셋을 만들어줄 걸 그랬습니다.
4. 점수 확인
성능은 오히려 떨어졌습니다.
'데이콘 > 데이터·AI를 활용한 물가 예측 경진대회 : 농산물 가격을 중심으로' 카테고리의 다른 글
[4회차 코드] 모델 변경(LightGBM) (0) | 2024.10.30 |
---|---|
[3회차 코드] 변수 수정 (1) | 2024.10.29 |
[1회차 코드] 베이스라인 예측 (4) | 2024.10.18 |
[1회차 코드] 데이터 시각화 (0) | 2024.10.17 |
[1회차 코드] 사전 작업 (0) | 2024.10.16 |