2025/07/13에 해당하는 글 2

강화학습 성능지표 모니터링 하기

카테고리 없음|2025. 7. 13. 15:44
반응형

1. TensorBoard 실행 및 접속

  1. 터미널(또는 PowerShell)에서 프로젝트 루트로 이동한 뒤,
  2. bash
    복사편집
    python -m tensorboard.main --logdir=./tensorboard_logs
  3. 브라우저에서 http://localhost:6006 에 접속
  4. 왼쪽 사이드바에서 SCALARS 탭을 선택하면,
    • train/episode_reward
    • train/cumulative_return
    • train/policy_loss, train/value_loss 등
    기본적으로 기록된 지표들이 그래프로 보여집니다.

2. 추가로 로깅할 커스텀 지표

현재 RewardLoggingCallback 에서 에피소드 보상을, CustomMetricsLoggingCallback 에서 cumulative_return 을 기록하도록 설정하셨는데,
훈련 평가에서 계산하는 Sharpe ratio, Max Drawdown, Accuracy 등도 TensorBoard에 남기면 더욱 편리합니다.

python
복사편집
from stable_baselines3.common.callbacks import BaseCallback class FullMetricsCallback(BaseCallback): def __init__(self, eval_env, verbose=0): super().__init__(verbose) self.eval_env = eval_env def _on_training_end(self) -> None: # 학습이 끝난 뒤 성능 지표 계산 perf = self.model.envs[0].calculate_performance_metrics(self.model, self.eval_env.envs[0].data) # TensorBoard에 기록 self.logger.record("eval/sharpe_ratio", perf["sharpe_ratio"]) self.logger.record("eval/max_drawdown", perf["max_drawdown"]) self.logger.record("eval/accuracy", perf["accuracy"]) # flush to make sure they appear immediately self.logger.dump(self.num_timesteps)
  • model.learn(..., callback=[RewardLoggingCallback(), FullMetricsCallback(eval_env)]) 처럼 주입하면,
    훈련이 끝난 시점에 eval/ 네임스페이스 아래에 커스텀 지표들이 남습니다.

3. 로그 포맷·출력 옵션 확장

만약 콘솔 출력이나 CSV 파일로도 보고 싶다면, configure 에 로그 타입을 추가할 수 있습니다.

python
복사편집
from stable_baselines3.common.logger import configure # tensorboard + stdout(console) + csv tmp_path = "./tensorboard_logs" new_logger = configure(tmp_path, ["tensorboard", "stdout", "csv"]) model.set_logger(new_logger)
  • stdout : 터미널에 실시간 지표 출력
  • csv : ./tensorboard_logs/progress.csv 에 기록

이렇게 하면 TensorBoard, 콘솔 로그, CSV 모두에 성능 지표가 남아 다양한 방식으로 분석할 수 있습니다.


4. 요약

  1. ./tensorboard_logs 에 잘 기록되니, TensorBoard로 그래프 확인
  2. BaseCallback 를 활용해 Sharpe, Drawdown, Accuracy 같은 커스텀 지표도 self.logger.record 로 남기기
  3. configure(..., ["tensorboard","stdout","csv"]) 로 콘솔/CSV 출력까지 확장

이 흐름을 적용하시면 훈련 전후, 하이퍼파라미터 변화에 따른 지표 변화를 한눈에 비교·분석하기 훨씬 수월해집니다.

 

반응형

댓글()

강화학습 모델의 성능평가 방법

AI주식자동매매|2025. 7. 13. 15:34
반응형

훈련 전·후 모델의 “성능이 정말 좋아졌는지”를 판단하려면, 단순히 “매도의견이 사라졌다” 수준이 아니라 다음의 정량적 지표들을 비교·분석해 보셔야 합니다.

1. 핵심 성능 지표

  1. 누적 수익률 (Cumulative Return)
    • 평가 구간 전체에서 에이전트가 얻은 총 보상합(또는 net_worth 변화량)
    • performance_metrics['cumulative_return'] 에 저장된 값
  2. 샤프 비율 (Sharpe Ratio)
    • (평균 수익률) ÷ (수익률의 표준편차)
    • 보상(수익) 대비 변동성(위험)을 같이 고려
    • performance_metrics['sharpe_ratio']
  3. 최대 낙폭 (Max Drawdown)
    • 최고 자산가치 고점 대비 최저 자산가치까지의 하락폭 비율
    • 큰 손실 구간이 얼마나 있었는지 파악
    • performance_metrics['max_drawdown']
  4. 정확도 (Accuracy)
    • 에이전트가 “이동 방향(익절/손절)”을 제대로 맞춘 비율
    • performance_metrics['accuracy']

이 네 가지 지표를 훈련 전, 훈련 후, 혹은 하이퍼파라미터(Optuna/Bayesian) 최적화 이전·이후 모델로 각각 계산해서 표로 비교해 보세요.


2. 지표 비교를 위한 간단한 워크플로우

  1. Baseline 기록
    • 현재 학습 로직으로 먼저 한 번 돌려서 performance_metrics 를 저장 (baseline_metrics).
  2. 변경 적용 후 재훈련
    • 학습률·스텝수·보상구조 등을 조정해서 재훈련 → new_metrics 기록.
  3. DataFrame으로 정리
  4. python
    복사편집
    import pandas as pd df = pd.DataFrame([ {'model':'baseline', **baseline_metrics}, {'model':'new', **new_metrics} ]) print(df)
  5. 비교 시각화
    • df.plot.bar(x='model', y=['cumulative_return','sharpe_ratio','max_drawdown','accuracy'])
    • 혹은 표 형태로 눈으로 빠르게 확인

3. 훈련 과정 로깅 활용

  • 이미 RewardLoggingCallback 에서 TensorBoard에 train/episode_reward, train/cumulative_return 등을 기록하도록 설정하셨으니,
    1. 터미널에서
    2. bash
      복사편집
      python -m tensorboard.main --logdir=./tensorboard_logs
    3. 브라우저에서 http://localhost:6006 접속
    4. Training → Scalars 탭에서 에피소드 리워드 곡선, cumulative return curve, 정책/가치 손실(policy_loss, value_loss) 등을 모니터링
  • 학습 곡선이 우상향하는지, 후반부에 흔들림(과적합) 없이 안정적인지를 체크하면 “학습이 잘 되고 있는지” 알 수 있습니다.

4. 검증용 데이터에 대한 평가

  • 학습 중 train_df 외에 검증용 eval_df 를 분리하셨으니,
    • 학습용 vs 평가용 지표를 각각 계산해 과적합 여부를 파악
    • 예를 들어 df_eval_metrics['sharpe_ratio'] < df_train_metrics['sharpe_ratio'] 처럼 평가 성능 하락 유무

요약

  1. 정량적 지표(누적 수익률·샤프·낙폭·정확도)를 훈련 전·후 비교
  2. TensorBoard훈련 곡선(episode_reward, loss 등)을 모니터링
  3. 학습 vs 검증 지표 차이로 과적합 여부 관찰
  4. 지표들을 표나 차트로 시각화해서 한눈에 비교

이 흐름을 통해 “매도의견이 없어졌다”가 아니라, “누적 수익률 +24% → +30%, 샤프 0.8 → 1.2, 최대 낙폭 15% → 10%, 정확도 52% → 60%” 와 같은 구체적 개선 수치를 얻을 수 있습니다.

 

반응형

댓글()