로딩...
upstage-ai-lab-day-43
- machine learning basic
- machine learning advanced
- 캐글, 대회 관련 특강
- House Price Prediction 경진대회
2주간의 수업
- 기본이 없는 경우 수업을 들으면서 무엇에 쓰이는지를 상상하기 어렵기 때문에 효율이 떨어진다
- 때문에 졸리게 되는데 진도를 뺀다는 생각으로 들어봤자 졸면서 해봤자 기억에 남지 않는다.
- learn by doing 이라고 오히려 실습, 혹은 실제 프로젝트를 들어가서야 아! 그거 하는 순간이 찾아오고 찾게된다.
대회: House Price Prediction
대회의 EDA 시도나 결과는 모두 유사할 수 밖에 없어, 개인적인 경험을 위주로 기록한다
대회
- 대회기간은 2주다
- 2주는 한주는 수업을 들어야해서 입문자를 기준으로는 기간이 1주다
- upstage 에서 주관하므로 [URL] https://stages.ai/ 를 통해 진행된다
- 한번은 제출 결과가 영원히
pending
에 빠지는 문제가있었으나 재업로드로 해결할 수 있었으므로 크리티컬한 문제는 아니었다.
- 한번은 제출 결과가 영원히
- 대회는 일별로 제출 한도가 있다. 때문에 뒤늦게 하려고한들 팀원들이 몰릴테고 나에게 돌아오는 기회는 작아지게된다
- 때문에 피쳐 엔지니어링에 들어가기전에 한사이클을 돌릴 수 있도록 모델까지의 파이프라인을 생성해야한다
- 그럼 서버는 파이프라인으로 매번 돌아가고 난 그사이에 피쳐 엔지니어링을 통해 다음 타스크를 머신에 부여할 수 있다.
- 주최측에서 제공하는 서버는 nvidia RTX3090 을 포함하고있었다.
nvidia-smi
는 설치되어 있었으나nvcc
명령어가 없어 추가 설정을 해야 gpu 를 활용할 수 있었다.- 이런 설정도 주최측의 의도인건가?
협업
- 팀바팀이지만 우리 팀에 능력자는 없었다. 학부때 경험자는 있었다.
- 특별한 리더쉽이 없는 상태에서 스크럼은 유야무야되어 5일동안 2,3번 정도 초기에 진행되었다.
- 소통이 별로 없다보니 서로 공유하거나 이런 것이 제한되었다.
- git 이 활용되기 어려워서 파일들은 주로 slack 을 통해 전달되었다
- 팀원들의 경험
- jupyter-notebook 이 실행 결과를 포함하는 포맷이어서 생기는 문제
- 개발 환경
- os 부터 시작해서 모두 각자 다른환경을 가지고 있고 이걸 통합하지 못함으로 인해서 로컬 실행이 안되는 분도 있었다.
코드
- jupyter-notebook 을 통해 모든 것을 진행하게 되면 스파게티 코드와 같은 경험을 하게된다
- 이 것이 이분야의 일반적인 경험인지 모르겟으나 나로썬 집중하기 어렵고 비효율이 집중을 흐리게했다.
- 너무 길다, 마킹을 위해서는 중간 중간을
markdown
으로 헤더를 남겨서 IDE 기능을 통해서 이동해야한다 - 수정을 어디했는지를 잘 모르니 어디서 부터 다시 시작해야할지 헷갈린다
stateful
한 방식의 코드가 셀별로 사용되다가 어디까지 실행되었는지 잃은경우 다시 시작한다
- 너무 길다, 마킹을 위해서는 중간 중간을
- 이러한 것들은 이런 프로젝트의 프로세스가 체화되면 나아질 수 있을 것 같다
- 개발자가 가지는 모듈화라는 관점에서는 좀 어려운 면이 있었다
vscode
는 좀 나은 것 같긴한데pycharm
+vim
의 조합은 최악이었다. 버그투성이고 커서가 튀어서 집중하기가 어려웠다.
- 이 것이 이분야의 일반적인 경험인지 모르겟으나 나로썬 집중하기 어렵고 비효율이 집중을 흐리게했다.
경험
- 각개 격파를 하는 중에 chatgpt 와의 심도깊은 대화를 통해 많은 것을 깨달았으나 이미 늦었다.
- 데이터 분석도 실습없이 눈으로 보고 온 것들이 지금와서 발목을 잡는다
- 실습하고왔어도 어차피 같은 상황이었을 것 같긴한다
- 어차피 익숙해지는데는 시간이 걸린다
- 프로젝트가 시작되기 전에 눈으로 보는 수준으론 어렵고 손으로 정리하면서 이해의 수준을 끌어 올려두면 도움이 될 것
- 프로젝트를 진행하면서 필요한 task는 순서가 분명히 존재하니 이를 체화해야한다.
- 효율성 때문, 결측치를 먼저 보정한뒤에 그래프를 본다 등
- jupyter-notebook
- jupyter-notebook 의 결과에 대한 커밋을 strip 하는 방식으로 진행해야할지 확인이 필요하다
- diff 툴도 찾아본다
- 한 파일이 너무 길어지면 파일 관리가 어려워지는 것은 매 한가지인 것 같다
- 그러나 캐글등 모들 플랫폼에서 원파일로 정리가 되어있다.
- 정리만 한 파일로 한걸가?
- 그러나 캐글등 모들 플랫폼에서 원파일로 정리가 되어있다.
- 하이퍼파라메터 튜닝등 time-consuming 한 작업을 하기위해
py
파일이 편리할 것- tmux 와 같은 가상 세션으로 집전기세는 보존
- 아무래도 eda 나 피쳐 셀렉션등의 결과를 스탭단위로 저장하고 다음 파이프라인(파일)로 가는 형태로 설계하는게 좋을것이라 생각된다
- jupyter-notebook 의 결과에 대한 커밋을 strip 하는 방식으로 진행해야할지 확인이 필요하다
정리
작업 순서를 지켜야한다
- 특히 처음에는 어떤 것을 할지 떠오르지 않고 여러 검색결과나 다른 사람들의 작업을 물을 보다보면 점점 더 헷갈릴 수 있으니 순서를 체화해서 진행한다
데이터 전처리
데이터 확인후, 이상 데이터부터 처리후에 엔코딩 -> 변수생성, 선택으로 간다
- @todo 엔코딩이 왜 먼저인지는 추후 찾아보자
- EDA
- 결측치 제거
- 이상치 제거
- 카테고리 변수 엔코딩
- 연속형 변수 엔코딩
- 파생 변수 생성
- 변수 선택
모델 선택
이 부분 부터는 컴퓨터와 페어가 가능하다, 동시에 일을 처리하는 것이 중요
- 적합한 모델을 생성
- 하이퍼 파라메터 생성
학습 평가
- 데이터 셋 분할
- 모델 성능 측정
발표 피드백
- 김현우 강사
- test set 조건 부터 확인
- 기간등
- 타겟 기간이 명확하기 때문에, 타임시리즈 스플릿 사용이 명확하고 점수가 낮다면 다른 부분을 찾아봐야한다
- 기간등
- scale 은 트리모델에서는 관련이 없음
- catboost 가 카테고리 관련성이 큰 경우 힘을 발휘할 수 있다.
- 결측치는 트리계열에서는 드랍하지않아도 알아서 우선순위가 낮아진다는듯?
- 구별 -> 평균값을 기준으로 라벨링 한 팀들이 좀 있음
- feature importance, lightgbm 기준
- option 확인할 것
- 개인
- split
- 변수 중요도는 어떤 로직(옵션, 알고리즘) 사용에 따라 달라지니 함께 분석해야한다
- option 확인할 것
- 개발환경
- 로컬 실험 환경을 맞춰줘야한다
- valid set 결정을 함께해서 파일로 공유하며 좋다
- 가상환경 맞추기
- 로컬 실험 환경을 맞춰줘야한다
- 하이퍼파라메터 튜닝
n_estimator
는 10만등 크게 고정하고 early stopping 으로 조절하는게 일반적
- 앙상블
- 동일한 부스팅계열이라던가하는경우 성능이 떨어지긴한다
- 시계열데이터인지 아니면 좌표게임인지 판단이 다르다, 지형영향을 더 많이 받는다고도 볼 수 있기 때문
리뷰
- 목표
- tabluar 데이터를 기반으로 머신러닝 프로세스에 대한 경험
- 결측, 이상데이터 처리
- 모델 선택
- 데이터셋 분할, 이게 1번
- 이게 아마도 제일 중요하다
- valid, test 셋 점수 차이가 많이 나는 경우 상위랭커는 해당 대회 참여를 잘 안함
- 하이퍼파라메터 튜닝
- 모델별로 중요변수는 정해져있다
- lightgbm 인 경우
- learning rate
- max_depth, num_leaves, total_leaves
- over, under fitting 방지를 위한
- 이상거래
- 분양가와 실거래가가 혼재되어있는 경우
- 실거래가 찍혔으나 실제 거래는 되지 않은 경우
- tabluar 데이터를 기반으로 머신러닝 프로세스에 대한 경험
- 대회의 어려운점
- 부동산은 불편, 하지만 외부가치가 변한다
- 지하철역이 어느시점에 생김
- 표현되지 않는 데이터
- 오션뷰
- 팬트하우스
- 부동산은 불편, 하지만 외부가치가 변한다
- 강사의 직접 후기
- 결측치, 카테고리 빈값 채우기
- stage1 timeseries 검증, 크기랑 월수(3달)을 맞춰준다
- stage2 풀데이터로 다시 훈련
- 최근 3개월이 가장중요한데 해당 데이터가 valid 셋으로 빠진것을 다시 충전하기위해
- stage1 의 하이퍼파라메터를 그대로 사용
- 결측치 부터 다시 채우기 사이클
- stage2 풀데이터로 다시 훈련
- 문제의식
- validation, leader board rmse 차이가 크다
- 예측 실패 이유
- 학습에서 못 본 데이터
- 학습에 있으나 거래된지 오래된 경우
- 최근 거래를 기반으로 평균값 조치?
- 결측치
- 좌표가 결측치인 경우 오차가 심한지 비교
- public / private
- 15000 / 11000
- 시간없어서 실패한 시도
- 네이버 부동산, 강변, 층 정보등 크롤링, 시간 문제로 실패
- 서로다른 모델들, vision, text + nn
- image -> image encoder -> extract image features -> feature imbedding -> feature
- 너무 크면 PCA 진행
- 자연어 -> 텍스트 임베딩 -> 피쳐화
- nn, lightgbm 은 차이가 있으나 참고
- image -> image encoder -> extract image features -> feature imbedding -> feature
- 고가, 저가, 지역별 분할 후 앙상블
- Q&A
- 없어진 아파트 같은 경우면 제거한다
- 근처 직전거래가 가격을 많이 변영하기 때문에 잘 활용하며 좋을 것 같다 -> 오버피팅이 심해서 주의해야했다
- 슈로 레이블링이 왜 금지인가?
- 미래 데이터를 활용한 예측의 경우 데이터 리키지 문제로 인해서 금지되는 경우되는 경우가 있다
- 직전변화율을 추적하는게 의미있겠나?
- 가격자체보다 더 의미가 있을 것 같다
- 리더보드 점수가 안 오를 것 같을 때
- 금메달은 둘다해야한다는 듯, 팀이면 나눠서 진행해도 좋다, 멘탈 관리해라
- 디테일 조정하냐
- 파괴적인 방법을 시도하냐
- 금메달은 둘다해야한다는 듯, 팀이면 나눠서 진행해도 좋다, 멘탈 관리해라
결론
- 데이터 전처리부터 학습평가까지 진행하면서 좋고 나쁨을 테스트할 수 있도록 파이프라인을 구성해서 서버를 쉬지 않고 돌리도록 한다
- 데이터 분석을 위해서 jupyter 를 쓰되 중간중간 결과를 출력해서 여러 파일로 나눠서하는 것이 유연성이 높을 것 같다
- pycharm 기준으로 에러가 너무 심해서 중간중간에 의도치 않은 영역이 수정될 수 있고 변경 추적이 어렵기 때문