NFT의 많은 관심에 비해 NFT를 처음 접한 사용자들은 여전히 NFT의 가격이 적절한 지 판단하기 어렵습니다.
이 프로젝트에서는 1시간마다 거래 데이터를 수집하여 NFT 특성 데이터와 함께 모델을 훈련하고
사용자에게 예측가격을 제공하고 저평가 된 NFT를 추천합니다
해당 NFT와 특성이 비슷한 NFT 아이템들을 사용자에게 추가 정보로 제공합니다
강신구 | 김혜지 | 이상연 | 전인혁 |
---|---|---|---|
Front-end, Back-end |
Project Manager, Data crawling, Database, Airflow |
EDA, Data preprocessing, Model |
Back-end, Front-end |
fastapi 0.78.0
python 3.8.5
numpy 1.19.2
pandas 1.4.2
pymysql 1.0.2
pyyaml 6.0
requests 2.27.1
torch 1.10.0
streamlit 1.9.2
selenium 4.2.0
selenium-stealth 1.0.6
📁 final-project-level3-recsys-06
└ 📁 DB
└ 📁 airflow
└ 📁 fastapi_streamlit
└ 📁 model
- 먼저 특성과 가격간의 관계에 대해 알아보았습니다. 각각의 특성들을 가진 NFT의 평균과 각 특성들의 유무에 따른 가격차이에 대해 확인해 보았고, NFT의 가격은 몇몇의 특성들에서 유의미한 차이가 존재한다는 것을 알게 되었습니다.
- 그 후 가격의 분포를 확인하여 이상치를 제거하였습니다
- NFT는 시간에 따른 가격의 변동이 심했고 가격 변동이 비슷하다고 생각되는 일정 부분의 데이터만을 사용하여 학습 하였습니다.
- 선형회귀
- 특성들에 따른 가격 평균의 분포가 NFT 가격 분포와 비슷하였기에, 특성들의 선형 결합만으로도 NFT의 가격을 나타 낼 수 있을 것이라 판단하였습니다
- 데이터의 수가 적어 복잡한 모델은 학습이 힘들 것이라 판단하였습니다.
- MAPE
- NFT들의 가격 차이가 컸기에,
- 실제 가격과 예측값의 차이를 퍼센트로 표현하는 것이 더 타당하다고 생각
- 특성행렬과 전치행렬의 곱
- 각 특성의 유무에 따라 0과 1로 표현하였기에 이와 같은 방법으로 서로 겹치는 것의 개수를 구할 수 있었습니다
- 자카드 유사도와 코사인 유사도 모두 이러한 방법과 분자 부분의 크기가 같고 각 NFT들의 특성의 개수가 같아 유사도의 순서는 같을 것이기에 행렬 곱 만으로 계산을 하여 유사한 NFT를 추천하였습니다.
- 데이터 수집 - 전처리 - 훈련 - 예측 과정은 Airflow을 통해 1시간 간격으로 작업을 수행합니다.
- 모든 데이터는 Google Cloud SQL에 저장됩니다.
- Docker로 FastAPI와 Streamlit 이미지를 만들고 Google Compute Engine 서버를 사용하여 배포하였습니다.
- OpenSea API를 통해 NFT 특성 데이터와 판매자가 올린 가격 및 구매를 원한 사람들의 가장 높은 제안 가격 데이터를, Etherscan에서는 Selenium을 통해 거래 내역 데이터를 크롤링하여 Google Cloude SQL에 넣었습니다.
- NFT 특성과 거래내역 데이터를 전처리한 후 PyTorch 기반으로 모델을 훈련한 뒤 가격을 예측합니다.. 그리고 판매자가 올린 가격 및 구매를 원한 사람들의 가장 높은 제안 가격 데이터를 비교하여 저평가된 NFT 10개를 구합니다.
- NFT 특성 데이터를 사용하여 해당 NFT와 비슷한 특성을 가진 10개의 NFT을 구합니다.
- NFT 특성 데이터, 저평가된 10개의 NFT, NFT 예측 가격, 비슷한 특성을 가진 10개 NFT 데이터는 FastAPI를 통해 Stramlit에 출력합니다.
- 저평가된 NFT 10개는 NFT Collections의 메인에 출력됩니다.
- NFT 특성 데이터, NFT 예측 가격, 비슷한 특성을 가진 10개의 NFT 데이터는 사용자가 보고 있는 NFT 화면에 출력됩니다.