부스트캠프 AI Tech 1기 [T1209 최보미] 94

Day17 학습정리 + 부스트캠프 수료 소감

3주 좀 넘는 기간동안 진행되었던 DKT 대회가 마무리되었다. OOF를 너무 늦게 시작해서 제대로 시도해보지 못 한 것이 아쉽지만 그래도 다른 앙상블 방법을 사용해 AUROC 0.83을 넘기고 public 리더보드 순위를 5등까지 올린 것에 만족한다. 부스트캠프 수료 소감 드디어 5개월간의 부스트캠프 과정이 모두 종료되었다. 그 동안 정말 많이 배우고 성장한 것이 스스로도 느껴진다. 부스트캠프 전에는 딥러닝 모델의 종류나 신경망 구조에 대해 그냥 막연하게만 알고 있었는데 이제는 딥러닝의 원리를 어느 정도 이해하고 모델 구조를 분석할 수 있게 되었다. 그 뿐만 아니라 매일 동료들과 피어세션을 하고 팀 프로젝트를 하면서 협업 능력과 소통 능력이 향상되었고 깃허브랑 노션 활용법도 익혔다. 앞으로 AI 분야로 ..

Day16 학습정리

LGBM에 OOF를 어떻게 적용할 수 있을지 알아보기 위해 PyCaret이 어떤 식으로 동작하는지 조사해봤다. 먼저 setup() 함수에서 설정한 비율에 따라 데이터가 train set과 valid set으로 나뉨 Cross Validation은 train set에만 적용됨 fold_strategy default값: stratified k-fold stratified 할 때 기준은 target value(answerCode)로 추정(따로 명시되어있지는 않음) 결과는 각 fold의 평균값 sklearn custom CV generator 형태로 fold_strategy 직접 지정할 수 있음 get_config() 함수 사용해서 각 fold에 해당하는 index 추출 가능 create_model(): tra..

Day15 학습정리

프로젝트 회고 각 시퀀스의 마지막 solTime은 계산이 불가능해서 중앙값으로 대체하려고 어제부터 계속 시도했는데 pandas를 잘 못해서 그런지 쉽지 않았다. 새로 추가한 feature인 user_time_mean이랑 user_time_sum를 계산할 때 한 칸 위로 shift하지 않고 그냉 계산했는데 오늘 피어세션에서 이야기해보니까 shift를 하는 것이 맞는 것 같아서 수정해야겠다. pycaret을 처음 써봐서 아직 사용법을 완벽히 익히지 못했는데 tensorboard나 wandb같은 곳에 실험 결과를 기록하는 방법이 있는지 찾아봐야겠다.

Day14 학습정리

프로젝트 회고 lgbm 모델의 input, output 형태를 출력해볼 것이다. 피어세션때 나왔던 문제별 풀이시간 평균을 feature로 추가해볼 것이다. 난이도와 관련있는 feature가 될 것 같다. 오늘 멘토링때 solTime 마지막 값을 어떻게 처리해야 할 지 이야기가 나왔는데 중앙값을 넣는 것이 가장 좋은 방법인 것 같다. solTime의 분포를 잘 살펴본 후 결정해야겠다. 지금 팀원들이 사용하는 feature들 이름이 다 다른데 통일해야 할 것 같다.

Day13 학습정리

프로젝트 회고 Feature importance가 높게 나왔던 total_used_time을 feature에 추가해봤더니 역대 최고 점수가 나왔다. LSTM에서 효과가 있었던 solTime을 추가해봤는데 점수가 떨어졌다. 베이스라인 코드로 실험했을 때에는 AUC가 0.826까지 나왔는데 제출했을 때에는 0.8도 안 되었다. 혹시 category형이 아니어서 그런가 싶어 구간별로 나눠서 category형으로 바꾼 다음 다시 실험해봐야겠다. LSTM이랑 LGBM이랑 모델의 특성이 완전히 달라서 그런지 효과가 있는 feature들도 많이 다르다. LSTM은 주로 continuous형이 효과가 있는 것 같고 LGBM은 주로 category형이 효과가 있는 것 같다.

Day12 학습정리

프로젝트 회고 집중력/추이를 반영하기 위해 user별로 이동평균을 새로운 feature로 추가해봤다. 실험 결과 Accuracy는 많이 올랐지만 AUC는 떨어졌다. feature들 간의 correlation을 계산해본 결과 주로 정답률 관련된 변수가 answerCode와 correlation이 높았다. 서일님의 lgbm 코드를 우리 프로젝트에 맞게 리팩토링 할 것이다.

Day11 학습정리

프로젝트 회고 사용자별 정답률과 문제별 정답률을 카테고리화해서 넣어봤는데 validation때는 auc가 높게 나왔지만 제출해봤더니 점수가 많이 떨어졌다. 정답률을 계산할 때 누적합으로 계산해서 행마다 값이 계속 조금씩 바뀌었었는데 오늘 피어세션때 이야기를 나눠보니까 그렇게 하면 난이도의 의미가 사라질 것 같다는 생각이 들었다. 그래서 전체 데이터로 한번에 계산해서 모든 행에 동일한 값을 넣는 방법을 적용해볼것이다. 계속 validation 점수랑 리더보드 점수가 차이가 많이 나는데 Cross Validation을 사용해 데이터 불균형 문제를 해결해야 할 것 같다. 피어세션때 나왔던 방법들로는 train:valid 비율 8:2로 바꾸기, 데이터 전부 train으로 사용하기, Nested CV 등이 있었다..

Day10 학습정리

프로젝트 회고 오늘은 그동안 추출한 feature들에 대해서 OLS, Feature Importance, VIF를 계산해봤다. 자료형이 숫자가 아닌 feature를 넣으면 에러가 나서 어쩔 수 없이 제외했는데 그 feature들은 나중에 추가적으로 실험해봐야겠다. Feature Importance 결과 문제별 평균 정답률이 가장 높았고 그 다음 elapsed time이 두 번째로 높았다. 그런데 마지막 문제에 대해서 elapsed time을 어떻게 적용해야 할지는 더 고민해봐야 할 것 같다.

Day9 학습정리

프로젝트 회고 지금까지 한 실험을 종합해본 결과 AUROC가 가장 높았던 건 category+number+average_user_correct였다. 단일 feature 중 가장 성능이 좋았던 건 average_tag_correct였고 가장 안 좋은 건 hour였다. 여러가지 실험을 해 봤는데 거의 다 점수가 떨어져서 내가 제대로 하고 있는게 맞는지 의문이 든다. 멘토링 오늘 멘토링 시간에는 대회 관련 유용한 정보들을 많이 얻었다. 여러 가지 cross validation 전략 중에서 시계열 데이터에 적합한 Nested cv를 소개해주셨다. 그리고 feature engineering 할 때 팁이 있는지 질문했는데 무작정 실험하지 말고 vif와 같은 방법을 사용해서 feature selection을 하라고 ..

Day8 학습정리

프로젝트 회고 오늘 피어세션에서 문제 번호 자료형이 int일 때보다 string일 때 점수가 더 높게 나왔다는 이야기를 듣고 csv파일에서 문제 번호가 string으로 고정되도록 앞에 알파벳 A를 추가했다. feature의 자료형은 모델 성능이랑 상관이 없을 것 같은데 왜 다르게 나오는지 의아하다. train data랑 test data에 대해 feature engineering을 따로 진행하면 train data 중에서 맞춘 문제 수와 같이 계속 누적되는 정보가 test data에 반영되지 않고 초기화된다. 그래서 train data의 정보가 test data에서 계속 이어지게 하기 위해 train이랑 test 데이터프레임을 합쳐서 한 번에 계산한 후 다시 나누는 방식을 사용해봤다.