[부스트캠프 AI tech 4기] week 4 회고 📝 - 추천 시스템과 데이터 시각화(4~5)

반응형

BoostCamp AI tech

 

 

Contents

    1. 강의 내용

    1) RecSys(추천 시스템)

    1️⃣ 추천 시스템 Basic 1

    1강에서는 추천 시스템이 무엇이고, 해결하고자 하는 문제가 무엇인지와 추천 시스템을 평가하는 지표를 Offline Test와 Online Test로 나누어 학습하였고, 인기도 기반 추천이 무엇인지 예제와 함께 배웠습니다. 

     추천 시스템이란 사용자에게 적합한 아이템을 추천해주는 시스템을 의미합니다. 해결하고자 하는 문제는 특정 사용자가 특정 아이템을 소비할 Score를 어떻게 구하냐에 따라 크게 2가지로 나뉩니다. 첫번째는 랭킹 문제로, 사용자에게 적합한 아이템 Top K개를 추천하는 문제입니다. Precision@K, Recall@K, MAP@K, NDCG@K 와 같은 평가지표가 쓰입니다. 두번째는 예측 문제로, 유저가 아이템에 가질 선호도 혹은 평점을 예측하는 문제입니다. 유저가 아이템에 직접 내린 평점 데이터(Explicit Feedback Data)와, 직접적인 평가가 아니라 클릭, 시청 등의 정보(Implicit Feedback Data)를 기반으로 유저가 아이템에 가질 평점 행렬을 채우는 문제입니다. 평가지표로는 MAE, RMSE 등이 사용됩니다.

     추천 시스템의 평가 지표는 추천 시스템의 성능을 측정하는데 쓰입니다. 추천 시스템의 성능 지표는 비즈니스적 관점에선 매출, CTR등이 있고, 품질의 측면에선 유저와의 연관성, 새로움, 다양성 등이 있습니다. 추천 모델을 검증하기 위해 먼저 Offline Test를 수행합니다. Offline Test유저로 부터 수집한 데이터를 train/valid/test로 나누어 평가하는 방식입니다. 추천 시스템의 문제에 따라 위에서 설명한 바와같이 Precision@K, Recall@K, MAP@K, NDCG@K, MAE 등을 평가지표로 모델의 성능을 측정 및 향상시킵니다. 검증이 완료되면, Online A/B Test를 통해 실제 고객에게 추천을 서빙합니다. Online A/B Test는 기존 추천을 대조군(A)으로 하고, 새 모델에 의한 추천을 실험군(B)로 나누어 고객에게 제공했을 때, A에비해 B에서 매출, CTR 등의 지표가 얼마나 증가하는지를 평가합니다. 

     인기도 기반 추천이란, 말 그대로 인기있는 아이템을 유저에게 추천하는 방식입니다. 인기의 척도는 조회수, 평점, 리뷰 수, 좋아요/싫어요 수 등 다양합니다. 이 척도에 따라 추천 방식이 2가지로 나뉩니다. 첫번째는 Most Popular 방식으로 조회수가 가장 많은 아이템을 추천하는 것입니다. 이 때, 단순히 조회수만을 사용하진 않고, 최신성(얼마나 오래된 포스팅인지)과 좋아요수 등을 고려하여 추천합니다. 예시로는 Hacker News Formula와 Reddit Formula 라는 공식이 있습니다. 두번째는 Top Rated 방식으로 평점이 가장 높은 아이템을 추천하는 방식입니다. 이 때도, 단순히 평점만을 고려하진 않고, 평가 횟수가 충분한지 역시 고려합니다. 대표적인 예시로 Steam Rating Formula가 있습니다.

     

    2️⃣ 추천 시스템 Basic 2

    2강에서는 연관 규칙 분석과 TF-IDF를 활용한 컨텐츠 기반 추천에 대해 배웠습니다. 연관 규칙 분석은 하나의 상품이 등장했을 때, 다른 상품이 같이 등장하는 패턴을 찾는 것을 의미합니다. 고객이 장바구니를 들고 물건들을 살 때, 패턴을 발견하기 위해 적용된 것입니다. 연관 규칙은 IF (antecedent) TEHN (consequent)라는 형식입니다. antecedent선행 되는 아이템의 소비를 의미하고, consequent후행되는 아이템의 소비를 의미합니다. 연관 규칙의 척도는 아래 그림처럼 support(지지도), confidence(신뢰도), lift(향상도) 3가지로 이루어져있습니다.

    연관 규칙의 척도

     연관 규칙을 찾을 때, 브루트포스를 사용하면 아이템이 많아짐에 따라 연산량이 기하급수적으로 증가하기 때문에, 효율적인 접근 방식이 필요합니다. 대표적인 방법이 Apriori 알고리즘입니다. 크게 2가지 스텝으로 이루어진 방법입니다. 첫번째는 Frequent Itemset Generation으로 minimum support 이상의 아이템 셋을 만듭니다, 두번째로는 Rule Generation으로 minimum confidence 이상의 association rule을 생성합니다. 

     TF-IDF(Term Frequency - Inverse Document Frequency)는 문서의 중요 단어에 대해 벡터로 표현하는 방법입니다. 단어에 대해 상대적인 중요도를 계산하기 때문에 많이 사용됩니다. 핵심 원리문서 y에 등장하는 단어 x에 대해서, 단어 x가 문서y 에 많이 등장하면서(Term Frequency, TF) 동시에, 단어 x가 전체 문서(N)에서 적게 등장(Inverse Document. Frequency,IDF)한다면 단어 x는 문서 y를 설명하는 주요 Feature로 TF-IDF값이 높게 됩니다.

    TF-IDF

    이렇게 TF-IDF로 각 단어에 대해 상대적인 중요도를 벡터로 표현했다면, Cosine Similarity(코사인 유사도)를 이용해 두 벡터가 유사한 단어인지 알 수 있습니다.

     

    3️⃣ Collaborative Filtering 1

    3강에서는 CF문제 정의부터 원리와 분류를 다룹니다. Neighborhood-based CF의 2가지 분류 UBCF(User-Based CF)와 IBCF(Item-Based CF)를 배웠고, NBCF(Neighborhood-based CF)와 이 모델에서 발생하는 Sparsity 문제를 해결하고자 나온 KNN CF(K-Nearest Neighbors CF)모델을 배웠습니다. 또, 여러가지 유사도 (MSD, 코사인, 피어슨, 자카드)를 배웠습니다. Rating Prediction(CF를 통한 평점예측)에 대해서는 UBCF를 통한 평점 예측과 IBCF를 통한 평점 예측, 그리고 Top-N Recommendation을 배웠습니다.

     

    4️⃣ Collaborative Filtering 2

    4강에서는 MBCF(Model Based Collaborative Filtering)과 대표예시인 MF(Matrix Factorization)에 대해 배웠고 MF의 기반이 되는 SVD(Singular Value Decomposition)을 배웠습니다. Implicit Feedback에 MF를 도입한 ALS도 배웠습니다. 마지막에는 BPR(Bayesian Personalized Ranking)의 개념과 접근 방법 최대 사후 확률 추정(MAP)을 배우고, 학습 및 추론 방식을 배웠습니다.

     

    5️⃣ Word2Vec과 Item2Vec and ANN

    5강에서는 Word2Vec의 개념과 방법론 3가지(CBOW, Skip-Gram, SGNS)와 SGNS를 활용한 Item2Vec 그리고 ANN(Approximate Nearest Neighbor)을 배웠습니다. Word2Vec은 단어를 임베딩하는 방법입니다. 임베딩이란 문장에서 단어를 벡터로 표현하는 방법입니다. 기존엔 단어를 벡터로 표현할 때, One-hot encoding을 사용했습니다. 하지만 이렇게 되면 Matrix가 너무 Sparse해지고, 차원이 고차원이 되기 때문에 Word2Vec의 방법론들이 나왔습니다. CBOW는 문장에서 각 단어별로, 주변에 있는 단어를 가지고 중심단어를 예측하는 방식입니다. Skip-Gram은 CBOW의 반대입니다. 중심단어를 바탕으로 주변단어를 예측하는 방법입니다. SGNS는 Skip-Grams에 Negative Sampling 이라는 방법론을 추가한 방법입니다. 중심 단어를 기준으로 주변에 있지 않은 단어들을 Negative Sample이라고 합니다. 

     Item2Vec은 위 SGNS를 바탕으로 문장에서 단어를 임베딩한 것이 아니라, 아이템 리스트에서 각 아이템을 임베딩하는 방식입니다. 이때, 주변단어 대신에 유저가 소비한 아이템들을 그루핑하여, 주변 아이템으로 여깁니다. 

    NN(Nearest Neighbor)는 주어진 Vector Space내에서 Query Vector와 가장 유사한 Vector를 찾는 알고리즘입니다. NN을 정확하게 구하기 위해서는 한 Vector에 대해 나머지 모든 벡터와 유사도 비교를 해야하는데 이를 브루트포스 방식이라고 합니다. 이 방식은 벡터가 늘어날 수록 연산략이 기하급수적으로 늘어난다는 근본적인 한계가 있습니다. 그래서 근사해법이 필요했고, ANNOY(Approximate Nearest Neighbors Oh Yeah)라는 스포티파이에서 개발한 tree-based ANN 기법이 나왔습니다. 핵심 원리는 아래 그림처럼 임의의 두점을 선택하고 두점을 나누는 hyperlane을 그은다음에 각 면에 있는 점들을 노드로하는 바이너리 트리를 갱신해가는 방법입니다. 

    ANNOY 시각화

    외에도 비슷한 방법으로 HNSW(Hierarchical Navigable Small World Graphs)와 IVF(Inverted File Index), PQ(Product Quantization) 등의 방법이 있습니다. python으로 사용시 annoy라이브러리와, faiss라이브러리(PQ와 IVF를 동ㅇ시에 사용)를 사용할 수 있습니다.

     

    2) Data Visualization(데이터 시각화)

    4️⃣ Seaborn

    4강에서는 Seaborn에 대해 배웠습니다. Seaborn은 Matplotlib에 비해 쉬운 문벅과 깔끔한 디자인이 특징입니다. 

    1. 4-1 강: Seaborn 라이브러리 소개 (이론)
    2. 4-2 강: 아래의 기본적인 분류 5가지에 대한 시각화를 다룹니다.
      1. Categorical API: 데이터의 기본 통계량
      2. Distribution API: 범주형/연속형을 모두 살펴볼 수 있는 분포 시각화
      3. Relational API: 관계성 파악
      4. Regression API: 회귀 분석
      5. Matrix API: 히트맵
    3. 4-3 강: 여러 차트를 활용하여 정보량을 높이는 방법 3가지 (JoinPlot, PairPlot, FacetGrid)를 다룹니다.

     

    5️⃣ 다양한 시각화 방법론

    5강에서는 Polar Chart와 Pie Chart 그외에 MissingNo, Venn 등의 시각화 방법을 배웠습니다. Polar Chart는 회전, 주기성 등을 표현하기에 적합합니다. Pie Chart에 대해서는 Pie Chart의 변형인 Donut Chart, Surburst Chart까지 알아봅니다.

     

     

    2. 피어 세션

    1) 일반

    이번 주에는 레벨2 부터 부스트캠프가 끝날 때까지 함께할 팀을 구하는 이벤트들이 많았습니다. 아직 관련 분야에 대한 지식이 부족한데 프로젝트 주제를 정하고 팀까지 자율로 모으라고 하니, 다들 뭔가 정신없는 느낌이었습니다. 빠르게 팀을 모집하는 분도 계셨고, 본인이 가고싶은 팀에 대해 얘기하며 스스로를 어필하는 분들도 많았습니다. 저는 전체적으로 보다가, 지금 함께하는 우리팀만큼 케미가 좋은 팀이 없겠다 싶은 느낌이 들었습니다. 그래서 용기를 내어 현재 팀원 분들께 프로젝트도 같이 해보자고 말했고, 정말 다행히도 팀원 분들 모두가 좋다고 하였습니다. 얘기할지 말지 고민했다는 분도 계셨고, 정말 다행이라는 분도 계셨습니다. 

    2) 코딩테스트 스터디

    이번주에는 구현과 관련된 알고리즘을 풀어와 한 문제씩 발표하고 의견을 나누었습니다.

    3) 면접 질문 스터디

    이번 주 면접 질문 스터디의 주제는 Transformer였습니다. Transformer의 배경부터 왜 RNN 보다 빠른지, LayerNorm을 사용하는 이유 등에 대해 발표했습니다. 기억에 남는 것은 Transformer에서 포지셔널 인코딩(Positional Encoding)으로 왜 sin, cos 함수를 쓰는지에 대한 발표였습니다. 핵심은 회전변환으로 인한 상대 위치와, 각 문장에 대해 고유한 인코딩을 출력해야 하며, 범위가 있어야하는 값이기 때문입니다. 제가 발표한 내용은 Attention이 무엇인지, 그리고 왜 중요한지 였습니다. 핵심은 Attention Score를 구해서 가중합을 통해 각 단어별로 주의 점수를 주는 임베딩 벡터를 생성하는 것입니다. 

    4) 한 주 회고

    회고록

    3. 그 외 이벤트들

    1) 스몰톡

    8주차 까지가 level 1이고, 9주차 부터는 level2로 프로젝트 위주의 학습과 최종 프로젝트 까지 같이 진행할 팀을 스스로 찾아야 했습니다. 그 이벤트로 ZEP 에서 서로 무대위에서 본인의 팀과 본인을 어필하고 책상에서 서로 프로젝트에 대해 토의하는 스몰톡이라는 이벤트를 가졌습니다. 이런건 처음이라 신기했는데, 캠으로 얼굴도 나오고, 자료를 화면 공유할 수 도 있고, 테이블로 가면 그 테이블 밖에는 소리가 안들리고, 테이블에 앉아야 소리가 들리는 등 재밌는 기능들이 많았습니다.

     

    2) 마스터클래스

    캐글에서 노트북 부분의 그랜드 마스터이신 안수빈님이 발표해주셨습니다. 학창 시절부터 대학교를 거쳐 어떻게 커리어를 쌓아가고, 어떤 마음으로 어떤 도전을 했는지 허심탄회하게 말씀해주셨습니다. 석사 논문할때는 스트레스가 극심하고 힘들어서 링겔을 맞을 정도로 하셨다고 했습니다. 번아웃에 어떻게 대처하냐는 질문이 와닿았습니다. 번아웃이 오면 하던일을 모두 관두고, 흥미를 끄는 새로운 일에 도전해본다고 하셨습니다. 

     

    2) 오피스아워

    기본 과제 대한 해설이 있었습니다.

     

    Reference)
    1. 네이버 부스트캠프 Ai tech 4기
    2. ANNOY 시각화: https://www.slideshare.net/erikbern/approximate-nearest-neighbor-methods-and-vector-models-nyc-ml-meetup
    3. 연관 규칙의 척도 : http://bigdata.dongguk.ac.kr/lectures/datascience/_book/%EC%97%B0%EA%B4%80%EA%B7%9C%EC%B9%99%EB%B6%84%EC%84%9D.html#%EC%97%B0%EA%B4%80%EA%B7%9C%EC%B9%99%EB%B6%84%EC%84%9D%EC%9D%98-%EC%B8%A1%EB%8F%84
    4. TF-IDF : https://class101.dev/ko/blog/2019/07/16/esmond/
    5.


    반응형

    댓글

    Designed by JB FACTORY