---
# System prepended metadata

title: "YBIGTA 20기 플젝 1조\U0001F914"

---

https://hackmd.io/8t1GItEjS8yBuFNVrI9l8w

# YBIGTA 20기 플젝 1조🤔 
자유롭게 수정해주세요!

## 2/12(토)
### 주제
- Ubiquant Market Prediction: Make predictions against future market data
- https://www.kaggle.com/c/ubiquant-market-prediction


### 역할 구분
- DE: 환경, AWS, 코랩 pro
- 한팀: 피처가 숫자덩어리라서 api, 모델링에 시간 많이 써야할 것 같으니 이 부분을 다뤄야 함
- 위 캐글에서 다른사람 코드 참고하면 도움이 될 것! 

### 공모전 준비 순서 
![](https://i.imgur.com/1YBmZoj.png)

- ML 세션에서 배운 순서대로 : EDA, FE, 모델 학습 ...  

### 데이터 특징
- Q. 데이터에 레이블이 없나요!? -> 그런 것 같아요.
- 타겟이 투자 수익률 (Ubiquant 펀드회사)
- f0 f1 데이터는 우리가 알수없음! 금융데이터는 원래 좀 그렇다.
- 전처리 할게 없음! 결측치만 확인하는 정도. 
- 숫자... 정규성 확인 다중공산성! 서로 피처들끼리 독립인지 확인 <- 간단히 확인한다.
- 가장 중요한 것은 모델링일듯!
- outlier 처리 고려
- 특성이 300가지나 됩니다!(csv파일 읽는거로 한 2분 걸려요!)

### 역할 분담
- CNN 영상 분석 하셨을 때: 각자 전처리, 각자 모델 돌려서 가장 괜찮은 모델을 튜닝했음 
- 역할을 나누는 것보다 모델을 생각해서 각자 짜보는 것이 어떨까요? 돌려서 모여서 얘기해보는 것이 좋을 것 같아요.회사에서 뭉텅이로 데이터주고 예측하라는 것이라서 각자 데이터 보고 모델 짜보는게 좋지 않을까요!
- 모델 구상을 하고 모일까요!? -> 네!
- 2-3일간 데이터셋 이해, 가닥잡기! 
- 지금 당장은 역할을 나누는 것보다 모델을 한번 찾아보고 얘기해보면 좋겠습니다! 배운거 기반으로 써서 성능 보고 팀을 나누는게 좋을 것 같아요!

### 중간 발표 준비
- 세션 때마다 만나면..
- 화: 모델 해보기
- 목: 발전
- 중간발표: 모델 만들었습니다. 성능 가장 좋은 것으로 소개하기.
- 2주차: 하나로 모아서 튜닝하기!
- 최종발표: 완료했습니다. 

### discussion
- 배운 것 중에 어떤 모델을 써보면 좋을까요
- label 0 1을 나누는게 아니라 수치를 예측하는 것이니까 회귀를 사용
- 성능 분석은 상관계수로 한다고 합니다. 
- 성능 측정은 상관계수의 평균으로 계산합니다. 
- 회귀 분석이 더 편하신분
- ML vs 회귀분석 더 편하신분
- 다른 사람이 했던 것: MLP, LGBM
- 최종적으로 제출해야 하는 것은 .. 어떤 값. 테스트로 값 만들어서 내는 방식. 
- 인공신경망으로 값을 낼 수 있나요? 가능합니다. DNN으로 회귀분석
- 저희가 아는 회귀 분석으로... -> 성능 문제. GBM으로 
- 딥러닝 프로젝트: 1GB에 4시간 걸렸음... 모델 하나씩 정해서 각자 돌려봤음 여러 모델을! 데이터 너무많아서 다 못돌릴듯
- 데이터를 뽑아서 1GB 정도만 돌려보는것 

### model research
- 모델 뭐쓸건지 알아봅시다.
- 모델 리서치, 데이터 보고, 나눠서 돌려보고, 모여서 어떻게 해야할지 얘기하고 중간 발표하기. 

### 화요일까지 할 것
1. 모델 리서치: 비슷한 사례 보고 고민하기(특성이 많을 때 회귀를 잘 해주는 모델, 정규화를 어떻게 거치는지 
2. 데이터 보기, 데이터 쪼개는 방법 고민하기 (데이터가 너무 많을 때 어떻게 진행하는지)
- 딥러닝 사용에 관련해서는 어렵지만 찾아보면 될 것 같아요!
- 사이킷에서 제공해주는 기본적인 모델들을 사용하는게 안전할 수 있다 
- Gradient 부스트 모델<- 보기!  
- 목요일까지 돌려보고
- 금요일에 발표준비하고
- 토요일에 발표
- 제일 중요한 건 엄청 큰 데이터셋을 어떻게 간단하게 처리할수 있을까 인것 같아요!
- 데이터 엄청 많으면 차원 축소 할 수 있는데 이것도 고민해보기

### 데이터 쪼개기
- 데이터의 양이 매우 많음
- row로 나눠서... csv row로 쪼개기. 만개정도 
- 곧 지원금 나오니 전체는 코랩이나 aws에서 마운트해서 돌려보기
- local에서 해보고 돌리는 것이 좋을 듯
- 코랩 pro나 aws로 돌리고 저희는 모델 튜닝하면 될것같습니다.
- 코랩은 대용량이 아니라도 pro 아니면 성능이 안좋고 매우 느리다. 
- row 만개정도 하면 꽤 빠르게될듯. 소요시간은 DL(2-3h), ML은 금방 나올듯 합니다.

### 다음 일정: 월요일 오후 3시 신촌 안다르
- 3시 신촌 안다르
- 톡방에 꾸준히 의견 업로드 해주세요!

### 참고자료
- DNN 입문 수준으로 정리가 잘 된 자료
https://www.kaggle.com/morenovanton/starter-dnn-ubiquant-market-prediction


## 2/14(월)
### 고민한 내용 발표
#### 종근님
- LSTM, RNN으로 금융 데이터에 넣어본 자료
- 전처리, 모델 성능 향상 사이클이 있음. 

- 단순 회귀 사용 가능? -> 데이터에 적합하지 않음. 피처 300개
- 회귀를 돌려서 할 수는 없을 것 같다고 생각하셨음
- 어떤 피처가 타겟에 얼마나 영향을 미칠지 계산하기
- 전체적으로 다 돌리지 말고 COLUMN 별로 끊어서 돌리면.. 1~50, 1~100 등으로 나눠서 가중치를 더 줘서 모델을 만드는 것은 어떨까
- ML... Decision Tree나 SVM은 쓰기 어려울 것. 선형 회귀가 될지 모르겠다.
- RNN이 괜찮을 것 같다고 하심! 
- 데이터를 어떻게 나눌까? 

#### 정훈님!
- 인공신경망.. layer설정은 relu가 좋다. 
- stacking -> 모델 여러개로 데이터를 학습해서 결과를 토대로 결과를 취합하는 것을 훈련. 정확도가 높아짐. 
- 피처가 너무 많아서 모델 학습이 힘들 것 같은데 PCA라고 변수끼리 묶어서 하면 간단해질까? 
- 직접 해보셨는데 줄여지심! 
- Py.. .? ? 
- 데이터 양이 많으니까 fragmentation -> pooling해서 하면 데이터를 쪼개서 할 수 있다.
- 데이터를 보고 다중공산성 확인해서 필요없는 피처 버리고, PCA 사용해서 크기 줄이고, staking해서 결과 내기 

#### 종연님! 
- pandas로 받아지지가 않아서 메모리를 줄일 수 있는 방법 Parquet로 받기. 데이터 형식이 최적화가 안되어있음 그것을 전처리하면 4GB로 줄일 수 있음. 딥러닝 모델도 돌아감! 
- 어느정도까지 욕심을 부리냐에 따라서 할수있는게 달라질 것! 
- 에너지를 EDA에 쏟아보면 좋겠다.
- 이상치, 타겟 값에 대한 데이터의 분포, 정규분포를 띄는지 알아보기
- 데이터를 나눠서 가볍게 해서 돌리자고 얘기했었는데 investment_id, time_id를 고려해서 결국 나눠야 하는데 결국은 우리가 로컬에 돌려야 하는데 이것보다는 Parquet 해서 돌리는게 나을듯
- 돌려보셨는데 15초만에 나옴 회귀 돌리는데 1분밖에 안나옴
- RMSE가 0.9라서 좋지않음. 
- 머신러닝 많이 씀 LGBM - 12분만에 나옴 
- EDA말고 할게없는게 아닌가! stacking 여러 모델 파이프라인을 만들어서 그 결과를 다 고려해서 최적의 모델을 찾기
- stacking 모델링을 해서 세부적인 모델 정해보기. 
- 다른 조와 비교했을 때 프로젝트의 volume을 맞춰야 하지 않을까
- 시간 남으면 DNN을 해보면 좋을 것 같습니다.

#### 소정님!
- 캐글에 올라온 코드랑 모델 같은거 부동산 시세 예측 논문같은거에 뭐가 쓰였는지 찾아보심.
- LSTM이 가장 높게 나옴. 딥러닝 중에서는 LSTM이 제일 좋을 것!
- 캐글에 올라온 코드 중에 점수를 2번째로 높게 받은게 LGBM이랑 MLP를 이용해서 앙상블 교차검증하심. 수정하면 점수 더 올라가셨다고. 
- ight GBM이 데이터가 많아서 과적합되지도 않아서 XGBoost보다 LGBM보다 나을 것이라고 생각하셨음
- 변수 튜닝이 복잡해서 문제인 것 같다고 하셨음
- 딥러닝 모델과 stacking하면 좋을 것
- LGBM이 데이터가 만개 넘으면 좋다고 해서 데이터가 많은 우리 것과 효과가 좋을 것
- 데이터를 나눠서 돌렸을 때... 10%, 20%, 전체 우리도 메모리에 다 올리자.
- EDA 봤는데 이상치를 표준편차의 70배 해서 다 제거하고, 멀리있는 이상치 제거. 이상치 제거해서 정규화하는게 좋을 것 같다고 생각하심.


#### 현경님!
- https://hackmd.io/Wrnl7R1fQRe_H0kgtyz2Og

#### 요약
- Stacking, PCA
- Parquet, 어디까지?, EDA
- Stacking, LGBM, LSTM, EDA 전처리

- EDA를 빡세게. 
- stacking으로 앙상블로 정확도 높이자, PCA

- EDA
전체적인 데이터 확인 vs time_id 확인 


### Discussion
#### EDA
- EDA의 근거 찾아보기
데이터 시각화, 전처리 근거 
정규화, 이상치제거는 무조건 한다. 방법이나 근거.. 로그함수.. 각 컬럼별로 그래프, 표준편차 나타내서 근거를 어떻게 할지 알아보기.
이상치제거 표준편차 고려해서... 이상치 제거를 하기 위해서도 시각화.
time series가 되면 정규화의 근거가 있음. 
investment_id를 어떻게 활용하는지는 막연하게 나타냄. Data를 증폭하는 방법 ?? investment_id 숫자가 작을수록 데이터가 없어서......... 증폭을 해서 모델링해보자. 
다른 EDA 방법은 할만한게 없을 것 같다. 
데이터 증폭 -> investment id가 30인건 데이터가 1000개고 1인건 데이터 2개임. 부정확한 모델이 나올 수 있음(근거 찾아봐야...) 
타임 series로 보는순간 증폭이...
시계열 데이터로 봐도 될까요? 추세가 없는데....
시계열 데이터로 보면 장점 -> 시간의 간격이 일정하지 않아도 LSTM 알아서 써도 됨(성능 안좋음!) 
시계열로 봤을 때 일별인데 validation
The time IDs are in order, but the real time between the time IDs is not constant and will likely be shorter for the final private test set than in the training set.

![](https://i.imgur.com/896fsM8.png)

- 소정님이 작성하신 자료
https://hackmd.io/_UzPexY-RoKHPVKDPWJTvQ

- 정규화 
정규화를 하는 근거 파악이 필요함 (각 column 별 그래프를 그려보자)
정규화를 어떻게 할 것인가? 
시계열 데이터이면 정규화의 근거가 더 명확해짐 
https://www.kaggle.com/lucamassaron/eda-target-analysis
https://www.kaggle.com/gunesevitan/ubiquant-market-prediction-eda

- 이상치제거 
자료를 참고해서 시각화 후에 해당 링크 내용대로 적용
70과 35, 6의 근거 알아보기
https://www.kaggle.com/junjitakeshima/ubiquant-simple-lgbm-removing-outliers-en-jp

- investment_id
데이터가 불균형한데, 증폭할 수 있는 근거가 있나!!? ->

- k-means 가 유용함(보류)
https://www.kaggle.com/tmrtj9999/regime-classification-by-k-means



#### time_id
time_id를 어떻게 할 것인가
2가지 관점
시계열 vs dummy data
한 investment id에서 time id를 x축으로 한 target 결과
특정 시간에 어떤 weight를 곱해서
해지펀드... ?? 변동성 큰 데이터
이사람들이 하고싶어하는건 time_id를 시계열로 보는 것이
될지안될지는 모르겠음
LSTM, LGBM 전체 investment_id에 대해 time_id에 대해 LSTM에다가 넣고 모델의 분류 회귀 방법. 특정 Feature의 weight를 뽑아내자. 
전체 id에 대한 시계열데이터. feature별로 weight를 알아낼 수 있는..??
id만큼 있는 ..? 선형 회귀 모델에 넣기.... 한 investment id에 대한 300개 feaeture에 대한 weight를 선형회귀..?? 
Time_Id를 신경쓰지 않으면 그냥 앙상블로 넣기ㅣ

전체 time series에 대한 300개 feature의 weight가 시계열 데이터를 압축해서 하나의 웨이트로 잡아넣은... weight와 target의 연관관계(?) 
이런 모델이 있는지 모르겠고 요즘 나온 딥러닝 논문은
피처를 만들어서 넘기고(?) ....... 

정리: time series로 보는 방법 - 시계열 데이터를압축해웨이트뽑아내고다시 선형회귀 시킨다. 어떤 모델이든... 그 웨이트를 구한다. (피처의 타겟과의 연관성) 
보지 않는 방법 - 전체 모델 돌려서 앙상블해서 결과를 내자

압축해서 타임시리즈하는건 정말 좋은 것 같아요. LSTM으로 갖다쓰면 될것같아요. 
각 컬럼별로 웨이터가 있는가? 선형성이 없는 데이터를 쓰기 위한게 딥러닝인데
investment id별로 LSTM을 통해 가중치를 학습하고 3700개의 아이디
피처 별 가중치 구하면 그 3700개를 그대로 두던지 하나로 줄여서 할지 고민하기.
investment id별로 가중치 vs 전체 종합
모델 fitting을 investment id별로 한다. 

PCA로 피처 수를 줄여서... 결과가 잘 나올지 모르겠다. 

통으로 보는걸로 결정

### 다음 일정
중간 발표 전까지
EDA 끝나고 모델 하나 돌려보기. 
전처리, 시각화, 정규화, 이상치제거
어떻게 볼지 근거
수요일까지 근거 찾기 + 코드 작성
팀 나누기
- 이상치 제거: 종근님, 소정님, 현경님
https://www.kaggle.com/junjitakeshima/ubiquant-simple-lgbm-removing-outliers-en-jp
- 정규화: 종연님, 정훈님 
 
목~금: 
시각화, 논의하고 만들기. 
이번주: 전처리한 데이터 얘기 
최종목표: 모델 여러개넣고 앙상블 시킨다

### 다음 모임
#### 고민할 것
- 상관관계, 다중공산성 알아보기: 써야할까?
- investment id 고민해보기: id가 부족한 데이터가 안좋은 영향을 끼치는지? 증폭해야할까? 

#### 신촌 안다르
- 오전 10시 30분


