연간 데이콘 인공지능 비트 트레이더 경진대회

접근 방식에 관해서

2021.03.15 00:32 9,057 조회

안녕하세요!


이런저런 모델들을 돌려보면서 생각보다 잘 되지 않아서 글 남겨봅니다.


저는 주로 시계열 모델보다는 딥러닝 위주로 접근하고 있는데요, 결과물들이 거의 다 처참해서 조금 아쉽네요ㅠ


14000정도 되는 것도 여러번 제출을 한 결과를 바탕으로 어느정도 익스플로잇을 해서 낸 점수라 사실 프라이빗에 가면 걸러지지 않을까 싶습니다...


현실에 가깝게 고증된 대회라 문제를 푸는 재미는 있습니다만 접근할 수 있는 방법이 워낙 다양해서 오히려 어렵게 느껴지네요.


접근 방식에 관해서 제 개인적으로 고민해본 점은 몇 가지 있는데, 다들 어떻게 접근하고 계신지 궁금해서 몇 자 적어보게 되었습니다.


1) buy_quantity에 관해서

이게 현실이 아니라, 대회라는 특성상 buy_quantity의 값은 클수록 유리하다고 생각합니다. buy_quantity가 높을 수록 variance는 커지게 되는데, 결국에 순위권 안에 들어야 하는 입장에서 variance를 낮게 가져갈 이유가 전무하다고 생각해요. 어차피 누군가는 높은 variance를 가져가는 전략을 취할 텐데, 그런 사람이 많다면 그런 사람 중 누군가는 확률적으로 높은 성적을 거두기 마련이니까요.

그래서 결국 buy_quantity는 무조건 1에 최대한 가까운 값을 가져야 한다고 생각했습니다. (현실에서는 물론 낭패보기 쉬운 전략이겠지요...!)


2) 그렇다면?

그렇다면 결국 문제는 sell_time을 어떻게 정하느냐! 하는 문제로 귀결된다고 생각합니다. 그러나 이 경우에도 고민해볼 만한 것들이 한두가지가 아닙니다. 제 경우에는 딥러닝으로 Regression / Classification을 몇 가지 시도해봤는데 하는 것마다 점수가 잘 나오지 않아서 모르겠네요..


3) 머신러닝 방법론을 적용하기 위해서

샘플이 너무 적기 때문에 무조건 Augmentation을 해야한다고 생각합니다. 물론 모델을 어떻게 잡느냐에 따라 샘플의 수를 자연스럽게 늘릴 수도 있겠지만, 이것저것 시도해봤는데 모두 성적이 별로 좋지는 않더라구요. 경험상 이런 경우에 문제 설정을 어떻게 하는지가 성적에 직결된다고 생각해서, 결국 전처리를 어떻게 잘할지 / 목적함수를 어떻게 잡을지 정도가 메인 태스크가 될 것 같습니다.


조금이라도 더 배워가고 싶어서 푸념글이 된 것 같지만 올려봅니다...ㅠ


다른 분들은 어떻게 접근하고 계신지, 어떤 직관으로 해결해 나가고 계신지 궁금합니다!


편하게 댓글 남겨주시면 감사하겠습니다ㅎㅎ!

(제가 시도했던 모델들도 궁금하시면 러프하게 적어놓겠습니다.)

로그인이 필요합니다
0 / 1000
감귤맨
2021.03.15 14:09

  AJ402 님 좋은 글 감사합니다. 
높은 Variance를 위해서  buy_quantity를 크게 잡는 것이  유리하다고 말씀해 주셨는데요.
만약 Variance가 크기 때문에 높은 public 점수를 받았다고 한다면
private에서도 높은 점수를 받을 수 있을까? 라는 의문이 듭니다. 이에 대한 AJ402님의 의견이 궁금합니다.
(본 댓글은 감귤맨 개인의 의견입니다.)

AJ402
2021.03.15 15:39

저도 평균적으로는 private에서 높은 점수를 받기 어려울 거라고 생각합니다.
본 대회에서 요구하는 것처럼 로그수익률을 높이기 위해서는 켈리베팅의 개념을 녹여내는 것이(그럴 수 있다면) 이론상 바람직하다고 생각하지만, 이는 길게 봤을 때의 경우이기도 하고, 대회에 제출하기 위한 샘플 수인 529개는 부족해보여서 최대한 위험 선호적으로 가는게 좋지 않을까 싶습니다.

요약하자면, 맞출 경우 건 돈만큼을 주는 동전 던지기를 2번 하는데 승률이 10%밖에 안된다고 할 때, 원래대로라면 안 거는 게 맞지만 대회이기 때문에 오히려 2판 모두 전부 거는 게 더 낫다는 정도? 로 생각해볼 수 있을 것 같습니다! 

물론 이건 (529회가 적다) & (참가자 수/제출된 답안 수가 충분히 많다) 라는 가정에 동의할 때 성립하기 때문에, 사람마다 당연히 의견이 갈릴 수 있을 것 같습니다.

감귤맨
2021.03.16 16:21

자세한 답변 감사합니다!  좋은 결과 있기를 바랍니다 :)

킹왕짱정혁
2021.03.15 16:36

소중한 인사이트 공유 감사합니다:) 

한가지 여쭤봐도 될까요? 저도 딥러닝 방향으로 접근하려하는데 비트코인 가격 예측시에 simple step prediction (e.g., 1분 단위로 t 시점의 output을 input에 끝에 붙여 다음 t+1시점의 output을 예측)으로 하셨나요? 아니면 multi step prediction (e.g., 120분을 한번에 예측)으로 접근하셨나요? 

감사합니다!

AJ402
2021.03.15 18:04

저도 이 부분에서 고민을 많이 했는데, 아직 답을 찾지 못한 것 같습니다ㅠ
두 방법 다 시도해봤는데 둘 다 성능이 잘 나오지 않더라구요..
최종으로 제출한 방법은 중간지점으로 타협했던 것 같습니다. (120분을 N step으로 분할 [1사실 이 경우에도 open price만 예측하는 모델을 잡을지, 아니면 10개 vector 자체를 뽑아낼지 등등도 아예 모델 방향이 달라질 것 같아서
이것저것 시도해보는 중입니다..

킹왕짱정혁
2021.03.15 22:23

답변 감사합니다:) 

혹시 해보신 모델에 대해서 러프하게라도 말씀해주실 수 있나요??
딥러닝 모델로 시도하고 싶은데 처음 해보는 task라 그런지 잘 모르겠네요..

현재까지 제가 해본 시도는 다음과 같습니다.
1. model: gru + linear(?, 1)/ 1분 단위로 recursive하게 120분 예측 
2. model: gru + linear(?, 120) / 한번에 120분 예측
3. model: seq2seq + attn (NMT에서 자주 사용되는 모델 gru(encoder)+attention+gru(decoder)) / autoregressive (1분 단위)

일단은 요정도 해봤는데 1분 단위로 예측하는 경우는.. 거의 이 후 두시간의 가격이 constant하게 나오고, 120분  예측하는 경우는 예측은 하는 것 같지만 true 값과 많이 다르네요..이리 저리 튀는 값이 많이 있습니다(이대로 submission만들면 안되겠다 싶을 정도로 다릅니다)

데이터 관련해서는 다음과 같습니다.
coin_index별 OR 전체 통합해서 모델 훈련하는 것도 해봤는데 큰 효과는 없네요.. 
1380분을 모두 보는 것 또는 이전 120분? 혹은 300분? 보고 다음 1분 혹은 120분 예측하는 방법에 대해서도 해봤습니다. 결과는 그다지 좋지 못했습니다. 

감사합니다!

AJ402
2021.03.15 22:39

제 경우에는 real value 자체를 예측하기보다는 일정 단위로 끊어서 slope를 예측하는 모델을 사용하였습니다.
저도 처음에는 real value로 시도해봤는데 말씀하신 것과 비슷하게 나오더라구요..
물론 slope도 이쁘게 나오지는 않습니다만 real value prediction보다는 조금 더 나은 것 같습니다!

킹왕짱정혁
2021.03.15 22:46

아! 감사합니다. slope를 사용해서 한번 해봐야겠네요:)