DKT 강의 3~4강 학습

Sequential Data 의 차이점

본 대회에서는 시간에 따라서 문제를 풀기 때문에 시간, 순서의 요소가 있다.

+) 시간이 지나면서 성장하는 애인가, 물로켓인가 검증

 

집계(Aggregation), Feature Engineering

→ 유저의 다양한 정보를 하나로 합치는 과정에서 데이터 손실이 일어난다.

 

transaction 그래도 사용 + Feature Engineering

타임스탬프를 요일로 나눈다거나, 특정 시간에 집중을 잘한다거나

+) 밥 먹고나면 졸려서 문제를 잘 못푼다거나 , 특정 시간에서 잘하는지 확인하고 싶음

 

  1. Make ground baseline with no fe
  2. Make a small FE and see I you can understand data you have
  3. Find good CV strategy(Custom Validation)
  4. Feature selection
  5. Make deeper FE
  6. Tune Model (crude tuning)
  7. Try other Models (never forget about NN)
  8. Try Blending/Stackin/Ensembling
  9. Final tuning

Konstantin Yakovlev, How all works together https://www.kaggle.com/c/ieee-fraud-detection/discussion/107697

+) 3. custom validation 과 리더보드가 같이 올라가고 내려가는 지 확인

4.feature 하나씩 실험해 보면서 선택한다.

8.할거없으면 Seed 앙상블

대회에서 어떻게 하면 같이 일을 할 수 있는지 알려주는 리스트이다.

이번 대회에서 참고하면 좋을 듯 하여 블로그에 포스팅 하고자 한다.

 

Transformer가 Sequence에 유리한 이유

1)Sequence 안에서 모든 token이 다른 token을 참조한다.

2)Positional Embedding을 추가하여, Sequence 내에서 위치 정보까지 반영할 수 있다.

 

Feature Engineering

Timestamp 에서  feature를 추출할 수 있는 변수들을 모두 추출

  • Timestamp_weekday
 
  • Timestamp_dayofyear
  • Timestamp_week
 
  • solve_time
    • 아래와 같이 다음 시간과의 차를 통해서 시간을 구했지만 다음날 문제를 풀면서 터무늬없는 값이 계산되는 경우가 있다. -> 600초 이상은 0으로 바꾸어준다.

 

이렇게 문제 푸는 시간이나 요일 시간 등을 feature로 만들었지만 DKT, light gcn 에서 어떻게 사용하게 만들지는 아직 확인하지 못했다. 

따라서 이를 해결하기 위해서 baseline 분석과 feature 엔지니어링을 같이 확인하여야 할 것 같다.

 

알고리즘 문제 풀이

오늘은 머리가 복잡해서 그냥 solved.ac 에서 제공되는 클래스 1 단계 bronze 난이도의 문제들을 빠르게 풀면서 스트레스를 풀었다. 1시간 정도 하고 난 후 확인해보니 14 문제 정도 풀었다.

 

+) 추가로 한 일

aistage 팀 마크 세팅

git project, issue 사용해서 팀원들간에 협업하기

 

오늘의 회고

오늘은 아무래도 강의에 완전히 집중을 하지 못하고 이것저것하다가 하루를 보냈던 것 같다. 

그러다보니 먼가 마음이 허해서 되도않는 쉬운 알고리즘 문제들을 풀면서 스트레스를 풀려고 했지만... 그냥 너무 쉬운 문

제들이라 단순 코딩 작업일 뿐이었지만... 하루하루 포기하지 않고 해나가고 있다는 것에 만족하자.

오늘은 '아무거나' 채널에서 처음으로 스페셜 피어세션을 하게 되었는데 다행히 CV 캠퍼분이 참석해주셔서 정말 고마웠다. 앞으로도 계속해서 서로에게 좋은 피드백을 줄 수 있도록 RecSys 분야를 제대로 학습해야겠다.

내일은 우선 강의를 끝까지 듣고 베이스라인을 분석해서 dkt, lightgcn 두 모델 모두 feature를 추가로 넣었을 때 효과가 있는지 또한 코드로 적용하는 것도 확인해보고자 한다. 

내일 할 일을 오늘 조금 정리하면서 하루를 마치면 내일은 조금 더 알차게 일을 할 수 있을 것 같아서 괜히 기대가 된다.

내일 우.팀.소 발표도 예정되어 있는데 점심을 먹으면서 연습을 해야겠다.

또한 LG AI GROUND 대획도 팀을 결정하게 되어서 하루에 1~2시간 씩이라도 집중해서 베이스라인 분석과 EDA를 해야겠다. 사실상 12월 2일까지 2주 반 정도 남은 상황이기 때문에 주말과 7시 이후에 집중적으로 할수 있는 모든 시도를 해봐야겠다.

 

 

 

DKT 대회 데이터 EDA

  • userID 사용자의 고유번호입니다. 총 7,442명의 고유 사용자가 있으며, train/test셋은 이 userID를 기준으로 90/10의 비율로 나누어졌습니다.
  • assessmentItemID 문항의 고유번호입니다. 총 9,454개의 고유 문항이 있습니다. 이 일련 번호에 대한 규칙은 DKT 2강 EDA에서 다루었으니 강의 들어보시면 좋을 것 같습니다.
  • testId 시험지의 고유번호입니다. 문항과 시험지의 관계는 아래 그림을 참고하여 이해하시면 됩니다. 총 1,537개의 고유한 시험지가 있습니다.
  • answerCode 사용자가 해당 문항을 맞췄는지 여부에 대한 이진 데이터이며 0은 사용자가 해당 문항을 틀린 것, 1은 사용자가 해당 문항을 맞춘 것입니다.
  • Timestamp 사용자가 해당문항을 풀기 시작한 시점의 데이터입니다.
  • KnowledgeTag 문항 당 하나씩 배정되는 태그로, 일종의 중분류 역할을 합니다. 태그 자체의 정보는 비식별화 되어있지만, 문항을 군집화하는데 사용할 수 있습니다. 912개의 고유 태그가 존재합니다.

+) eda 하고자하는 시도

  • 문제 번호가 의미를 가지고 있는지
    • why? 수능에서는 문제 번호가 어느 정도 정답률과 연관이 되어있기 때문에 이 데이터도 그러한지 확인해보고자한다.
  • 문제별 푼 시간을 data로 만들었을 때
    • 카테고리 변수로 바꾸어서
    • numeric으로 사용

DKT 강의 1 ~ 2강 학습

AUC , Accuracy = 평가지표

위의 지표들의 단점은 결국 confusion matrix를 만들어야한다.

이는 0~1 사이의 값을 0과1로 만들어주기 위해서는 tresh hold가 필요하다.

 

AUC는 Imbalanced data 에서 비교적 높게 측정되는 경향이 있다.

imbalance data 여도 test data를 동일하게 유지한다는 가정하에 binary classification 모델의 상대적인 성능 비교 가능

 

알고리즘 문제 풀이

프로그래머스 lv2 이진 변환 

from collections import Counter
def solution(s):
    answer = []
    i = 0
    j = 0
    while s != "1":
        i +=1
        c = Counter(s)
        j += c["0"]
        s = s.replace("0","")
        s = bin(len(s))[2:]
      
    return [i,j]

Counter 와 replace 함수를 사용해서 생각보다 쉽게 풀었다.

하지만 2진화 시키는 내장함수가 없었다면 2진화 함수부터 만들었어야 했기때문에 시간이 배로 걸렸을 것 같다.

 

+) 추가로 한 일

aistage 서버 세팅 (VS code 원격 ssh 세팅)

RECCAR 팀 그라운드 룰, 노션 페이지 등 설정

 

오늘의 회고

오늘부터 부스트캠프 레벨2가 시작되면서 새로운 팀원들과 새로운 멘토님과 새출발을 하게되었다.

이하경 멘토님과도 멘토링을 진행했다. 이 과정에 멘토님이 META에서 근무를 하시며 지난주에 실리콘밸리에서 불었던 해고의 칼바람에 대한 소식도 들을 수 있었다. 슈카월드에서나 듣던 실리콘 밸리의 삶을 멘토님을 통해서 들으니 너무 신선했다.  +) 멘토님의 영어발음을 들을 때 마다 매번 감탄을 하게되었다. 

오늘 피어세션에서는 우리가 함께 성장하기위해 필요한 우리들만의 프로세스를 가다듬었다.

각자 팀원마다 LV1에서 했던 각 팀의 그라운드 룰, 학습정리, GIT 등의 방법을 공유하면서 어떻게하면 최대의 효율을 낼 수 있을지에대한 고민을 했다. 이 과정이 무의미하게 들릴 수는 있지만 협업을 위해서는 꼭 필요한 과정이라고 생각한다.

부스트캠프의 과정에 참여하면서 매번 느끼지만 이렇게까지 좋은 사람들을 만나게되는 경우가 있을까 싶을 정도로 내게 너무나 값진 시간이 되었다. 그들 사이에서 항상 좋은 피드백을 받고있는 입장으로서 나도 다른 캠퍼분들에게 긍정적인 피드백을 줄 수 있는 사람이 되고자 열심히 해야겠다.

강의 복습 내용

이번주에 Book Rating 대회가 끝이나고 AI 서비스에대한 강의를 수강하였다.

그 과정에서 streamlit, docker, Voila를 사용해서 웹 프론트앤드를 만들었다.

docker를 사용하는 과정에서는 윈도우와 각종 오류가 있어서 아래에 정리를 해두었다.

개인적으로 anaconda를 사용하여 가상환경을 새롭게 생성하여 python과 라이브러리 버전관리를 하고자한다.

또한 윈도우에서 개발을 진행하는 것도 좋지만, ML/DL 개발을 할 시에는 Linux, Mac OS 에서 하는 개발이 조금은 더 오류가 적을 것 같아서 주말을 기회로 우분투와 윈도우 둘 다 데스크탑에서 사용할 수 있도록 준비를 해야겠다.

 

과제 수행 과정 / 결과물 정리

https://it-bejita.tistory.com/17

 

[window 10 Home] docker 설치 에러 Hardware assisted virtualization and data execution protection must be enabled in the BIOS

도커를 실험하기위해서 window용 docker installer를 설치하였으나 반가운^^ 에러를 만났다. Hardware assisted virtualization and data execution protection must be enabled in the BIOS. 해결책을 구글링 해보았다. 원인 윈도

it-bejita.tistory.com

 

8주차 회고

Keep (잘한점)

  • 스페셜 미션 제출 완료
  • 오프라인으로 마지막 모임
  • 유플러스 AI Ground 대회 시작
  • 매일 알고리즘 문제 풀이

Problem(실수)

  • 중간중간 집중이 흐트러지는 시간이 많았던 한 주였다.

Try (계획)

  • 캠퍼분들과 계속해서 공유하기
  • CV, NLP 섹션 대회 솔루션 영상과 Git 을 참고하여 인사이트 정리
  • 새로 만나는 팀원들과 일요일날 모임

학습 회고

우당탕탕 시간이 지나가면서 8주의 시간이 지나갔다.

lv1이 끝이나고 lv2가 시작되며 부스트캠프의 3분의 1이 종료되었다.

새로운 팀원들과 멘토님을 만나며 다음 주에는 새로운 분위기로 재출발을 하게 되는 것은 설렘이 있다.

기존의 팀원들과 멘토님과의 마무리는 미래에 좋은 인연으로 만나게 되기를 바라며 아쉬움을 마음 한켠에 간직해야한다. 

서로가 좋은 인연이 되기 위해서는 지금 이 순간에 내가 열심히 해야 된다는 것이 분명하다.

그렇기에 매번 만나는 오류나 task의 어려움은 있을 수 있지만 모든 방법의 해결책은 간단해서 좋다.

그저 하루하루 성장하기위해 내가 열심히하는 것이기에 너무나도 좋다.

 

다음 주에 있을 팀과의 시작을 생각하면서 NLP,CV 세션에 계신 캠퍼분들은 어떻게 하는지 스페셜 피어세션에서 만나게 되었다. 그렇게 시야가 넓어지면서 여러 좋은 점들을 배울 수 있었다.

 

+) 지구코딩실의 기록인데 보면서 참 배울점이 많은 팀이라는 것을 알았다. 

또한 CV, NLP 대회에서의 마스터 클래스 영상들을 보면서 추천시스템에서는 multi modal 구조를 사용하게 되기 때문에 다른 트랙의 이슈와 솔루션들을 보면서 개인 회고를 하는 것도 좋은 점인 것 같다.

 

+) 스페셜 피어세션에서 만난 분들과 '아무거나' 게시판을 만들었다.  다른 트랙분들과 우리들만의 스페셜 피어세션을 하면서 아이디어를 얻으면 좋을 것 같다.

 

도커를 실험하기위해서 window용 docker installer를 설치하였으나

 

반가운^^ 에러를 만났다.

 

 

 

Hardware assisted virtualization and data execution protection must be enabled in the BIOS. 

 

해결책을 구글링 해보았다.


원인

윈도우10의 라이센스는 Home, Pro가 있다.

하지만 Docker를 사용하기 위해서는 10 Pro부터 사용이 가능한 Hyper-V 가 있어야 한다.

아래에는 home과 pro 라이센스의 기능 차이표이다.

 

따라서 stack over flow나 다른 구글링 결과들을 확인했을 시 

window 10 home에서는 가상환경을 돌리기 힘들다.

 

따라서 window 10 home 을 쓰고 있는 사람에게 해결책

 

1. 웹에서 판매하고 있는 윈도우10 pro 제품키를 구매하여 업그레이드

(본인은 티몬에서 판매 중인 제품키를 4000원에 구매....)

 

2. Windows Home 버전은 Hyper-V를 지원하지 않기 때문에 WSL 2(Windows Subsystem for Linux 2)를 설치

https://kk-7790.tistory.com/125

 

Windows 10 Home에서 Docker 설치하기

Windows 10 Home에서 Docker를 설치해 보겠습니다. 1. 도커 사용 가능 여부 확인 먼저 도커는 기존 OS에서 다른 OS를 실행할 수 있습니다. 그래서 윈도우에선 Hyper-V를 지원해 줘야 도커를 사용할 수 있습

kk-7790.tistory.com

 

3.  윈도우 10 home과 ubuntu를 듀얼 부팅 세팅해서 개발시에는 리눅스 우분투에서 개발을 하는 것.

-> 아무래도 미루고 미뤄왔던 리눅스 세팅을 실행해야 될 때가 온 것 같다. 주말에 실시할 예정

 

듀얼 부팅 방법은 아래를 참고

https://wooriel.tistory.com/75

 

Windows에서 Ubuntu 듀얼 부팅하기 (dual/multi booting)

참고한 블로그 1, 블로그 2 (멀티부팅은 아님) Windows만 깔린 상태에서 ubuntu 20.04 버전을 설치하는 방법을 적어보려고 한다. [파티션 분할] 1. 왼쪽 하단의 윈도우 아이콘에서 우클릭 -> 실행 클릭 2.

wooriel.tistory.com


 

윈도우 10 Pro 로 업그레이드를 하였지만 여전히 문제는 발생하였다.

 

window power shell을 관리자 권한으로 실행하여 아래의 커맨드들을 입력하였다.

 

1. Microsoft-Hyper-V 설치 후 재부팅 하였지만 실패

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

2. 설정을 켜 보았지만 실패

bcdedit /set hypervisorlaunchtype auto

3. 재부팅하여 BIOS 에서  Intel Virtual Technology disable -> enable로 수정 시도

1. 재부팅하여 F2눌러서 BIOS 세팅 들어가기

2. [Advanced] - [CPU Configuration] 들어감

3.  [SVM Mode] as [Enabled] 로 수정하였다.

 

1.  Press 'Del' or 'F2' in the keyboard after power on, then press 'F7' to enter into Advanced Mode(ROG series motherboard can directly enter into Advanced Mode, no need to press 'F7'), as below:

2.  Click [Advanced] - [CPU Configuration], as below:

3.  Please set [SVM Mode] as [Enabled], as below:

출처 https://www.asus.com/support/FAQ/1038245/

 

[Motherboard] How to enable AMD virtualization in the BIOS | Official Support | ASUS Global

 

www.asus.com

 

짠~! 3번의 시도로 버그를 해결하였다. 

 

하지만 이번에는 새로운 버그가 나를 반겨주었다.

WSL 2 installation is incomplete. 버그가 나를 반겨주었다.

이럴 줄 알았느면 그냥 window 10 home에서 WSL 2 방법으로 우분투를 설치할 걸 그랬다.

 

에러에 첨부된 링크를 따라서 WLS2 Linux 커널을 업데이트하였다.

 

x64 머신용 WLS2 Linux 커널 업데이트 패키지 다운로드 및 설치

wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

 

그 후 컴퓨터 재부팅 하였더니 다행히도 docker desktop 이 실행되었다.(눈물...)

 

10.24(월) ~ 11.3(목)

 

부캠 6, 7주차 기간 동안 부스트캠프 첫 대회가 끝이났다.

사실상 2주간 열심히 했다고는 하지만 아쉬운 성적으로 마무리를 하였다.

열심히 한다고는 했지만 그 동안 관리하지 못했던 블로그에 정리하고자 한다.

 

사실상 ai 첫 대회를 실시하면서 팀원들과 협업과 분업에대해서 많은 고민과 실험을 하였다.

그 과정에서 분업과 협업을 왁벽히 구분할 수 는 없지만, 대회라는 틀 안에서는 정해진 기간안에서 성과를 목표로 함에 있어서 분업과 협업의 균형을 이루는 법을 어느 정도 알게 된 것 같다. 

모든 것을 함께 진행 할 수는 없지만 팀원들이 무슨 실험을 하고 있는지 '공유'하는 것이 협업과 분업을 나누는 중요한 요소라는 점을 알게되었다.

Keep 

  • 팀원들과 실험과 아이디어 등 적극적으로 공유하며 함께 성장하기
  • 다양한 모델들을 탐색하고 각각의 모델들이 실험하는 데이터에 어떠한 성능을 내는지 확인하기
  • 데이터와 테스트 데이터를 고민하며 vaildation에대한 고민과 cold start 문제를 어떻게 해결할지 고민하는 태도
  • Github을 사용하여 협업하기
  • wandb 를 사용하여 data logging , wandb sweep을 사용하여 hyperparameter 튜닝을 진행한 점. 

Problem

  • 부캠에서 많은 내용을 교육받으며 모델들을 배우고 알게되면서 모델에 집중하게 된 점
    • 모델이 중요하다고 생각하여 multi modal model 인 Tab net 구조의 모델을 실험하였지만 프로그래밍 기술의 부족으로 이번 대회에서 실험하지 못하였다. 결국 시간은 시간대로 소비하였지만, 결과를 확인할 수 조차 없는 최악의 경우였다.
  • EDA(Exploratory Data Analysis, 탐색적 데이터 분석)을 소홀히 한 점
    • 모델을 돌려서 나오는 결과에만 집중하면서 기존 데이터에 있던 결측치를 채우는 것으로 EDA를 그쳤던 것 같다.
    • data feature들의 상관관계와 중요성을 확인하는 과정이 부족했다.
  • 위의 EDA가 부족하다보니 실험할 모델들을 선정함에 있어서도 머리 속에 물음표를 가진채로 실험을 한 점이다.
    • 베이스라인에 제공된 모델을 제외하고 추가 모델을 실험함에 있어서 왜 해당 모델을 추가해서 실험해야 되는지에대한 분석이나 생각보다는 후에 앙상블에 사용할 재료를 모은다는 안일함 생각으로 이것저것 시도한 점이 아쉬움으로 남는다.
  • 시작한 작업을 어떠한 형식으로든 끝을 냈어야 하는데 나의 고질적인 마무리를 잘 하지 못하는 것이 아쉬웠다.
    • wandb를 사용해서 logging 하는 작업과  sweep을 써서 모델 고도화를 하는 작업에서 사용하기위한 정도로 학습을 하였지만, 바로 사용할 수 있도록 어느정도 실험을 마무리하는 것을 다음 대회에는 고쳐야할 나의 습관이다.
    • 각각의 실험들에대해서 마감시간을 정해두고 하지않다보니깐 조금만 더, 조금만 더 하면 될 것 같은데 라는 희망고문 속에서 시간이 너무나 허비되었다. 실험을 실패하였으면 실패한대로 팀원들에게 공유하면서 새로운 해결방법을 모색하거나 실험을 마무리하는 것도 좋은 방법이 될 것 같다.

Try

  • Github을 적극적으로 활용하여 master와 각각의 실험들을 brunch로 만들어 실험 완료 후 merge 혹은 삭제하는 방법으로 개선하기
  • 하루하루 최선을 다하는 것이 중요하다. 하지만 하루 밤을 새는 것 보다 매일매일 꾸준히 작업을 초반부터 제발 꾸준히 하자. 기간이 마지막이 다가와서야 열심히하는 습관을 고치자.
  • 추천 대회를 마치며 솔루션을 들으며 하고 싶은 것들이 많이 생겼다. 이는 다음 대회에 시도해 보고자 한다.
    • EDA, 데이터 전처리를 버전관리를 하여 모델의 성능을 체크하는 것을 시도해보고자 한다. 이번대회에는 버전관리에대한 생각을 잘 하지 못하여 각각의 데이터를 버전별로 실험하지 못한 점이 아쉽다.
    • 카테고리 데이터에 강한 Cat boost, XGBoost, GBM을 활용하여 앙상블한 모델들이 좋은 성능을 나타내었다. 특히 Cat boost와 FM,FFM 계열을 앙상블한 모델이 SoTA에 가까운 성능을 나타내었는데 이 방법론에 대해서 다음대회에 적용해보고자 한다.\

 

Window

1. AI STAGE에서 서버 만들기

2. 서버가 만들어지면서 자동적으로 key 파일이 다운로드 된다.

3. key 파일을 C:\Users\'User_name' 위치로 옮긴다. 

4. cmd 창을 열어서 ssh 연결을 진행한다.


1. AI STAGE에서 서버 만들기

 

AI STAGE 서버만들기'

 

서버 생성하기 버튼을 클릭한 후 시간이 지나면 서버가 생성이 된다. 

 

2. 서버가 만들어지면서 자동적으로 key 파일이 다운로드 된다.

 

3. key 파일을 C:\Users\'User_name' 위치로 옮긴다. 

why? cmd창을 열었을 시 주소로 옮겨서 바로 ssh 연결을 편하게 하기 위해서

 

4. cmd 창을 열어서 ssh 연결을 진행한다.

서버에서 ssh -i ./key root@ ~ 부분을 복사한다.

key를 옮긴 주소에서 ssh 복사한 내용을 입력하면 터미널을 통해서 

AI STAGE 서버와 터미널이 연결이 된다.

 

 


 

하지만 개인적으로는 AI STAGE에서 지원해주는 노트북 연결을 사용하는 것이 더 편한 것 같다.

이 파란색 버튼을 누르면 연결된다.

 

여기서 터미널이나 콘솔 등 제공되는 방식들을 사용하는 것이 더 편할 것 같다.

+ Recent posts