본문 바로가기
IT개발/AI 공부

6. AI 자동 매매) 파트 1: AutoTrain(파인 튜닝) 및 데이터 준비

by jusyBear 2025. 3. 27.
반응형

AI 자동 매매 시스템 개발 과정 (파트 1: 프로젝트 소개 및 데이터 준비)

이 글에서는 허깅페이스의 AutoTrain을 활용한 AI 자동 매매 시스템 개발 과정을 소개합니다. 프로젝트의 방대한 내용을 이해하기 쉽게 파트 1과 파트 2로 나누어 설명합니다.

프로젝트 소개

AI를 공부하면서 실제로 AI로 무언가 유용한 것을 만들어보고 싶어 AI 자동 매매 시스템 개발에 도전하게 되었습니다. 성공하든 실패하든 이 과정에서 많은 것을 배울 수 있을 것이라 생각해 친구와 함께 이 프로젝트를 시작했습니다.

프로젝트 목표

  • 암호화폐 시장 데이터를 학습한 AI 모델 개발
  • 시장 패턴을 인식하고 매매 시점을 예측할 수 있는 시스템 구축
  • 실제 트레이딩에 적용 가능한 자동화 시스템 구현

개발 환경 준비

기존에 설정해둔 LLM(ollama에서 hf.co/nanowell/DeepSeek-R1-Distill-Qwen-32B-Q4_K_M-GGUF:latest)을 파인튜닝하여 암호화폐 매매에 특화된 모델로 학습시킬 예정입니다.

기본 모델 선택 이유

  • DeepSeek 모델은 금융 데이터 분석에 우수한 성능을 보이는 사전 학습 모델입니다.
  • 32B 파라미터 규모로 복잡한 시장 패턴을 인식하기에 충분한 용량을 갖추고 있습니다.
  • Ollama를 통해 로컬 환경에서 쉽게 배포하고 사용할 수 있습니다.

허깅페이스 AutoTrain을 이용한 학습(파인 튜닝)

데이터 준비 과정

1. 데이터 수집

  • 2019-09-10부터 2025-02-28까지의 BTCUSDT(비트코인/테더) 거래 데이터를 수집했습니다.
  • 1분 단위의 캔들스틱 데이터로, 시가(open), 고가(high), 저가(low), 종가(close), 거래량(volume) 정보를 포함합니다.
  • 데이터 출처: 바이낸스 API를 통해 과거 데이터를 CSV 형태로 다운로드했습니다.

2. 기술적 지표 추가

RSI(Relative Strength Index) 지표
  • 14일 기준으로 계산, 과매수/과매도 상태를 판단하는 지표
  • 계산 방법: RSI = 100 - (100 / (1 + RS)), 여기서 RS는 평균 상승폭 / 평균 하락폭
  • 값 해석:
    • 70 이상: 과매수 상태 (매도 신호)
    • 30 이하: 과매도 상태 (매수 신호)
    • 50 주변: 중립적 상태
MACD(Moving Average Convergence Divergence) 지표
  • 단기/장기 이동평균선의 차이를 나타내는 지표
  • 계산 방법: MACD = 12일 EMA - 26일 EMA, 시그널 = 9일 MACD의 EMA
  • 값 해석:
    • MACD가 시그널선을 상향돌파: 매수 신호
    • MACD가 시그널선을 하향돌파: 매도 신호
    • MACD 값이 0선 위아래로 움직임: 추세의 강도 판단

3. 데이터 라벨링

AI 학습에 적합한 형태로 데이터를 가공했습니다. 아래는 가공된 데이터의 예시입니다:

text
"open_timestamp = 2020-01-01 00:00:00, open(USDT)=7195.24, high(USDT)=7196.25, low(USDT)=7183.14, close(USDT)=7186.68, volume(BTC)=51.642812, close_time(unix) = 1577836859999, RSI=35.33, MACD=-1.07"
"open_timestamp = 2020-01-01 00:01:00, open(USDT)=7187.67, high(USDT)=7188.06, low(USDT)=7182.2, close(USDT)=7184.03, volume(BTC)=7.248148, close_time(unix) = 1577836919999, RSI=32.51, MACD=-2.35"
"open_timestamp = 2020-01-01 00:02:00, open(USDT)=7184.41, high(USDT)=7184.71, low(USDT)=7180.26, close(USDT)=7182.43, volume(BTC)=11.681677, close_time(unix) = 1577836979999, RSI=30.84, MACD=-3.42"
"open_timestamp = 2020-01-01 00:03:00, open(USDT)=7183.83, high(USDT)=7188.94, low(USDT)=7182.49, close(USDT)=7185.94, volume(BTC)=10.025391, close_time(unix) = 1577837039999, RSI=38.63, MACD=-3.65"
"open_timestamp = 2020-01-01 00:04:00, open(USDT)=7185.54, high(USDT)=7185.54, low(USDT)=7178.64, close(USDT)=7179.78, volume(BTC)=14.911105, close_time(unix) = 1577837099999, RSI=31.6, MACD=-4.54"
"open_timestamp = 2020-01-01 00:05:00, open(USDT)=7179.76, high(USDT)=7182.51, low(USDT)=7178.2, close(USDT)=7179.99, volume(BTC)=12.463243, close_time(unix) = 1577837159999, RSI=32.08, MACD=-5.05"
"open_timestamp = 2020-01-01 00:06:00, open(USDT)=7180.0, high(USDT)=7182.0, low(USDT)=7179.99, close(USDT)=7182.0, volume(BTC)=3.573774, close_time(unix) = 1577837219999, RSI=36.79, MACD=-5.05"
"open_timestamp = 2020-01-01 00:07:00, open(USDT)=7181.7, high(USDT)=7183.77, low(USDT)=7180.91, close(USDT)=7183.66, volume(BTC)=14.470782, close_time(unix) = 1577837279999, RSI=40.62, MACD=-4.73"
"open_timestamp = 2020-01-01 00:08:00, open(USDT)=7183.9, high(USDT)=7187.74, low(USDT)=7183.45, close(USDT)=7187.68, volume(BTC)=12.842443, close_time(unix) = 1577837339999, RSI=49.04, MACD=-3.88"
"open_timestamp = 2020-01-01 00:09:00, open(USDT)=7187.68, high(USDT)=7191.77, low(USDT)=7186.02, close(USDT)=7191.07, volume(BTC)=16.014983, close_time(unix) = 1577837399999, RSI=55.08, MACD=-2.75"
"open_timestamp = 2020-01-01 00:10:00, open(USDT)=7193.15, high(USDT)=7193.53, low(USDT)=7186.25, close(USDT)=7187.36, volume(BTC)=12.60237, close_time(unix) = 1577837459999, RSI=48.06, MACD=-2.39"
"open_timestamp = 2020-01-01 00:11:00, open(USDT)=7187.36, high(USDT)=7191.08, low(USDT)=7186.82, close(USDT)=7188.71, volume(BTC)=10.263525, close_time(unix) = 1577837519999, RSI=50.64, MACD=-1.9"
"open_timestamp = 2020-01-01 00:12:00, open(USDT)=7189.52, high(USDT)=7189.52, low(USDT)=7187.0, close(USDT)=7187.02, volume(BTC)=2.860413, close_time(unix) = 1577837579999, RSI=47.33, MACD=-1.75"

데이터 형식 설계의 중요성

텍스트 기반 데이터 형식을 선택한 이유:

  1. LLM 학습 적합성: 언어 모델은 텍스트 입력에 최적화되어 있어, 수치 데이터도 텍스트 형태로 변환
  2. 직관적 이해: 시간, 가격, 지표 값을 명확히 레이블링하여 모델이 관계를 학습하기 쉽게 함
  3. 확장성: 추가 지표나 정보를 쉽게 통합할 수 있는 유연한 구조

허깅페이스 AutoTrain Space 생성

Space 기본 설정

  • Space 이름: 프로젝트 특성에 맞게 설정
  • 공개 여부: Public 또는 Private 선택 가능
  • 하드웨어: Nvidia 1xL4 · 8 vCPU · 30 GB · $0.80/hour 사용

프로젝트 기본 설정

  • 프로젝트 이름: 학습된 모델이 이 이름으로 저장되므로 의미 있는 이름으로 설정
  • 기본 모델: DeepSeek-R1-Distill-Qwen-32B-Q4 사용
  • 데이터 소스: 허깅페이스에 올려둔 CSV/JSON 파일 또는 로컬 파일 사용
  • 데이터 열 매핑: 예시 파일의 'text' 열 사용

다음 파트 예고

파트 2: 학습 과정 및 결과 분석에서는 실제 학습 파라미터 설정, 학습 과정에서 발생한 문제점과 해결 방안, 그리고 최종 학습 결과와 성능 평가에 대해 자세히 알아보겠습니다.


주의사항

  • 본 글은 학습 및 연구 목적으로 작성되었으며, 실제 투자에 활용 시 발생하는 어떠한 손실에 대해서도 책임지지 않습니다.
  • 투자는 항상 본인의 책임 하에 신중하게 결정하시기 바랍니다.
  • 해당 글은 직접 작성한 내용을 AI를 통해 가다듬는 방식으로 작성되었습니다.
  • 해당 글의 예시 중 일부는 AI를 통해서 제작되었습니다.
반응형

'IT개발 > AI 공부' 카테고리의 다른 글

8. 용어 설명: 디스크리트 액션  (1) 2025.04.10
7. AI 자동 매매) 파트 2: 학습 과정 및 결과 분석  (0) 2025.03.28
5. 추론 결과 가공  (4) 2025.03.22
4. 로컬 LLM 구축하기  (2) 2025.03.13
3. AI 용어 정리  (2) 2025.03.13