데이터
베이스라인
- 수치형 데이터 통곗값(mean, std, min, max, sum)으로 모델 학습
제외 컬럼
- chunk_slot_min
- 첫 거래의 slot은 코인이 생성된 slot 과 같음
- dune_decimals
성능 향상 전략
베이스라인 train 데이터 예측 확률로 그룹화
실패 코인
은 대부분 예측 확률이 0.0 근처(거의 확신)
성공 코인
은 두 극단(0.0 근처 / 1.0 근처) 모두 존재- → 혼동되는 성공 코인이 분명히 있음
→ 예측 확률 기반으로 3개 그룹으로 나눠서 접근
그룹 | 조건 | 설명 |
성공 확신 코인(TP) | 실제로 성공 & 예측 확률 > 0.9 | 모델이 “성공이라고 본” 실패 코인 |
성공 혼동 코인(FN) ⭐️ | 실제로 성공 & 예측 확률 ≤ 0.1 | 모델이 “거의 실패라고 본” 성공 코인 |
실패 코인(TN) | 실제로 실패 & 예측 확률 < 0.1 | 모델이 “실패라고 본” 실패 코인 |
성공 혼동 코인(FN)을 위한 미니 모델 학습
성공 혼동 코인(FN)
과 실패 코인(TN)
만 모델을 돌리면 잘 예측할까?
→ 구분을 거의 못 함.
TN 언더샘플링 미니 모델
- 베이스라인의 Logloss가 낮은 이유는 코인 실패 데이터의 수가 워낙 많고 실패를 잘 예측하기 때문.
- TN을 언더샘플링 해버리면 TN의 개수가 많이 없어져서 logloss가 커질 수 밖에 없음
class weights 적용 미니 모델
undersampling vs class_weights 모델의 feature importances
어떤 모델의 feature importances가 더 의미 있을까?
undersampling | class_weights |
데이터가 균형이기 때문에 FN을 잘 맞추는 특징이 무엇인지에만 집중된 모델 - 단점: TN 쪽 정보는 대부분 버려짐 | FN을 잘 맞추는 특성과 전체 예측에 도움이 되는 변수가 혼합됨 TN 예측 성능을 유지하면서도 FN도 어느정도 고려하는 균형 잡힌 모델 |
거래 수 비교
거래 수가 1개인 코인들을 어떻게 성공이라고 판단했을까?
- 잔고 관련 지표
- 성공으로 확신한 코인들은 토큰 잔액이 적고, 솔라나 잔액이 많음
wallet_success_rate
각 거래 내역에서 거래를 한 지갑(사람)이 투자한 코인의 성공률을 계산하여 wallet_success_rate
라는 feature를 만들고, 각 코인 별로 갖고 있는 wallet_success_rate
값을 mean, std, min, max, sum 으로 집계를 내려서 최종 feature 로 추가
😱 문제점
train set에 없는 wallet이 test set에 등장하는 경우가 많아 test logloss는 더 안 좋아짐
- test prediction 기반 wallet success rate 보강한다면?
- train 기반
wallet_success_rate
계산(기존 방식)
- test 에서 predicted_probability ≥ threshold(e.g 0.95)인 코인에서 참여한 wallet을 success로 간주
- 이 wallet들을 포함해 전체 wallet_success_rate를 재계산
- 그걸 다시 test에 집계 특성(mean, std, min, max, sum)으로 넣기
- train 기반
→ 보강 후로 0근처로 확률이 늘어나면서 negative 예측이 확신을 가지게 된 것으로 보임
→ FP(실패인데 성공으로 예측)이 줄어들은 것 같음.
creator_success_rate
토큰 발행자가 발행한 코인 중 성공한 코인의 비율
wallet_success_rate
과 마찬가지로 testset 에는 학습 시킬 때는 몰랐던, test 데이터에서 처음 등장하는 토큰 발행자가 있다는 문제점이 있다.. 처음 등장하는 지갑(거래자)보다 처음 등장하는 토큰 발행자가 더 많다 🥲
creator 가 몇 번째로 발행한 코인인지?
- 코인 발행자들은 대부분 1-2개 정도 발행했다. (대부분의 토큰이 각 크리에이터의 첫 번째 토큰임)
- 평균적인 순서는 TP > FN > TN
- 표준편차도 TP가 가장 높음 → TP 그룹은 경험이 적은 크리에이터부터 많은 크리에이터까지 다양하게 분포
- 최댓값을 봤을 때는, 실패 코인이라도 토큰을 많이 발행한 사람은 존재하지만 평균은 낮은 편
거래가 1건이면서 성공한 코인들은 경력자인 크리에이터가 발행한 코인일까?
거래 수에 따른 예측 그룹 분포
- 실패 코인 중에서 총 거래수가 490인 코인을 살펴보면
- 거래 내역
매수 488건, 매도 2건
- unique wallet 수 221개
한 지갑이 최대로 많이 참여한 거래는 3건
- 거래 내역
wallet_tx_ratio
거래한 지갑이 해당 토큰의 거래에 얼마나 비중을 차지하는지 나타내는 변수
→ 이와 비슷하게 거래량 편중도 지수(거래 편중도, transaction concentration index)를 만들 수 있음
최초 거래를 누가 했는지
크리에이터가 아닌 외부인이 최초로 거래를 시작했을 때, 실패할 확률이 높음
예측 그룹 | 구성 비율 |
실패 코인(TN) | 61.52% |
성공 혼동 코인(FN) | 20.07% |
성공 확신 코인(TP) | 18.40% |
솔라나 비율
유동성 풀에서 솔라나가 차지하는 비율
• cretor_success_rate가 높은 크리에이터들의 공통적인 토큰 설계 특성 비교
- 초기 거래 패턴 차이
- FN 코인은 초기에 빠르게 거래가 몰리는 구조?
- 예: 첫 10개 블록 내 거래 수, unique wallet 수 등
- 가격 정보가 있다면 가격 변화 속도
- FN은 가격 펌핑이 있고 TN은 그렇지 않은 패턴이 있을 수 있음
- 구매/판매 지표의 변형
- buy_minus_sell_ratio의 시계열 변화 (초기엔 매수 많고 이후 매도 몰리는 등)
- 지갑의 행위 유형 분석
- 같은 지갑이 여러 코인에서 반복적으로 활동 → rug 가능성?
- 반복해서 실패한 지갑이 포함된 경우
- 시간 기반 집중도
- FN은 특정 시간대에 거래가 몰려있는지, TN은 흩어져 있는지
펌핑 속도 - 얼마나 빨리 사람들을 모았는가?
- 계산식: chunk_block_time 기준 정렬 후 상위 10개 간 시간 차
- 계산식: chunk_slot 정렬 후 누적 매수 거래량이 10 SOL 넘는 시점까지의 솔롯 차(chunk_direction = buy일 때, chunk_quote_coin_amount 의 합)
- 계산식: 첫 10개 chunk_block_time 간격 평균
- 계산식: mint별 총 거래 수 대비 상위 10개 비중
참여의 다양성 - 다양한 지갑들이 참여했는가?
구매/판매 균형
본딩 커브 진척도 추정 - 실제 졸업 기준 접근 여부
시도해봤던 것들
데이터 불균형 해소
SMOTE
TN, FN, TP 모두 줄었음
- FN을 줄이고 싶은데, 오버샘플링을 사용하면 FP가 늘어나면서 실패 logloss가 급상승함
- 특히 실패 클래스가 훨씬 많아, 실패 예측의 정확도가 logloss에 더 큰 영향을 줌