제로타이 2022. 11. 2. 00:21

데일리 스크럼

진행상황 공유.

김: 범주 다 묶음.
용: 어제 메모리 문제. 데이터 전처리에서 일어남. 텍스트 데이터 자체로만 다룰 수 있는 것을 찾음. 제목 벡터를 추가시킬 수 있을 듯. 제대로 안 된다면 이슈 공유를 하겠음. 이거 해결되면 이미지도 다뤄보고 싶음. 메모리 문제도 해결해야 할 과제. 
고: catboost 모델 돌림. 기존의 모델들과 인자를 다르게 줘야 한다. 단일 모델로는 가장 좋음. 결측치는 FM관련에서 도움이 될 것. 다른 쪽에서는 아예 쓰이질 않음. 학습셋에 추가적인 정보를 넣어서 해보는 게 좋겠다. 결측 메꾼 것들을 넣어서 돌려보기.
희: 모델과 전처리 코드를 뜯어보고 조금 이해하는 시간을 가짐. 어제 하려 했던 요청 사항은 어려워서 보류.
민: 언어 결측치 메꾸기. 범주 결측치 메꾸는 방법 고민 중. 

이미지 결측치. 이제는 모델을 보완하거나 모델에 들어갈 재료들을 가공하는데에 더 집중할 필요가 있다. 

공부

열심히 전처리를 했는데 막상 결과가 조금 좋지 않게 나오고 있는 것 같기도 하다.

복기님의 언어 결측 처리와 내 범주화 + 범주 결측 처리가 들어간 데이터를 학습시킨 결과. 이전에는 2.156정도까지 오차가 내려갔는데 오히려 결과가 더 안 좋게 나오고 있는 것 같다. 기껏 해낸 결측치 처리가 그다지 의미가 없었다는 뜻일까? 범주 결측치는 사실 굉장히 위험한 방식으로 메꿨기에 큰 의미는 없다고 생각하지만, 그것 때문인걸까, 결과가 더 좋지 않으니 여태 들인 시간이 조금 무의미했다는 생각도 든다. 물론 하면서 조금씩 시각화와 판다스를 다루는데 익숙해졌기 때문에 성과로서는 무의미할지 몰라도 나쁜 시도는 아니었다고 생각하련다.
그것보다는, 어쩌면 내가 범주를 잘못 묶은 게 있지는 않을까 생각이 든다. 범주의 갯수를 줄이겠답시고 원래는 책 5개 미만의 범주를 others로 퉁치던 것을 내 마음대로 10개 미만을 퉁쳐버렸는데, 이렇게 하니 전체 범주에서 others가 5위권에 들어갔고, 또 내 마음대로 국가들이 써져 있는 범주들을 country로 퉁쳤다. 미국은 자료가 많아 따로 남겼는데, 오히려 이렇게 국가를 묶는 것도 좋은 선택이 아니었을 수도 있겠다는 생각이 든다. 또한 hobby로 합친 gardening과 sports, craft는 정말 합치는 게 옳았을까? 게임이나 여행도 충분히 취미의 영역인데 저 세 가지만 하나의 범주로 분류되는 근거가 온당하지 않은 것 같다. 여태 해둔 게 있는지라 이것들을 손보는 것은 어렵지 않을 것 같다. 다만 그렇게 해도 결과가 잘 나올지 모르는 것 때문에 더 시간을 쓰는 게 주저된다.

이외에, 무엇을 더 하는 게 좋을까? 현재 팀은 FMFM과 catboost를 알아보고, 텍스트 벡터 작업을 하고, 범주 결측치를 모델로 처리하고자 하는 일을 하고 있는데, 사실 그 일이 어떻게 이뤄지고 있는지 정확하게 알 수가 없다. 당장 내가 알고 있는 것보다 더 들어가는 내용이라 쉽게 이해하기가 쉽지 않은 것 같다.
일단 더 정보를 얻고자 스페셜 미션의 내용들을 훑어봤다. 여태까지는 EDA에만 초점을 두는지라 스페셜 미션 중에서도 1에서만 머물러 있었으니 이제는 다른 문서도 참고할 필요가 있다고 생각했다.

미션 3의 내용.

희소행렬을 만드는 방법이 나와있고, 추가적으로 그것을 통해 학습셋과 평가셋을 만드는 방법까지도 나와있다. 이것을 보니 내가 그토록 손보고 싶어했던 콜드스타트를 손대는 것에 도움이 될 것 같다는 생각이 들었다. 음. 너무 늦게 이 문서를 보기 시작한 것 같다. 적당히 문제 의식을 챙긴 후에 조금 더 적극적으로 다른 자료들을 찾아봤어야 했는데, 아쉬운 게 많은 프로젝트구만!
그렇다해도 뭐가 달라질 것은 없다. 이제 막 처음으로 경험해보는 프로젝트, 그냥 무엇이든 다 해보자고. 

피어세션

민: 결과물. 딥러닝으로 범주 예측하는 모델을 짰음. 년도, 저자, isbn, 언어를 넣어서 돌릴 예정. 
건: 전처리한 것을 직접 돌려보았으나 결과가 좋지 않음. 스페셜 미션들 열심히 보는 중.
용: 문제가 해결되지 않음. 그것을 깃에 올릴 예정. CNN을 LSTM으로 바꿔서 해보고 싶어서 해보는 중. 근데 문제가 있기는 하다. 이전 기수들을 보니 부스트를 쓰는 게 가장 좋다. 
고: 데이터 단계에서 책 데이터를 넣어서 처리해봤더니 확실히 결과가 더 좋아졌다. 나이 결측치 메꾸고 지역은 나라만 남겨서 달라. 전부 다 라벨 인코딩을 통해 데이터를 넣는다. 그래서 아직 요약은 써보지 않았음. 

이미지 결측치 접근하듯이 접근해보자. 
isbn은 다르나 이름이 같은 책은 있다. 

오피스 아워

추천시스템에서는 온라인 서빙이 중요하기에, 온라인에서 테스트하는 방법도 중요하다.

흔히 온라인 테스트는 이렇다. 

오프라인은 로그에 기반해서 과거 데이터 기준으로 결과를 꺼내 좋은 모델을 선택한다. 반면 온라인은 두 모델을 써서 추천을 진행한다. 그 후 결과를 비교해서 선택을 한다.
오프라인은 성능이 실제 개선으로 연결되지 않는 경우가 많다. 그래서 온라인에서 확인하는 게 가장 좋은 것. 
사실 모델 학습 방식이 다 그렇다. 애초에 학습 데이터만을 사용하니 학습데이터에만 편향되는 경우가 생긴다. 괜히 일반화에 과심을 가지는 게 아니다. 추천시스템에서는 이런 문제가 더 크다. 변화가 많기 때문.

인과성을 어찌 증명하는가? 완전히 같은 조건에서 하나만 다르게 하여 변화를 관찰하는 것. 그렇게 증명하는 것이 과학적 방법이다. 
그러나 사회실험에서는 그게 불가능하다. 같은 두 대상을 둘 수가 없기 때문. 기껏해야 유사할 뿐. 그래서 명확하게 어떤 원인으로부터 결과가 달라지는 것인지 확인하기가 힘들다. 
이를 해결하기 위해 RCT 접근법이 도입됐다.

추천시스템에서는 a/b테스트.

그럼 여기에서 볼 것은? 랜덤화를 뭘로 할 것인지. 짝수홀수? 매번 랜덤으로?
보통은 유저id를 통해 미리 그룹화를 시킨다.
지표는 두가지. 성공 지표는 우리의 실험의 성공을 정의하는 지표

무조건 넘어가야하는 지표.

... 계속 프로젝트 생각이 나서 코드를 짜다가 집중을 별로 하지 못 했다. 대회 끝나고 이후에 VOD로 보는 것이 좋겠다.

이후 공부

제대로 유저 데이터를 전처리 해달라는 요청이 들어와, 이전 방식대로 전처리했다. 다만 국가에 대해서는 내가 일일히 결측치를 메꿔주었다. 대충 200개의 결측치와 200개의 고유값이 존재했고, 그 정도는 충분히 할 수 있겠다 생각해서 했다. 확실히 할 만은 했는데, 어제에 비해서 할만 했던 것이지 시간을 적게 먹는 작업은 아니었던 듯. 그래도 최소한 이제 나라에 대한 결측치는 다시 손 볼 필요도 없을 정도로 제대로 해결했다고 자신할 수 있다. 도시를 일일히 검색해가면서 결측치를 메꿨다..

나이에 대한 결측치는 맨 처음에 메꾼 방식 그대로 다시 메꿔줬다.

이게 age 결측치 채우기 이전.

age 결측치 채우고 난 이후. 그러나 이후로 현욱 님이 모델을 돌려봤는데 오히려 지표가 낮아졌다는 말씀을 해주셨다.

그래서 현재 나이 분포를 기준으로 랜덤하게 값을 부여하는 게 엄청난 문제를 야기하는 건가 싶어 각 연령대 별로 평점을 어떻게 주고 있는지 확인해봤다. 전반적으로 결국 거기서 거기인 느낌인데, 이상치가 크게 발생했던 걸까?

다음은 학습셋에서 나이가 결측된 사람들이 주는 평점의 모습이다. 공교롭게도 가장 분포가 비슷해보이는 팀은, 70대 이상..! 사실 나이가 결측되는 이유가 뭘까, 어르신들이 제대로 표기를 안 해서 생기는...?!
너무 비약적인 상상이다. 그래도 혹시 모르니 한번은 전부 다 70대로 몰아넣어서 해보는 것도 재밌겠다. 

회고 및 다짐

어제부터인가 계속 아침에 몸이 너무 힘들다. 아무래도 기상 시간은 앞당겨놓고 자는 시간도 덩달아 당기지 못해 결국 수면 부족이 생기고 있는 것 같은데, 하루 종일 계속 집중력이 깨져서 너무 힘들었다. 집중력이 떨어질 때 당장의 눈 앞에 있는 것에 제대로 의식을 모으지 못 하는 것도 문제지만, 그보다는 머리 회전이 안 되니 뭘 할지 몰라 해이해져서는 절제력이 떨어지는 것이 가장 문제다. 그냥 누워서 유튜브나 보고 싶어서 몸이 근질근질하더라고.
한창 불태울 시기에 이래서야 쓰나, 오늘은 1시 강제 취침 모드로 간다. 평소 하는 운동으로는 잠에 금방 빠지게 할 만큼의 피로가 생기지도 않기에 차라리 그냥 몸을 쉬게 해주는 것이 좋을 것 같아 운동도 생략했다. 항상 사람들한테 원기 충전하자느니, 파이팅이라니 해두고 내가 이래선 곤란하다! 악깡버하자 악깡버..