워크플로우 (요약)
0. Loading Data
- resampling
- returns, volatility
1. Preprocessing(전처리)
1-1. checking missing value , imputation
- ohlc, quote_qty : spline interpolate
- returns : Arima
- volatility : Arima
2. Technical Indicators(파생변수 생성)
- MACD
- Stochastic Oscillator
- ATR
- RSI
- Ultimate Oscilator
- ROC
- RSI
- Boolinger Band
2.1. checking Missing Value
3. Feature Engineering
- (Baseline Model Generation)
- 정상성 만족 데이터셋/ 전체 데이터셋 분류 성능 비교 --- 성능 비교 후 정상성 가정 만족시킬지 결정
- FI/PI 확인 후, 후진제거법으로 우선 성능 비교
- 파생변수 조합 생성 후, 성능 비교
4. Model Efficiency Optimization
- Randomsearch 로 하이퍼 파라미터 구간 구체화
- Gridsearch/ Bayesian 으로 최적화
각 단계별 트러블 및 결정사항 정리
0. Loading Data
: 전체 데이터 개별 불러오기 및 Concat, 리샘플링 단계
🔎 개별 함수 처리 후 concat 시에, 결측치가 더 많이 생길 수 있음(변동성 계산 시, window값에 따라 파일 당 결측치 생성)
👉 리샘플링 함수 처리, concat, 변동성 계산 흐름으로 처리해야함(대용량 데이터 처리 패키지 사용)
https://datapilots.tistory.com/87
TICK 데이터 리샘플링 & OHLCV 변환 + 트러블슈팅
0. 공모전 개요 2024-1 데이터 학회 연합 ASCEND 채용 연계 데이터 분석 공모전 틱데이터 활용 비트코인(BTC)의 단기 변동성 예측 모델링 주관/ 주최 : BDA , ASCEND(퀀트 트레이딩 기업) 참여 학회 : BDA, KUB
datapilots.tistory.com
( ☝️ 포스팅 참고 )
1. Preprocessing(전처리)
: 리샘플링한 데이터 EDA 및 결측치 처리 단계
- 원본데이터(price, quote_qty 등) 결측치 > 가격, 거래량 변동이 심한 코인 특성 상, 선형보간보다는 스플라인 보간이 적합하다고 판단
- 변동성 계산 시, window 값에 따라 가장 앞 부분에서 연속으로 결측치 발생
- 유사 케이스에서는 bfill, ffill 사용한 경우가 많았으나, 불가함 > 시계열 예측 모델 (Arima) 사용해서 보간, 이때 p,k,q 는 auto arima 사용해서 계산
2. Technical Indicators(파생변수 생성)
- y 변수인 volatility의 예측 성능을 높이기 위한 Technical Indicators 선정
🔎 매수/매도 관련 기술지표과 단기적인 가격 변동성과의 관계
- 매수/매도 관련 지표들은 구매자들의 심리와 행동을 반영하여 단기적인 가격 움직임을 예측하는 데 도움이 된다.
- 매수 신호가 강하면 가격이 상승할 것이고, 매도 신호가 강하면 하락할 것이다.
🔎 선정한 기술지표
- MACD (Moving Average Convergence Divergence): 단기 이동평균과 장기 이동평균의 차이를 측정하여 추세를 파악
- MACD 두개의 이동평균 사용(일반적으로 12일, 26일)
- MACD Line = 단기 이동평균 - 장기 이동평균
- Signal Line = MACD Line의 9일 이동평균
- MACD Histogram = MACD Line - Signal Line
- MACD 두개의 이동평균 사용(일반적으로 12일, 26일)
- Stochastic Oscillator: 가격이 일정 기간 동안의 최고가와 최저가에 대해 어디에 위치하는지를 보여주는 지표(FI 낮을 것으로 예상)
- %K = ((현재가격 - n기간 중 최저가격) / (n기간 중 최고가격 - n기간 중 최저가격)) * 100
- %D = %K의 m기간 이동평균 (보통 3일)
- ATR (Average True Range): 변동성을 측정하는 지표 (FI 높을 것으로 예상)
- True Range(TR)의 평균
- TR = max(high - low, abs(high - previous_close), abs(low - previous_close))
- ATR = (이동평균(TR, n))
- RSI (Relative Strength Index): 상승일과 하락일 간의 상대적인 강도
- RSI = 100 - (100 / (1 + RS))
- RS : 평균 상승 가격의 평균 손실 가격으로 나눔
- RS = (평균 상승 가격의 n일 이동평균) / (평균 손실 가격의 n일 이동평균)
- Ultimate Oscillator: 단기, 중기 및 장기의 세 가지 기간에 대한 평균가격을 사용하여 상대적인 가격의 힘을 측정
- BP = 현재 종가 - 현재 가장 낮은 종가 혹은 이전 종가
- TR = 현재 가장 높은 종가 - 현재 가장 낮은 종가
- AVG7 = 7일 동안의 BP 합 / 7일 동안의 TR 합
- AVG14 = 14일 동안의 BP 합 / 14일 동안의 TR 합
- AVG28 = 28일 동안의 BP 합 / 28일 동안의 TR 합
- Ultimate Oscillator = ((4 * AVG7) + (2 * AVG14) + AVG28) / 7 + 14 + 28
- ROC (Rate of Change): 가격의 변동률을 측정
- ROC = ((현재가격 - n일 전 가격) / n일 전 가격) * 100
- Bollinger Bands: 주가의 변동성을 평가하고 상승 및 하락 트렌드를 파악
- 중심선(Center Line): n일 동안의 이동평균
- 상단 밴드(Upper Band): 중심선 + (n일 동안의 표준편차 * K)
- 하단 밴드(Lower Band): 중심선 - (n일 동안의 표준편차 * K)
👉 macd,atr 등 기술 지표들 간의 관계성(어떤 지표랑 함께 사용하는지 등)서치 및 각각 입력 변수들 값 지정 > 개별 기술 지표간 중요도 1차 평가(예상하는 FI 가 낮더라도 최대한 많이 포함) > 기술 지표 확정 후 입력 변수 값 경우의 수 파악
3. Feature Engineering
: 정상성 검정 후, 기술 지표 포함 한 여러개의 데이터 프레임 생성
- 정상성 검정
- 시계열 데이터 예측 모델 사용 시, 정상성 검정 하고 진행하지만, 해당 모델이 아닌 랜덤포레스트를 사용하기에, 정상성을 만족시켜야 하는지에 대한 판단 필요
🔎 시계열 모델이 아닌, 랜덤포레스트로 시계열 데이터를 예측할 때에도, 정상성 확보가 필요할까?
- 전반적으로 정상성을 만족하는 데이터에서 모델의 성능이 더 좋을 수 있다.
- 모델은 정상성을 가진 데이터에서 더 일관된 예측을 수행할 가능성이 높음
- 모델이 시간 패턴을 더 잘 파악
- 모델 신뢰성 증가: 통계적 가정 만족
- 정상성을 갖추지 않더라도 잘 동작할 수 있다.
- 랜덤포레스트는 비모수적이고 비선형적인 특성을 가짐
변동성 예측 측면에서 안정성 일관성이 중요하고, 성능 개선 측면에서는 정상성 확보한 데이터에 대한 실험이 필요함
👉 결론, 베이스라인 모델로 가장 먼저 비교하고 판단하는 것이 좋을 것 같다.
📊 결과 , 차분 전 데이터가 더 나은 성능(mape)을 보임
- 파생변수 조합 생성
👉 Feature Importance, Permutation Importance 확인 후,
변동성 예측에 가장 낮은 영향력을 보인 변수들을 일부 제거하고 조합 찾기 시작
4. Model Efficiency Optimization
: MAPE 성능이 가장 좋은 파생변수 조합 결정 후, 랜덤포레스트 하이퍼 파라미터 최적화 단계
- randomsearch로 범위 특정 후, 베이지안 최적화를 통해 파라미터를 특정한다.
👉 최종 파라미터 결정에는, ascendex API를 통해 추출한 시장데이터로 성능평가를 진행한다.
(3일동안의 예측값과 시장데이터의 실제값 비교, 아래 포스팅 참고)
https://datapilots.tistory.com/91
Ascendex 코인 OHLCV 데이터 API 크롤링
코인 ohlcv 데이터를 크롤링해보자. 거래소는 Ascendex 이고, 공식문서는 다음과 같다. ASCENDEX 공식 문서 https://ascendex.github.io/ascendex-pro-api/#ascendex-pro-api-documentation API Reference ascendex.github.io 1. API Key 발
datapilots.tistory.com
'Project > BTC Volatility Prediction' 카테고리의 다른 글
| TICK 데이터 리샘플링 & OHLCV 변환 + 트러블슈팅 (0) | 2024.02.18 |
|---|