본문 바로가기
['20~'21] 대학원간 먼지

인생 첫 코딩테스트 후기 (개발ㄴㄴ 데싸ㅇㅇ)

by stherhj 2021. 5. 17.

나혼자 체감 시간 일주일 즈음 되었던 코테의 주말이 지나갔다. 감독관 쳐다보는 앞에서 구글링도 없이 몇 시간 동안 뚝딱 만들어내야하는 그런 셤은 아닐까 걱정되어 시험 언제 봐여? 하고 계속 여쭤보는데 주말이요 주말이요 하셨던 것은 정말 주말 내내본다는 뜻이었던 것~ 오히려 좋아,, 그치만 자료구조 문제 나올까봐 걱정은 계속 되었다ㅠ_ㅠ

셤은 증맬 다행히도 학교다닐 때 했던 플젝 비슷한 형태였다. 그리고 당연히 구글링도 자유롭고 또 예전 플젝에서 썼던 코드도 막 가져다 쓰고 좋았당~ 근데 이거 누가 대신 써주면 어쩌려고 일케 자유롭게 푸는건가 싶긴 하다.

데싸 직무 코테라면 일케 볼 수 밖에 없다는 생각도 들면서도 나에게는 신선한 형태의 셤이었다. 처음 문제를 받았을 때 자리에 호다닥 앉아 풀어보고자 했는데 그것도 한두시간 뿐..다시 핸드폰쟁이가 되어 딴짓도 많이하고 잠도 엄청 많이 잤다. 솔직히 잠도 못잘줄 알았는데 며칠간 이어지는 코테로 악몽꾼 것은 아빠뿐ㅋㅋ나는 오히려 아침에 좀 일찍 일어나서인지 잘잤다.

내가 과연 몇 시간이나 코드를 칠까 궁금해서 타이머를 켜놓고 했다. 총 스무시간 사십오분간 코드를 친 것..! 아니 순공시간 열몇시간 이런거 찍는 친구들은 도대체 어떻게 하는거임?

5/14(금)
19시~24시
(3시간 30분)
내 첫날 목표는 EDA를 끝내는 것이었는데..ㅎㅎ 결측치 처리하다가 시간이 많이 갔다. 변수들에 이름이 없고(Variable #) description도 따로 없어서 범주형/연속형을 나누기가 어려웠다. 생각해보면 그냥 drop na할 걸 그랬다. 문제에 you must predict ~~ for every row해서 바보같이 모든 열을 날리면 안돼!!했는데 생각해보니 train data set의 행은 상관없잖아..이걸 삼일차에 깨달았다. 채점하시는 분이 결측치 걍 날리지 왜 이렇게까지 for문을 만들어서 결측치를 채웠니? 하신다면..내가 바보여서다.

결측치 처리하고..뭐했지 그냥 EDA의 전반적인 아이디어를 짰다. 계속 고민했던게 범주형/연속형을 작위적으로 나누어도 되냐는 것이었다. 처음에는 그냥 bool, object 타입만 범주형으로보고 float, int 타입은 연속형으로 보려했는데 예를 들어 범주를 0,1,2로 표현한 변수가 연속형으로 구분되는 이슈가 생길 것 같았다. 그래서 랜덤하게 5정도의 기준을 세워 unique value가 그보다 적은 변수는 범주형으로 보내려고 했는데 bool, object의 카테고리 개수의 평균값을 그 기준으로 세우는 아이디어를 주셨다. 그래서 두 타입의 변수들을 전처리한 후에 그 threshold를 세워야겠다..와 같은 전반적인 흐름을 짜다 잤다. 첫날엔 양심 있어서 핸드폰 조금만 함.
5/15(토)
8시 30분~22시 30분
(9시간 15분)
전날 EDA 시작도 못하고 잠든 것이 마음에 걸려 눈이 일찍 떠졌다. 요근래에 11시 이전에 침대 밖으로 나온게 참 간만이다. 토요일에 알고리즘 적용까지 해보고 일요일에 hyperparameter 튜닝을 좀 하다가 정리해서 보내는 것이 목표였다. 그치만 난 결국 저녁 먹는 시간까지 EDA를 하고 앉았구..생각보다 카테고리 개수 평균 구하는 과정이 또 너무 오래 걸렸다ㅠ_ㅠ 날짜형 변수 등 특성에 따라서 수치화해줘야하는 것도 있었구 끝내고 더미화해서 붙였더니 feature의 개수가 row의 수보다 커진 것 같은..형태까지 와버렸다. 플젝 땐 카테고리 변수 이항변수화하는거 하나하나 만들었는데 당시에 동기언니가 써둔 더미화하여 기존 데이터 프레임에 붙이는 코드가 있어서 감사합니다 하고 썼다. 그리고 심지어 옵션으로 애초에 baseline을 제외할 수 있어서 편리했다.

저녁 먹기까지 변수 정리를 좀 하고 속도가 안나는 것 같아 장소를 바꾸고자 스터디 카페에 갔다. 밖에 비가 많이 왔는데 좀 걸으니 기분이 좋아졌다. 스터디 카페의 장점은..누울 수 없다는 것이지만 단점은 좀 시간이 빨리 흐른다는 것. 집에선 시간의 흐름이 느껴져셔 호다닥 해야지!하는데 거긴 외부의 환경에 변화가 없으니 한 시간이 흘렀는지..두 시간이 흘렀는지..모르겠음. 장점인가? 암튼 그렇게 40분 같은 네 시간동안 적용할 알고리즘들을 고르고 cross validation에 대해 찾아봤다. 예전부터 헷갈리던 딱 그걸 쓰라고 나올 것은 또 뭐람..아니 그 개념은 항상 똑같은데 왜 어떤 코드들은 cross validation을 하면서도 train test set split을 하는거지..? 아직도 모르겠음ㅠㅠ 모형에 train set으로 피팅하고 validation set으로 확인해봐야지! 했는데 k folds 해버리면 그게 딱 심플하게 안되자나..?!해서 아주 당황했다. 집에가서 어떻게할지는 정말 생각하고 자야지 했는데 치토스 먹으면서 머니게임 보고 리뷰 영상 좀 보다보니까 너무 일어나기 싫어서 걍 잤다.
5/16(일)
9시 30분~22시 30분
(8시간)
오늘 제출해야한다니 마음이 쪼끔 급했지만 동시에 뭔가 데이터는 이제 준비되었으니 80%는 끝났다는 생각에 마음이 좀 편했다. 어제 고민하던 cross validation으로 model fitting하는건 어찌저찌 넘어갔다. 대신 cross validation의 ROC 커브를 그리는 것이 너무 헷갈리고 어려웠다. 결국 포기했음..AUC를 성능 평가 기준치로 삼았으면서 ROC 커브는 없는 그런..ㅠ_ㅠ 그리고 앙상블 모형들이 역시 돌리는데 시간이 참 오래 걸려서 걍 포기하고 다 five folds로 한 뒤에 넘 오래 걸리는 것은 빼버렸다. 어차피 기준 모형은 XGBoost 였구 Logistic Regression(LR 못버려....)이랑 Decision Tree, Random Forest, ADABoost 일케 추가로 했던 것 같다. 원래 Gradient Boosting도 있고 했는데 첨부터 버리길 천만다행이다. 가져갔으면 튜닝할 때 눈물 좀 날 뻔했다.

XGBoost는 요번 코테의 수확이다! 난 당연히 요즘 데이터 세상의 트랜드 이런거 잘 모르는데 요것이 캐글이나 암튼 데싸의 세상에서 요즘 핫한거라고 했다. 그만큼 성능도 가장 좋았다. 원랜 parameter grid search를 해서 멋지게 optim값을 찾아내고 싶었는데 빠릿빠릿 잘 안돌아갔음ㅠ_ㅠ 그래서 결국 찌질찌질하게 숫자 올려보구..내려보구..했다..중간 중간에 하기 싫어서 많이 누워서 뒹굴뒹굴했담.

마지막에 이제 다 했다~ test set만 피팅된 모형에 넣어서 probability 넣은 csv파일 만들어야지 했는데 나 너무 바본게 test set 데이터는 전처리가 안되어 있었다. 그래서 호다닥 한 셀에 전처리 코드 때려박아서 한 번에 돌렸다. 개꿀이져?하고 또 하는데 바보같은게 더미변수들의 개수가 달라서 (당연한거..) 막 해당 변수의 값이 train set에선 7 8 9 뿐이었는데 test set에선 4 5 6 7 8일 수 있으니ㅠ_ㅠ 그럼 내가 모형이라도 뱉어낸다..그래서 다시 처음으로 돌아가서! **뿌듯파트** train set의 target variable은 0/1의 이항변수니 test set에 부재한 target variable을 2로 설정하고 두 데이터 셋을 합쳐서 같이 전처리 과정을 지난뒤 모형 적용 전에 df_test = df[df['target']==2].drop(columns=['target'],axis=1) ; df = df[df['target']!=2] 요렇게 쪼갰다. 후후 약간 멘탈 나갈 뻔했는데 잘했지!?

조건이 머신러닝이긴 했는데 시간 좀 남으니 걍 딥러닝 좀 해봤는데 AUC 0.5에서 안올라감ㅋㅋㅋ그 기저의 아무것도 이해하지 못했기 때문에 내가 뭘 잘못했는지도 못하고 걍 포기..feature가 넘 많았나? 원래 row보다 feature가 많을 때 딥러닝 해보는거 아니었음?? 모르겠다. 아니 전 플젝에선 딥러닝 했더니 믿을 수 없게 accuracy향상되던데 아 acc라서 그런가..? ㅂㅇㅅ 교수님 저를 혼내주세요ㅠ_ㅠ

대충 csv 파일 추출하고 맨 앞부터 꼼꼼히 한 번 보고 내야지 했는데 걍 귀찮아서 냈다. 그리고 좀 고생하고 나면 보상심리로 오히려 핸드폰을 와구와구하는 것 같다. 아닌가 원래 와구와구 하는데 걍 고생한 상황이었던 것인가..튼 고렇게 끝! 끝나고 나니 그거 알아? 머리가 진짜 물리적으로 가벼워지는 것 같은 그런 기분..

여기저기 오려붙인 코드라 내꺼라 할 수 있나 싶지만 조금 여유가 생기면 코드 정리해서 올려봐야겠다. 잊고 있던 기존 블로그의 목적..일기장이 아니었는데..일기 쓰고 싶으면 코드치고 주석처리해서 쓰라구..한 분의 github에서 본인 코테본거 정리해서 올린 코드를 봤는데 와..일케나 했는데 탈이라고??! 하고 놀랐기 때문에 아무 욕심이 없지만 그냥 코딩테스트라는 것도 보고.. 넘 좋은 경험이었다!

예전에 나랑 안놀아주고 열심히 코드치는 친구가 쪼끔 짜증나고 왜 퇴근하고도 계속 버그잡는다고 잠도 안자고 하나 이해가 안갔는데 쪼끔 알 것 같기도..그 개발자의 세상은 또 아주 다른 곳이지만서도..암튼 오랜만에 해서 걱정이 많았는데 아직 감도 쪼끔 남아있구 또 시간이 슉슉 흐르는걸 보며 역시 재밌다 계속 하고 싶다! 동시에 다른 길의 일을 시작하면 역시 손을 완전 놓게될테니 다시 시작하기 어렵겠구나. 첫 발을 잘 떼야하는군! 하는 생각도.. 암튼 어딜 가게되든 같은 일을하고 비슷한 고민을 하는 사람들과 함께 일하게 되는 것도 아주아주아주 기대된다. 너무 오래 혼자 서서 외로웠던 것..그치만 어느 회사든 어느 직무든..나는 그냥 좋은 사람들 만나서 일하고 싶다..빠르고 멋진 배에서 차가운 사람들 속에 서있는 것 보단..좀 느리더라도 작은 통통배에서 좋은 사람들과 가는 것을 선호..

졸업하고선 아 내가 나이먹고도 부모님 집에 사니까 이런게 불편하네 역시 독립을 해야하는군! 했는데 또 주말내리 엄마아빠의 지극정성의 보살핌으로 과제에만 집중할 수 있어서 넘 편하고 감사했다. 이거 쓰는데도 엄마가 밀크티 사다줌ㅠㅠ 근데 나는 타로밀크티는 공차 것만 먹는데(공차 타로밀크티는 가짜인가...? 다른 곳에서는 그 구황작물의 맛이 나는데 공차는 좀 연해서인지..뭔지..별로 그 작물 생각이 안남ㅋㅋ)..ㅠ_ㅠ그리고 펄도 안넣어왔어!!!모야! 엄마가 마신다고 새로 사오라고 했댜..그리고 토요일에 잇몸에서 피가 계속 났는데 아빠가 월욜에 다 끝내고 치과에 가라해서..오늘 치과에 다녀와야한다. 일단 밀크티를 마시러 갈거다!!

안뇽!

'['20~'21] 대학원간 먼지' 카테고리의 다른 글

비오는 금요일  (0) 2021.05.21
5월의 중순을 지나며  (0) 2021.05.18
녭 *10  (0) 2021.05.12
벌써 일주일  (0) 2021.05.07
ㅇㅃ 최종면접(인척하는) 후기  (0) 2021.05.05

댓글