2022년 4월 2일 토요일

[Git] Trailing comma의 용도

 현재 저는 사내에서 개발자 교육을 받고 있습니다. 오늘의 포스팅은 해당 교육 중 과제를 통해 알게 된 Trailing comma에 대한 내용입니다. 


2022-04-03, SSG TECH101 과정 중 Git 수업

Title : About Trailing Comma


사용 목적 요약 : 코드 수정에서의 human error 방지,  Git과 같은 VCS에서의 소스코드 관리 용이성


1. 실수방지에 있어서의 용도


Trailing Comma 사용의 효과 중 하나로는 코드 관리에 있어서의 Human error를 방지 효과를 들 수 있습니다. 이는 주된 효과라기 보다는 부수적인 효과에 가깝습니다.


우선, Tailing Comma를 용례를 가장 간단히 말하면 commit 1, commit 2 ‘posts’의 마지막 line에 작성된 comma(,)라고 볼 수 있습니다.


List인 post의 가장 마지막 line에 comma를 추가함으로써 list에 새로운 값을 추가할 때 발생할 수 있는 다음과 같은 실수를 방지할 수 있습니다.


posts = [

  'How to work with git',

  'How to use git flow',

  'This is trailing comma’

  'Gosh, It’s Monday again'

]



(2) Git과 같은 VCS 사용 중 소스코드 관리에서의 용이함


Trailing Comma 사용의 주된 목적이자 효과라고 볼 수 있습니다. 예시의 commit 1과 commit 2를 우선 bitbucket에 commit 해보겠습니다. 


그 후 각 commit에서 list인 posts에 동일하게 새로운 값을 하나만 추가한 뒤 다시 commit 해보면


Trailing comma를 사용하지 않은 Commit-1.md의 경우, 아래와 같이 값을 하나 추가했을 뿐인데 하나의 값이 삭제되고 두 개의 데이터가 추가된 것처럼 commit history가 발생하는 것을 확인할 수 있으며 





Trailing comma를 사용한 Commit-2.md의 경우, 아래와 같이 선언에 대한 history가 한 줄로만 추가되기 때문에 변경사항을 파악하기가 수월해짐을 알 수 있습니다.




이것은 아주 간단한 차이이지만, 팀 협업에 있어 소스코드에 대한 버전 관리에 매우 유용해보입니다.

 


bitbucket : https://bitbucket.org/jindaehyun/trailing-comma/commits/d862f22fc4fd87c0299e8a74c82529869d3fa68c

2022년 2월 12일 토요일

[취업 수기] SSG.COM DA(Data Analytics) 입사까지

 석사 졸업과 취업 준비로 블로그에 글을 올리지 못한지 4달 가량이 흘렀다. 그간 나는 석사 졸업에 필요한 "교수님과의 협의.. 협상?(^-^...)", 투고 논문(CAE-CF)에 대한 처리, 연구실 행정 처리에 대한 인수인계, 여러 기업들을 기웃대며 취업 준비를 하느라 바빴다. 한편으로, 일기도 한 장을 못쓴 채 몇 달을 졸업과 취업이라는 두 가지 걱정 사이에서 전전긍긍하며 지내오다 보니 마음 한 편이 너무나 답답했다. 오늘은 출근을 하기 시작한 첫 주의 첫 주말이므로, 커리어를 대하는 마음 가짐에도 정리가 필요하고.. 스스로의 흔들림 없음이나, 고요를 되찾기 위해 블로그 게시글을 써보는 게 어떨까 싶어졌다.

뭐니 뭐니 해도, 나에게 찾아온 가장 큰 변화는 졸업보다는 나의 재취업이고, 그 결과는 어떤 식으로건, 형태로건, 감상으로건, 내 주변인들에게 약간의 영향을 주는 듯 하다고.. 나는 그렇게 느낀다. 그것이 부정적인 피드백이건, 긍정적인 피드백이건 말이다. 나에게 일어난 사건에 대해, 타인은 그 일부만을 알 수 있고, 그 일부에 대한 감상만을 가질 수 있으므로 '나에 대해 오롯이 아는 것은 나뿐이라는 마음으로' 나는 나의 사람들과 조금이라도 더 소통하고자 노력중이다. 이 글도 그 노력의 일환이다.

때문에, 취업에 이르기까지 내가 어떤 과정을 밟았는지를 여기에 정리해두고 싶다. 완벽한 타인이 이 글을 읽고 도움이 된다면 그것으로도 만족하고, 나의 타인과 나의 주변인들이 읽고 나를 이해하는 것에 도움이 된다면 그것으로도 만족한다. 석사 4학기가 시작된 9월즈음부터 일어난 일들을 시간 순으로 작성해보려고 한다.


Chapter 0. 석사 4학기 시작 전

3학기를 마친 6월말, 나는 지도교수님의 배려와 동기의 도움으로 KCI게재지인 응용통계연구에 1저자 논문을 출판할 수 있었다. 연구에 대한 지분이라고 할까, 그런 것을 정량화하면 교수님의 작지만 크리티컬한 맨파워가 10%, 나의 아집 45%, 그걸 실현하게끔 도와준 성환(대학원 동기)이의 기술과 선한 마음씨가 45%라고 생각한다. 그러므로 내가 1저자를 달게 된 것은 지도교수님과 동기의 배려심 덕이다.

사실 이러한 결과의 이면에는 다음과 같은 요인이 숨어있다. 우리 학교에는 KCI급 이상 게재지에 제1저자 투고+교신저자로 지도교수가 들어가면 석사 논문을 면제해주는 제도가 있다. 지도교수님은 석사논문을 면제하게끔 해줄터이니, 내가 연구해오던 추천시스템에 관련한 논문을 해외 투고해보자셨다. 

나는 석사 3학기부터 앞으로 채용 시장에서는 점차 추천 알고리즘에 대한 경험이 우대될 것이라는 확신을 갖고 있었으므로, 그러한 오퍼를 감사히 받아들였다. 이맘때쯤 나는 오토인코더 기반의 추천 알고리즘 연구를 시작했으며 여러 온라인 강의, 깃, 유튜브 등등으로부터 관련 내용을 모두 정리했다. 랩 세미나에서도 가능하면 내 세션에 해당 내용을 공유했다.

한편으로, 이때 쯤 나는 취업 준비를 위해 여러 유통기업들에 대해 알아보기 시작했다(유통기업에 가겠다는 발상은, 그저 제조사를 다녀보니 유통이 차라리 낫다는 단순한 감상 때문이었다). 대표적으로 이마트, 롯데마트, 현대백화점 등등의 오프라인 기반 유통 공룡들에 대해서 알아보았다. 롯데마트에서 데이터분석 직군을 채용한다는 공고를 보았고, 서류를 써서 냈다.

물론, 연구실과 대학원의 잡다한 행정 업무들은 여전히 내 몫이었다. 우리 연구실 사람들은 각자의 몫을 해내야만 하는 시기에 돌입했고, 나도 마찬가지로 묵묵함을 가질 수 밖에는 없었다. 동기와 후배들에게 참 고마울 따름이다.


Chapter 1. 석사 4학기 시작

학위 논문 면제 제도 덕분에, 나는 주변 대학원 동기들이 석사 초록 발표를 진행하는 와중에 몇몇 기업의 면접 과정에 참여할 수 있었다. 그렇다고 해서 결코 여유로운 일정은 아니었다. 석사 학위라는 것이, 만만하다면 만만할 수 있겠지만 그렇다고 고스톱 쳐서 따는 학위는 아니지 않겠는가.

나는 9월부터 11월까지 약 40개의 서류를 제출했는데, 승률이 55% 가량이니 운이 좋게도 서류 탈락을 그리 많이 접하지는 않은 듯 하다. 그나마 좀 잘 팔리는 전공을 선택한 것이 다행이라고 생각했다. 아니면 내가 요즘에는 써먹기 좋은 중고 신입이라서 그런지도 모르겠고, 그간 매년 매년 열심히 자격증을 땄기 때문일지도 모르겠고, 합격으로 당락이 결정된 정확한 이유는 알 길이 없기 때문에, 그러므로-그래서-그냥 운이 좋은 것이라고 생각했다.

여러 기업이 있겠지만 이마트, 롯데마트 등등의 면접을 본 뒤 내가 가진 감상은 하나다. '이들은 아직 데이터를 이용할 준비가 안됐다.' 는 점이다. 그것이 내가 오프라인 유통기업을 취업리스트에서 배제한 이유이다.

그런데 또, '네카라쿠배'라고 하는 기업들에 자신있게 도전하기에는 내 스스로 느끼는 약점인 코딩 실력에 대한 의심이 있었으므로, '데이터 분석' 업무와 정말 유관한지 모를 코딩 테스트(특히, 알고리즘 테스트를 보는 유형의 테스트)들을 보는 기업들에 지원하기에는 어려움이 있었다. 그제서야 코테를 뚫기 위한 공부까지 병행하기엔 시간이 없으니까.

그래서 우선 내 연구와 졸업 준비를 병행하면서 백준 정도의 코테 공부는 약간 했지만, 가능하면 코테를 보지 않는 기업에 입사하기로 마음먹었다.

그 외에도 내가 따져본 회사의 조건들은 여러가지가 있는데, 아래와 같다. :

조건 1. 직무는 반드시 데이터 분석직(쓸데없이 Data scientist 같은 모호한 직무명을 갖고 있으면서 엔지니어링까지 요구하는 Capa 부족한 회사 제외, 내 능력으로 커버되지 않는 AI 개발 등은 제외)
조건 2. 최대 통근 시간은 1시간
조건 3. 급여는 중고 신입사원으로 취업하는 상황을 고려하더라도 연봉 최소 4500이상
조건 4. 여자친구의 이직 및 결혼을 고려했을 때, 가능하면 근무지 위치는 서울 이내


Chapter 2. SSG닷컴 서류제출(10/15 ~ 10/28)


10월 15일, SSG닷컴 채용공고가 떴다. 마감일은 10월 28일이었다.

이 당시 나는 딥러닝 기반의 추천 알고리즘을 연구하고 있었기 때문에, AI개발 쪽도 약간의 관심을 갖기는 했다. 하지만 전형 상 1) 코테의 존재, 2) "AI"라는 용어가 커버하는 넓은 영역을 감당할 자신 없음, 3) '추천'이라는 필드는 매우 좁기 때문에 이 업무를 반드시 하겠다는 욕심을 버려야함(형의 조언). 을 근거로 생각하여 원래의 조건에 부합하는 DA직무에 지원했다. 그리고, 올바른 판단이었다.

지원서 양식에서의 재밌는 점은 취미/특기, 그리고 여행사항까지 작성하도록 권하고 있다는  점이었다. 문항은 다음 3개였다. :

문항 (1) 당사에 지원한 이유와 입사를 위해 어떤 노력을 하였는지 구체적으로 기술하시오.

문항 (2) 지원한 직군에서 구체적으로 하고 싶은 일과 본인이 그 일을 남들보다 잘할 수 있는 차별화된 능력과 경험을 기술하시오.

문항 (3) 학업 외 가장 열정적이고 도전적으로 몰입하여 성과를 창출했거나 목표를 달성한 경험을 기술하시오.

문항 작성에 앞서, 나는 학부 동기 중 신세계인터내셔날 인사 직무로 근무중인 학부 동기를 떠올려냈다. 같은 신세계 그룹사이기 때문에 공유하는 가치관이 있으리라 생각하여 연락을 한 것이었다. 학부 동기는 내게 SSG닷컴에 재직 중인, 나 또한 안면이 있는 다른 학부 동기에게 연락해볼 것을 권유했다. 재직 중인 동기는 내가 지원한 DA직무에 재직중이었다. 운이 좋았고, 지금 되돌아보면 나의 취업은 내 주변인들의 협력과 관심이 없었다면 이뤄낼 수 없었으리란 생각이 든다. 사내 환경과 업무 영역에 대한 질문을 해두었고, 이러한 QnA는 입사 전형에 정말 귀중한 정보가 되었다. 나는 여러 사람의 말을 수집해보고, 그 뒤에야 자소서를 작성했다.

각 문항에 대한 자기소개 작성 내용을 모두 공개할 수는 없기 때문에 정리해보면, 각 문항에 대해 다음과 같이 작성했다. :

답변 (1) [추천과 데이터분석을 공부하게 되기까지] : SSG닷컴의 추천팀 인터뷰를 참고하여 가장 최근 런칭한 눈치빠른 쓱검색 서비스에 대해 언급, 식품사 - 대학원 - 추천 공부까지의 스토리를 요약, 자격증 취득을 예시로 들며 '공부하는 태도' 어필.

답변 (2) [데이터 마이닝 프로젝트를 통해 분석 기초를 다진 지원자] : DA 업무에 필요한 여러 유형의 분석 주제(가격예측, 개인화 추천)를 가진 대학원 프로젝트 경험 어필, 각 프로젝트 요약(블로그 내 이력서에 쓰인 양식)

답변 (3) [적극적 태도로 얻은 동료들과 논문 게재 성과] : 이 글에서도 언급한 제 1저자 논문 작성 과정, 대학원 행정조교/연구실 행정을 전담하며 얻게 된 동료들과의 교류에 대한 어필


Chapter 3. SSG닷컴 서류결과 통지 및 1차 면접(인성+기술) 준비 (11/26 ~ 12/7)

11월 26일, 한 달이 지나서야 서류전형 결과가 도착했다. 1차 면접은 인성, 기술 면접을 종합한 전형으로 12월 7일에 진행하게 되었다. 1차 면접 전, AI 역량검사 또한 진행해야 했다. 이 당시 나는 AI 전형이 포함된 여러 기업의 면접 과정에서 고배를 마신 상태였기 때문에 AI 역량검사 또한 내게는 큰 숙제였다. 유튜브에서 AI 검사 잘 하는 법 따위를 찾아보고, 연습했다. 검사 방식을 이해하는 것에 대해서 만큼은 약간 도움이 되었지만, 이 검사가 면접 과정에 크리티컬한 영향을 준다면 나는 통과할 수 없는 사람이 아닐까 생각했다(다행히도, SSG닷컴에서 만큼은 AI역량검사는 참고사항일 뿐 전형에 그리 큰 영향을 주지는 않는다고 인사팀에서 설명해주었다).

12월 7일 4시, 비대면(Zoom)으로 면접에 참여했다. 그 전날, 인사팀에서 미리 면접 리허설을 진행해주었으므로 면접 참여에는 문제가 없었다(인사팀 분들 너무 친절하시다..). 

1차 면접에 대한 복기를 해두었는데, 답변까지 오픈할 순 없겠으나 당시 내용을 참고해서 받았던 질문을 시간 순으로 정리해보면 다음과 같다. : 

1) 간단한 자기소개
2) 식품사 근무 이력에 대한 질문
3) 근무 경험과 DA직무와의 연관성
4) 경력 우대를 받고 싶은지에 대한 질문
5-1) 동산 가격 예측 프로젝트에 대한 간략한 설명 요구
5-2) 해당 프로젝트에서 어떤 모델을 주로 활용해보았는지
6) 에너지기술연구원 프로젝트에 대한 간략한 설명 요구
7) 입사 후 어떤일을 할 것이라고 예상하고 있는지?
8) 고객 데이터 분석에 대해서만 말씀하셨는데 물류 데이터 분석에 대해서는 관심없는지
9) 학부에서는 산업공학 전공했는데 비선형 최적화에는 자신 없는지?
10) 보통 본인이 속한 조직 내에서 어떤 역할을 맡는 편인지?
11) 모든 산업 분야에서 왜 하필 E-commerce로 진출하고 싶은지?
12) 식품사 근무 경험이 그러한 결론에 인사이트를 준 바가 있는지?
13) 기술 스택은 어떻게 보유하고 있는지?
14) 우리 회사에 대한 기대감이 너무 크신 것 같은데, 본인은 어떻게 생각하는지?
15) 하고 싶은 말 혹은 질문해보라

면접은 대략 40분 정도 진행되었던 듯 하다. 땀이 많이 났다. 스스로 판단했을 때, 그래도 90점 정도의 답변을 했다고 생각했다. 이 과정에서는 약간의 운도 나를 찾아줬다. 나는 자기소개서 문항에 SSG닷컴 추천팀 팀장님의 인터뷰를 인용한 바 있고, 그러한 내용을 면접과정에서 자연스레 답변에 녹여 대답했는데 입사 후 알게 된 사실이지만 그 질문 주신 분이 그 인터뷰 하셨던 추천팀 팀장님이셨다. 어쩐지, '임직원도 안보는 걸 찾아 보셨다'면서 엷게 미소 지으셨었는데, 운이 좋았다고 생각한다. ^-^;;


Chapter 4. SSG닷컴 1차면접 결과 통지 및 2차 PT 면접(드림스테이지) 준비 (12/16~12/28)


그로부터 열흘쯤 지나 12월 16일에 2차 PT면접에 참여할 수 있다는 연락이 왔다. PT 면접 주제는 오픈하기 어렵지만, 각 직무 별 PT 주제가 모두 달랐고 나는 내 직무의 주제 중 좀 더 거시적인 주제를 골라서 PT를 준비했다. 사실, 이 과정이 면접 전형의 백미라고 할 법 한데, 혹시나 문제가 될 것 같아 오픈할 수 없음이 아쉽다.

이 전형에서는.. 현직 컨설턴트인 친형의 도움이 매우 매우 컸다. 발표 디자인에 대한 조언을 매우 많이 받았고, 정말 감사한 생각뿐이다. 또한 마찬가지로 감사하게도, 자료를 모두 작성한 뒤엔 현직에 있는 동기에게도 발표 방식에 대한 조언 받을 수 있었다.

내 발표의 제목은 '온/오프 통합 플랫폼을 위한 동네생활권 데이터 활용 제안' 이었다. 근래 급성장한 당근마켓, 번개장터 등 하이퍼로컬 서비스를 SSG닷컴에서도 접목해서 활용해보자는 제안이었다.

주어진 PT 시간은 10분이었다. 발표 개요 정도는 일부 Blur 처리하여 공유할 수 있으리라 생각하므로, 아래와 같은 수준으로 준비했으니 참고해주면 좋겠다. :

PT 관련해서는 다음과 같은 평가나 질문이 있었다. :

1) 우선 PT 자체는 현직에서 일하는 분 수준이라고 생각한다. 발표 잘 봤다.
2) 제안된 첫번째 아이디어의 '가설'은 뭐라고 상정했는가?
3) 두번째 아이디어의 경우 아이디어 제안 자체에만 치중했는지, 가설이 보이지 않는다. 정리해볼 시간을 줄테니 가설을 다시 정의해보라.
4) 기획이란 공수(돈)가 드는 법이다. 제안의 효과성에 대해 좀 더 구체적으로 논해보라
5) SSG닷컴 외에도 DA직무를 뽑는 회사는 많다. 왜 SSG닷컴에 입사하려고 하는가?
6) 이력을 보면, 추천 연구 해본것 같다. 그런데 입사 후에 꼭 추천업무를 하게 될거란 보장은 없다. 하지만, 분석 전체를 알게되는 것에 도움은 될것으로 좋게 생각한다.

일단, 자료 준비와 발표에 대한 칭찬을 들었기 때문에 면접 자체는 잘 준비해서 잘 봤다고 생각했다.

그럼에도 면접 전형 중 가장 피 말리는 시간이었다고, 나는 지금도 그렇게 생각한다. 괴롭고 고통스러웠던 것은 사실이다.


Chapter 5. 최종 임원면접 (1/5~1/17)

그러고도 또 1주일이 지나 이제 2022년 1월 5일 2차 PT 면접 결과가 나왔다.  

입사 전형 단계가 너무나 많아서(서류 - AI역량검사 - 1차면접 - 2차PT면접 - 임원면접), 오래 걸릴 수 있다고는 생각하지만 정말 결과를 받는데까지 너무 오랜 시간이 걸린다는 점이, 취준생 입장에서는 또 하나의 고통을 주는 요인이라고 생각한다. 아무튼, 이제는 다 지났으니 상관은 없지만 말이다.

1월 17일에 이르러 임원 면접을 치렀다. 현직 동기는 대체적으로 인성 면접일 것이며, 취미나 특기까지 이력서에 써둔 질문 할 수 있으니 제출한 이력서 다시 점검해보라는 조언을 해줬다. 실제로, 면접 중에 대표님이 KTX 내일로 타고 여행 왜 갔다 왔냐는 질문까지 했다.

당일이 되어, 면접을 들어갔는데 동일 직무끼리 다대다 면접을 보는 것이 아니라 서로 다른 직무가 모두 함께 들어가서 면접을 진행하는 형식이었다. 물론, 모두 TECH 직무 지원자들이긴 했지만 어떤 식으로 면접이 진행될지 들어가기 전까지 감을 잡지 못했다. 게다가, 답변 순서가 내가 6명 중 1번이었다. '따라주던 운이 오늘은 따라주질 않는구나..' 라고 생각했다.

착석하고, 첫번째 질문 후로 나는 어차피 내가 생각하는 100점 짜리 답을 할 정도의 고민할 시간은 주어지지 않는다는 판단을 했다. 때문에 '최대한 빨리, 가능한 정확하게' 답변하는 것으로 전략을 바꿨다. 질문 받은 사항은 복기한 내용을 참고해보면, 다음과 같다. :

1) 자기소개 해봐라 : 나는 아주 단순한 수준으로 내 이력을 전달했고, 왜 하필 분석직에 지원했는가 정도만 어필했다. 내 답변 이후로, 나머지 지원자들은 주로 자기가 입상했던 경험, 프로젝트 경험을 아주 세세하게 표현했다. 나는 이 시점에서 답변 방식에 대해 반성했고 답변 전략을 수정했다.

2) 면접 전형 중 가장 힘들었던 점은 무엇이고, 그 어려움의 해결 방법은 무엇인지 말해봐라 : 역시 드림스테이지였다고 답했고, 내 주변의 인적네트워크를 최대한 활용해서 내가 가진 최대 능력 이상의 결과를 어필하려 노력했다고 대답했다.
또, 면접 대기실에 걸린 액자에서 본 '고객제일' 이라는 문구를 말하며 아직은 도메인 참여자, 그러니까 E-Commercer가 아니기 때문에 주제 파악이나 제안 제시가 가장 어려웠으나 앞으로 도메인 참여자로서 노력하여 고객제일을 이뤄내는 것에 일조하고 싶다고 답했다.

3) 입사하여 5년 뒤 어떤 모습으로 성장하고 싶은가 : 이 부분은 복기한 내용을 그대로 적어도 될 것 같다.

계속해서 고객중심을 키워드로 답변드리겠습니다. 제가 최근 읽은 문장 중에 가장 감명 깊었던 것이 '고객은 2mm 규격의 드릴을 원하는 것이 아니라, 2mm의 구멍을 원한다.'는 문장이었습니다.

그러한 제 경험적 예시를 들어보겠습니다. 대학원에서 외부 프로젝트를 수행하다보면, 클라이언트의 요구사항이 통계적 완전성 보다는 모델링 혹은 분석의 속도에 있는 경우가 있었습니다.

예를 들어 어떠한 예측 모델 개발으 위해 의사결정나무모형을 제안하는 경우, 저는 이 모델링이 최적화되는 것에 관심이 있을 것이며 모델의 피팅에 집중할 것입니다. 그러나, 클라이언트의 경우 필요에 따라 최대한 잘 피팅된 모델보다 depth가 깊은 모델을 요구하는 경우가 있을 것이고, 혹은 잘 피팅된 모델보다는 빠르게 모델을 제안해주길 요청할 수 있습니다. 이론적 관점에서는 그러한 해결책을 전달하는 것이 꼭 좋지는 않겠습니다만, 저는 이 과정에서 무엇보다 솔루션의 속도 또한 중요하다는 점을 느꼈습니다.

그래서 저는 데이터 분석가로서 가능한 이 '빠른 속도'에 익숙해지는 것을 단기 목표로 생각하고 있습니다. 도메인 적응 후에는 분석가로서의 역할도 중요하지만 조직 내 데이터 전문가로서의 역할도 고민해보고 싶습니다. 기술적인 부분에서 데이터 분석은 제 전문분야이니 당연한 것이지만, 대부분의 조직원은 데이터 리터러시, 그러니까 데이터를 읽고 쓰는 능력이 부족할 것입니다. 저는 데이터 분석가가 조직원들의 데이터리터리시를 배양하는 것에도 데이터에 대한 가이던스를 줌으로써 지원할 수 있으리라 생각합니다

4) KTX로 여행 왜 다녀왔냐? : 3)에 대한 답변 전까지는 사실 면접관들이 내 답변에 대한 피드백을 딱히 해주지 않아 불안한 상태였는데, 3)의 답변을 듣곤 다음 차례 참석자 답변 직전에 갑자기 대표님께서 이 질문을 하셨다.

이 부분도 복기한 내용 그대로 올려도 될 것 같다.

우선 제가 20대 초반에 다녔던 여행입니다. 대학에 입학하기 전까지 제가 여행을 혼자 다녀본 경험이 없었고, 입학 후에 친구들을 둘러보니 사투리를 쓰는 친구들도 많고 서울에서 나고 자란 사람도 많은데 이 작은 땅에서도 참 다양한 사람이 있구나 싶었습니다. 내일로 라는 티켓이 굉장히 저렴한 방법으로 전국을 다니기에 좋은 방법이라 내일로로 여행을 했고 제가 바다를 좋아해서 서해 남해 동해을 들러 서울로 돌아오는 식의 여행을 했습니다.

5) 뭘 느꼈냐 : 

지방별로 문화가 굉장히 다르다고는 느꼈지만 당시에는 거의 대부분의 특산품이 비슷비슷하단 감상이었습니다. 대표적으로.. 경주도 팥빵, 대구에도 팥빵, 통영에도 팥빵.. 그런 다양성이 부족하다는 점이 조금 아쉬웠습니다. 그런데 말씀드린 여행은 20대 초반의 경헌이고 최근에 다시 여행을 가본 경험에 비추어보았을 때, 요즘은 그래도 다양성이 강화되었다고 생각합니다. 지방별로 나만 아는 과일 장수가 있다던지, 까페가 있다던지 하는 부분이 그랬습니다.

바로 옆 동일 직무 지원자에게는 이력서에 EDA, 데이터 전처리부터 분석까지 다해보느라 애썼다고 써놨는데 왜 그렇게까지 했냐고 질문, 점차 PM으로서 추출단부터 알아야 분석 흐름 알수 있기 때문이라 답변.. 이후 5년 후 모습에 대해 지원자 답변했으나 만족스럽지 않았는지 테크쪽 리더가 '구체적으로 뭐가되고싶은건지' 재질문, 답변

6) 테크 리더라고 소개한 면접관님 질문, '최근 스스로 배우고 있고 활용하고 있는 기술이 뭐가 있는지 구체적으로 말해보라' :

최근 논문 투고 때문에 연구했던 딥러닝 기반의 추천시스템에 대해 요약드리겠다. 저는 Rating elicitation 전략을 위한 변형 오토인코더 기반의 추천 모델을 개발했다. rating elicit은 쉽게 말해 넷플릭스와 같은 플랫폼에 신규가입하는 신규User에게 어떤 영화를 좋아하는지 3개 정도 고르라고 하는 방법이다. 기대효과로서는 cold start를 해결하기 위한 방법이다. 저는 이걸 위해 concrete autoencoder를 활용했고 feature selection을 하여 이 전략을 위한 seed itemset을 추출하는 방법을 제안했다.


이후 총평 혹은 자율 질문 등 없이 그대로 면접 종료.

개인적으로, 모든 면접 과정에서 스스로 생각하기에 가장 안좋은 컨디션의 대답만 하고 나온 면접 전형이라고 생각(본인 판단 70점짜리 대답들).

 Chapter 6. 최종발표 (1/25)

그로부터 또, 1주일 하고도 하루가 더 되어 결국 최종합격 결과를 통보받았다.

결과를 SNS에 공유했는데, 웃프게도 이거 채용연계형 인턴 합격한거냐는 질문을 정말 많이 받았다. ^^.. 정규직인데, 수습 기간을 갖고 있다는 정도로 알아주셨으면 참 좋겠다. 입사 후 직급은 대리.

그리하여서 정말 잘~~ 놀고 2월 5일부터 현재 인턴십(입문교육)을 하고 있다.

참으로 지난한 과정이었다.

대체로 입사 후 아직 모든 동기들을 알지는 못하지만 예전에 몸담은 조직의 동료들보다는 진취적이고, 변화에 탄력적인 사람들이란 인상을 많이 받았다. 특히, 조금 더 무엇이든 개선해보려는 의지나 '나의 일'을 잘하려면 어떤 노력을 해야하는지 아는 사람들이라는 인상을 깊게 받았다. 

뭐, 물론 전 직장에서도 그런 사람이 '아주 약간' 있긴 있었다. (서글펐던 점은, 그런 사람들은 '특이한 인간'으로 낙인찍는 사람들이 있었다는 점이다.) 그러나 그 비율에 있어서는, 이 새 직장의 조직원들이 더 높은 비율을 갖고 있다고, 현재까지는 그렇게 판단하고 있다. 잘 옮겼다!

그러한 모습들을 보는 것은, 정말 나에게 큰 만족감을 준다. 물론 아직 업무에 투입되진 않았기 때문에 섣부른 판단은 금물이지만 말이다.

나는 그냥, 이 글을 가능하면 내 주변 사람들이 읽어줬으면 좋겠다. 그래서 나를 조금만 더 이해했으면 좋겠다. 취업 수기는 이만 끝! 모두 행복한 한 해 되셨으면 좋겠다. 나는 이제 내가 해야 할 공부에 무엇이 있는지 정리해보려고 한다.

2021년 11월 10일 수요일

About SoftImpute(Vignette)

 Here we briefly describe the problem solved. Suppose \(X\) is a large \(m\times n\) matrix, with many missing entries. Let \(\Omega\) contain the pairs of indices \((i,j)\) where \(X\) is observed, and let \(P_\Omega(X)\) denote a matrix with the entries in \(\Omega\) left alone, and all other entries set to zero. So when \(X\) has missing entries in \(\Omega^\perp\), \(P_\Omega(X)\) would set the missing values to zero.

Consider the criterion \[\min_M\frac12\|P_\Omega(X)-P_\Omega(M)\|^2_F+\lambda\|M\|_*,\] where \(\|M\|_*\) is the nucelar norm of \(M\) (sum of singular values).

If \(\widehat M\) solves this convex-cone problem, then it satisfies the following stationarity condition: \[ {\widehat M}=S_\lambda(Z)\] where \[Z=P_\Omega(X)+P_{\Omega^\perp}(\widehat M).\] Hence \(Z\) is the “filled in”" version of \(X\). The operator \(S_\lambda(Z)\) applied to matrix \(Z\) does the following:

  1. Compute the SVD of \(Z=UDV^T\), and let \(d_i\) be the singular values in \(D\).
  2. Soft-threshold the singular values: \(d_i^*= (d_i-\lambda)_+\).
  3. Reconstruct: \(S_\lambda(Z)=UD^*V^T\). We call this operation the “soft-thresholded SVD”. Notice that for sufficiently large \(\lambda\)\(D^*\) will be rank-reduced, and hence so will be \(UD^*V^T\).

This suggests the obvious iterative algorithm: using the current estimate for \(M\), create \(Z\), and update \(M\) by the soft-thresholded SVD of \(Z\).

This is exactly what softImpute does on (small) matrices with missing values stored as NAs. By small we mean small enough that the SVD can be computed by R in a small amount of time.

This is not tenable for very large matrices, like those stored as class "Incomplete". Here we make two very important changes to the recipe:

  • Re-express \(Z\) at each iteration as as \[Z=P_\Omega(X)-P_\Omega(\widehat M) + \widehat M.\] This is of the form "SparseplusLowRank" (assuming \(\widehat M\) is low rank), and hence can be stored. Left and right matrix multiplies by skinny matrices can also be efficiently performed.
  • Anticipating that the solution \(\widehat M\) will have low rank, compute only a low-rank SVD of \(Z\), using alternating subspace methods.

Indeed, softImpute has a rank argument that allows one to limit the rank of the solution; if the algorithm returns a solution with rank lower than the specified rank \(r\), you know it has solved the unrestricted problem.

Consider the alternative criterion \[\min_{A,B}\frac12\|P_\Omega(X)-P_\Omega(AB^T)\|^2_F+\frac{\lambda}2(\|A\|_F^2 +\|B\|_F^2),\] where \(A\) and \(B\) have each \(r\) columns, and let us suppose that \(r\) is bigger than or equal to the solution rank of the earlier criterion. This problem is not convex, but remarkably, it has a solution that satisfies \({\widehat A}{\widehat B}^T=\widehat M\)!

We can once again characterize the stationarity conditions, now in terms of \(\widehat A\) and \(\widehat B\). Let \[Z=P_\Omega(X)+P_{\Omega^\perp}({\widehat A}{\widehat B}^T),\] the filled in version of \(X\). Then \[\widehat B= ({\widehat A}^T{\widehat A}+\lambda I)^{-1}{\widehat A}^T Z.\] We get \(\widehat B\) by ridge regressions of the columns of \(Z\) on \(\widehat A\). For \(\widehat A\) its the same, with the roles of \(A\) and \(B\) reversed. This again suggests an obvious alternation, now by ridged regressions. After each regression, we update the component \(A\) or \(B\), and the filled in \(Z\). If \(r\) is sufficiently large, this again solves the same problem as before.

This last algorithm (softImpute ALS) can be seen as combining the alternating subspace SVD algorithm for computing the SVD with the iterative filling in and SVD calculation. It turns out that this interweaving leads to computational savings, and allows for a very efficient distributed implementation (not covered here).

2021년 8월 28일 토요일

[추천시스템] Rating Elicitation에 관하여

About Rating Elicitation

Rating Elicitation은 추천시스템을 처음 이용하는 신규 User에게 Seed itemset을 전달하여 rating을 부여하도록 권유하는 전략이다. 이러한 전략을 사용하는 까닭은, 신규 User의 cold-start problem을 일부 완화시키기 위함이다.

여러 협업필터링 기반의 추천시스템에서 사용된 Active learning에 대한 서베이 논문으로는 [1]이 있는데, rating prediction을 수행한 뒤 top-k방식을 채택해 상위 k개 item을 seed itemset으로 사용하는 경우가 대부분인 것 같다. 

같은 저자의 [2]에서는 CF를 위한 Rating Elicitation 전략에 대해 소개하고 있는데, null entry가 존재하는(sparse matrix란 의미) rating matrix \(R\in\mathbb{R}^{n\times m}\)에 대하여 rating strategy \(S\)를 다음과 같이 설명하고 있다. : \(S(u, N, K, C_u)=L\) which returns a list of \(M<=N\) items \(L=\{i_1, ... , i_M\}\) whose ratings should be asked to the user \(u\), where \(N\) is the maximum number of ratings to be elicited.

추천시스템이 가진 전체 N개 itemset에 대하여, K개의 seed itemset L을 rating 하도록 하고, L을 이용해 \(C_u\)를 예측하는 전략으로 요약할 수 있다. 그러니까, 이 이야기는 학술적으로 들리지만, 실상 현재 추천시스템을 적극 활용하고 있는 여러 플랫폼에서 사용하고 있는 하나의 전략인데 대표적으로는 역시 넷플릭스를 예로 들 수 있다. 넷플릭스의 경우 여러 장르의 영상물 중 78개의 seed itemset을 신규 user에게 rating 하도록 한다. 이때, explicit rating을 권하는 것은 아니고, '좋아하는 컨텐츠를 3개 선택하라'고 권한다. implicit feedback을 하도록 권하는 형태인 것.

(Netflix의 신규 회원에 대한 rating elicitation 화면)

국내 서비스 중에는 에이블리 등의 쇼핑 어플이 해당 전략을 사용하는 것으로 보인다. 아마도, 영화 데이터와 마찬가지로 각 패션 이미지에 대한 라벨 데이터와 feedback으로 구성된 DB를 이용해 추천시스템을 운영할 것이라고 생각해본다. 에이블리도 마찬가지로 78개의 seed itemset을 신규 user에게 전달한다. k의 갯수가 어떻게 지정된 것인지에 대해서는 레퍼런스가 없어서 아쉽다. 다만, 이러한 플랫폼은 어찌됐건 user가 rating 하는 과정에서 지쳐 나가떨어지게 해서는 안되기 때문에 k=78을 적정 수준으로 여긴 듯 하다. 3개 이상을 선택하라고 하는 이유는 적어도 similarity를 최소한의 수준으로 계산하려고 해도 item 2개만 가지고는 \(Similarity(A,B)\) 하나의 값만 계산되기 때문에 그 최소한의 요건으로 3개라는 하한선을 둔 것으로 보인다.

(에이블리의 신규 회원에 대한 rating elicitation 화면)


Representative?

신규 유저에 대한 추천은 이 seed itemset에 대해 rating을 많이 부여할수록 예측 성능이 올라갈 것이다. 그런데 k=78 사이즈의 seed itemset을 신규 유저에게 전달한다고 하여, 신규 user가 충분히 많은 수의 item에 대해 rating할 것이라는 확신을 할 수는 없다. 

곧, 이 문제는 seed itemset이 전체 itemset 또는 category 별 itemset을 대표하는 대표성을 띠어야 한다는 방향으로 이어진다. 때문에 78개의 itemset을 결정하는 방식이 중요하게 된다.

해서, [1],[2]에서 소개된 바와 같이 top-k 방식을 활용하는 경우가 많다. top-k의 대상이 될만한 평가 방법은 다양하다. 예를 들어, 클릭률, 클릭수가 될 수 있고, 또는 플랫폼에 따라 구매자의 수, 리뷰의 수, 아이템에 대한 평점 등으로 활용할 수 있다. 경우에 따라 [3](관련 포스트)과 같이 휴리스틱한 방식의 유사도 measure를 개발에 이 방법에 활용할 수 있을 것이다.

Idea

Rating Elicitation이란 전략에 대해 간단히 알아본 까닭은, 계획 중에 있는 연구에서 얻어지는 부수적인 효과 때문이다. 바로 전 절에서는 seed itemset의 대표성에 대해 잠시 다뤘는데 케이스 스터디를 해보다보면, representative dataset을 결정하는 방식에는 휴리스틱, 메타휴리스틱한 방법들이 많이 존재한다.

local optima에 빠지지 않도록 global representative selection하는 방식의 연구등이 존재하는데, 최근에 읽어본 연구는 [4] 등이 있다. 아쉽게도 해당 방식은 SVM을 이용하는 것이라 추천 시스템에 임베딩할 방법을 아직까지 찾지 못했다.

한 편, 최근에 리뷰한 CAEs와 같은 모델의 경우에는 Feature selection을 위한 모델인데 이 경우 선택된 feature가 seed itemset으로 구성될 수 있도록 latent vector를 계산하는 방식이 가능하다. 즉 목적으로부터 결과가 나오는 것이 아니라, 계산값을 이용하여 부수적 효과를 얻어내는 방식이 가능해보인다. 현재는 이 아이디어를 기초로 한 연구를 진행해보고 있다.


[1] Elahi, Mehdi, Francesco Ricci, and Neil Rubens. "A survey of active learning in collaborative filtering recommender systems." Computer Science Review 20 (2016): 29-50.

[2] Elahi, M., Repsys, V., & Ricci, F. (2011, August). Rating elicitation strategies for collaborative filtering. In International Conference on Electronic Commerce and Web Technologies (pp. 160-171). Springer, Berlin, Heidelberg.

[3] Ahn, H. J. (2008). A new similarity measure for collaborative filtering to alleviate the new user cold-starting problem. Information sciences, 178(1), 37-51.

[4] Y. Ma, X. Liang, G. Sheng, J. T. Kwok, M. Wang and G. Li, "Noniterative Sparse LS-SVM Based on Globally Representative Point Selection," in IEEE Transactions on Neural Networks and Learning Systems, vol. 32, no. 2, pp. 788-798, Feb. 2021, doi: 10.1109/TNNLS.2020.2979466.

2021년 8월 27일 금요일

[논문 리뷰] 콘크리트 오토인코더(Concrete Autoencoders)

Concrete Auto-encoders for Differentiable Feature Selection and Reconstruction

(Abid, Abubakar et al. “Concrete Autoencoders for Differentiable Feature Selection and Reconstruction.” ICML (2019). https://arxiv.org/abs/1901.09346v2)

 작년에 알게 된 논문이긴 하지만, 근래 들어 오토인코더에 대한 공부를 하면서 좀 더 자세히 살펴본 김에 논문 리뷰를 하게 되었다. 기본적으로 discrete relaxation과 지정된 k개 만큼의 feature selection을 목적으로 한다는 점에서, 내가 활용하고자 하는 용도에 부합한다. (ICML Proceeding이라 조금은 아쉽다.)

Abstract

We introduce the concrete autoencoder, an end-to-end differentiable method for global feature selection, which efficiently identifies a subset of the most informative features and simultaneously learns a neural network to reconstruct the input data from the selected features. Our method is unsupervised, and is based on using a concrete selector layer as the encoder and using a standard neural network as the decoder. During the training phase, the temperature of the concrete selector layer is gradually decreased, which encourages a user-specified number of discrete features to be learned. During test time, the selected features can be used with the decoder network to reconstruct the remaining input features. We evaluate concrete autoencoders on a variety of datasets, where they significantly outperform state-of-theart methods for feature selection and data reconstruction. In particular, on a large-scale gene expression dataset, the concrete autoencoder selects a small subset of genes whose expression levels can be use to impute the expression levels of the remaining genes. In doing so, it improves on the current widely-used expert-curated L1000 landmark genes, potentially reducing measurement costs by 20%. The concrete autoencoder can be implemented by adding just a few lines of code to a standard autoencoder.

 Abstract에서는, CAEs(Concrete Autoencoders)는 end-to-end 방식의 전역 feature selection이 가능한 오토인코더이고, 기본 오토인코더의 인코더 대신 Concrete selector layer를 사용하는 방식이라고 한다. 디코더는 여전히 기본 오토인코더의 것을 사용한다. 구조적으로 기본 오토인코더에서 크게 바뀌는 것이 없기 때문에 적은 코드로도 쉽게 구현가능한 것을 장점으로 내세운다. 기본적으로 Annealing schedule을 활용하는 방식인데, 이것을 simulated annealing이라고 말할 수 있는 것인지는 확인해보아야겠다. 또, 선택된 feature들만 이용하여 test set에 대한 predict 수행이 가능하다고 한다.

1. Introduction

 Feature selection이라는 분야는 고차원 데이터셋을 저차원으로 축소하는 것에 목적을 둔다고 이야기하고 있다. 고차원 데이터셋의 feature가 갖고 있는 redundant한 수준을 측정하는 방식이라고도 한다. 그렇다면, 데이터셋에서 가장 중요한 Feature라는 것은 무엇인가? 아니면, 데이터를 축소하기만 하면 Feature selection인가? 에 대한 질문이 생긴다.

저자는 일반적인 차원축소 문제와 Feature selection의 문제가 엄연히 다름을 명시해두었다. 예를 들어 PCA(주성분분석) 또는 Hinton의 Autoencoder 등의 차원축소 기법들은 물론 데이터를 maximal variance를 유지하거나 또는, reconstruction loss를 최소화하면서도 더 적은 차원에 나타낼 수 있다.

하지만, 이러한 방식들은 오리지널 데이터셋에 존재하는 feature set을 선택하는 것이 아니라, 과잉(redundant)의 feature를 제거하고, 시험적 비용을 감소시키는 것에 목적이 있기 때문에 feature selection과 차원축소 문제는 서로 다르다고 한다.

이들이 이 논문에서 제안하는 CAEs는 discrete relaxation과 Maddison et al.(2016)의 Concrete distribution, 그리고 re-parametrization trick을 활용하여 reconstruction loss를 최소화하는 feature set을 찾는 방식이다.

discrete relaxation 방법으로는 Gumbel-softmax 방법을 활용하며, 이 부분은 후술한다.


2. Problem Formulation

 기본적으로, d-차원의 데이터로부터 발생하는 확률분포 \(p(x)\)가 존재한다고 가정한다. 이 모델이 포커싱하는 대상 자체가 discrete dataset을 이용한 비지도학습에 있다고 하니, 해당 확률분포 \(p(x)\)는 categorical distribution의 \(p_i\)라고 생각해도 좋아 보인다.

 목적은 이 알고리즘 사용자의 목적에 따라 고정된 'k'개 사이즈의 subset인 \(S\subseteq\{1, 2, ... , d\}\)을 학습하는 것과 reconstruction function인 \(f_{\theta}(\cdot)\)를 학습하는 것에 있다. 형태를 살펴보았을 때엔, 이 함수 부분을 디코더로 사용할 것임을 생각할 수 있다. 정리하면 최적화 문제는 다음과 같다. :
\[\arg \min_{S, \theta} E_{p(x)}[||f_{\theta}(x_{s})-x||_{2}]\]

하지만, 현실에서는 확률분포 \(p(x)\)를 알 수 없다 : 대신 \(p(x)\)로부터 i.i.d. 하게 n개의 데이터가 샘플링되었다고 가정한다(결국 추정값을 사용하겠다는 얘기다.)

이 n개의 샘플들은 데이터 행렬 \(X\in\mathbb{R}^{n\times d}\)의 형태로 나타내어질 수 있고, \(X\)로부터 k개 열로만 구성된 sub-matrix \(X_{S}\in\mathbb{R}^{n\times k}\)를 selection 할 수 있다. 또한, \(f_{\theta}(X_{S})\)를 이용해 matrix \(X\)를 복원할 수 있을 것이다. 결국 empirical reconstruction error는 다음과 같다. : 
\[\arg \min_{S, \theta} ||f_{\theta}(X_{S})-X||_{F}\]
(where \(||\cdot||\) denotes Frobenius norm of matrix)

하지만 이 최적화문제는 d-차원에 따라 NP-hard문제가 됨은 자명하기 때문에, back propagation이 불가능하다는 문제점을 야기하므로, 미분가능한 함수를 활용해보는 것으로 실험적 접근을 하겠다고 선언한다.

3. Proposed method

 앞서 언급하였듯이 이들이 제안하는 CAEs는 기본 오토인코더의 변형이며, discrete feature selection을 위한 모델이다. 다만, 기본 AEs에서 fully-connected layer를 encoder로 사용하는 것과 달리 concrete selector layer를 사용한다는 점에서 차이가 난다. 

또한 annealing schedule에 따라 각 layer가 결합되어가는데, (마치 simulated annealing과 같이) layer의 temp \(T\)가 0이 되면, k개 input feature를 선택하게 되는 구조이다.
-> 그렇다면 SA 외에 다른 비선형최적화 기법을 적용하는 것도 가능하지 않을까?

CAEs의 decoder는 reconstuction error function의 역할을 담당하고, 기본 AEs와 구조가 동일하다. : dataset 크기와 복잡도에 맞추어 사용자가 알아서 세팅한다.

결론적으로 제안된 방법은, 임의적으로 복잡한 형태의 reconstruction function을 효과적으로 최적화한다.

3.1 Concrete Selector Layer

 encoder가 되는 Concrete Selector Layer는 Maddison et al.(2016)과 Jang et al.(2016)에서 제안한 Concrete random variable에 그 기초를 둔다. 이 확률 변수를 샘플링함으로서, one-hot vector를 continuous relaxation 할 수 있다. 이 relaxation 과정은 3절에서 annealing schedule과 관련하여 언급한 temperature \(T\in (0,\infty)\)의 통제를 받는다. 

parameter \(\alpha\in\mathbb{R}^{d}\)와 \(T\)를 갖는 Concrete r.v.를 샘플링하기 위해서는, 우선 Gumbel distribution \(g\)에 i.i.d.한 d차원 벡터를 샘플링 해야한다. 이렇게 분포로부터 샘플링 된 \(m_{j}\)는 다음과 같이 정의할 수 있다. :
\[m_{j}= \frac{\exp((\log\alpha_{j}+g_{j})/T)}{\sum_{k=1}^d \exp((\log\alpha_{k}+g_{k})/T)}\]

(where \(m_j\) refers to the \(j^{th}\) element in a particular sample vector.)

temperature \(T\)가 0으로 수렴할수록, concrete r.v.는 이산형 분포에 접근하고, \(m_{j}=1\) with probability \(\alpha_{j}/\sum_{p} \alpha_{p}\)를 결과값으로 갖는다. Kingma & Welling(2013)에서 소개된 re-parametrization trick을 통해 매개변수 \(\alpha\)의 미분을 가능하게 하는것이 Concrete r.v.의 목적이다.

이들은 이러한 목적을 가진 Concrete r.v.을 이용해 다음의 방식으로 input feature selection을 수행한다. Concrete selector layer 전체 k개 노드 각각으로부터 d-차원의 Concrete r.v. \(m^{(i)}, i\in \{1, ... , k\}\)를 샘플링한다. (이 때, \(m^{(i)}\)에서의 i는 노드 인덱스임을 유의한다.)

selector layer 안의 i번째 노드 \(u^{(i)}\)는 \(x\cdot m^{(i)}\)를 결과값으로 내보낼 것이다. 일반적으로 이 값은, input feature의 weighted linear combination으로 볼 수 있으나, \(T\)가 0에 수렴함으로써, 각 노드로부터 concrete selector layer는 단 하나의 input feature만을 결과값으로 갖는다. 네트워크 훈련 이후 테스트에서는, concrete selector layer를 discrete arg max layer로 교체하며, 이 layer는 i번째 뉴런의 결과값으로 \(x_{\arg \max_{j} \alpha_{j}^{(i)}}\)를 갖게된다.


Conclusion

 용법이 적절하여 CAEs를 조만간 작성할 새 논문에서 활용할 예정이다. 실험관련하여서는 논문 리뷰를 하지 않는다. 다만, 유의미한 것은 dataset의 차원이 매우 고차원일 때 사용하거나, bio data와 같이 sequential dataset 형태를 띠는 경우 활용하기 좋다는 점을 부각했다는 것 정도로 정리할 수 있겠다. 
 대체적으로 Gumbel softmax trick에서 크게 벗어나지는 않았지만, 활용 방법에 따라 꾸며내기 좋은 모델을 개발하지 않았나 싶다.

2021년 7월 28일 수요일

[포트폴리오] Resume

Updated on 2021-09-30

NAME : DAE-HYUN JIN

<학력사항>


동국대학교 (2011-03 ~ 2018-02)

산업시스템공학과 전공 • 학사 / 통계학과 복수전공

동국대학교 (2020-03 ~ 2022-02 졸업예정)

통계학전공 전공 • 석사, 
데이터마이닝 연구실 / 기상데이터분석 / 시계열 / 추천시스템

<업무경험>


(주)오뚜기 (2017-12 ~ 2019-12)

품질보증실 식품안전센터 미생물팀 KOLAS 시험원,
비개발경력 / 실험계획 / QA / 정보시스템 DB관리

SSG.COM (2022-02 ~ 현재)

DA(Data Analytics) 수습 입사


<개인 프로젝트 포트폴리오>


1) 동산 잔존가치 예측 모델링 프로젝트 (2020-05 ~ 2020-08)

  • skill set : R
동산 가격 DB 데이터를 이용한 의사결정나무 가격 예측모델링
현대자동차, 나이스디앤알 발주 프로젝트로, 특정 제품의 시장 가격 DB를 이용해 시점별 수요 및 가격 예측을 목적으로 한 기초 회귀모형을 개발하는 역할을 맡았습니다. 최종 예측 모형으로 다중회귀모형과 의사결정나무 모형을 개발했습니다.
팀 구성 ― 나이스디앤알, 현대자동차, 동국대학교

2) 2021 전형 요소 타당화를 위한 종단적 연구 (2020-10 ~ 2021-01)

  • skill set : SAS, R
학적, 학업성취도 정량, 정성 데이터 분석

동국대학교 교내 연구과제로, 졸업생 중 2013, 2014학년도 신입생의 학적 및 학업성취도 데이터를 이용하여 입학 유형에 대한 세그먼트를 구성한 뒤 유형별 학생 군이 갖는 학점에 대한 진로 등에 대한 정량, 정성적 평가를 맡아 분석을 진행했습니다.

팀 구성 ― 동국대학교


3) 2021 전형 요소 표준화를 위한 종단적 연구(시계열 연구) (2020-10 ~ 2021-01)

  • skill set : SAS, R
학적, 학업성취도 시계열 데이터 분석

동국대학교 교내 연구과제로, 졸업생 중 2013, 2014학년도 신입생의 학적 및 학업성취도 데이터를 이용하여 입학 유형에 대한 세그먼트를 구성한 뒤 유형별 학생 군이 갖는 학점에 대한 시계열적 특성과 졸업 후 진로 등에 대한 정량, 정성적 평가를 맡아 분석을 진행했습니다.

팀 구성 ― 동국대학교


4) 동산 잔존가치 예측 모델링 고도화 프로젝트 (2021-04 ~ 2021-07)

  • skill set : R
기존 프로젝트 모델링의 고도화, 신규 유형 동산에 대한 신규 모델링

현대자동차, 나이스디앤알 발주 프로젝트로, 특정 제품의 시장 가격 DB를 이용해 시점별 수요 및 가격 예측을 목적으로 한 기초 회귀모형을 개발하는 역할을 맡았습니다. 기존 유형의 제품군에 대한 모델링 최적화 및 신규 유형 제품군에 대한 랜덤포레스트 기반의 모델링을 진행했습니다.

팀 구성 ― 나이스디앤알, 현대자동차, 동국대학교

5) 스포츠 공정성 확보를 위한 인공지능 기반 실시간 승부 조작 위험성 경고 시스템 구현

  • skill set : Python, R, SQL
웹 크롤링을 통한 스포츠 배팅 데이터 축적 및 LSTM, RNN 기반의 시계열 이상치 탐색 기법 연구

정보통신과학부 지원 사업으로, 웹 크롤링을 통해 스포츠 배팅 사이트의 DB를 구축하고 딥러닝 기법을 이용한 이상치 탐색 모델을 개발하는 역할을 맡았습니다.

팀 구성 ― 한국체육대학교, 동국대학교

6) Intraday 일사량 예보 성능 개선을 위한 Model Output Statistics 최적화(2021-07~)

  • skill set : Python, R, SQL
일사량 예측 MOS 개발

한국에너지기술연구원 발주 프로젝트로, 위성 관측 데이터와 수치예보모델 데이터를 이용한 다중회귀모형 개발을 통해 MOS를 개발하는 역할을 맡았습니다.

팀 구성 ― 한국에너지기술연구원, 동국대학교

7) Feature selecting Autoencoders based collaborative filtering

  • skill set : Python
Feature selection을 수행하는 Autoencoders 기반의 새로운 협업필터링 모델 개발

Continuous relaxation을 원리로 하는 응용 autoencoders를 이용하여 seed itemset이 될 수 있는 feature selection을 수행하고, rating elicitation 효과를 얻을 수 있는 collaborative filtering 알고리즘을 개발. 논문 투고중.


<자격사항>


2021-07 빅데이터분석기사
2020-12 ADsP(데이터분석준전문가)
2019-03 식품기사
2018-10 SQLD
2018-05 품질경영기사
2017-11 사회조사분석사 2급
2017-08 정보처리기사


<게재 논문>


2021-06
DOI : https://doi.org/10.5351/KJAS.2021.34.3.439
게재지 : 한국통계학회, 응용통계연구, 34권 3호
주저자 : Y (제 1저자 / 공동 4명)

Mann-Kendall 비모수 검정과 Sen's slope를 이용한 
최근 40년 남한지역 계절별 평균기온의 경향성 분석
A trend analysis of seasonal average temperatures over 40 years 
in South Korea using Mann-Kendall test and Sen's slope


2021-07
게재지 : 한국신재생에너지학회 학술대회논문집.(2021):109-109
주저자 : N (제 2저자 / 공동 5명)

태양광 발전량의 1일 예보 성능평가를 위한 다양한 시계열 모델 비교 분석
A comparison of Several Time Series Models for 
Day-ahead Solar Power Generation Forecasting



[Git] Trailing comma의 용도

 현재 저는 사내에서 개발자 교육을 받고 있습니다. 오늘의 포스팅은 해당 교육 중 과제를 통해 알게 된 Trailing comma에 대한 내용입니다.  2022-04-03, SSG TECH101 과정 중 Git 수업 Title : About Trail...