<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sunny_ho.log</title>
        <link>https://velog.io/</link>
        <description>아좌아좌 어리버리 내 인생 &gt;&lt;</description>
        <lastBuildDate>Thu, 19 Sep 2024 01:07:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sunny_ho.log</title>
            <url>https://velog.velcdn.com/images/sunny_ho/profile/78e58cec-3d26-40f8-ab8d-9962aa4d1977/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sunny_ho.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sunny_ho" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[논문 리뷰] A Deep Probabilistic Model for Customer Lifetime Value Prediction]]></title>
            <link>https://velog.io/@sunny_ho/A-Deep-Probabilistic-Model-for-Customer-Lifetime-Value-Prediction-%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@sunny_ho/A-Deep-Probabilistic-Model-for-Customer-Lifetime-Value-Prediction-%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Thu, 19 Sep 2024 01:07:13 GMT</pubDate>
            <description><![CDATA[<p><a href="https://arxiv.org/abs/1912.07753">https://arxiv.org/abs/1912.07753</a></p>
<h1 id="abstract">Abstract</h1>
<hr>
<ul>
<li>LTV를 예측하는 것이 고객 중심적인 마케팅 전략을 구축하는데 도움을 줌 (CRM)
ex) 예측된 LTV에 따라 고객을 다양한 그룹으로 나누고 각 그룹의 고객에게 <pre><code>   맞춤형 마케팅 제공 가능.</code></pre></li>
</ul>
<ul>
<li>LTV 예측은 마케팅 예산 할당에 도움을 주고 <strong>RTB</strong> (real Time Bidding)를 개선함</li>
</ul>
<p>  : <code>RTB</code> - 마케팅 용어, 실시간 온라인 광고 입찰 시스템을 말함</p>
<ul>
<li><p>LTV 모델링이 어려운 점은 일부 고객은 돌아오지 않는다는 것과 </p>
</li>
<li><p><em>Heavy-tailed distribution*</em>을 가질 수 있다는 것임</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/0f8cf5d7-d436-47fe-86ab-052593b67a73/image.png" width = "300" height = "300"></center>

<p> : <code>Heavy-tailed distribution</code> - 지수함수보다 느리게 감쇠되는 꼬리를 가진 분포</p>
<br>
</li>
<li><p>그러나 잘 알려진 MSE는 LTV의 대부분을 차지하는 값이 0인 일회성 고객과 
민감할 수 있는 충성 고객의 매우 큰 LTV 값을 고려하지 않음</p>
</li>
</ul>
<ul>
<li><p>따라서 관련된 특징에 대한 LTV 분포를 <strong>zero-inflated lognormal (ZILN) distribution</strong> 라고 하는 LTV가 0인 경우를 나타내는 제로 집중 부분과 로그 정규 분포의 혼합으로 모델링함
<br>    💡 즉, 이 분포는 일회성 고객으로부터의 제로 값 LTV를 고려하면서도 다른 고객들의 LTV 분포를 로그 정규 분포로 모델링하는 것    </p>
<br>   
</li>
<li><p>이 접근법은 고객 이탈 확률을 포착하고 LTV의 heavy-tailedness한 특성을 동시에 고려</p>
</li>
<li><p>성능 평가를 위해 <strong>정규화된 지니 계수</strong>를 추천하고 모델 교정을 위해 <strong>Decile charts</strong> 추천</p>
<br>
# Introduction

</li>
</ul>
<hr>
<p>Abstract이랑 비슷한 얘기를 함</p>
<ul>
<li><p>마케팅 예산 개선, 프로모션 제안, 충성도 보상 프로그램 및 <strong>화이트 글러브</strong> <strong>서비스</strong> 제공 가능</p>
<p>  : <code>화이트 글러브 서비스</code> - 극진한 고객 맞춤 서비스</p>
</li>
</ul>
<ul>
<li><p>기존 고객의 LTV 예측의 발전은 대부분 <strong>RFM</strong> 프레임 워크의 확장과 관련되어 있음</p>
<p>  : <code>RFM</code> - Recency (최신성), Frequency (빈도), Monetary (금액)</p>
</li>
</ul>
<ul>
<li><p>가장 잘 알려진 접근 방법은 <strong>BTYD</strong> (Buy Till You Die) 모델로 이는 LTV 계산을 위해
<strong>과거</strong> 거래 데이터에 확률적 모델을 적용한 것임</p>
<ul>
<li>BTYD
 BTYD 모델은 아래와 같은 질문에 답을 해준다<ul>
<li>활성 고객은 몇 명인가</li>
<li>지금부터 N년 후에 얼마나 많은 고객이 활동 중일까</li>
<li>어떤 고객이 이탈했나</li>
<li>고객은 미래에 회사에 얼마나 가치가 있을까</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>주로 주문 테이블 (영수증 인 듯)과 RFM 지표를 활용함
그러나, BTYD 모델은 <strong>새로운 고객</strong>에게 적용되지 않음.</p>
<blockquote>
<p>따라서 새로운 고객의 LTV 예측에는 다른 방법이 필요. 이 논문은 여기에 FOCUS 중임</p>
</blockquote>
<h3 id="지도-학습-회귀-supervised-regression">지도 학습 회귀 (Supervised regression)</h3>
<p>그래서 지도 학습 회귀를 사용함</p>
<ul>
<li>BTYD 모델과 달리 모든 수준의 고객 특성을 활용</li>
<li>DNN 아키텍쳐 활용</li>
</ul>
<p>그러나 개별 고객의 LTV를 정확히 예측하는 것은 어려운 작업임. </p>
<p>두 가지 문제가 있는데</p>
<ol>
<li>많은 고객이 일회성 고객이며 다시 구매하지 않으므로 zero 값 레이블이 있음</li>
<li>되돌아오는 고객의 LTV는 변동이 크며 LTV 분포는 매우 치우쳐 있음</li>
</ol>
<blockquote>
<p>이를 해결하기 위해 <strong>ZILN loss</strong>를 제안</p>
</blockquote>
<p>ZILN loss는 제로 값 및 극단적으로 큰 LTV 레이블을 처리함</p>
<hr>
<h1 id="dnn-model-with-ziln-loss">DNN Model With ZILN Loss</h1>
<p>그림은 전형적인 비대칭 LTV 분포로 대부분의 온라인 광고 고객의 LTV 분포를 나타낸다.</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/b66a179a-33e9-46f7-827d-654ac2e2acd5/image.png" width = "500"></center>

<ul>
<li><p>LTV = 0에서의 큰 수는 일회성 고객의 비율을 보여줌</p>
</li>
<li><p>돌아오는 고객을 가시적으로 강조하기 위해 x축을 (LTV + 1)의 로그 값으로 표시함
  이는 돌아오는 고객의 주기 범위가 상당히 넓다는 것을 알 수 있음</p>
</li>
<li><p>이러한 분포는 일회성 고객의 비율이 크고 일부의 충성 고객으로 구성되어 있어</p>
<p>  전통적인 MSE loss 방식에 어려움을 제공함 </p>
</li>
</ul>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/a8fe7417-d99c-4895-a4be-765588610a14/image.png" width = "500"></center>


<p>일반적으로 LTV 및 이탈 모델링은 별도로 수행되나 (그림 왼쪽) , </p>
<p>이 논문은 DNN을 이용하여 <strong>동시에 고객 이탈과 LTV 예측을 다루도록 함</strong> (그림 오른쪽)</p>
<h3 id="mse-loss">MSE Loss</h3>
<p>MSE는 고액 지출 고객에 대한 예측 오류를 과도한 패널티를 부여할 수 있음</p>
<p>이는 모델을 이상치에 민감하게 만들어 훈련을 불안정하게 함</p>
<p>MSE 손실을 Quantile loss (분위수 손실)로 교체하면 이상치 문제가 완화되지만, </p>
<p>모델은 주로 요구되는 LTV의 평균을 예측하지 못할 수 있음 !</p>
<h3 id="ziln-loss">ZILN Loss</h3>
<p>따라서 ZILN 분포에 음의 로그 우도를 취하여 혼합된 loss를 유도함</p>
<p>이러한 loss는 구매 경향성과 특정 기간 동안 고객이 기업에게 제공하는 예상 수익을 </p>
<p>동시에 학습시키는 것을 가능하게 함</p>
<p><strong>로그 정규 분포 (lognormal distribution)</strong></p>
<p>long tail의 양수 값만을 갖는 로그 정규분포는 돌아오는 고객의 LTV 분포를 모델링하기 좋음</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/437bf094-dc1f-40e1-a3d1-1122c428818d/image.png" width = "500"></center>

<p>수학적으로 로그 정규분포의 손실인 $L_{Lognormal}$은 </p>
<p>평균 $µ$와 표준 편차 $σ$를 갖는 로그 정규분포의 음의 로그 우도로 유도됨</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/41710203-4d29-4149-b694-6f5905d530ab/image.png" width = 500></center>

<p>MSE loss와 로그 정규분포 loss를 y축, 평균 $θ$를 x축으로 하는 함수로 비교해 보면</p>
<p>특정 관측값 ($x = 20$)에 대해 MSE는 관측값 주변에서 대칭적으로 패널티를 부과하는 반면, </p>
<p>로그 정규분포 loss는 큰 값에 대해 패널티를 덜 부과함. argmin은 $σ$가 증가함에 따라 증가함</p>
<ul>
<li><code>argmin</code>  : y값이 최소가 되는 x값</li>
</ul>
<p>이는 로그 변환된 $X$에 대한 가중 MSE로 볼 수 있으며 여기서 표준 편차 $σ$가 가중 역할을 함</p>
<p>더불어, 표준 편차  $σ$는 평균 µ와 마찬가지로 입력 특성에 따라 달라질 수 있고</p>
<p>이는 LTV에 대해 이분산성 로그 정규 분포 (Heteroscedastic lognormal)를 함축한다</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/fb190efb-201c-48b5-8459-0973fec653f5/image.png" width = 300></center>


<p>: $σ$의 좋은 추정치를 얻는 것은 평균 예측의 편향에 직접적으로 영향을 미치므로 매우 중요</p>
<p><strong>ZILN loss</strong>는 ZILN 분포된 확률 변수의 음의 로그 우도로 유도될 수 있으며</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/bdfabcfe-a97d-41c6-978f-10e97ef17fb4/image.png" width=700></center>


<ul>
<li>$p$ :  0이 아닌지 여부의 확률<br>

</li>
</ul>
<p>ZILN loss는 두 개의 의미로 해석할 수 있다</p>
<ol>
<li>고객이 재방문 고객인지 여부에 대한 분류 손실</li>
<li>반복 고객의 LTV에 대한 회귀 손실</li>
</ol>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/db20fde7-54d0-4068-8bab-9f0962438ae0/image.png" width=400>

<p>ZILN loss를 가진 DNN 네트워크 구조</center></p>
<ul>
<li>$p$ : 돌아온 고객의 확률 (고객 이탈 여부)</li>
<li>$µ$, $σ$ : 돌아온 고객의 LTV에 대한 로그 정규 분포의 평균과 표준편차</li>
</ul>
<p><strong>DNN의 마지막 레이어 (블랙)</strong></p>
<p>세 개의 사전 활성화된 로짓 유닛을 가지고 있으며 각각 $p$,  $µ$, $σ$ 를 개별적으로 결정한다</p>
<p>세 가지 활성화 함수는 시그모이드, 항등 함수, 그리고 소프트 플러스.</p>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/b3133a99-b2bf-4ca5-8efd-c40985afc2a2/image.png" width=400></center>


<p>항등 함수는 다 아니까 pass</p>
<hr>
<p> $p$ &amp; <strong>시그모이드</strong></p>
<p>: 시그모이드는  출력 값의 범위가 0에서 1 사이이기 때문에 확률을 예측하기 적합</p>
<p> 일반적인 임계값은 0.5로 0.5보다 낮은 값은 돌아온 고객을 의미하며 </p>
<p> 0.5보다 높은 값은 손실되었다고 예측한다
 <br></p>
<p>$µ$ &amp; <strong>항등 함수</strong></p>
<p>: $µ$ 유닛은 범위나 부호에 제한이 없으므로 항등 함수를 사용하였음</p>
<p>  이는 활성화 함수를 쓰지 않고 단순히 $µ$ 유닛의 예측 값을 출력한다는 의미임
   <br></p>
<p>$σ$ &amp; <strong>소프트 플러스</strong></p>
<p> : $σ$는 양수만 반환 해야함. 지수 함수도 양수 제약 조건을 해결할 수 있지만 기울기가 가파르기 </p>
<p> 때문에 그래디언트가 쉽게 폭발할 수 있음. 따라서 <code>gradient clipping</code>을 적용한 소프트플러스 사용
<br></p>
<ul>
<li><p><strong>gradient clipping</strong>
경사 클리핑 (gradient clipping)은 신경망에서 발생할 수 있는 그래디언트 폭주 문제를</p>
<p>  완화하기 위한 기법 중 하나로 일정한 임계값을 설정하고 그래디언트가 임계값을 
  초과할 경우 그 값을 자르는 방식으로 작동한다</p>
</li>
</ul>
<hr>
<p><strong>DNN의 중간 레이어 (노랑)</strong></p>
<p>본질적으로 두 가지 작업과 관련되어 있으며 이는 </p>
<ol>
<li>돌아온 고객의 분류를 예측</li>
<li>돌아온 고객의 지출을 예측</li>
</ol>
<p>이 아키텍처는 각 작업에 대해 모델이 더 잘 일반화되도록 장려하며 multi-task learning의 </p>
<p>핵심 아이디어를 공유함  (Ruder, 2017).</p>
<p>ZILN loss의 또 다른 주요 장점은 $µ$, $σ$를 통해  <strong>전체 예측 분포를 제공</strong>한다는 것임 </p>
<p>우리는 돌아온 고객의 <strong>확률</strong>뿐만 아니라 돌아온 고객의 <strong>LTV 값 분포</strong>도 얻을 수 있음! </p>
<p>평균 LTV 예측에 추가로 LTV 예측의 불확실성은 일반적인 분위수 회귀 
(quantile regression)처럼 로그 정규 분포의 분위수를 사용하여 평가할 수 있음</p>
<hr>
<h1 id="evaluation-metrics">Evaluation Metrics</h1>
<h3 id="auc">AUC</h3>
<p>AUC는 ROC curve 아래의 면적을 나타내는 지표로 </p>
<p>돌아오는 고객 대 돌아오지 않는 고객의 이진 분류 문제에서 일반적으로 사용됨</p>
<ul>
<li><p><strong>ROC curve</strong></p>
  <aside>
  이진 분류기의 성능을 표현하는 곡선으로 가능한 모든 threshold에 대해

<p>  FPR과 TPR의 비율을 표현</p>
  </aside>
</li>
<li><p>즉, AUC는 평가 중인 분류기가 <strong>돌아오는 고객이 돌아오지 않는 고객보다 더 높은 것을 올바르게</strong></p>
<p>  <strong>예측할 수 있는 확률.</strong></p>
</li>
<li><p>AUC는 0.5 - 1 사이에 위치하며 값이 높을수록 모델이 돌아올 고객을 올바르게 판단하는데</p>
<p>  더 뛰어나다고 해석</p>
</li>
</ul>
<h3 id="ltv-모델의-성능-평가">LTV 모델의 성능 평가</h3>
<ul>
<li><p>과거에는 실제 LTV와 예측된 LTV 간의 <strong>피어슨 상관관계</strong>를 사용하여 성능을 평가</p>
<ul>
<li>그러나 이 측정치는 데이터의 이상치에 민감할 수 있음</li>
</ul>
</li>
<li><p>따라서 요즘은 <strong>스피어만 순위 상관관계</strong>를 사용합</p>
</li>
<li><p>LTV 모델의 성능을 평가할 때 두 가지 측면에서 접근함</p>
<ul>
<li><p><strong>모델의 구별력</strong></p>
<p>  : 충성 고객을 나머지 고객과 구별하는 모델의 능력</p>
</li>
<li><p><strong>모델의 보정도</strong></p>
<p>  : 실제와 예측된 LTV 간의 일치를 의미</p>
</li>
</ul>
</li>
</ul>
<hr>
<h2 id="model-discrimination-모델-구별력">Model Discrimination (모델 구별력)</h2>
<p>Donkers 등은 hit-rate 지표를 제안한다.</p>
<h3 id="hit-rate-measure">Hit-rate measure</h3>
<p>이는 예측된 LTV가 실제 LTV와 동일한 범주에 속하는 고객의 백분율로</p>
<p>예를 들어, 상위 25% 가치의 고객의 LTV가 200 이상이라면 Hit-rate는 이러한 고객 중 몇 명의 </p>
<p>LTV를 200 이상으로 예측했는지를 count</p>
<h3 id="순서-기반의-hit-rate-measure">순서 기반의 Hit-rate measure</h3>
<p>실제 LTV를 기준으로 예측된 LTV의 상위 25%에 속하는 고객의 수를 count 하는 방식</p>
<blockquote>
<p>우리는 Hit-rate level을 구체적으로 지정하지 않고 Hit-rate를 <strong>일반화</strong>하는 지표를 
사용할 건데 그게 <strong>지니계수</strong></p>
</blockquote>
<h3 id="gini-coefficient-지니-계수">Gini coefficient (지니 계수)</h3>
<p>지니 계수는 주로 경제학에서 소득의 불평등을 측정하는데 사용됨</p>
<ul>
<li><strong>지니 계수와 로렌츠 곡선</strong>
로렌츠 곡선
인구의 누적 비율을 x축에 소득의 누적 점유율을 y축에 놓고 이들의 관계를 그린 곡선</li>
</ul>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/81617645-b8ab-42a2-a9a5-a623a4494956/image.png" width=350> </center>


<p>  지니 계수
지니 계수란 불평등 면적을 로렌츠 곡선 상의 전체 직각삼각형 (ABC)로 나눈 값을 의미</p>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/1a28809a-12de-410d-becb-0bbae5d84e9e/image.png" width=500> </center>


<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/5e8a4782-dcb9-4833-86e9-ef253d3ede89/image.png" width=400>


<p> : 불평등면적이 0이면 완전히 평등한 경제를, 1이면 완전히 불평등한 경제를 의미</center></p>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/dcecfb40-213f-4c81-bffe-dfff14c3d112/image.png" width=500>
이는 이익 곡선으로 두 가지 예측 모델 A와 B를 비교. </center>

<br>

<ul>
<li><p>각 점 $(x, y)$은 예측된 상위  $x$ %의 고객이 전체 수익의 $y$ %를 기여한다는 것을 나타냄</p>
</li>
<li><p>모델 A는 모델 B보다 고객을 구별하는 데 더 우수함</p>
<p>  : 모델 곡선이 로렌츠 곡선에 가까울수록 모델이 고객을 구별하는 데 더 우수</p>
</li>
<li><p>실제 값은 고객의 실제 LTV에 따라 정렬하여 구성된 로렌츠 곡선을 나타낸다</p>
</li>
</ul>
<br>
지니 계수는 세 단계로 계산된다

<ol>
<li><p><strong>실제 LTV를 내림차순으로 정렬</strong></p>
<p> : 기존 정의는 오름차순이지만 충성 고객에 대한 직관적인 해석을 위해 변경</p>
</li>
<li><p><strong>로렌츠 곡선</strong>을 그림</p>
<p> : 누적된 전체 LTV(세로축)에 대한 누적된 고객 백분율(가로축)을 의미</p>
<p>  곡선 상의 한 점 (x, y)은 상위 x %의 고객이 전체 고객 가치의 y %를 차지함을 의미</p>
</li>
<li><p><strong>지니 계수</strong></p>
<p> : 로렌츠 곡선과 45도 대각선 선 사이의 면적의 두 배로 이는 고객의 임의 정렬을 의미</p>
</li>
</ol>
<ul>
<li><p>지니 계수는 이진 분류기의 경우, 2 * AUC - 1을 한 것임</p>
</li>
<li><p>지니 계수는 예측의 순위에만 기초하며 모델 보정도에 민감하지 않은데</p>
<p>  이는 특히 예측된 LTV를 기반으로 고객을 분류하는 경우에 유용함</p>
</li>
<li><p>정규화된 지니 계수는  특정  Hit-rate level을 지정할 필요가 없음</p>
<br>

</li>
</ul>
<p><strong>기준 지니 계수</strong> <strong>(baseline Gini coefficient)</strong></p>
<p>: 단계 1에서 실제 LTV 대신 첫 번째 구매 값으로 대체하여 세 번째 유형의 지니 계수를 계산한 것</p>
<ul>
<li><p>첫 번째 구매 값과 LTV 간의 높은 상관 관계로 인해 <strong>기준 지니 계수</strong>는 합리적이고 실용적인</p>
<p>   하한선으로 간주됨</p>
</li>
</ul>
<ul>
<li><p>이후에는 고객 속성, 첫 번째 구매의 메타 데이터, 그리고 비구매 행동과 같은 다른 예측 신호를</p>
<p>  추가함으로써 <strong>기준 지니 계수</strong>를 개선할 수 있음</p>
  <br>
</li>
</ul>
<hr>
<h2 id="model--calibration-모델-보정도">Model  Calibration (모델 보정도)</h2>
<p>이진 분류 문제에서는 연속 확률 예측을 출력하는 소프트 분류기를 평가하기 위해 </p>
<p><strong><code>보정 그래프</code></strong>가 널리 사용됨</p>
<ul>
<li><strong>보정 그래프</strong></li>
</ul>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/b66a9ea3-f757-4d03-b073-0bada71a1827/image.png" width=400></center>

<p>x축에 예측된 확률을, y축에는 positive 레이블의 비율을 나타내는 적합성 판단 그래프</p>
<p>예를 들어, 충성 고객일 확률이 20%로 예측된다면 해당 예측을 받은 100명 중 약 20명이 </p>
<p>충성 고객이어야 하고 완벽한 예측은 $y = x$ 위에 있어야 함.</p>
<h3 id="decile-chart-십분위-차트">Decile chart (십분위 차트)</h3>
<p>: 각 예측 십분위에 대해 평균 예측과 평균 레이블을 비교하는 차트</p>
<p>회귀 문제에서 보정 그래프는 예측된 값과 실제 값 간의 산점도로 나타낼 수 있음 </p>
<p>그러나, LTV 문제와 같이 레이블이 매우 치우친 분포를 가질 때 산점도는 작은 예측 영역의 </p>
<p>보정을 설명하기 어려울 수 있음. </p>
<blockquote>
<p>따라서, 예측의 십분위로 레이블을 plot하는 <strong>십분위 차트</strong>를 사용</p>
</blockquote>
<p>이때 잘 보정된 모델은 각 예측 십분위에 대해 예측 평균이 레이블 평균과 유사</p>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/fa73d4be-3f28-46db-93b7-6029438cd47a/image.png" width=700>

<p>Decile chart (십분위 차트)의 예시.</center>
<br></p>
<ul>
<li>왼쪽은 높은 10분위에서 과대예측되고 낮은 10분위에서 과소예측되는 나쁜 보정의 예</li>
<li>오른쪽은 각 10분위별로 예측된 LTV가 실제 LTV와 유사하게 일치하는 좋은 모델 보정</li>
<li>또한, Decile chart는 <strong>모델의 구분력</strong>을 질적으로 평가함
: 좋은 구분력을 가진 모델은 십분위 간의 차이가 크다<br>    

</li>
</ul>
<h3 id="mape-평균-절대-백분율-오차">MAPE (평균 절대 백분율 오차)</h3>
<p>MAPE는 Mean Absolute Percentage Error의 약자로 예측 오차의 크기를 상대적으로 
측정하는 지표로 회귀 모델 성능 평가 지표이다</p>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/730b0cd2-cc8f-413e-87a1-144828bba854/image.png" width=280></center>


<ul>
<li>$y_i$ : i 번째 예측 십분위에 있는 고객들의 레이블 평균</li>
<li>$ŷ_i$ : i 번째 예측 십분위에 있는 고객들의 예측</li>
<li>$n$ : 샘플 수</li>
</ul>
<p>MAPE가 낮을수록 모델의 예측이 실제 값과 가깝다고 해석할 수 있음</p>
<hr>
<h1 id="data-experiments">Data Experiments</h1>
<h2 id="kaggle-acquire-valued-shoppers-challenge">Kaggle acquire valued shoppers challenge</h2>
<ul>
<li><p>데이터셋은 33,000개 회사의 311,000명 고객에 대한 쇼핑 이력을 포함</p>
</li>
<li><p>초기 구매 이후 다음 12개월 간 각 고객의 총 구매 가치를 예측하는 작업 진행</p>
</li>
<li><p>모델의 특징은 초기 구매 금액, 구매된 항목 수, 그리고 각 개별 구매된 항목의 가게 체인,</p>
<ul>
<li>제품 카테고리, 제품 브랜드 및 제품 크기 측정치를 포함</li>
</ul>
</li>
<li><p>고객 수에 기반하여 상위 20개 회사로 실험을 제한하고 각 회사에 대해, 모델 훈련을 위해 고객의 80%를 임의로 선택하고 나머지 20%를 모델 평가에 사용</p>
</li>
<li><p>모델 아키텍처와 손실 함수를 기준으로 실험 진행</p>
<ul>
<li><p>선형 및 DNN 모델</p>
</li>
<li><p>ZILN 손실을 MSE 손실과 비교</p>
</li>
<li><p>추가로, 돌아온 고객 예측의 이진 분류 결과를 보고  </p>
</li>
</ul>
</li>
</ul>
<br>

<h3 id="spearmans-correlation">Spearman’s Correlation</h3>
<ul>
<li><p>ZILN loss는  Linear의 경우 평균적으로 약 23.9% 높고 
DNN의 경우 약 48% 높은 스피어만 상관 관계를 보여줌</p>
</li>
<li><p>ZILN loss의 경우  Linear 모델에 비해 DNN이 평균적으로 2.2% 정도 높음</p>
</li>
</ul>
<h3 id="model-discrimination">Model Discrimination</h3>
<p>4가지 모델과 기준 모델에 대한 정규화된 지니 계수를 요약</p>
<ul>
<li>기준 모델은 초기 구매 가치에 따라 고객이 순위가 매겨진 것임</li>
<li>기준 모델 대비 평균적으로 DNN-MSE는 10.6%, DNN-ZILN은 23.1%,<br>선형-ZILN은  21.3% 향상</li>
<li>선형-MSE 모델은 이상치 존재로 인한 미니 배치 수렴 문제로 인해 
일부는 성능이 더 떨어짐</li>
<li>ZILN loss는 선형 (28.6%) 및 DNN (11.4%) 모두에서 MSE loss를 능가</li>
</ul>
<h3 id="model-calibration">Model Calibration</h3>
<p> 네 가지 모델에 대한 Decile-level MAPE를 보여줌</p>
<ul>
<li>ZILN 손실은 MSE 손실보다 낮은 Decile-level MAPE를 보임</li>
<li>선형 모델에서는 60.0% 감소하고 DNN에서는 68.9% 감소함</li>
<li>ZILN 손실을 사용시 DNN이 선형 모델보다 Decile-level MAPE를 추가로 5.3% 감소</li>
</ul>
<h3 id="returning-customer-prediction">Returning Customer Prediction</h3>
<p>이진 분류 작업인 돌아온 고객 예측의 AUC_PR을 보여줌</p>
<ul>
<li>ZILN은 표준 Binary Cross Entropy (BCE) 손실과 유사한 성능을 보임</li>
<li>AUC_PR :  돌아온 고객 예측에 대한 Precision-Recall Curve의 면적</li>
</ul>
<h2 id="kdd-cup-1998">KDD Cup 1998</h2>
<ul>
<li><p>지난 12개월 동안 기부를 중단한 사람들을 대상으로 함</p>
</li>
<li><p>데이터셋에는 1997년 메일링을 받았지만 직전 12개월 동안 기부를 하지 않은 
약 20만 명의 이전 기부자가 포함되어 있음</p>
</li>
<li><p>1997년 메일링 캠페인에 대한 기부 달러 값을 예측 !</p>
</li>
<li><p>레이블에는 zero와 positive 기부값이 혼합되어 있음</p>
</li>
<li><p>약 95%의 중단된 기부자가 1997년 메일링 캠페인에 응답하지 않아 zero lable 값을 부여</p>
</li>
<li><p>나머지 5%의 중단된 기부자 중에서는 positive 기부값의 분포가 로그 스케일로 나타남</p>
</li>
</ul>
<br>

<h3 id="log-scale-from-the-5-lapsed-donors">log scale from the 5% lapsed donors</h3>
<center><img src ="https://velog.velcdn.com/images/sunny_ho/post/3fa9ca0f-6dd1-470f-a91d-313446f31fe5/image.png" width=500>


<p>5% 중단된 기부자들의  positive 기부값의 분포를 로그 스케일로 나타낸 그래프</center></p>
<ul>
<li>MSE 손실과 비교하여 ZILN 손실은 스피어만 순위 상관 관계가 더 높다 (0.027 vs 0.020)</li>
<li>모델 구분력 측면에서 ZILN 손실은 정규화된 지니 계수가 더 높다 (0.190 vs 0.184)</li>
<li>ZILN 손실은 모델 보정에서도 MSE보다 MAPE가 더 작다 (0.176 대 0.210)</li>
</ul>
<blockquote>
<p>우수한 성능을 보여줌</p>
</blockquote>
<hr>
<h1 id="conclusion">Conclusion</h1>
<ol>
<li><p>LTV 예측이 다양한 마케팅 결정에 어떻게 영향을 미칠 수 있는지 확인</p>
</li>
<li><p>DNN을 사용하여 고객 속성 및 구매 메타데이터를 기반으로 새로운 고객의 LTV를 예측</p>
</li>
<li><p>ZILN loss는 zero values와 heavy-tailed values를 혼합한 것임</p>
</li>
<li><p>모델 구분력을 위해 정규화된 지니 계수를, 
모델 보정도를 평가하기 위해 십분위 차트를 추천</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Mult-VAE]]></title>
            <link>https://velog.io/@sunny_ho/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Mult-VAE</link>
            <guid>https://velog.io/@sunny_ho/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Mult-VAE</guid>
            <pubDate>Tue, 17 Sep 2024 17:31:14 GMT</pubDate>
            <description><![CDATA[<p><a href="https://arxiv.org/pdf/1802.05814">https://arxiv.org/pdf/1802.05814</a></p>
<p>생성 모델은 대표적으로 학습 데이터의 분포를 기반으로 샘플링하는 Explicit density 방식과 분포를 모른 상태로 샘플링하는 Implicit density 방식으로 나뉨. </p>
<p>이 논문은 Explicit density 기반의 VAE를 넷플릭스가 추천시스템에서 활용한 논문.
전반적으로 VAE와 유사하나 디코더 부분에서 어느 분포를 가정하는 정도의 차이를 보임.</p>
<hr>
<h1 id="abstract">Abstract</h1>
<p>본 논문은 VAEs를 implicit feedback에 기반한 협업 필터링에 확장하여 적용하였음. </p>
<blockquote>
<p>  implicit feedback
    ex ) 좋아요 버튼을 누르지 않았지만, 여러 번 본 콘텐츠</p>
</blockquote>
<ul>
<li><p>기존의 협업 필터링은 선형 모델에 의존했는데, 이는 복잡한 데이터 구조를 잘 반영하지 못하는 한계가 존재. 변분 오토인코더는 <strong>비선형 모델</strong>로, 복잡한 상호작용을 잘 반영.</p>
</li>
<li><p>추천을 생성하는 과정에서 데이터를 다항 분포로 가정하고, 베이지안 추론을 통해 
모델의 파라미터를  추정.</p>
</li>
<li><p>목적 함수를 학습할 때, 기존 VAEs는 과도하게 정규화 되었다고 판단하고 </p>
</li>
<li><p><em>anneling *</em>기법을 통해 개선한 regularization parameter를 사용하였음. </p>
</li>
</ul>
<hr>
<h1 id="introduction">Introduction</h1>
<p>기존 추천 시스템은 평균 정밀도 (mAP) 등의 순위 기반 척도를 활용하여 평가되었음. </p>
<p>그러나, Top-N ranking loss는 최적화하기 어렵기 때문에 이전에는 근사치를 사용.
이후 넷플릭스 팀은 multinomial likelihood이 암시적 피드백 데이터 모델링에 적합하며 가우시안, 로지스틱보다 <strong>ranking loss</strong>를 줄이는데 효과적임을 주장.</p>
<p>추천 시스템은 보통 수많은 사용자와 아이템이 존재하기 때문에 big data problem으로 여겨짐. 
그러나 대부분의 사용자는 전체 아이템 중 극히 <strong>일부만 상호작용</strong>하기 때문에 
우리가 필요한 상호작용 데이터는 매우 적어 small-data problem으로 봐야함. </p>
<p>따라서, sparse signals로부터 오버피팅을 방지하고자 본 논문에서는 확률적 잠재 변수 모델 
(probabilistic latent-variable)을 구축하고 베이지안 접근법을 사용.</p>
<p>추천시스템에서 VAEs의 SOTA 성능을 달성하기 위해서는 아래와 같음.</p>
<p><strong>1. multinomial likelihood 데이터 분포 사용</strong>
<strong>2. 기존 VAEs 목적함수의 regularization term 개선</strong></p>
<hr>
<h1 id="method">Method</h1>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/9daec94b-4060-4b9b-96c1-e08d093f3186/image.png" width = "300" height = "300"></center>



<ul>
<li>𝑈 : 총 사용자 수 </li>
<li>𝐼 : 총 아이템 수</li>
<li>𝑢 :개별 사용자</li>
<li>𝑖 : 개별 아이템</li>
<li>𝑋 : 사용자와 아이템 간의 상호작용 행렬</li>
</ul>
<p>행렬 𝑋는 총 𝑈 명의 사용자가 총 𝐼 개의 아이템을 클릭한 횟수를 말하며 그 크기는 𝑈×𝐼. </p>
<p>$u$의 클릭 데이터 $x_u$는 Bag-of-Words 방식으로 각 아이템 𝑖에 대한 클릭 횟수를 요소로 가짐. </p>
<p>암시적 피드백 데이터를 다루기 위해 행렬 𝑋는 <strong>이진화</strong>.</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/cfb6ba65-b894-4a8a-9d00-4300e8c833e1/image.jpg" width = "300" height = "300"></center>

<center>( 이런 식으로 )</center>

<hr>
<h1 id="model">Model</h1>
<p>변분 오토 인코더를 활용한 추천 시스템에서 사용자의 클릭 데이터를 생성하는 과정</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/d6e68411-b760-419c-baa5-1b7264a7106b/image.png" width = "600"></center>


<blockquote>
<p>$\mathbf{z}_u \sim \mathcal{N}(0, \mathbf{I}_K)$ </p>
</blockquote>
<p>여기서 생성 과정은 사용자 $u$에 대해 $K$개의 차원을 가진 잠재 표현 $z_u$에서 샘플링 됨. 
이때 $z_u$는 기존 VAE와 같이 인코더를 거쳐 표준 정규 분포 (Standard Gaussian)를 겟또.</p>
<blockquote>
<p>$\pi(\mathbf{z}<em>u) \propto \exp(f</em>{\theta}(\mathbf{z}_u))$</p>
</blockquote>
<p>$z_u$는 디코더에 해당하는 비선형 함수 $f_{\theta}( \cdot ) \in \mathbb{R}^I$를 지나 변환되고, 이 값에 <strong>softmax</strong>를 적용하여 normalization을 진행. 이때 softmax output 값은 $\pi(\mathbf{z}_u)$로 아이템 $I$에 대한 
유저 $u$의 확률 분포가 됨.</p>
<blockquote>
<p>$\mathbf{x}_u \sim \text{Mult}(N_u, \pi(\mathbf{z}_u))$</p>
</blockquote>
<p>사용자 𝑢의 아이템 총 클릭 수 $𝑁_𝑢$가 주어졌을 때, 클릭 데이터 $𝑥_𝑢$는 확률 $\pi(\mathbf{z}_u)$를 가지는 <strong>다항 분포</strong>에서 샘플링되었다고 가정.</p>
<blockquote>
<p>$\log p_{\theta}(x_u | z_u) = \sum_{i} x_{ui} \log \pi_{i}(z_u)$</p>
</blockquote>
<p>위 식은 잠재 요인 관점에서 유저 $u$에 대한 log-likelihood로 다중 클래스 분류의 Cross Entopy와 동일.</p>
<p>우변을 보면 $\log \pi_{i}(z_u)$를 통해 0이 아닌 $x_u$ (실제로 클릭된 아이템)에 대해 확률 질량을 분배.
그러나 다항 분포는 <strong>softmax</strong>로 인해 $\pi(\mathbf{z}_u)$의 합이 언제나 1이어야하기 때문에<br>모델은 상대적으로 높은 선호도를 가진 아이템에 더 많은 확률을 할당함.</p>
<p>: 이는 평가 지표인 Top-N Ranking Loss에서 좋은 성능을 내는 데 기여.</p>
<hr>
<h3 id="vaes-vs-multvae">VAEs vs MultVAE</h3>
<p><strong>[ 기존 VAEs ]</strong></p>
<ul>
<li>이진 분류 : 이항분포 (Bernoulli) → Sigmoid → Binary Cross Entropy</li>
<li>회귀 : 정규분포 (Gaussian) → MSE</li>
</ul>
<p><strong>[ MultVAE ]</strong></p>
<ul>
<li>다중 클래스 분류 : 다항 분포 → Softmax → Cross Entropy</li>
</ul>
<hr>
<h1 id="variational-inference">Variational inference</h1>
<p>생성 모델을 학습하기 위해 MultVAE도 VAEs처럼 <strong>변분 추론</strong>를 이용하여 파라미터 ${\theta}$를 추정.</p>
<blockquote>
<p>$q(z_u) = \mathcal{N}(\mu_u, \text{diag}(\sigma_u^2))$</p>
</blockquote>
<p>변분 추론은 계산하기 어려운 후방 분포 $p(z_u | x_u)$를  가우시안 분포 $q(z_u)$로 근사하여 학습.</p>
<p>결과적으로는 KL 발산을 최소화하여 $q(z_u)$가 실제 후방 분포에 최대한 가까워지도록
${ \mu_u, \sigma_u^2 }$를 최적화하는 것이 목표!</p>
<h2 id="amortized-inference--the-variational-autoencoder">Amortized inference &amp; the variational autoencoder</h2>
<p>데이터셋에서 유저와 아이템의 수가 많을수록 최적화 해야하는 ${ \mu_u, \sigma_u^2 }$의 개수도 증가.
이는 수백만 명의 유저와 아이템이 있는 현실 세계에서 병목 현상을 초래함.</p>
<p>따라서 VAE에서는 개별 매개변수를 계산하는 대신 data-dependent 함수 (추론 모델) $g_ϕ$를 사용.</p>
<blockquote>
<p>$g_{\phi}(x_u) \equiv [ \ \mu_{\phi}(x_u), \sigma_{\phi}(x_u) \ ] \in \mathbb{R}^{2K}$</p>
</blockquote>
<p>이는 <strong>MultVAE의 인코더</strong>이며 posterior에 근사하는 변분 분포 $q_ϕ(z_u | x_u)$는 아래와 같음.</p>
<blockquote>
<p>$q_{\phi}(z_u | x_u) = \mathcal{N}(\mu_{\phi}(x_u), \text{diag}(\sigma_{\phi}^2(x_u)))$</p>
</blockquote>
<p>$q_ϕ(z_u | x_u)$는 유저의 클릭 데이터 $x_u$를 기반으로 잠재 변수 $z_u$의 가우시안 분포를 근사함.</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/daf5fdf7-f5d1-4a2c-b866-08636c23025d/image.png" width = "350"></center>


<p>즉, $x_u$ 데이터를 입력하면 추론 모델이 평균 $\mu_{\phi}(x_u)$과 분산 $\sigma_{\phi}^2(x_u)$으로 정의된 변분 분포 $q_ϕ(z_u | x_u)$의 
매개변수 ${\phi}$를 출력하고 이 분포를 최적화하면 계산하기 어려운 posterior $p(z_u | x_u)$를 근사 !</p>
<p>이때 $q_ϕ(z_u | x_u)$와  생성 모델 $p_{\theta}(x_u | z_u)$를 함께 사용하면 
오토인코더와 유사한 구조가 되어 <strong>변분 오토인코더 (VAE)</strong>라는 이름이 붙었음</p>
<h3 id="learning-vaes">Learning VAEs</h3>
<p>VAE는 주변 우도 (marginal likelihood)를 통해 lower bound를 최대화하고자 함.</p>
<blockquote>
<p>$\log p(x_u ; \theta) \geq \mathbb{E}<em>{q</em>{\phi}(z_u | x_u)}[\ \log p_{\theta}(x_u | z_u)\ ] - \text{KL}(q_{\phi}(z_u | x_u) \parallel p(z_u)) \equiv L(x_u ; \theta, \phi)$</p>
</blockquote>
<p>이때 $p(x)$는 베이즈 정리에서 이름이 evidence로 붙여졌기 때문에 위의 부등식의 우변을 
Evidene Lower Bound, 이른바 <strong>ELBO</strong>라 함.</p>
<p>다시 말해, VAE는 <strong>ELBO를 최대화하는 방식</strong>으로 학습되며 
우변의 KL Divergence를 최소화할 때, $z_u$를 $q_{\phi}$에서 <strong>샘플링</strong>하여 파라미터를 추정해야 함.</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/35a4185a-5fee-4a88-a0d9-fc72db37922a/image.png" width = "400"></center>

<p>그러나 샘플링은 ${\phi}$에 대해 미분이 안되기 때문에 <strong>reparametrization trick</strong>을 사용.
 $\epsilon \sim \mathcal{N}(0, \mathbf{I}<em>K)$ 에서 샘플링하여 $z_u = \mu</em>{\phi}(x_u) + \epsilon \odot \sigma_{\phi}(x_u)$ 로 다시 재파라미터화 시킴.</p>
<p>이를 통해 샘플링 과정의 확률성이 분리되어 샘플링 되어진 $z_u$에 대해 <strong>역전파</strong>가 가능해짐.</p>
<h2 id="alternative-interpretation-of-elbo">Alternative interpretation of ELBO</h2>
<p>사실 본 논문은 기존과 달리, ELBO를 아래와 같은 시각에서 해석하였음</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/8d698a48-076b-49b7-9269-979c8417ce4c/image.png" width = "600"></center>

<p>첫번째 항은 모델이 데이터를 얼마나 잘 재구성하는지 (reconstruction error)를 나타내며
두번재 항인 KL divergence는 모델의 정규화 (regularization) 역할을 한다고 해석.</p>
<p>두 항은 <strong>trade-off</strong> 관계이며 정규화를 제어하는 ${\beta}$를 도입하여 ELBO를 확장한 새로운 목적 함수를 제시.</p>
<blockquote>
<p>$L_{\beta}(x_u ; \theta, \phi) \equiv \mathbb{E}<em>{q</em>{\phi}(z_u | x_u)}[\log p_{\theta}(x_u | z_u)] - \beta \cdot \text{KL}(q_{\phi}(z_u | x_u) \parallel p(z_u))$</p>
</blockquote>
<p>기존 VAE는 생성 모델로서 데이터를 <strong>생성</strong>하는 데 초점을 맞추고 있지만, 
추천 시스템에서는 데이터를 생성하기보다는 <strong>정확한 추천</strong>을 제공하는 것이 더 중요함. </p>
<p>따라서 MultVAE는 데이터 생성 능력을 너프시키더라도 추천 성능을 높이는 방향으로  ${\beta}$를 선택.</p>
<h3 id="selecting">Selecting</h3>
<p> ${\beta}=0$에서 시작하여 ${\beta}=1$까지 점진적으로 증가시켜 KL을 늘리며 최적의 ${\beta}$ 값을 선택. 
이러한 탐색 과정을 <strong>KL annealing</strong> 이라 함.</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/3c7a6b52-97f2-4a77-8b9f-46da6da65989/image.png" width = "600"></center>

<ul>
<li>annealing 없는 경우 성능이 낮으며 (파랑)</li>
<li>${\beta}=1$까지 annealing 하면 1에 가까워질수록 성능이 하락함 (초록)</li>
<li>최적의 지점까지 annealing을 하고 멈춘 경우에 성능이 가장 높았음 (빨강)</li>
</ul>
<p>KL annealing은 VAE를 학슴함에 있어 <strong>추가적인 runtime</strong>을 초래하지 않기 때문에 효율적.</p>
<h1 id="a-taxonomy-of-autoencoders">A taxonomy of autoencoders</h1>
<p>변분 오토인코더 (VAE) vs 오토인코더 (AE)</p>
<p>AE 관점에서의 최대 우도 추정은 아래와 같고</p>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/b313561a-e93e-4343-a973-3d022f1cd1cb/image.png" width = "600"></center>


<p>AE와 DAE는 지금까지의 VAE와는 구분되는 특징을 갖는데</p>
<p>AE와 DAE는 $q_{\phi}(z_u | x_u) = \delta(z_u - g_{\phi}(x_u))$ 을 통해 (1)을 최적화 시킴. 즉, 생성 데이터와 원본의 차이를 줄이는 식으로 학습한다는 것. 그래서 VAE처럼 $q_ϕ(z_u | x_u)$를 prior에 맞출 필요가 없음 !</p>
<p>그러나 <strong>0이 아닌</strong> $x_u$에만 확률을 분배하기 때문에 <strong>오버피팅</strong> 가능성이 높아진다는 문제가 존재. </p>
<blockquote>
<p>따라서 DAE (Denoising AutoEncoder)는 입력 데이터에 dropout 같은 <strong>노이즈</strong>를 추가하여 이를 해결</p>
</blockquote>
<center><img src = "https://velog.velcdn.com/images/sunny_ho/post/20eebfc8-bde7-4b7e-9e07-3edc51a1acd2/image.png" width = "700"></center>

<ul>
<li>(a) : 입력을 재구성하는 데 집중</li>
<li>(b) : 입력에 노이즈 $\epsilon$를 추가하여 학습</li>
<li>(c) : VAE 묘사. 앞에서 이미 설명했으므로 pass</li>
</ul>
<p>+) 참고로 Mult-DAE는 다항 분포 가능성을 사용하는 DAE의 변형 모델.</p>
<h1 id="prediction">Prediction</h1>
<p>훈련된 생성 모델을 바탕으로 Mult-VAE와 Mult-DAE는 동일한 매커니즘으로 예측을 수행.</p>
<p>유저의 과거 클릭 데이터 $x_u$가 주어지면 정규화되지 않은 다항 확률 $f_{\theta}(z)$을 통해
모든 아이템을 순위화시킴.</p>
<ul>
<li>Mult-VAE : 변분 분포의 평균값 $\mu_{\phi}(x)$를 잠재 표현 $z$로 사용</li>
<li>Mult-DAE : 인코더의 출력 $g_{\phi}(x_u)$을 그대로 $z$로 사용</li>
</ul>
<blockquote>
<p>이때 $z$는 사용자의 클릭 데이터를 기반으로 생성된 확률을 <strong>예측</strong>하는 데 사용됨.</p>
</blockquote>
<p>VAE는 평균과 분산 2개를 생성하고 DAE는 하나의 파라미터만 생성하기 때문에 실무에서 빠른 추론이 필요하다면 DAE 계열을 사용하는 것이 나을 수 있음. 그러나 두 모델의 성능 차이가 그리 큰 편은 아님 !</p>
<hr>
<h1 id="related-works">Related works</h1>
<p><strong>VAEs on sparse data</strong>
최근 연구에 의하면 VAE는 large, sparse, high-dimensional 데이터를 모델링 할 때 underfitting 됨.
해당 논문에서도 annealing을 수행하지 않거나 β = 1로 설정할 경우, 유사한 이슈 발생.
따라서  β ≤ 1 로 설정하면 collaborative filtering 관점에서 항상 유저의 click history에 기반하여 예측.</p>
<p><strong>Information-theoretic connection with VAE</strong>
VAE 모델은 유저의 click history를 기반으로 최대 엔트로피를 가지는 분포를 찾는 것이며,
위에서 정의한 ELBO의 regularization term은 이 때 β를 통해 prior를 얼마나 반영할지를 조절할지를 결정하는 파라미터. 더불어 β는 모델의 discriminative와 generative의 부분을 조절하는 역할.</p>
<p><strong>Neural networks for collaborative filtering</strong>
신경망 기반 협업 필터링 초기 연구는 explicit feedback와 순위를 예측하는 것에 집중, 
최근 연구는 implicit feedback에 중점을 둠.</p>
<p>본 연구와 가장 관련이 깊은 논문은 CDAE &amp; NCF</p>
<hr>
<h1 id="empirical-study">Empirical Study</h1>
<p>데이터셋은 옛날 것이고 성능은 아무튼 좋을거니까 관심있는 부분만 정리.</p>
<h2 id="metrics">Metrics</h2>
<p>$Recall@R$ &amp; $NDCG@R$ 두 개의  ranking 평가 지표 사용.
두 지표 모두 유저의 테스트 아이템의 예측 순위를 실제 순위와 비교하는 방식으로 계산.
<br></p>
<p><strong>$Recall@R$</strong></p>
<blockquote>
<p>$Recall@R(u, \omega) := \frac{\sum_{r=1}^{R} I[\omega(r) \in I_u]}{\min(R, |I_u|)}$</p>
</blockquote>
<ul>
<li>사용자가 관심있는 아이템 중, 추천한 아이템 K개가 얼마나 포함되는지의 비율</li>
<li>$\omega(r)$는 순위 $r$에 있는 아이템을 나타냄</li>
<li>$I[\cdot]$는 indicator 함수</li>
<li>분모는 $R$ 과 사용자가 클릭한 아이템 수 $|I_u|$ 중 더 작은 값을 취함</li>
<li>$Recall@R$의 최대값은 1, 이는 관련된 모든 아이템이 상위 R개의 순위에 있는 경우를 의미</li>
</ul>
<br>

<p>$NDCG@R$</p>
<blockquote>
<p>$DCG@R(u, \omega) := \sum_{r=1}^{R} \frac{2^{I[\omega(r) \in I_u]} - 1}{\log(r+1)}$</p>
</blockquote>
<ul>
<li>상위 R개의 추천에 대한 순위 품질을 평가</li>
<li>추천 항목이 얼마나 중요한 순서대로 잘 배치되었는지를 반영</li>
<li>$\log(r+1)$는 순위 $r$에 따른 가중치를 주기 위해 사용됨</li>
<li><strong>NDCG@R</strong>은 <strong>DCG@R</strong>을 이상적인 <strong>DCG 값</strong>으로 나누어 0에서 1 사이로 정규화한 값</li>
<li>사용자의 클릭 아이템들이 모두 상위에 위치할 때 최댓값 1을 가짐<br>

</li>
</ul>
<h2 id="experimental-setup">Experimental setup</h2>
<p>strong generalization 하에 모든 유저를  training / validation / test 셋으로 분할.</p>
<p><strong>training</strong>
전체 클릭 기록을 기반으로 모델을 학습. </p>
<p><strong>validation &amp; test</strong>
일부 클릭 기록을 통해 모델이 user-level representation을 학습하고
사용하지 않은 나머지 클릭 기록에 대해 성능을 평가.
<BR></p>
<p>훈련과 평가에서 <strong>동일한</strong> 사용자가 포함될 경우 일반화 평가가 쉬워지므로, 
이를 해결하기 위해 훈련에 포함되지 않은 사용자 ( held-out user )들의 클릭 기록 80%를
랜덤하게 선택하여 fold-in set을 구성해 학습하고 나머지 20%로 예측 성능 평가.
<BR></p>
<p>VAE &amp; DAE에 대해</p>
<p><strong>[ 공통점 ]</strong></p>
<ul>
<li>input layer에 대해 dropout(p=0.5) 적용</li>
<li>batch_size= 500</li>
<li>opimizer = Adam</li>
<li>ML-20M 데이터셋의 경우, 200 epoch 동안 train<BR>

</li>
</ul>
<p><strong>[ 차이점 ]</strong></p>
<ul>
<li>Mult-DAE : input layer에 대해 활성화 함수로 tanh을 적용하고 L2 regularization 수행</li>
<li>Mult-VAE : 인코더의 output이 가우시안 분포로 사용되기 때문에 0-hidden-layer MLP 구조 사용<BR>
</li>
</ul>
<hr>
<p>참고 자료</p>
<p> <a href="https://huidea.tistory.com/297">https://huidea.tistory.com/297</a></p>
<p>  <a href="https://pyy0715.github.io/VAE_CF/#222-alternative-interpretation-of-elbo">https://pyy0715.github.io/VAE_CF/#222-alternative-interpretation-of-elbo</a></p>
<p>  <a href="https://velog.io/@nochesita/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-Variational-Autoencoders-for-Collaborative-Filtering-MultVAE">https://velog.io/@nochesita/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-Variational-Autoencoders-for-Collaborative-Filtering-MultVAE</a></p>
]]></description>
        </item>
    </channel>
</rss>