inflearn logo
강의

講義

知識共有

アルゴリズムトレーディングの秘密、AIが株価を当てる方法

Transformer モデル開発完了・コードレビュー

섹션4의 10강 질문이 있습니다.

59

gnb1202

投稿した質問数 1

1

train_size = int(len(data) * 0.8) 
train_data = data.iloc[:train_size]       test_data = data.iloc[train_size:]       

훈련과 테스트 8:2로 잘 나누고

for i in range(lookback, len(data_scaled) - forecast_horizon):

이렇게 돌리면 그냥 전체 데이터를 학습한거 아닌가요?

결국 안나누고 학습한 것 같은데, 그럼 이 프로젝트는 그냥 데이터를 모두 학습한거죠?

LR 버전으로 리팩토링해서 돌려보고 있는데 과적합뜨는 것 보니까 그냥 완전 똑같이 나오더라구요.

python 딥러닝 재테크 lstm transformer

回答 2

0

cheatkeylab

안녕하세요, @gnb1202님.

문제를 정확하게 잘 짚어주셨습니다.

현재 코드대로면 테스트 데이터까지 학습에 포함되어 있어서 lookahead bias가 발생합니다.

for i in range(lookback, len(data_scaled) - forecast_horizon):

위 for loop에 data_scaled전체 데이터(train + test)를 scaling한 것이기 때문.

우선 아래 두 군데를 변경해서 테스트해보시길 바랍니다.

저도 곧 업데이트 본 반영하도록 하겠습니다.

 

  1. 스케일러 부분

print("Scaling data...")
train_size = int(len(data) * 0.8)
train_data = data.iloc[:train_size]
test_data = data.iloc[train_size:]

# 스케일러는 train에만 fit !!!
stock_scaler = MinMaxScaler()
econ_scaler = MinMaxScaler()

# train 데이터로만 fit
stock_scaler.fit(train_data[target_columns])  
econ_scaler.fit(train_data[economic_features])

# 전체 데이터는 transform만
data_scaled = data.copy()
data_scaled[target_columns]    = stock_scaler.transform(data[target_columns])     # ← fit_transform → transform으로 변경
data_scaled[economic_features] = econ_scaler.transform(data[economic_features])    # ← fit_transform → transform으로 변경
  1. 학습 데이터 생성 부분

# 학습 데이터 생성 (데이터 누수 차단)
lookback = 90
forecast_horizon = 14

# train 구간 끝에서 forecast_horizon 만큼 빼야 y가 test 구간으로 안 넘어감
last_train_index = train_size - forecast_horizon  

X_stock_train = []
X_econ_train = []
y_train = []

for i in range(lookback, last_train_index):
    X_stock_train.append(data_scaled[target_columns].iloc[i-lookback:i].values)
    X_econ_train.append(data_scaled[economic_features].iloc[i-lookback:i].values)
    y_train.append(data_scaled[target_columns].iloc[i + forecast_horizon - 1].values)  # i+13은 아직 train 안에 있음

X_stock_train = np.array(X_stock_train = np.array(X_stock_train)
X_econ_train = np.array(X_econ_train)
y_train = np.array(y_train)

작업 하시다가 잘 안되는 부분 있으시다면 다시 말씀 주세요~

감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
gnb1202님, 데이터셋을 훈련과 테스트로 8:2로 나누신 방식은 정확히 사용하신 것 같습니다.
두 개의 데이터프레임, train_datatest_data를 만드셨는데요,

train_size = int(len(data) * 0.8)
train_data = data.iloc[:train_size]
test_data = data.iloc[train_size:]

나누신 이후에, 전체 데이터를 학습 데이터와 비슷하게 학습하고 싶지 않다면, for 루프의 데이터 사용 범위를 조정하셔야 합니다.

for 루프에서 lookbackforecast_horizon을 사용한 코드는 특정 범위를 제외하고 데이터를 사용하는 것으로 보입니다. 하지만, 이 부분이 전체 데이터에서 사용되었므로 훈련 데이터 범위 내에서만 실행되도록 코드를 조정하셔야 합니다. 그렇지 않으면 전체 데이터를 학습하게 될 가능성이 있습니다.

과적합에 대한 문제는 학습 데이터와 테스트 데이터 간의 경계를 명확히 하고, lookbackforecast_horizon 변수를 조정하여 해결할 수 있습니다. 모델의 과적합을 방지하려면 모델의 복잡성을 낮추거나 정규화 등의 기법을 사용하는 것도 고려해보세요.

이미지를 참고하시려면 문의 게시판에서 직접 질문을 올리신 후, 공유 공유자님께 추가적인 설명을 받아보는 것도 좋은 방법입니다. 수강 전 문의 게시판에서 정보를 확인해 문의를 남기시면 보다 정확한 피드백을 받으실 수 있습니다.

미션 06-02

0

9

1

yes24 수집 md 파일 만들 때

0

11

1

python main.py 실행시 게임이 실행이 안돼요

0

14

2

antigravity 대신 cursor를 활용해도 되나요?

0

18

1

뉴스 검색 분류 한도초과

0

23

2

완성자료

0

13

2

섹션5 노션링크 는 따로 없나요?

0

19

2

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

20

2

Part 4에서 강의 연관 노션 정보들이 워드파일에 없습니다.

0

23

2

첨부자료 Part 4 코드 확인 부탁드리겠습니다.

0

20

2

질문 드립니다.

0

38

2

노션 링크

0

45

3

20강에서 파인튜닝 때 사용한 데이터가 없어졌습니다. LoRA Trainer 매개변수도 라이브러리 업그레이드로 수정되었습니다.

0

17

1

26년 1회 실기 해설 강의

0

47

2

노션 권한요청하였습니다 언제쯤 볼수있나요

0

39

2

AAFM CWM_LEVEL_2 Exam Questions 2026: Right Preparation Method

0

25

1

주가 예측 정확도

1

109

2

세션 3까지 듣고 궁금한점이 있어 문의 드립니다,

0

72

2

파이썬 스크립트 작성 프로그램은 뭘로 쓰시는건가요?

1

216

2

DB에 데이터 넣지 않는 이유가 무엇때문인가요?

1

106

1

국내시장용으로 제작하려면 어떻게 해야하나요?

0

131

2

feature 질문 드립니다.

0

74

2

노션 및 수업자료(코드) 다운로드는 어떻게 하나요?

1

197

2

주식 종목 추가

0

234

1