김다현, 천준석, 소범기, 권소현, 신가현, 홍일도, 이유진, 정현정
캐글 대회 참가 스터디 내용을 정리한 레포입니다.
맨 아래 일정표에서 스터디에서 리뷰한 내용이 무엇인지, 현재 진행중인 프로젝트에 대해서 간단하게 알 수 있습니다.
더불어, 팀스터디로 진행한 내용과 개인적으로 학습한 내용들을 DEV 브랜치에서 확인할 수 있습니다.
● 대회
- kaggle : House Prices - Advanced Regression Techniques
첫 프로젝트로 회귀 문제인 집값 예측 대회를 참여하기로 결정했습니다.
- 첫 프로젝트인 만큼 데이터 분석에 집중합니다.
- 언어는 python, 개발 환경은 머신러닝/딥러닝 적용을 위해 google colab 또는 kaggle notebook으로 진행합니다.
- 프로젝트에 대해 깊이 학습하고, 예정보다 빨리 끝날 시 다른 프로젝트도 진행할 예정입니다.
● 스터디 방식
해당 스터디는 크게 데이터 탐색 / 데이터 분석 / 모델 학습 / 모델 검증 단계로 구성되어 있고, 1~2주 시간을 할애하여 각 파트별 학습을 진행할 예정입니다.
- 스터디 만남 전까지 학습(데이터 탐색 / 데이터 분석 / 모델 학습 / 모델 검증 중 하나) 완료합니다.
- 정해진 날짜에 엘리스 플랫폼에서 모든 인원이 화면 공유와 함께 학습한 내용을 발표합니다.
- 단순히 코드만 돌려보지 않고 이론도 같이 설명함으로써 학습 효율도 향상시킵니다.
- 프로젝트 형식이라 주 1회 모임을 갖지만 각자 자신의 성과를 보여주고 질문을 해소하기 위하여 소규모 스터디도 즉흥적으로 모집될 수 있습니다.
● 스터디 계획
- kaggle : House Prices - Advanced Regression Techniques 대회 참여
- numpy, pandas, scipy, matplotlib에 대한 선행 학습 또는 복습 진행
- 엘리스에 제공해주는 데이터 분석 강의 병행
- 통계에 대한 원론적인 지식 탐구
- 학습한 라이브러리를 실제 대회에 적용하여 결과에 영향을 미치는 features 추출
- 해당 features들로 여러 가지 모델을 학습해보고 검증하여 대회 제출
- "어떤것들을 사용만 해봤다" 보다는 "해당 원리를 이해하여 활용했다" 방향으로 진행
- 첫 프로젝트가 일찍 끝날 시 다른 프로젝트 탐구
● 스터디 모임 시간 & 기한
매주 토요일 오전 10시
프로젝트 기간은 월요일 저녁으로 변경!
★ 즉흥적으로 소규모 스터디도 진행할 수도 있습니다. ★
● 목표
저희의 목표는 kaggle : House Prices - Advanced Regression Techniques 좋은 성적과 코드 밑단까지 이해하기를 목표로 진행합니다.
단순히 남의 코드를 클론 코딩하는 것을 넘어서 응용할 수 있는 수준을 원하고, 시간이 남는다면 다른 정형 데이터 대회나 딥러닝 분야에서의 데이터들을 다루는 대회에 참여하겠습니다!!!!
주차 | 목표 | 학습 내용 |
---|---|---|
1 (2022/04/01(금)) | 🚩kaggle 대회를 위한 사전 준비 및 데이터 분석 사전 학습, 앞으로의 계획 및 일정 수립 | - 정기 모임 지정, 대회 주제 확정, 개발 환경과 언어 확정, 사전 학습 내용 공유, 앞으로의 계획 수립 |
1 (2022/04/09(토)) | 🚩House Prices : Exploratory Data Analysis(EDA) 학습 및 데이터 분석 학습 병행 | - 화면 공유를 통한 각 EDA 발표/Q&A 진행, 자신만의 insight 발표 |
2 (2022/04/13(수)) | 🚩corr 공부, 결측값 처리 방법, 범주형 변수 상관성 찾는법, 다중공선성 처리 방법 고민하기 -> 오피스아워 리뷰 | -Year 변수에 대한 처리, 범주형 변수에 대한 상관성 방법 탐구, 다중공선성 처리, 파생 변수 처리 |
2 (2022/04/16(토)) | 🚩feature engineering 진행, corr 공부, 결측값 처리 방법, 범주형 변수 상관성 찾는법, 다중공선성 처리 방법 고민하기 | - 각자의 insight 공유, 의문점 토론 / 프로젝트 기간으로 인한 일정 토의 |
3 (2022/04/18(월)) | 🚩각자의 insight 의문점 같이 해결해보고, 타겟과 연관이 깊은 수치형 변수와 범주형 변수 파악하거나 끝낸 분들은 모델링까지 진행하여 정확도 확인 | - 이전 스터디와의 날짜 차이 때문에 휴식 |
4 (2022/04/25(월)) | 🚩모델링 중간 점검 | pycaret 사용해보기 , 쓸모없는 변수 골라내기 |
5 (2022/05/09(월)) | 🚩제출해보고 결과 확인 | 이상치 처리, 결측값 처리, 데이터 타입변경 좀 더 세심하게 변경하였음. , 파생변수 더 많이 생성 , 앙상블 모델 (Extra tree, Bagging, Gradient) 사용 |
6 (2022/05/16(월)) | 🚩 다음 프로젝트 TOPIC 정하기 , CV 와 NLP공부해오기 | 데이콘 수화 MNIST 분류 대회로 다수결로 결정 https://dacon.io/competitions/official/235896/overview/description |
7 (2022/05/23(월)) | 🚩 수화 이미지 train set : 0.83 까지 기록 | 모델을 좀 더 가볍게 성능 더 올리기, submission해보기 |
8 (2022/05/28(토)) | 🚩 |
● 2022/04/01(금): 스터디 소요 시간 30분(디스 코드 30분)
- 언어, 개발환경 : python, google colab&kaggle notebook
- 대회 주제 : kaggle : House Prices - Advanced Regression Techniques
- 사전 학습 내용
- 엘리스 플랫폼 데이터 분석 강의
- 캐글 대회 강의(T아카데미) :https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=189
- 데이터 분석/머신러닝/딥러닝 info : https://github.com/teddylee777/machine-learning
- 전체적인 계획 : 해당 대회에 대해 크게 데이터 탐색 / 데이터 분석 / 모델 학습 / 모델 검증 단계로 구성되어 있고, 1~2주 시간을 할애하여 각 파트별 학습을 진행할 예정
- 숙제 : House Prices : Exploratory Data Analysis(EDA) 학습 및 데이터 분석 학습 병행
● 2022/04/09(토) : 스터디 소요 시간 2시간(엘리스 플랫폼 2시간)
- 학습 내용
- House Prices : Exploratory Data Analysis(EDA) 발표 및 추가 학습
- data load, data comprehend
- features meaning 파악하기
- 타켓 변수 : SalePrice 분포 확인(왜도(shewness), 첨도(kurtosis) 확인)
- 이상치 탐색
- 결측치 확인
- numerical_features와 categorical_feature 살펴보기
- github : 스터디원 모두가 해당 저장소 github에 commit 가능하고 큰 뿌리마다 merge 할 예정
- 숙제&고민사항
- corr 공부하기 : 데이터 특성에 맞게 어떤 corr을 사용할지 고민하기
- 결측값 처리 방법 공부하기 : 의미있는 NaN은 어떻게 처리해야하는가?
- 범주형 변수 상관성 찾는법 : 범주형 변수는 시각화에 제한이 많음 : 카이제곱 검정 , 비슷한 특징들 지닌것은 하나로 묶어주는 기법 등... 고민해보기
- 이번주까지 했던 내용 왜? 그렇게 했는지 고민해보고 feature engineering까지 끝내기
- 다중공선성가진 변수 한쌍이 둘다 의미있는 변수일때 어떻게 처리해야하는가? 고민하기
- 특이사항
- github 각 팀원의 폴더에 학습 과정을 commit하고 큰 뿌리(데이터 탐색 / 데이터 분석 / 모델 학습 / 모델 검증 단계)마다 합치는 것으로 결정
- 단순 클론 코딩이 아닌 해당 원리를 이해하고 작성&응용하는 방향으로 추진
- 진도가 막힌 상태거나 모르는 것이 있으면 언제든지 즉흥 스터디
● 2022/04/13(수) : 스터디 소요 시간 1시간30분(엘리스 플랫폼 1시간30분)
<오피스아워>
★ 정기 스터디가 아닌 고민에 대한 오피스아워 정리 내용을 리뷰하고 앞으로의 방향성 결정하는 시간
- 학습 내용
- Year-- 변수들을 현재 날짜 기준으로 age로 바꿔주기. 왜냐하면 얼마나 오래된 집인지는 house price에 중요한 변수이기 때문이다.
- 범주형 변수의 상관성은 보통 table을 모두 교차분석해서 하나하나 보는게 정석이지만 현재 데이터셋은 너무 크다. 그러면 어떻게 해야할까?
범주형 변수 중 서열척도 인것과 , 진짜 범주형 인것 구분한다.
서열척도인것은 poor= 1 , Good =2 이런식으로 인코딩해서 바꿔서 수치형으로 바꾼다.
진짜 범주형 인것들은 더미화 시켜야한다. 더미화 시켜서 각 변수별로 Year를 x축에 saleprice를 y축에 놓고 시각화해서 상관성 해석하기
시각화해서 모든 변수가 동일한 연관성(정비례 , 반비례)를 보이면 상관없는데 어떤거는 반비례 어떤거는 정비례 하는 연관없는 상관성을 보이면 쓸 수 없는 변수라고 판단하자 - 다중공선성 있는 것들을 무조건 하나 버리는게 좋을까?
- 관련데이터들 (BsmtFullBath, BsmtHalfBath ) 이런것들은 당연히 연관되어있으니까 묶어줘서 하나의 변수로 취급하기 , 단, 정확도 약간 떨어질수도 있다.
- 보통은 더미기법을 쓰는게 맞는데 범주형도 40개가 넘는데 더미기법쓰면 더 많아지니까(과적합문제) 이럴때 보통은 버리거나 모델링할때 paramter 조정한다.
- 파생변수 만들기
2ndFlrSF : 2층 평방피트가 0이면 1층집이라는 뜻임. 따라서 파생변수로 2층집인지 1층집인지 변수만드는것도 아주 중요함! - 범주형 데이터는 무조건 상자그림으로 보면 안됨. 상자그림에서 상관성이 높게 나온것도 다른 변수의 영향있을수도-> 다중공선성(x) 교호효과 (o) 구글링해서 찾아보기
- 행수, 열수가 너무 많은 것은 XGBoost로 하기
XGBoost 에서 lidge , lasso parameter 조정하면 중요한변수들은 가중치 더주고 중요하지 않은 변수들은 가중치 더 주지 않는 방식으로 변수선택할 수 있음. - [추가 사항] 범주형 데이터는 어떻게 처리할까?
보통은 PCA로 해서 중요한 변수들을 묶어준다. 그런데 범주형은 PCA를 못하니까 Group lasso 라고 범주형데이터들이 너무 많을때 사용하는 기법인데 이것은 석사과정임.
파이썬에 라이브러리있긴있는데 해보고 싶으면 해볼것.
- 결론
다음 정기 스터디인 4/16(토)까지 해당 학습 내용을 적용해보고, 더 응용하여 다른 feature engineering 적용해보기
● 2022/04/16(토) : 스터디 소요 시간 2시간(엘리스 플랫폼 2시간)
- 학습 내용
- 공통 내용
- 수치형 변수와 범주형 변수 구분하고 의미있는 데이터 파악
- 결측값 해결
- 다중공선성에 관련에서 아에 없애거나 묶어주거나 그냥 두거나 등 많은 방법이 나왔는데 이는 모델링 후에 적절하게 조정 필요
- 평방피트 피처를 주거유형으로 대체할 수 있는지 확인해보기(현정님 참고)
- 일반적인 IQR 이상치 제거가 아닌 isolationforest를 통해 이상치 제거하기(일도님 참고)
- one-hot encoding을 사용하면 피처들이 기하급수적으로 많아지기 때문에 binary encoding 사용하기(준석님 참고)
- 수치형 변수를 활용하여 파생변수 만들기(1층 평방피트 + 지하실 평방피트 => total평방피트)(준석님 참고)
- 위 내용과 비슷하지만 여러개의 변수(scale이 다른것도 포함)를 하나로 묶어주는 조건부 추출/표준화/정규화로 파생변수 만들기(다현님 참고)
- 시계열 데이터를 만들어서 더 깊게 분석해보기 (YearBuilt 대신 YrSold를 활용하여 계약 시 집의 나이를 파악 가능)(일도님 참고)
- one-hotencoding 후 MSSubClass 는 encoding되지 않아서 타입 object로 변경하기(가현님 참고)
- 결론
- 프로젝트 기간으로 현재 정기 모임 토요일이 프로젝트 시간이므로 변경 필요 -> 토의
- 다음 스터디 까지 위 내용을 실험하고, 타겟과 연관이 깊은 수치형 변수와 범주형 변수 파악하거나 끝낸 분들은 모델링까지 진행하여 정확도 확인
● 2022/04/25(월)
- 학습 내용
- 모델링 중간 점검
- 결론
- pycaret 오류떠서 못하는 issue
- Ridge, Rasso 회귀 모형으로 적합하였으나 accuracy 0.91 이상을 넘지못하였음. -> 1500등 기록
- 앙상블 모델 적용 필요
- 웹사이트 프로젝트 기간으로 4월 19일~ 5월 7일까지 스터디 휴식
- <04-21 오피스아워 내용 정리>
-
<학습시킬때 주의사항> label이 있는 train을 예를 들어 8:2로 나누어 train-val 로 나누어 한번만 검사해볼것이 아니라 cross validation(5,8번검사 후 평균내기)을 통해 가장 잘맞는 모델을 찾아봐야할것임.
-
<과적합 어떻게 판단?> train 데이터의 saleprice는 관계자만 알고 있으니 과적합되었는지 확인할 수 없음. 그래서 idea는 train, test 의 saleprice가 분포가 비슷하면 비슷한 특징을 가진 데이터라는 뜻이니 두개의 분포를 비교하면 되지만 캐글에서는 정답을 공개하지 않으니 우리는 이 아이디어를 이용해서 피처들의 분포를 봐야함. 즉, train 피처들의 분포 , test 피처들의 분포가 비슷하다면 과적합이 발생하지 않을것임
-
<평가지표를 어떻게 보는지> ex) Ridge - train_score : 0.940791, test score : 0.914768
으로 나오면 train_score은 별로 안중요함. 우리가 봐야할것은 여러번 검사(CV)후 평균낸 test_score값!!
-
범주형의 시각화 barplot, boxplot말고 mosaicplot으로 대체하기, 다른 방법도 있으니 구글링
-
년도별로 범주형자료들을 시각화하기 x축을 년도로 놓고 히트맵으로 그리기
- 학습 내용
- 이상치 처리, 결측값 처리, 데이터 타입변경 좀 더 세심하게 변경하였음.
- 파생변수 더 많이 생성
- 앙상블 모델 (Extra tree, Bagging, Gradient) 사용
- 결론
- 1500등 -> 1200등 -> 107등까지 기록
- House-price prediction 프로젝트는 여기서 마무리하기로
- 다음 시간까지 데이콘+캐글 합해서 computer vision 또는 NLP 대회 나갈 것 한 개씩 골라오기
- 학습 내용
- NLP 와 CV 중 CV를 하기로 함. -> 3차 프로젝트를 대비해서
- 데이콘 수화 MNIST 분류 대회로 다수결로 결정 https://dacon.io/competitions/official/235896/overview/description
- 결론
- 다음 시간까지 엘리스 학습 내용을 바탕으로 모델링 해볼 수 있는데까지 최대한 해오기
- 학습 내용
- 과적합이 너무 심하게 일어남. 이미지 화질을 28by28로 줄이기로 결정
- test set의 정확도가 0.16밖에 나오지 않는데 split을 할때 버그를 발견함. 직접 데이터를 split하지 말고 keras validation_split사용하기!
- validation_split에서 자꾸 오류발생 conv2d에서 array형태를 못 받아오는 것같음. tensor로 형식 바꾸거나 Dense로 바꾸기
- 결론
- 다음 시간까지 submission까지 해보기