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

[AI 부트캠프] DAY 78 - 딥러닝 프로젝트 3

by HOHHOH 2023. 11. 10.

[오늘의 일지]

딥러닝 프로젝트 - EDA와 가벼운 학습

[상세 내용]

EDA

주기성 파악

- 어제에 이어서 데이터의 특징을 알아보았습니다. 특정 종목을 기준으로 하루가 지나면 그다음 날이 되었을 때  target값이 초기화되는 것으로 보아서 역시 시계열로 접근하기에는 큰 어려움이 있을 거라는 결론을 내렸습니다. 아래의 그래프를 보면 갑자기 0 값으로 내려가는 부분이 다음날이 되었을 때를 나타냅니다. 대신 이러한 특징이 전체적인 그래프로 보았을 때는 주기성을 띄기 때문에 특정하게 예측하는 구간에서는 더 잘 예측할 수 있으므로 중요하다고 판단했습니다.

 

가벼운 학습

- 기존에 제가 사용하던 tensorflow 코드를 활용해서 어떠한 Feature Engineering도 거치지 않고 학습을 돌려 보았습니다. 평과지표는 6.4점 정도에서 머무르고 있는 것을 확인했습니다. 현재 캐글 리더보드에서 상위권에 있는 점수가 5점 초반인 것으로 보아서는 1점 차이가 엄청나게 크게 보이고 있다는 것을 알게 되었습니다. 그러므로 Feature Engineering의 중요성이 더욱 더 크게 느껴지는 것 같았습니다.

# 데이터 분할: 학습 데이터와 테스트 데이터
train_X, test_X, train_y, test_y = train_test_split(X_train, y_train, test_size=0.2, random_state=42)

model = Sequential()
model.add(GRU(64, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Bidirectional(GRU(64, return_sequences=True, dropout=0.1)))  # 드롭아웃 추가
model.add(Bidirectional(GRU(64, return_sequences=True, dropout=0.1)))  # 드롭아웃 추가
model.add(Bidirectional(GRU(64, return_sequences=True, dropout=0.1)))  # 드롭아웃 추가
model.add(Bidirectional(GRU(64, return_sequences=True, dropout=0.1)))  # 드롭아웃 추가
model.add(Dense(1))

# 모델 컴파일
learning_rate = 1e-5
model.compile(optimizer=tf.keras.optimizers.AdamW(learning_rate=learning_rate),
              loss='mean_absolute_error',  # 회귀 문제의 손실 함수
              metrics=['mean_absolute_error'])  # 평가 지표 설정

# 모델 훈련
early_stopping = EarlyStopping(monitor='val_loss', patience=5)

batch_size = 1024
epochs = 100
history = model.fit(train_X, train_y, batch_size=batch_size, epochs=epochs,
                    validation_data=(test_X, test_y),
                    shuffle=True,  # 데이터를 에폭마다 무작위로 섞음
                    callbacks=[early_stopping],
                    use_multiprocessing=True,  # 멀티 프로세싱 활성화
                    workers=2
                    )


loss, mae = model.evaluate(test_X, test_y)
print(f'평가 손실 (Mean Absolute Error): {loss}')
print(f'평가 MAE (Mean Absolute Error): {mae}')

 

[마무리]

 오늘은 EDA와 간단한 학습을 통해서 현재 어느 정도로 성능을 나타내야 하는지 대략적으로 파악해 보았습니다. 내일은 캐글에 올라와 있는 Feature Engineering 코드들을 찾아보고 코드를 분석해서 어떻게 적용하면 좋을지 알아보겠습니다.

반응형

댓글