<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>anal-yg.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Mon, 06 Jun 2022 23:51:10 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>anal-yg.log</title>
            <url>https://velog.velcdn.com/images/anal-yg/profile/d3544ead-f91a-4b62-82da-8051a9414a4c/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. anal-yg.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/anal-yg" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[DASK로 해결하는 빅데이터 분석]]></title>
            <link>https://velog.io/@anal-yg/DASK%EB%A1%9C-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@anal-yg/DASK%EB%A1%9C-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Mon, 06 Jun 2022 23:51:10 GMT</pubDate>
            <description><![CDATA[<h1 id="요약">요약</h1>
<p>오늘날 빅데이터 분석에서 대용량 데이터를 다루기 위한 분산 컴퓨팅 도구이다.
일반적으로 Dask는 Spark보다 작고 가볍다.
이는 기능이 더 적고 대신 라이브러리, 특히 숫자 Python 생태계의 라이브러리와 함께 사용됨을 의미한다.
Pandas 또는 Scikit-Learn과 같은 라이브러리와 결합하여 높은 수준의 기능을 보인다.</p>
<h1 id="언어">언어</h1>
<p>Dask는 Python으로 작성되었고, 실제로 Python에만 지원된다.</p>
<h1 id="생태계">생태계</h1>
<p>Dask는 더 큰 Python 생태계의 구성 요소이고, Numpy, Pandas 및 Scikit-Learn과 같은 다른 라이브러리와 잘 결합하고 이를 향상시킨다.</p>
<h1 id="연차와-신뢰">연차와 신뢰</h1>
<p>Dask는 2014년부터 더 젊고 신뢰할 수 있는 Numpy/Pandas/Scikit-Learn/Jupyter 스택의 확장이다.</p>
<h1 id="내부-디자인">내부 디자인</h1>
<p>Dask의 내부 모델은 기존의 Map-Shuffle-Reduce패러다임을 가진 Spark 보다는 낮은 수준이므로 최적화가 부족하긴 하지만,
보다 정교한 알고리즘을 구현하고 복잡한 맞춤형 시스템을 구축할 수 있다.
기본적으로 일반 작업 스케줄링 기반으로 구동된다.</p>
<h1 id="스케일">스케일</h1>
<p>DASK는 단일 노드에서 천개 노드 클러스터로 확장된다.</p>
<h1 id="dask를-선택해야-하는-이유">Dask를 선택해야 하는 이유</h1>
<p>Python 또는 기본 코드를 선호하거나, 완전히 다시 작성하고 싶지 않은 대규모 레거시 코드 기반이 있을 때
사용 사례가 복잡하거나, Spark 컴퓨팅 모델에 적합하지 않을 때
로컬 컴퓨팅에서 클러스터 컴퓨팅으로 더 가벼운 전환을 원할 때
다른 기술과 상호 운용하기를 원하고, 여러 패키지 설치하는데 신경쓰고 싶지 않을 때
빅데이터 분석가로서 효율적으로 대용량 데이터를 구조적으로 처리하고 싶을 때</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[The Youtube Video Recommendation System(RecSys 2010)]]></title>
            <link>https://velog.io/@anal-yg/The-Youtube-Video-Recommendation-SystemRecSys-2010</link>
            <guid>https://velog.io/@anal-yg/The-Youtube-Video-Recommendation-SystemRecSys-2010</guid>
            <pubDate>Tue, 24 May 2022 11:03:34 GMT</pubDate>
            <description><![CDATA[<h1 id="1-오늘의-논문">1. 오늘의 논문</h1>
<h1 id="the-youtube-video-recommendation-systemrecsys-2010">The Youtube Video Recommendation System(RecSys 2010)</h1>
<h2 id="recsys란">RecSys란?</h2>
<p>추천시스템(Recommendation System)을 말합니다. AI(인공지능, Artificial Inteligence) 분야 중 하나로,  NLU(자연어이해), CV(컴퓨터비전), NLP(자연어처리), NLG(자연어생성)와 함께 많은 사람들의 관심을 끄는 분야입니다. 하지만 논문 출처의 RecSys는 추천시스템 학회이자 국제포럼인 ACM RecSys를 말한 것이라고 생각하면 될 것 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/cb503bf5-5466-4388-81c1-9d11a3710938/image.png" alt=""></p>
<p>이미지 출처: <a href="https://hryang06.github.io/nlp/NLP/">https://hryang06.github.io/nlp/NLP/</a></p>
<p>이번 논문 리뷰에서 다룰 논문은 아래 3건 중 첫번째 논문입니다. RecSys 논문을 처음 보는 비전공자 시각으로 보기 때문에 가장 길이가 짧은 2010년 영어 논문 원문을 바탕으로 <a href="https://yhs968.blogspot.com/2019/09/part-2-deep-neural-networks-for-youtube.html">2016년 후속 논문</a>, 그리고 <a href="https://techneedle.com/archives/38234">최신 2019년 발표 내용</a>을 참고하여 유튜브 추천 알고리즘의 기반인 Candidates Generating과 Ranking을 살펴봅니다. 정확한 이해 및 해석을 위한 논문 본문 링크는 아래에 있습니다. </p>
<p><img src="https://media.giphy.com/media/UyV044n2CmgJWkraIC/giphy.gif" alt="https://media.giphy.com/media/UyV044n2CmgJWkraIC/giphy.gif"></p>
<ul>
<li><a href="https://www.inf.unibz.it/~ricci/ISR/papers/p293-davidson.pdf">The YouTube Video Recommendation System(RecSys 2010)</a></li>
<li><a href="https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf">Deep Neural Networks for YouTube Recommendations(RecSys 2016)</a></li>
<li><a href="https://dl.acm.org/doi/pdf/10.1145/3298689.3346997">Recommending What Video to Watch Next: A Multitask Ranking System(RecSys, 2019)</a></li>
</ul>
<p>참고로 2010 본문 중, 유튜브는 주로 홈페이지와 검색 페이지 두 곳을 통해 추천 컨텐츠를 제공한다고 합니다. 하지만 아쉽게도 현재는 논문이 작성된 이후로 10년이 지나 서비스가 개편되어 <a href="http://www.youtube.com/videos">검색페이지</a> 대신, <a href="https://www.youtube.com/feed/trending">인기 트렌드 페이지</a>가 랜딩됩니다. 이처럼 현재 서비스와 다소 차이가 있을 수 있지만 학문적 탐구를 위한 리뷰이기 때문에 계속 진행합니다. </p>
<p><em>*내용 중 Video 단어의 언급이 많은데 현재 기준으로 조금 어색한 느낌이라 컨텐츠(동영상)로 줄여 표현했습니다.</em></p>
<h2 id="the-youtube-video-recommendation-systemrecsys-2010-1">The YouTube Video Recommendation System(RecSys 2010)</h2>
<p>여러분이 유튜브를 사용하는 이유는 무엇인가요?  2022년에도 구글 다음으로 <a href="https://en.wikipedia.org/wiki/List_of_most_visited_websites">가장 인기있는 웹사이트</a>를 차지했다고 하는데요. 저는 요즘 레시피 검색과 음악 감상을 위해 주로 이용합니다. 본문에서는 아래 3가지 방법으로 사용자를 분류합니다. </p>
<ol>
<li>타채널 유입을 통한 단일 컨텐츠 시청(어디에 올라간 유튜브를 보는 것)</li>
<li>특정 주제 관련 컨텐츠 조회(목적형 탐색)</li>
<li>흥미위주의 컨텐츠 시청</li>
</ol>
<p>이 중 마지막이 추천시스템의 주요 타겟입니다. 본문의 표현에 의하면 “말로 표현할 수 없는 욕구(unarticulated want)”를 대변하는 시스템이죠. </p>
<aside>
💡 어느새 유튜브는 일상이 되어 누군가에게는 검색엔진으로서 역할도 하고 배경음악 라디오 역할도 하고 있습니다. 하지만 보통 기업들은 우리가 서비스를 본인의 의지대로만 이용하고 떠나는걸 원하지 않습니다. 최대한 서비스에 오래 머무르고, 원래 구매하려던 상품 외에 추가로, 충동적으로, 더 자주 구매하길 원하며 이따금 광고를 클릭하거나 광고를 팔기 위한 높은 트래픽을 만들어주길 원합니다. 이를 위해 컨텐츠 플랫폼 뿐만 아니라 많은 기업들이 추천시스템을 만드는 거죠. 물론 기본적으로 사용자들이 서비스를 행복하게 이용하길 바라는 마음도 있습니다🙂 

<p>고객 입장에서도 내가 가려운지도 몰랐던 곳을 긁어주는 컨텐츠, 생각도 안했지만 마음에 쏙 드는 상품을 마다할 수 있을까요? 게다가 사실 선택지가 너무 방대할수록 선택이 어렵고, 어떨 때는 누가 떠먹여줬으면 하는 마음도 괜히 생기니까요. 이 선택지를 줄여주고 떠먹여주는 일을 추천 시스템이 맡고 있습니다.</p>
</aside>

<h3 id="11-goals">1.1 Goals</h3>
<p>유튜브는 성공적인 추천시스템을 위해 아래 5가지의 목표를 가지고 있습니다. 한정된 자원 대비 사용자도 컨텐츠도 워낙 많기 때문에 당시에는 예측 시스템 보다는 상위 N개 추천 방식을 사용했다고 합니다. (predictor&lt;Top-N Recommender) </p>
<ul>
<li>정기적 업데이트</li>
<li>사용자 최신 활동 반영</li>
<li>방대한 컨텐츠 활용</li>
<li>사용자 프라이버시 보호</li>
<li>개인화된 사용자 데이터 통제(explicit control)</li>
</ul>
<h3 id="12-challenges">1.2 Challenges</h3>
<p>하지만 유튜브가 추천시스템을 성공적으로 운영하기 위해서는 다음과 같은 도전과제들이 있습니다.</p>
<ul>
<li>사용자 컨텐츠의 메타 데이터 부족(제목, 설명, 태그 등)</li>
<li>활성사용자 수 규모의 컨텐츠 Corpus(언어학적 분석을 위해 수집된 일군의 데이터)</li>
<li>컨텐츠 길이의 제한성(10분 이내)</li>
<li>사용자 상호작용의 한계 - 짧고 난잡함(short and noisy)<ul>
<li>Netflix, Amazon의 구매, 대여처럼 분명하지 않음</li>
</ul>
</li>
<li>컨텐츠 생애주기의 단발성(ex: 인기 급상승 동영상)</li>
</ul>
<h3 id="2-system-design">2. SYSTEM DESIGN</h3>
<p>그러니까 유튜브 추천시스템은 1.1의 목표를 가지고 1.2의 도전과제를 격파하고 아래의 가이드를 바탕으로 디자인 된다는 겁니다. 이 중 흥미로운 점은 당시의 UI가 추천 컨텐츠 목록에 이 동영상이 추천된 이유를 명시해줬기 때문에 “사용자이해범위 내의 추천”을 가이드 대상으로 꼽았다는 점입니다. 현재는 노출되지 않으므로 최신 버전에서는 이 가이드가 생략되었을 것으로 보입니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/dc0239d2-59db-424a-9c2f-516092d4ee17/image.png" alt=""></p>
<ul>
<li>합리적인 최신성, 신선함</li>
<li>다양성</li>
<li>사용자 활동 기반</li>
<li>사용자이해범위 내의 추천</li>
</ul>
<p>추천시스템의 기본 구조는 다음과 같습니다.</p>
<p>동영상을 보거나, 자주 보거나, 좋아요 등의 활동(watched, favorited, lilked videos)을 통해 사용자가 선호하는 컨텐츠 베이스(Seed)를 잡고, 이 컨텐츠와 유사한 컨텐츠 그룹(Candidates)을 찾은 뒤, 다양성과 관계도 기반으로 순위를 매겨 추천(Ranking)하는 것입니다. 여기서 favorited 기능을 현재 찾을 수 없어 <a href="https://www.youtube.com/watch?v=GSMDpgdGOs4">위치 및 기능을 확인</a>해 봤는데, 특별한 스크랩 기능이라기보다 자주 본 동영상 정도로 생각하면 될 것 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/e828a7bf-6b8d-4b58-a184-6273da9a1a24/image.png" alt=""></p>
<p>물론 위 구조를 따르되, 아래의 이유에 따라 복잡도는 최소화해야합니다. 섬세하면서도 단순한, 합리적이면서도 신선하고 단순하면서도 다양한, 네 그런 추천시스템이네요.</p>
<ul>
<li>실패에 대한 회복 탄력성 고려</li>
<li>독립적인 디버깅을 위해 구성요소 분리</li>
</ul>
<h2 id="21-input-data">2.1 Input Data</h2>
<p>유튜브 추천시스템을 위해 활용되는 데이터 종류는 크게 두 가지 입니다. 협업 필터링(Collaborative Filtering)을 위한 재료로 보입니다. 관련 설명은 <a href="https://velog.io/@vvakki_/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9CRecommendation-System-%EA%B0%9C%EC%9A%94">여기</a>에서 볼 수 있습니다.</p>
<ol>
<li>컨텐츠 데이터: 비디오 시청 기록, 비디오 메타데이터(제목, 설명 등)</li>
<li>사용자 활동 데이터(명시/암시)<ol>
<li>Explicit: Engagement(좋아요, 구독, 스크랩, 평가)</li>
<li>Implicit: 사용자활동 결과 데이터(행동로그, 시청시작 사용자, 장시간 사용자)</li>
</ol>
</li>
</ol>
<p>각 데이터는 도전과제에서 언급했듯이 다음과 같은 한계를 가지고 있습니다. 하지만 우리의 구글러가 어떻게 문제를 푸는지 확인해봅시다.</p>
<ol>
<li>메타 데이터 - 부재, 미완성, 구식, 부정확</li>
<li>사용자 활동 데이터 <ol>
<li>데이터 해석의 불명확성, 간접 측정만 가능(ex: 시청이 꼭 좋다는 뜻은 아님)</li>
<li>비동기적 데이터  생성, 불완전성</li>
</ol>
</li>
</ol>
<h3 id="22-related-videos">2.2 Related Videos</h3>
<p>관련 컨텐츠 점수 측정</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/a11fda69-1632-47b9-b8ee-b7ce8772ed2f/image.png" alt=""></p>
<p>수식이 나와도 당황할 필요 없습니다. 우리의 활동 데이터를 기반으로 관련 동영상을 측정할 기반이되는 Seed가 Vi, 관련도 측정 대상이 Vj, 관련 점수가 r(Vi,Vj)입니다. 즉 내가 좋아하는 동영상 Vi를 기준으로 Vj와의 관련도를 구할 때, 관련도 점수는 Cij(=두 동영상을 동일 세션내에 시청한 횟수)를 f(Vi,Vj), 즉 ‘글로벌 인기도(global popularity)’로 나눈 값입니다.</p>
<ul>
<li>Cij = <strong><a href="https://ko.wikipedia.org/wiki/%EC%97%B0%EA%B4%80_%EA%B7%9C%EC%B9%99_%ED%95%99%EC%8A%B5%EB%B2%95">연관 규칙 학습법(association rule mining)</a> 기반, 일정 기간내에 동시 시청한 횟수(ex: 24시간)</strong></li>
<li>f(vi,vj)=글로벌인기도: 정규화(normalize)를 위해 도입, 각 비디오의 모든 세션 총 발생 횟수의 곱</li>
</ul>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/144384ff-f3a9-4045-9650-af78d767407d/image.png" alt=""></p>
<p>즉, 동시에 시청된 이유가 세계적으로 인기있어서라면 관련 컨텐츠 후보로는 적합하지 않기 때문에 점수를 낮게 준다는 것으로 보입니다. 예를 들어 서로 다른 2개의 인기 컨텐츠를 연속 재생으로 보는 사용자가 많다고 할때, 동시시청횟수는 높아서 두 컨텐츠의 관련도 점수가 높아질 수 있지만 글로벌 인기도로 이를 상쇄해서 관련 컨텐츠 후보에서 제외할 수 있는 것입니다. </p>
<p>그 외에도 일정 조회수 미만은 관련 점수가 높더라도 관련 컨텐츠 목록에서 제외하는 방식으로 품질을 관리합니다. 유튜브 추천 알고리즘에서 벗어나지 못하고 연속재생을 당하는게 점점 정상으로 보입니다. 추가로 논문에는 가장 단순화한 버전만 말하고 있기 때문에 이게 전부라고 생각하지 말라고 하네요. 실전에는 더욱 많은 난관들이 있다고 합니다.(a.k.a 도전 과제, 데이터 한계 등)</p>
<p><img src="https://media.giphy.com/media/l0MYMe3UJsn1zCIMg/giphy.gif" alt="https://media.giphy.com/media/l0MYMe3UJsn1zCIMg/giphy.gif"></p>
<h3 id="23-generating-recommendation-candidates">2.3 Generating Recommendation Candidates</h3>
<p>사용자 활동 및 관계성 점수에 기반한 관련 추천 컨텐츠 세트 C1, Candidates라서 C입니다. S는 내가 좋아하는 컨텐츠 세트 Seeds의 약자라고 보면 됩니다. </p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/f97c95f3-5f86-4e57-9737-0fc067824e36/image.png" alt=""></p>
<p>컨텐츠 후보는 관련점수가 높은 컨텐츠 세트 상위 N개의 집합으로 대부분 충분히 방대하고 다양한 추천을 해주지만, 일부 유사하기만 한 비디오를 추천하는 경우가 있다고 합니다.(narrow recommendation) 예를 들자면 똑같은 예능 방송 1화의 앞부분을 길이가 다르게 자른 컨텐츠들로 연상이 되네요. 유튜브는 이를 막기 위해 작은 양의 S로도 방대한 추천을 받을 수 있도록 추천 거리 N을 조절해서 final 값을 구합니다. </p>
<p>관련 컨텐츠는 <a href="https://en.wikipedia.org/wiki/Branching_factor">높은 분기계수(high branching factor)</a>를 갖고 있어 작은 Seed 사용자에게도 확장된 추천이 가능합니다. 유튜브는 순위 생성 목적 뿐만 아니라 추천 관련 설명을(2.SYSTEM DESIGN 참고) 위해 이런 케이스를 관리합니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/982939a7-89f9-4ae5-adba-78587103c77c/image.png" alt=""></p>
<p>A <a href="https://en.wikipedia.org/wiki/Red%E2%80%93black_tree">red–black tree</a>  with branching factor 2(출처: wikipedia)</p>
<h3 id="24-ranking">2.4 Ranking</h3>
<p>관련 컨텐츠 후보가 생성된 후에는 순위 생성을 통해 추천시스템을 고도화합니다. 아래 3가지 요소를 중점으로 보는데 특히, 다양성 측면에서 여러모로 공을 들이는 인상을 받았습니다. 사실 재미로 유튜브를 보는 사용자 입장에서는 아무리 관련 있고 인기 있다해도 동일한 컨텐츠를 보는 것보다 새로운 컨텐츠를 보는게 중요하긴 하니까요.(이런 신선함에 대한 중요도는 2016, 2019 논문에서도 강조됩니다)</p>
<p>1) video quality: 비디오 간의 유사성(조회수, 평점, 댓글, 좋아요, 공유, 업로드 시간 등)</p>
<p>2) user specificity: 사용자 취향 적합성(시청 길이, 조회수, 시청 기록 등)</p>
<p>3) diversification: 4~60개의 추천 세트 중, 카테고리 간 연관성과 다양성 최적화</p>
<ul>
<li>유사도가 높은 컨텐츠 제외</li>
<li>Seed video 당 추천 컨텐츠 수 제한</li>
<li>동일 채널 컨텐츠 수의 제한</li>
<li>그 외 topic clustering, content analysis 등</li>
</ul>
<h3 id="25-user-interface">2.5 User Interface</h3>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/2645c76a-4b91-42a6-b825-b63fcffa40d8/image.png" alt=""></p>
<p>유튜브 프리미엄 구독자로서 위 이미지에서 보이는 현재와의 차이점은 이 정도 같습니다.</p>
<ul>
<li>추천 사유 제공(Becaues you watched, favorited)</li>
<li>추천 리스트 조절 가능</li>
<li>정확한 조회수(현재: 1만 이상 trunc)</li>
</ul>
<p>유튜브는 추천 시스템을 통해 기존에 마련된 세트 중 일부만 사용자 활동시간(Serving time)에 제한적으로 노출함으로서 최신성과 다양성을 반영(신규, 미시청 컨텐츠 등) 합니다. 2022 최신 버전 UI에서는 다양한 카테고리로 관련 컨텐츠를 제공하는 점도 흥미롭습니다.(모두, 관련 콘텐츠, [해당 채널] 제공, 실시간, 최근에 업로드된 동영상, 감상한 동영상)</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/53e39f11-275d-47fe-9a74-52817d522f89/image.png" alt=""></p>
<h3 id="26-system-implementation">2.6 System Implementation</h3>
<p>당시에는 특히, 실시간 계산 추천 보다 배치 기반의 사전 처리를 선호했다고 합니다. CPU 자원을 최소로 사용하면서, 지연 없이 미리 배치된 추천 목록을 제공할 수 있고 추천 시스템이 최대한 많은 데이터를 사용할 수 있게하기 위함이죠. 추천 시스템의 작동과 제공 사이의 간극을 좁히는게 중요한 부분이라 1일 배치 빈도를 높이는 파이프라인 방법으로 그 간극을 완화했습니다.</p>
<p>추천시스템은 아래 3단계로 수행되는데 시각화를 위해 2016년 논문에서 사용된 이미지를 가져왔습니다. 기본적으로 후보 생성과 순위 측정 2단계는 동일하게 작용했다고 보시면 됩니다. </p>
<ol>
<li>데이터 수집(data collection)</li>
<li>추천 시스템 가동(recommendation generation)</li>
<li>추천 컨텐츠 제공(recommendation serving)</li>
</ol>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/2652118d-8327-4072-b641-b51c9b8c16b4/image.png" alt="">
2p, &lt;Deep Neural Networks for YouTube Recommendations(RecSys, 2016)&gt;</p>
<p>데이터 수집 단계에서 RAW는 로그에서 전처리 되어 사용자 기반으로 Bigtable에 적재됩니다. MapReduce 방식을 통해 점수가 계산되고 적재되는데 결과물인 데이터는 상대적으로 크기가 작아서 단순화된 읽기 전용 Bigtable 서버와 유튜브 웹서버를 통해 제공될 수 있다고 합니다. MapReduce에서 Map이란 Input Data가 분산 파일 시스템에서 분할된 이후, 이를 병렬적으로 나눠서 분석을 수행하는 함수이고, Reduce는 처리된 데이터를 합쳐 새로운 작은 데이터셋으로 만드는 것입니다. 참고로 한 설명은 <a href="https://yeomko.tistory.com/31">여기</a> 입니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/43cea0b5-33a8-4779-bdb0-e18363595769/image.png" alt=""></p>
<p><a href="https://www.tutorialspoint.com/hadoop/hadoop_mapreduce.htm">https://www.tutorialspoint.com/hadoop/hadoop_mapreduce.htm</a></p>
<h3 id="3-evaluation">3. Evaluation</h3>
<p>이렇게 잘 만들어진 추천시스템은 주로 실시간 A/B 테스트를 통해 검증됩니다. 유튜브에서 말하는 A/B테스트를 통한 검증의 장단점은 다음과 같습니다.</p>
<p><strong>장점</strong></p>
<ul>
<li>실제 웹사이트UI를 통해 평가가 실시됨</li>
<li>동시다발적 실험이 가능, 모든 경우에 해당하는 가장 빠른 피드백 습득.</li>
</ul>
<p><strong>단점</strong></p>
<ul>
<li>모든 경우에 비교를 위한 합리적인 통제가 어려움</li>
<li>통계적으로 의미있는 결과를 위해 충분한 트래픽이 필요함</li>
<li>사전에 정의된 소규모 Metrics 세트의 해석으로 제한됨.</li>
</ul>
<p>아래는 주요 평가 지표입니다. 이 지표들을 토대로 추천 시스템 성능을 지속적으로 추적하고, 실시간 트래픽에 따른 시스템의 변화를 평가한다고 합니다. 당연할 수도 있지만 단순 CTR 뿐만 아니라 Long CTR을 함께 추적한다는 점이 흥미로웠습니다.</p>
<ul>
<li>CTR(노출대비 클릭률, Click Through Rate)</li>
<li>긴 CTR(컨텐츠 주요 부분을 시청하는 클릭만 포함)</li>
<li>세션 길이</li>
<li>첫 장기 시청까지 걸린 시간</li>
<li>추천 포함 범위(추천을 받은 로그인 사용자 비율)</li>
</ul>
<h3 id="4-results">4. RESULTS</h3>
<p>결과적으로 우리도 잘 알고 있듯이, 유튜브의 추천시스템은 아주 효과적이었습니다. 수치적으로 보자면 홈페이지의 추천 컨텐츠 클릭이 전체의 60%를 차지할 정도로 성공적이라고 합니다. </p>
<p>왜 이게 알고리즘에 뜨지? 하다가 구독하게 되는 경험을 많은 분들이 가져보셨을 것 같습니다. 저 같은 경우에는 아래 2가지 추천 컨텐츠 경험이 인상적이었습니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/c3692176-2654-4342-88a4-4240a107f6ca/image.png" alt=""></p>
<p>ex1: from 수빙수- to 승우아빠(요리 컨텐츠 콜라보한 채널, 지식+코믹)</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/4cb60bc5-b05f-457c-b918-01950d35fec0/image.png" alt=""></p>
<p>ex2: from 발명 쓰레기걸- to 긱블(굿즈제작 컨텐츠 콜라보한 채널, 발명+코믹)</p>
<p>사실 추천 컨텐츠는 당시 다른 컨텐츠 보다 홈페이지에서 디폴트로 최상위에 위치하기 때문에 어느정도 편향된 결과(presentation bias)라고 할 수 있습니다. 그래서 논문에서는 이 편향을 피하기 위해,  3주(21일) 동안 검색페이지(browse)에서 결과를 측정했다고 합니다.  추천 컨텐츠 외에 아래 3가지 모듈의 평균 CTR을 비교한 결과입니다.</p>
<p>1) 1일 최다 조회수 컨텐츠</p>
<p>2) Favorited 목록에 가장 많이 기록된 컨텐츠</p>
<p>3) 1일 최다 좋아요 컨텐츠</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/f0926bbd-7489-4aa5-975d-8d59ba2da0fd/image.png" alt=""></p>
<p>3개 모듈 중, 가장 높은 1일 최다 조회수를 기준으로 207% 상회하는 성능을 보여주는 것을 알 수 있습니다. 전체 기간동안 평균은 기본으로 넘고 다른 기준 보다 훨씬 높은 비율을 보이네요. 브라보 유튜브! 2010년 논문은 정확하거나 상세하기 보다 주로 기본 구조에 대한 내용을 다루고 있어 아쉽지만 이해는 어렵지 않았습니다. 다만 후보자 선정 뿐만 아니라 랭킹도 핵심인데 가중치 숫자 힌트 하나 보지 못해 아쉬울 따름입니다.</p>
<h1 id="2-관련-논문">2. 관련 논문</h1>
<p><img src="https://media.giphy.com/media/l2R0ebkWSmuqExsfS/giphy.gif" alt="https://media.giphy.com/media/l2R0ebkWSmuqExsfS/giphy.gif"></p>
<p>긴 흐름에 지쳐있지만 후속 논문을 조금도 보지 않을 수는 없습니다.(봐야합니다) 빠른 이해를 위해 블로그 자료를 참고했으며 흥미로웠던 부분 위주로 리뷰합니다.</p>
<h2 id="deep-neural-networks-for-youtube-recommendationsrecsys-2016">Deep Neural Networks for YouTube Recommendations(RecSys 2016)</h2>
<p>Candidate Generation, Ranking이라는 추천 시스템의 기본 구조는 동일하지만 2016년에는 딥러닝을 통해 정확도(high-precision)를 고도화합니다. 주로 test를 위한 feature engineering을 심도있게 다뤘다고 합니다. 상세하고 친절한 내용은 <a href="https://yhs968.blogspot.com/2019/09/part-2-deep-neural-networks-for-youtube.html">여기</a>를 통해 확인하실 수 있습니다.</p>
<h3 id="2-system-overview">2. SYSTEM OVERVIEW</h3>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/c9c6eef6-011e-43dd-b6a4-7b2f6cc0cc97/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/322f450b-db65-4459-a3f3-e5799d475e55/image.png" alt=""></p>
<p>그 중, 재미있는 점은 새로운 컨텐츠를 추천하기 위해 검색어 기록과 시청 기록 vector을 평균화해서 얼버무린다는 부분이었습니다. 고도화를 위한 다운그레이드 느낌이라 신선했습니다. 여기서 watch vector, search vector가 얼마 없는 사용자의 경우 geographic, demographic vector가 유용하게 쓰인다는 점도 흥미로웠습니다.</p>
<h3 id="33-heterogeneous-signals">3.3 Heterogeneous Signals</h3>
<p>많은 사용자들이 새로운 컨텐츠를 선호하지만 머신러닝은 기본적으로 과거의 데이터를 기반으로 학습 하는 구조이기 때문에, 과거 컨텐츠 위주로 편향되는 경향이 있습니다. 특히 급상승 인기 컨텐츠(viral contents)의 경우 시청기록이 매우 비정상적(highly non-stationary)임에도 추천시스템은 평균적인 시청 가능성을 반영하기 때문에 문제가 있습니다. 유튜브는 이를 보완하기위해 모델 test에 해당 컨텐츠의 시청기록이 얼마나 오래되었는지 반영하는 Age facor를 도입합니다. 업로드 당시는 0 또는 음수를 기본으로  점점 나이를 먹이는 건데, 이를 통해 모델은 기본 예측(파란 선) 보다 실제 결과(초록 선)에 좀 더 가깝게 예측할 수 있게 됩니다(빨간 선)</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/b3f78ac1-5d6b-4095-a6bb-abbcc035e8a2/image.png" alt=""></p>
<h3 id="35-experiments-with-features-and-depth">3.5 Experiments with Features and Depth</h3>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/088f51c2-431a-46d8-90d4-dea710b0f595/image.png" alt=""></p>
<p>머신러닝을 위한 watch label은 <a href="https://ko.wikipedia.org/wiki/%EA%B3%BC%EC%A0%81%ED%95%A9">과적합(overfitting)</a>을 피하기 위해, 타채널 유입(Embeded Videos)을 포함하여 모든 기록을 사용합니다. 사용량이 많은 일부 사용자에게 편향되는걸 피하기 위해 동일량(ex: 최대 50개)의 시청 기록을 랜덤으로 샘플링한다는 점이 인상적이었습니다. 편향을 막는 방법이 더욱 효과적이라서 그랬겠지만 뭔가 정의로운 느낌입니다.</p>
<p>네트워크는 일반적인 타워 패턴이라 아래로 갈 수록 차원이 2배가 되는 구조를 가지고 있다고 합니다. 오는게 있어야 가는게 있다. 윗물이 맑아야 아랫물이 맑다 처럼 역시 Input Data도 많고 층 개수도 많을 때 성능이 잘 나옵니다. </p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/f182fcef-c8ee-425e-b11d-9094018988b1/image.png" alt=""></p>
<h2 id="recommending-what-video-to-watch-next-a-multitask-ranking-systemrecsys-2019">Recommending What Video to Watch Next: A Multitask Ranking System(RecSys, 2019)</h2>
<p>마지막 2019 발표도 간략히 살펴보자면 주로 2010년 버전에서부터 계속 유튜브가 마주해야했던 도전과제, 난관들을 말해주고 있습니다. 일반적인 추천 시스템으로서 가질 수 있는 문제와 유튜브가 가진 특유의 문제들이 공존하고 있습니다.</p>
<ol>
<li><p>사용자 선호 기준의 모호함</p>
<p> : Like 하고 싶은 컨텐츠, 공유하고 싶은 컨텐츠, 자주 보고 싶어하는 컨텐츠가 다를 수 있다.</p>
</li>
</ol>
<blockquote>
<p>참여(engagment)와 만족(satisfaction) 두 가지 목표로 분류하여 기계학습 진행</p>
</blockquote>
<pre><code>  (참여: 클릭, 시청시간 / 만족: 좋아요, 관심없음, 댓글 등)</code></pre><ol>
<li><p>상위 노출에 따른 편향</p>
<p> : 상위에 추천된 컨텐츠를 사용자들이 계속 클릭하여 인기를 지속적으로 얻고 계속 상위노출 되는 피드백 루프가 생길 수 있다.  the w<del>inners take it all</del> </p>
</li>
</ol>
<blockquote>
<p>편향이 컨텐츠의 인기도에 미치는 영향을 계산하여 예측에 반영, 차감</p>
</blockquote>
<p>그 외에도 유튜브는 서비스 내 데이터의 다양성(메타 정보, 사용자 활동 정보, 그래픽 정보 등)과 데이터 자체의 어마어마한 양 때문에 난관을 겪고 있습니다. 2010년 논문에서 주로 다뤘던 후보 생성과 랭킹 2단계 추천시스템은 유튜브의 특성상 가지는 난관 중 확장성(scalability)을 해결하기 위한 방안이었습니다. </p>
<p>흔히 온라인 플랫폼 서비스는 일반적으로 기업이 제품을 생산할 때 생기는 한계비용이 낮아 좋다고 하는데, 유튜브쯤의 규모가 되면 그렇지도 않네요. 데이터는 단순할 수록 예측 가능성이 높아진다고 하는데, 이런 점에서 유튜브의 다양한 데이터는 스스로가 해결해야하는 큰 숙제라고할 수 있습니다.</p>
<h1 id="3-마무리">3. 마무리</h1>
<p><img src="https://media.giphy.com/media/3ZZD9fwwaI8u7hQe1P/giphy.gif" alt="https://media.giphy.com/media/3ZZD9fwwaI8u7hQe1P/giphy.gif"></p>
<p>첫번째 논문 리뷰를 마무리하려합니다. 사실 논문 리뷰는 학습의 시작이기도 하지만 데이터 분석/엔지니어링 실전 연습의 영감을 얻기 위한 공부이기도 합니다. 이를 위해 생각을 확장해보겠습니다. 이름하여 ‘컨텐츠 플랫폼의 추천시스템에서 배운점을 제품 판매 시장에 도입한다면?‘입니다. 두 상황의 차이점이나 유사한점을 살펴보겠습니다.</p>
<h2 id="1-사용자-선호의-모호함">1) 사용자 선호의 모호함</h2>
<p>유튜브는 사용자 선호의 모호함을 해결하기 위해, 만족과 참여 두 가지 목표를 기준으로 추천시스템을 만든다고 합니다. 여러분은 공유, 좋아요, 구독, 자주 재생하는 컨텐츠 별로 각각 차이가 있으신가요? 아래는 제 경험에서 분류해본 목적별 선호 영상컨텐츠 종류입니다.</p>
<ul>
<li>공유: 단발성 코믹 컨텐츠, 지식 컨텐츠</li>
<li>좋아요: 감동, 귀여움, 따뜻한 컨텐츠, 음악 플레이 리스트, wow 컨텐츠(감탄이 나오는)</li>
<li>구독: 채널 자체가 마음에 드는 경우, 자주 보는 컨텐츠가 많은 경우</li>
<li>자주 보는: 음악 플레이 리스트, 레시피</li>
</ul>
<p>하지만 이 모든 범위에 포함되지 않으면서도 무심코 클릭한 컨텐츠, 오랜 시간 멍 때리며 본 쇼츠들이 있을 것입니다. 즉, ‘만족’ 활동으로 추천받은 리스트들과, ‘참여’활동으로 추천받은 리스트의 간격이 어느 정도 있는 것이죠.</p>
<p>한편 일반적으로 제품을 판매하는 시장의 경우 어떻게 분류해볼 수 있을까요?</p>
<ul>
<li>공유: 함께 사고 싶은, 추천하고 싶은, 선물하고 싶은</li>
<li>좋아요: 다음에 사고 싶은 (wish list)</li>
<li>구독: 신제품이 궁금한 브랜드, 할인혜택이 필요한 브랜드</li>
<li>자주 사는: 생필품</li>
</ul>
<p>제품 판매 사이트 역시 위의 활동으로 만족을 표현하지 않았음에도 무심코 클릭하게된 상품이 있었을 것입니다. 제일 곤혹스러운건 무심코 클릭한 이 상품이 활동로그로 인식되어 다른 채널의 추천 광고에 연속해서 떴을 때 입니다. 요즘 제품 추천은 유튜브 연속재생 만큼 부드럽게 원클릭 한번으로 소개되기 때문에 큰 불편함을 느끼진 못한 것 같습니다. 유튜브가 시스템 디자인 가이드에서 심혈을 기울인 만큼 UI 역시 중요한 부분임을 알 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/c91cc402-2efb-438b-8731-3b93be2ca3a4/image.png" alt=""></p>
<p>쿠팡</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/04a55e80-e49e-43a7-8644-23b69a88142a/image.png" alt=""></p>
<p>네이버</p>
<h2 id="2-컨텐츠-추천과-상품-추천의-간극">2) 컨텐츠 추천과 상품 추천의 간극</h2>
<h3 id="한정적-구매-범위">한정적 구매 범위</h3>
<p>동종업을 제외하고 유튜브처럼 사용자가 하루에도 몇 십개씩 소비할 수 있는 제품이 있을까요? 보통 제품을 판매하는 경우 하루에 사용자가 같은 규모로 제품을 반복 구매하지 않습니다. 따라서 한 번 살때는 최소한의 시간과 노력으로 편하게 살 수 있도록 설계해야하고, 명시적 데이터에 기반한 제품을 주로 추천하게 됩니다. 살 가능성이 낮은 제품을 추천해서 이탈하게하기 보다는 기존에 구매 경험이 있고 다시 구매할만한 제품을 추천하는게 합리적입니다. 그러다보니 아무래도 컨텐츠 플랫폼 보다는 추천을 한정적으로 할 수밖에 없습니다. 사용자의 선호 보다 밀어주는 제품(광고)이 많을 수도 있습니다.</p>
<h3 id="구매주기">구매주기</h3>
<p>만약 제품 구매주기가 일주일, 한 달, 삼 개월, 육 개월을 넘어간다면 어떨까요? 예를 들어 떡볶이 밀키트, 기차 티켓, 옷, 비행기 티켓를 각 주기 별로 배치해봤을 때 추천시스템을 도입하면 일부 조금 어색한 경우가 생길 것 같습니다. 오늘 태국행 비행기 티켓을 구매한 사용자에게 내일 ‘태국행 비행기 티켓 구매자’가 많이 구매한 000행 티켓을 추천한다해도 구매로 이어질까요? 태국과 가장 유사한 속성을 가진 000행 티켓을 추천하는 건 어떨까요? 어느 쪽이든 사용자의 구매주기를 맞추지 않는 다면 추천이 효과적이기 어려울 것입니다. 게다가 대부분 비행기 티켓은 최저가를 선호하기 때문에 한 채널에서만 구매를 지속적으로 하지 않는다고 가정했을 때 추천시스템에 사용할만한 대량의 명시적 데이터를 수집하는 것도 어려울 수 있습니다. 유튜브에서 000영화 예고편을 봤다고 넷플릭스가 바로 000영화를 추천할 수 없듯이 채널간 데이터 상호공유가 안되기 때문에 더욱이 구매주기는 정확해지기 어려울 수 있습니다. 이 관점에서 추천은 구매 데이터가 많은 사용자에게 더욱 고도화 될 수밖에 없습니다. 편향을 주의해야겠지만요.</p>
<h3 id="구매목적">구매목적</h3>
<p>위의 예시에서 떡볶이 밀키트, 옷의 경우 이 제품을 구매한 사람들이 자주 구매하는 제품, 이 제품의 속성에 따른 제품을 추천해도 크게 무리가 없어 보입니다. 유튜브 컨텐츠와 마찬가지로 신선함과 다양성이 어느정도 효과를 발휘할 수 있는 분야이기 때문입니다. 하지만 기차 티켓이나 비행기 티켓의 경우 사용자의 구매 목적(출장, 정기방문, 여행)에 따라 일시성과 반복구매 가능성이 좌우될 뿐만 아니라, 출발지와 도착지를 확정적으로 추천하기 조차 어려워 보입니다. 그렇다고 목적을 매번 사용자가 정확하게 기입하거나 설문조사를 제출해주진 않으므로 확보한 사용자 로그 데이터를 기반으로 구매유형별 목적을 가정하는 과정이 필요할 것입니다.</p>
<h2 id="3-실전-연습에-대한-아이디어">3) 실전 연습에 대한 아이디어</h2>
<h3 id="하나">하나</h3>
<p>논문의 기초 공식을 일반 제품군에 그대로 도입한다면 어떨까요? 두 제품의 한 세션내 동시 조회수를 각 제품 페이지 조회수의 곱으로 나눈 관련도 점수를 기반으로 제품을 그룹화하고 어떤 후보군이 나올지 보는 것도 재미있을것 같습니다. 물론 앞서 생각해본 차이점 처럼, 제품의 유형이나 구매주기 등에 따라 관련점수와 다양성과 신선함 지수는 밸런스 조절이 필요할 것 같네요. </p>
<p>구매가 아주 많은 사용자의 기록 위주로 관련도 점수가 편향되지 않도록 로그기록을 동일한 규모로 취합하는 가이드도 필요합니다. 공동 구매나 특가 구매로(go viral) 인기있는 제품이 모든 제품의 관련 제품이 되지 않도록 normalize 하는 방식을 좀 더 다양하게 생각해보는 과정도 필요합니다.</p>
<h3 id="둘">둘</h3>
<p>사용자 구매 데이터를 기반으로 구매 수량, 주기를 통해 구매 목적을 가정하고 그 용도에 맞게 추천을 설계해 볼 수도 있을 것 같습니다. 같은 제품군에서의 추천 뿐만 아니라 경계를 넘어선 추천도 가능할 수 있습니다. 예를 들어 기차로 서울-제주 출장을 매달 가는 사용자에게 또 기차티켓을 추천하면 이상하지만(ex: 서울-강원 기차여행 어떠세요?) 제주 관련 체험 프로그램을 추천하거나, 좋은 식사 장소를 추천할 수 있는 것처럼 말입니다. </p>
<h3 id="셋">셋</h3>
<p>한 제품의 구매주기가 길다면, 유튜브 연속재생처럼 ‘또 본다’라는 인식없이 구매할 수 있도록 관련 있으면서도 신선한, 새로운 제품군을 추천하는 발상도 재미있습니다. 선풍기를 검색한 사용자에게는 수박을 추천하거나, 떡볶이 밀키트를 구매한 사용자에게는 분식 스타일 그릇을 추천해보는 것입니다. 물론 그 제품까지 도달할 수 있도록 상위 랭킹을 손볼 수는 없으니 “이 제품은 어때요?”처럼 완전 관련제품이 아님을 명시하는 제목이라도 있어야 화를 면할 것 같습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Matrix Factorization Techniques For Recommender System [논문리뷰]]]></title>
            <link>https://velog.io/@anal-yg/Matrix-Factorization-Techniques-For-Recommender-System-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@anal-yg/Matrix-Factorization-Techniques-For-Recommender-System-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Tue, 10 May 2022 09:24:21 GMT</pubDate>
            <description><![CDATA[<p><code>Netflix에서 활용되고 있는 Matrix Factorization 딥러닝 구현을 소개한 논문에 대해서 리뷰하겠습니다.</code></p>
<hr>
<h1 id="readme">README</h1>
<ul>
<li><a href="https://datajobs.com/data-science-repo/Recommender-Systems-%5BNetflix%5D.pdf">Matrix Factorization Techniques For Recommender System</a> 논문 보러 가기</li>
</ul>
<hr>
<h1 id="논문의-배경">논문의 배경</h1>
<ul>
<li>위 논문의 발단은 <a href="https://en.wikipedia.org/wiki/Netflix_Prize">Netflix Prize Competition</a>에서 시작됩니다. Netflix 기업에서 2006년부터 개최하여 50만명이 넘는 사용자들에게 임의 처리된 17,000개의 영상데이터 및 1억개가 넘는 별점 데이터를 제공하면서, 현재 운영되고 있는 Recommender System보다 더 좋은 성능을 갖는 방법론을 찾으려고 하였습니다. 기존 시스템보다 10% 이상 개선된다면 100만 달러를, 목표 보다는 못미치지만 큰 개선을 한 1등 팀에게는 5만 달러를 약속하였습니다.
위 논문은 2007년 8.43%로 1등, 그 다음해에 9.46%로 또 다시 1등을 차지한 팀의 방법론에 관련된 논문입니다.</li>
</ul>
<hr>
<h1 id="논문의-시작">논문의 시작</h1>
<ul>
<li>많은 선택들에 둘러쌓인 요즘 시대의 현대 소비자들을 사로잡기 위해서, 많은 전자 상거래 및 온라인 컨텐츠 서비스들은 추천 시스템을 활용하여 소비자들의 행동 패턴을 분석하고 고객 선호에 가장 잘 맞는 상품을 제공하려고 노력합니다. 소비자들에게 최고로 적합한 제품을 추천해주는 것이야말로 소비자들의 마음을 사로잡고 충섬고객으로 자리메김 하게 하는 핵심 키포인트 일 것입니다. 이러한 트렌드 역시 다양한 엔터테이먼트 산업인 영화, 음악, TV쇼 등 분야에도 적용될 수 있는데, 그 중 <strong>넷플릭스</strong>라는 회사도 이러한 추천 시스템을 메인 서비스 기능으로 삼아 고객들에게 가장 최적의 영상 컨텐츠물을 제공하도록 노력하고 있습니다.  </li>
</ul>
<hr>
<h1 id="추천시스템의-전략">추천시스템의 전략</h1>
<ul>
<li>추천시스템은 크게 두 가지의 전략으로 크게 나뉘어 집니다.</li>
</ul>
<h3 id="컨텐츠-기반-필터링content-filtering">컨텐츠 기반 필터링(Content Filtering)</h3>
<ul>
<li>각각의 유저 및 아이템에 대해 프로필(메타정보)을 생성하고, 과거에 어떤 유저가 구매 혹은 접했던 아이템이 담고 있는 프로필과 가장 유사한 아이템을 또 다시 추천해주는 방법론 입니다.</li>
</ul>
<p><code>예를 들어서 한 영화(아이템)의 프로필(메타정보)에 장르, 등장배우, 대중 인기성 등을 포함하고, 고객(유저)의 프로필에는 단순 인구통계학적 정보(성별,나이 등)가 있다고 가정해보자. 해당 가정을 전제로 컨텐츠 기반 필터링 살펴보면, 만약 A라는 유저가 톰크루즈(배우)가 나오는 액션(장르)영화인 미션임파서블을 보았다고 했을 때, 다음번에도 역시 톰크루즈(배우)가 나오는 액션(장르)영화와 비슷한 것을 추천해주면 될 것이다.</code></p>
<ul>
<li>위와 같이 컨텐츠 기반 추천 시스템은 다른 유저의 데이터가 필요하지 않다는 것과 추천을 내린 결과물에 대한 해석이 가능하다는 장점이 존재합니다.</li>
<li>하지만 아이템에 대한 프로필(메타정보)를 생성하기 위해서는 명시적(explicit)인 데이터가 있어야 하는데, 매번 새로운 아이템이 생성될 때마다 프로필을 고민하고 생성해야 한다는 큰 단점이 있다.</li>
</ul>
<h3 id="협업-필터링collaborative-filtering">협업 필터링(Collaborative Filtering)</h3>
<ul>
<li>컨텐츠 기반 필터링의 프로필 생성에 대한 한계를 극복하고 나온 대안 방법론인 <strong>협업 필터링</strong>은 따로 명시적(explicit)인 프로필을 생성하지 않고 오로지 사용자와 아이템간의 상호관계(interation)에 기반하여 추천을 제공합니다.</li>
</ul>
<p align='center'><img src="https://images.velog.io/images/changhtun1/post/62c38b77-a1ba-46fe-afa3-0ba5a0966361/image.png" width="400" height="400"></p>

<p><code>예를 들어서 Joe라는 유저와 세명의 유저들이 서로 다수의 영화들에 대해서 비슷한 시청 및 평가를 내린다고 했을 때, 세명의 유저들이 보고 선호한 영화를 Joe가 못 봤다면 그 영화를 유저 Joe도 똑같이 좋아하지 않을까 라는 아이디어에서 나온 것이다.</code></p>
<ul>
<li>앞에서도 말했듯이 협업 필터링은 컨텐츠 기반 필터링의 단점과는 상반되게 프로필을 수동으로 생성해야 하는 단점을 개선할 뿐만 아니라 성능적인 측면에서도 상당히 우수한 것으로 알려져 있습니다.</li>
<li>하지만 협업필터링의 가장 큰 단점은 서로 비교할 데이터가 없어 어려운 신규 고객에게는 적용할 수 없다는 <strong>Cold Start</strong> 문제를 가지고 있습니다. </li>
</ul>
<hr>
<h1 id="협업-필터링-방법론">협업 필터링 방법론</h1>
<h2 id="neighborhoods-method근접-이웃-방법">Neighborhoods Method(근접 이웃 방법)</h2>
<ul>
<li>협업필터링에서 많이 사용되는 방법으로 <strong>Neighborhoods Method</strong>가 있는데, 해당 방법은 앞서 설명한 Collaborative Filtering과 크게 다르지 않습니다.</li>
<li>다만 구체적으로 설명하자면 어떤 대상(유저 or 아이템)을 초점으로 맞추냐 일 것입니다.</li>
<li>동일한 아이템에 대해서 유저 평가 유사도에 초점을 맞춘다면 (User-Oriented NM)</li>
<li>동일한 유저에 대해서 아이템 평가 유사도에 초점을 맞춘다면 (Item-Oriented NM)</li>
</ul>
<h2 id="latent-factor-models잠재-요인-모델">Latent Factor Models(잠재 요인 모델)</h2>
<ul>
<li>협업필터링의 두번째 방법으로써, user와 item에서 임의의 K개 만큼의 잠재요소를 추출하여, 각 user마다 프로덕트에 대한 관계를 만들어 내는 방법입니다.</li>
</ul>
<p><img src="https://images.velog.io/images/changhtun1/post/3a55a95e-d2cd-4e36-9e96-767151a088a8/image.png" alt=""></p>
<ul>
<li>위 그림은 잠재 요인 모델에 대한 설명을 (X축 = 남자 VS 여자), (Y축 = 현실적 VS 비현실적) 기준 특성으로 좌표평면에 표현하였습니다.</li>
<li>그래서 각 특성을 가진 축에 따라서 설명하자면, X축으로 갈수록 남성을 타켓으로 한 영화이고 Y축으로 갈수록 현실적인 소재를 다룬 영화라 말할 수 있다.</li>
<li>그리고 각 영화와 각 user의 이름이 가까우면 가까울수록 해당 user가 그 영화에 대한 좋은 평가를 내릴 가능성이 크다라고 볼 수 있다. </li>
<li>이렇게 좌표평면에 특성에 따라 분류할 수 있도록 하는 방법론이 지금부터 설명할 <strong>Matrix Factorization(행렬 분해)</strong> 입니다.</li>
</ul>
<hr>
<h1 id="matrix-factorization행렬-분해">Matrix Factorization(행렬 분해)</h1>
<p><img src="https://images.velog.io/images/changhtun1/post/ded35fda-c8bb-4fad-9d8a-2d5bfa7fc8b9/image.png" alt=""></p>
<ul>
<li><p>아이템에 평가된 점수(R)로 부터 추론된 요소의 벡터들로, 유저(P)와 아이템(Q)을 지정한 K개의 특성으로 나누어 학습시키는 방법을 말합니다. 구체적으로 User의 Latent Factor와 아이템의 Latent Factor간의 Dot Product로 위와 같이 평가 점수를 추론하게 됩니다.</p>
</li>
<li><p>선형대수를 공부해보았다면 Singular Value Decomposition(SVD)기법을 통해 아이템에 평가된 점수(R)로부터 그냥 반대로 P_u와 Q_i를 구할 수 있지 않을까라는 생각을 할 수 있습니다. 하지만 MF와 SVD 둘 다 데이터분석과 기계학습에 널리 사용되고 유사한 점이 있지만 명백히 다른 기법입니다.</p>
<ul>
<li><p><strong>SVD</strong></p>
<ul>
<li><p>위 그림과 같이 데이터를 3개의 행렬로 분해해서 학습시키고 이 3개의 행렬로 원래의 행렬을 재현(re-creation)하는 기법입니다.</p>
</li>
<li><p>SVD는 원래 행렬을 분해해서 3개의 행렬로 만든 다음에 이를 사용해서 원래 행렬을 재현하는 데에는 뛰어나지만, 원래 행렬의 null값을 허용하지 않기 때문에 원래 행렬에 없는 값을 예측하는 데에는 문제가 있습니다.</p>
</li>
<li><p>만약에 null값 대신에 0을 대신해서 넣으면 0 또한 하나의 값으로 인식해서 최대한 이 값을 재현하기 위해서 행렬을 분해하기 때문에 나중에는 원래의 0값이 0이 아니라 0에 가까운 수가 되버립니다.</p>
</li>
<li><p>즉, 평가하지 않은 항목을 0으로 표시하고 평가한 값만 가지고 학습시킨 후, 0의 값을 다시 예측값으로 계산할 수 없는 구조입니다.</p>
</li>
</ul>
</li>
<li><p><strong>MF</strong></p>
<ul>
<li>그에 비해 MF는 원래 데이터를 2개의 행렬로 분해한다는 점에서 차이가 있습니다.<ul>
<li>MF의 경우 null값을 0으로 표현했지만 SGD로 P,Q를 학습할 때에는 0인 값은 빼고 계산을 하기 때문에 사실상 null값은 제외하고 계산을 하는 구조입니다.</li>
<li>그리고 원래 행렬에 null값이 있더라도 P,Q 행렬은 null이 없이 학습이 되며, 학습이 끝나고 나면 P,Q를 사용해서 원래 행렬에 빠져 있는 null 값도 상당히 정확하게 예측합니다.</li>
<li>그래서 SVD가 여러가지 목적(차원축소 등)에서는 유용하게 사용되는 분석기법이지만 추천 시스템 분야에서는 거의 사용되지 않습니다.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>추천 알고리즘에 입력 데이터의 종류로는 크게 두 가지가 있는데, 그 중 명시적 피드백을 바로 사용할 수 없는 경우, 암시적 피드백(Implicit Feedback)을 대신 사용하여 사용자의 선호를 유추할 수 있습니다.(<a href="https://velog.io/@changhtun1/Collaborative-Filtering-for-Implicit-Feedback-Datasets-%EB%85%BC%EB%AC%B8">해당 내용 참고 작성글</a>)</p>
<ul>
<li>명시적 피드백(Explicit Feedback)<ul>
<li>별점, 만족도, 리뷰와 같은 고객 선호를 명시적으로 나타내는 데이터<ul>
<li>사용자의 선호를 바로 알수 있다는 점과 데이터 품질이 좋은 경우가 많은데에 비해 데이터 수집의 어려움 때문에 sparse matrix인 경우가 많습니다.</li>
</ul>
</li>
</ul>
</li>
<li>암시적 피드백(Implicit Feedback) <ul>
<li>구매기록, 장바구니, 검색 패턴, 행동 로그와 같은 고객 선호를 간접적으로 나타내는 데이터<ul>
<li>사용자의 선호를 간접적으로 알수 있지만 직접적인 관계성을 찾는 것이 중요하고, 다양한 방법을 통해서 구할 수 있기 때문에 대부분 Dense Matrix로 표현됩니다. </li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="basic-matrix-factorization-model">Basic Matrix Factorization Model</h1>
<ul>
<li><p>Matrix Factorization(행렬 분해) 모델은 유저와 아이템을 차원(f)의 잠재 요인 공간으로 매핑합니다. 그리고 사용자와 아이템간의 Dot Product(내적 연산)을 통해서 아래 그림과 같이 모델링될 수 있습니다. 
<img src="https://images.velog.io/images/changhtun1/post/0c1bcfb1-7b2d-4f38-95b5-51bbef94ef6c/image.png" alt=""></p>
</li>
<li><p>위 수식을 통해 나온 결과는 아이템에 대한 사용자의 관심 즉, 상호관계(interation)를 의미합니다.</p>
</li>
<li><p>그리고 머신러닝에서 흔히 발생하는 문제인 과적합(overfitting)이 비교적 많은 컬럼에 비해 적게 수집된 데이터들(결측치가 많은)로 추천시스템을 모델링하는 과정중에도 발생하게 됩니다. 그래서 아래와 같이 모델 학습 과정 중 Loss Function에 Regularization Term(람다 이후 식)을 추가하여 과적합을 방지할 수 있는 장치를 마련할 수 있습니다. 그리고 교차검증을 통해서 세부적인 lambda 값 조절을 통해서 과적합 문제를 정교하게 조정할 수 있습니다. 대신 해당 값(람다)은 민감하기 때문에 큰 값 범위 -&gt; 작은 값 범위로 점차 줄여가면서 최적의 파라미터를 찾아야 합니다. </p>
</li>
</ul>
<p><img src="https://images.velog.io/images/changhtun1/post/f10fa82d-031c-4397-8c97-0830363f38e1/image.png" alt=""></p>
<hr>
<h1 id="learning-algorithms">Learning Algorithms</h1>
<ul>
<li><p>Matrix factorization의 loss값을 최소화하기 위한 2가지 최적화 방법을 제시합니다.</p>
<ol>
<li><p>SGD(Stochastic Gradient Descent)(확률적 경사하강법)
<img src="https://images.velog.io/images/changhtun1/post/d3df2311-8a47-4e3b-af68-bca5232121de/image.png" alt=""></p>
<ul>
<li>첫 번째로 error는 실제 평점과 예측 평점과의 예측오차 계산</li>
<li>두 번째, 세번째로 gradient 반대 방향의 gamma에 비례하는 크기로 q_i와 p_u를 최신화 </li>
</ul>
</li>
<li><p>ALS(Alternating Least Squares)
<img src="https://images.velog.io/images/changhtun1/post/97dc55fb-293b-4cde-a3b2-309de6b575f1/image.png" alt=""></p>
<ul>
<li><p>일반적인 MF SGD 식을 보면 q_i와 p_u가 미지의 값이기 때문에, p와 u의 반복적인 최신화 과정 중 발생하는 error식이 convex(볼록) 하다는 보장을 할 수 없게 됩니다.</p>
</li>
<li><p>그래서 두 개의 벡터 중에 하나를 고정한다음에 하나의 미지의 파라미터만 먼저 최적화 한다는 문제로 바꾸게 된다면 해당 식은 Convex한 2차식이 되어 최적화가 가능해집니다.</p>
</li>
<li><p>해당 메커니즘을 채택한 ALS방식은 p_u와 q_i를 한번씩 번갈아가면서 고정하면서 최적의 p_u 및 q_i의 least square를 계산합니다.</p>
</li>
<li><p>보통의 경우는 SGD가 더 쉽고 빠르지만 ALS가 더 효과적인 두 가지 상황이 있습니다. </p>
<ul>
<li>병렬화 프로세싱이 가능한 상황</li>
<li>보유한 데이터가 Implicit data에 집중된 서비스인 경우</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
</ul>
<hr>
<h1 id="adding-biases">Adding Biases</h1>
<ul>
<li><p>협업 필터링에 Matrix Factorization 기법을 사용한다는 의미는 다양한 데이터 및 task-specific한 요구사항을 처리할 수 있다는 유연성을 뜻합니다.
<img src="https://images.velog.io/images/changhtun1/post/0c1bcfb1-7b2d-4f38-95b5-51bbef94ef6c/image.png" alt=""></p>
</li>
<li><p>위 식은 사용자와 아이템간의 상호작용 및 관계를 파악하는 것이라 말하였지만, 실제로 점수 결과에서 관찰된 다양한 변동들은 직접적인 상호관계와는 관계 없이 <strong>사용자 혹은 아이템의 고유의 편향된 특성</strong>에 영향을 받고 이러한 편향된 특성을 <strong>Biases</strong>라고 부릅니다.</p>
</li>
</ul>
<p><code>예들들면 항상 평점을 짜게 주는 A(1~2점)유저와 항상 평점을 후하게 주는 B(4~5점)유저가 있는데, 특정 영화에 3점을 주었다면 여기서 3점은 A에게는 높은 3평점 그리고 B에게는 낮은 3평점이 되는 것처럼 두 유저에게 다른 의미일 것입니다.</code></p>
<p><img src="https://images.velog.io/images/changhtun1/post/fc9fa6ac-16a4-43d5-82b5-4a70e1c3428c/image.png" alt=""></p>
<ul>
<li><p>따라서 각 유저와 아이템에 대한 개별 고유 특성을 표현하는 bias term을 아래와 같이 추가합니다.</p>
<ul>
<li>mu = 모든 아이템의 평점 평균</li>
<li>b_i = 전체 아이템 평균에 대한 아이템 i의 편차</li>
<li>b_u = 전체 유저 평균에 대한 유저 u의 편차</li>
</ul>
</li>
<li><p>그리고 최종적으로 위 bias term을 활용하여 loss function을 구할 수 있습니다.</p>
</li>
</ul>
<hr>
<h1 id="additional-input-sources">Additional Input Sources</h1>
<ul>
<li><p>기본적으로 협업필터링의 많은 장점에 비해, 신규 유저 혹은 데이터를 쌓기 어려운 서비스 환경인 경우에 데이터 부족으로 인한 비일반화적인 결론에 도달하게 되는 <strong>Cold-Start</strong> 문제가 생깁니다.</p>
</li>
<li><p>이러한 문제를 극복하기 위해서, 유저의 취향을 간접적으로나마 파악할 수 있는 Implicit한 데이터들을 활용하는 것입니다.</p>
</li>
<li><p>해당 예를 단순화하기 위해서 Boolean의 Implicit Feedback로 예를 들어보겠습니다.
<img src="https://images.velog.io/images/changhtun1/post/b08ae5e1-df95-4465-a968-9edc63e7c977/image.png" alt=""></p>
</li>
<li><p>여기서 N(u)는 user u가 implcit feedback을 보인 아이템의 집합입니다.</p>
</li>
<li><p>이 때 암시적으로 선호하는 항목들을 통해 사용자 프로필을 만들 수 있고, 첫 번째 같이 표현될 수 있습니다.</p>
</li>
<li><p>그리고 식을 정규화하면 두 번째와 같이 표현될 수 있습니다.</p>
</li>
<li><p>그리고 또다른 추가적인 소스는 인구통계적 성격(아이템과 직접적인 관련을 띄지 않는 = 성별, 나이, 우편번호 등)을 띄는 사용자 속성(User Attribute)입니다.</p>
</li>
<li><p>해당 부분도 마찬가지로 Boolean형태로 고려하여 본다면 다음과 같이 표현됩니다.
<img src="https://images.velog.io/images/changhtun1/post/6959cbad-a5f1-4689-8329-99df0e59ee6d/image.png" alt=""></p>
</li>
<li><p>여기서 A(u)는 유저 u의 속성 집합을 뜻하고 위에 했던 방식과 똑같이 첫 번째와 같이 표현됩니다.</p>
</li>
<li><p>결론적으로 모든 Signal Sources(Implicit 데이터 + User Attribute 데이터)를 통합하면 Matrix Factorization 모델은 두 번째와 같이 표현됩니다.</p>
</li>
</ul>
<hr>
<h1 id="temporal-dynamics">Temporal Dynamics</h1>
<ul>
<li><p>데이터는 정적이지 않고 유행과 같이 시간에 따라 동적으로 변할 수도 있습니다.</p>
</li>
<li><p>그래서 아이템에 대한 유행과 유저의 선호도 성향은 시간에 따라 동적으로 시시각각으로 변할 수 있습니다.</p>
</li>
<li><p>이러한 영향(Temporal Effect)을 Matrix Factorization 모델도 설명 및 반영할 수 있어야 합니다.</p>
</li>
<li><p>아래 식은 t에 따른 사용자 선호 예측 평점을 나타내고 있습니다.
<img src="https://images.velog.io/images/changhtun1/post/b3e73e55-8eec-48f5-8c86-46a12f3fce64/image.png" alt=""></p>
</li>
<li><p>b_i(t) = 시간에 따른 아이템의 편향 (&quot;아이템의 유행은 시간에 따라 변할 수 있다&quot;)</p>
</li>
<li><p>b_u(t) = 시간에 따른 유저의 편향 (&quot;사용자의 평가 성향은 시간에 따라 변할 수 있다&quot;)</p>
</li>
<li><p>p_u(t) = 시간에 따른 유저의 선호도 편향 (&quot;아이템에 대한 사용자 선호도는 시간이 지남에 따라 변할 수 있다 = 옛날에 좋아했던 영화가 지금도 좋아하지 않을 수도 있으니&quot;)</p>
</li>
</ul>
<hr>
<h1 id="inputs-with-varying-confidence-levels">Inputs with Varying Confidence Levels</h1>
<ul>
<li>관측된 모든 점수들이 동일한 기준을 따르는 가중치 및 신뢰도를 받는 것에는 무리가 있습니다.</li>
</ul>
<p><code>예를들어 특정 광고에 영향을 직접적으로 받은 아이템에 대해서는 좋은 rating을 받는 상황과 한 유저가 특정 아이템에 악의적으로 나쁜 rating을 준 상황에서는 이를 일시적인 현상으로 보아야 함으로 예측 선호도를 계산할 때 신뢰도를 뜻하는 점수를 함께 부여하는 것이 중요합니다.</code></p>
<p><img src="https://images.velog.io/images/changhtun1/post/f3c438bf-9965-4140-bf88-78b3d520b706/image.png" alt=""></p>
<ul>
<li>따라서 예상 선호도와 신뢰도를 함께 고려하는 것이 중요한데, 이 경우에 신뢰도를 <strong>사용자의 행동에 대한 빈도 값</strong>으로 표현될 수 있습니다. 사용자가 단순히 일회성의 행동에는 명확한 선호도라 구분 짓기 힘들지만, 이러한 행동이 반복적으로 일어나게 된다면 이러한 패턴은 사용자의 선호를 반영한 것이라고 확신할 수 있습니다.</li>
</ul>
<hr>
<h1 id="netflix-prize-competition">Netflix Prize Competition</h1>
<ul>
<li><p>지금까지 실제 Netflix Prize Competition에서 입증된 Matrix Factorization 방법 및 효용성에 대해서 살펴보았습니다.</p>
</li>
<li><p>다음으로는 Netflix Prize Competition에서 실제 적용한 Matrix Factorization 결과로부터 두 개의 Latent Factor를 사용하여 각 영상들을 2차원 평면에 Plotting한 것입니다.
<img src="https://images.velog.io/images/changhtun1/post/a52940a6-36fa-4020-9f16-d99c5688632e/image.png" alt=""></p>
</li>
<li><p>첫 번째 Latent Factor(X축)는 좌측에 가까울수록 남성과 청소년 대상을 고려한 저속한 코미디와 공포영화이고, 우측에 가까울수록 여성 중심이고 진지한 색채를 사진 드라마와 코미디를 뜻합니다.</p>
</li>
<li><p>두 번째 Latent Factor(Y축)는 상단에 가까울수록 비평가들에게 호의적이고 독립적인 영화이고, 하단에 가까울수록 주류영화들을 뜻합니다.</p>
</li>
</ul>
<p><img src="https://images.velog.io/images/changhtun1/post/38b565ec-b308-4684-9a75-f86cded9550a/image.png" alt=""></p>
<ul>
<li><p>다음은 Factorization에 다양한 접근 및 매개변수 변화를 주어 실험한 결과에 대한 해석입니다.</p>
<ul>
<li>편향적 성격을 고려하여 RMSE 감소 <ul>
<li>Implicit한 데이터 추가를 통한 RMSE 감소</li>
</ul>
</li>
<li>시간에 따른 선호도 변화를 고려하여 RMSE 감소</li>
<li>학습을 위한 파라미터 증가를 통한 RMSE 감소</li>
</ul>
</li>
</ul>
<hr>
<h1 id="마무리">마무리</h1>
<p>Netflix Prize Competition에서 우수한 결과를 낸 팀의 방법론 내용을 담고 있는 <strong>&quot;Matrix Factorization Techniques For Recommender System&quot;</strong>에 대해서 간단하게 리뷰해보았습니다. </p>
<p>해당 논문은 추천 시스템을 구축할 때 MF방식을 어떻게 더욱 효과적 활용할 수 있는지에 대해서 우리에게 말하고 있습니다.</p>
<p>지금도 계속해서 최신화 알고리즘들이 많이 나오고 있지만, 크게 근간은 바뀌지 않고 전통적인 방법론의 메커니즘으로부터 시작하게 됩니다. </p>
<p>기초부터 차근하게 쌓아나가시길 바라면서, 우리 모두의 성공적인 학습을 기원합니다.
감사합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[에어비앤비의 숙소 가격 책정]]></title>
            <link>https://velog.io/@anal-yg/%EC%97%90%EC%96%B4%EB%B9%84%EC%95%A4%EB%B9%84%EC%9D%98-%EC%88%99%EC%86%8C-%EA%B0%80%EA%B2%A9-%EC%B1%85%EC%A0%95</link>
            <guid>https://velog.io/@anal-yg/%EC%97%90%EC%96%B4%EB%B9%84%EC%95%A4%EB%B9%84%EC%9D%98-%EC%88%99%EC%86%8C-%EA%B0%80%EA%B2%A9-%EC%B1%85%EC%A0%95</guid>
            <pubDate>Tue, 10 May 2022 08:51:10 GMT</pubDate>
            <description><![CDATA[<h2 id="에어비앤비의-가격-책정"><strong>에어비앤비의 가격 책정</strong></h2>
<ol>
<li><p>Price Tips
호스트가 달력에 날짜별로 받고 싶은 금액을 적으면 airbnb는 예상 예약율을 color을 통해 보여준다. 
그리고 적정금액으로 변경하도록 제안한다.
<img src="https://velog.velcdn.com/images/anal-yg/post/9fde6ecd-9772-4327-84c5-4be09feaf6a5/image.png" alt=""></p>
</li>
<li><p>Smart Pricing
호스트가 자신이 받고싶은 금액대(min, max)를 설정하면, 설정한 날짜들에 대하여 자동으로 금액을 맞추도록 도와준다.
<img src="https://velog.velcdn.com/images/anal-yg/post/a9125db4-42f9-4ede-8c4b-4eb8117ef888/image.png" alt=""></p>
</li>
</ol>
<ul>
<li>Overview of the pricing system
<img src="https://velog.velcdn.com/images/anal-yg/post/a10a99a4-4a02-42a1-9b7a-1668f8c6b826/image.png" alt="">
First, a binary classification model predicts the booking probability of each listing-night. 
Second, a per-listing regression model predicts the “optimal” price for each listing-night, in which a customized loss function is used to guide the learning. Predicted booking probability from the first model is used as an input feature for the regression model. 
Finally, we apply additional personalization logic incorporating hosting goals, special events, etc on top of the output from the second model to generate the final price suggestions.</li>
</ul>
<ul>
<li>지표 설정
<img src="https://velog.velcdn.com/images/anal-yg/post/4707e7e5-ea14-4323-a1f1-d92be1c2c42a/image.png" alt=""></li>
</ul>
<h2 id="스마트-요금-책정-방법"><strong>스마트 요금 책정 방법</strong></h2>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/5e9e2710-d0f4-44c6-9ec2-4c940afd8e32/image.png" alt="">
<img src="https://velog.velcdn.com/images/anal-yg/post/095384a3-0deb-47ec-8052-181b91463683/image.png" alt="">
<img src="https://velog.velcdn.com/images/anal-yg/post/855f2949-9a17-4c45-8700-005c773fae31/image.png" alt=""></p>
<h2 id="분석-사례"><strong>분석 사례</strong></h2>
<ol>
<li><p>에어비앤비(Airbnb)의 숙박가격 결정요인 분석 - 서울시를 중심으로 (2016.06 건국대 부동산학과 최다정)
서울시 701건 사례 헤도닉 모형(회귀분석 모형)
<img src="https://velog.velcdn.com/images/anal-yg/post/f2b88430-fa4b-4151-803d-eefd77e5f1bb/image.png" alt=""></p>
<p>숙박가능인원, 게스트하우스, 보증금예치, 유연한 환불정책, 청 소비 청구, 슈퍼 호스트, 종로 및 강남지역일 경우 에어비앤비 숙박가격에 양(+)의 영향
반면 개인실 및 다인실 제공, 추가인 원요금 부과, 남성 호스트, 이용후기 개수, 호스트 동거는 음(-)의 영향</p>
</li>
</ol>
<ol start="2">
<li><p>Airbnb Price Prediction Using Machine Learning and Sentiment Analysis (2019.07 Stanford University)
Airbnb 가격 예측에 가장 성능이 좋은 모델을 찾아내고자 함
뉴욕시 50,221 사례, 96개 feature 사용
<img src="https://velog.velcdn.com/images/anal-yg/post/ed956a87-2f90-4708-9737-cbdbd9f6c3aa/image.png" alt="">
<img src="https://velog.velcdn.com/images/anal-yg/post/7e51e506-8f0c-4674-bdc1-b8360cb0ee12/image.png" alt=""></p>
<p>테스트한 모델 중 SVR(Support Vector Regression)이 가장 좋은 성능을 보였고, 테스트 세트에서 R2 69%와 MSE 0.147을 생성함
더 많은 데이터 사례로 모델링 할 경우 K-means clustering with Ridge Regression model 의 성능이 향상 될 수 있음</p>
</li>
<li><p>개인 포스팅: Predicting Airbnb prices with machine learning and deep learning (2019.05 Laura Lewis)</p>
</li>
</ol>
<ul>
<li><p>XGBoost 머신 러닝 모델(특히 xgb.XGBRegressor()) 구축
가장 중요한 10가지 Fetures : 숙박 시설의 수용 인원/ 청소비/ 호스트가 보유한 기타 숙소 수(및 멀티 리스팅 호스트인지 여부)/ 다음 90일 중 예약할 수 있는 날짜 수/ 추가 인원당 요금/ 리뷰 수/ 욕실 수/ 보증금/ 숙소가 웨스트민스터에 있는 경우/ 최소 숙박일
<img src="https://velog.velcdn.com/images/anal-yg/post/6803e049-3d80-452a-bc32-d0e0d3b0bd97/image.png" alt=""></p>
</li>
<li><p>XGBoost 모델의 점수를 향상시킬 수 있는지 알아보기 위해 신경망(NN) 실험
몇가지 파라미터 조정을 하였으나, XGBoost 모델만큼 성능이 좋지 않았음
<img src="https://velog.velcdn.com/images/anal-yg/post/a3b44070-9e5c-4b00-aa87-232bf9b7b066/image.png" alt=""></p>
<p>그러나 최고 성능의 모델에서도 가격 변동의 73%만 설명할 수 있었음
나머지 27%의 설명할 수 없는 상당 부분은 숙소 사진의 차이로 인한 것일 수 있음</p>
</li>
</ul>
<h2 id="결론"><strong>결론</strong></h2>
<p>여기어때는 자체 상품을 판매하는 것이 아니기 때문에, 객실 판매가격 조정에 제한이 있을 것.
(최저가가 아닌 경우 쿠폰 사용을 통한 최저가 제공)
제휴점의 객실 판매가격 산정/실시간 조정 지원.</p>
<p>제휴점의 객실 요금 산정시 가이드라인 제공.</p>
<p><a href="https://blog.voidmainvoid.net/attachment/cfile21.uf@9978AD3B5BA227531F5D23.pdf">관련논문 링크</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] 이동통신 트래픽 예측을 위한 클러스터링 기법]]></title>
            <link>https://velog.io/@anal-yg/prediction</link>
            <guid>https://velog.io/@anal-yg/prediction</guid>
            <pubDate>Tue, 03 May 2022 12:02:17 GMT</pubDate>
            <description><![CDATA[<h1 id="배경">배경</h1>
<p>1) 트래픽 예측이 적용되면 효율적인 절전과 자원할당 가능
2) 트래픽 예측을 통한 이상 탐지로 정상적인 트래픽 동작과 구분되는 트래픽을 예측해 자원을 효율적으로 할당하여 양질의 서비스를 제공
3) ES(Exponential Smoothing), ARIMA 모델과 같은 고전적 예측기법이 있으나, 환경적 요인(시간적 불규칙성, 공간적 상관성)에 따라 변동이 큰 모바일 데이터를 예측하는 데에는 적합하지 않다
 =&gt;3D CNN, convLSTM(convolutional LSTM), STN 등의 인공지능 모델을 이용한 예측방법이 더 적합
4) 시공간 데이터 예측에 적절한 convLSTM을 사용하며, 클러스터 단위로 트래픽 데이터를 학습시키고 예측하는 알고리즘 제안
 =&gt; 예측성능을 RMSE, MASE로 분석 </p>
<h1 id="본론">본론</h1>
<p>1.dataset
2014년 &#39;Telecom Italia Big Data Challenge&#39;에서 제공하는 데이터
2013.11.01~2013.12.31</p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/a73d8c1f-0fc2-4ce7-bdb7-c05f52aa8007/image.png" alt=""></p>
<p>2.convLSTM(convolutional LSTM)
데이터의 시간적 관계를 반영하지 못하는 CNN과, 시계열 분석이 가능하지만 1차원 데이터만 학습가능한 lSTM의 단점이 보완된 모델</p>
<p>3.클러스터링 알고리즘</p>
<p>1) k-means와 계층적 클러스터링 둘다 적합시킨 후, 오차가 적은 계층적 클러스터링 방법을 적용함. </p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/1db0a348-cdc0-44a5-9409-61c78f173ef6/image.png" alt=""></p>
<p>2) 효율적인 클러스터링을 위해 그리드 간 거리 이외의 클러스터링에 반영하기 위한 파라미터를 추가할 필요
   그리드 간 트래픽 양(valume), 트래픽의 상관도(Correlation), 거리(Distance) 이 세가지를 클러스터링 파라미터로 사용함. 
   <img src="https://velog.velcdn.com/images/anal-yg/post/eba5a442-c698-4422-97fe-4b06bf3255b9/image.png" alt=""></p>
<p>   <img src="https://velog.velcdn.com/images/anal-yg/post/5471e940-8e89-453c-bc71-6e2e7186164d/image.png" alt=""></p>
<p>3) 시뮬레이션 흐름도
<img src="https://velog.velcdn.com/images/anal-yg/post/b707926b-57de-4b68-a79c-5a7ec2a52301/image.png" alt=""></p>
<p>4) 시뮬레이션 결과
<img src="https://velog.velcdn.com/images/anal-yg/post/647bd907-3414-4c37-af16-c123b35d37c1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/4ec3d42f-8e16-4f51-9461-21a6eec65400/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/a86feaca-bc8c-41a7-aadb-541b757c0088/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/d7512c1a-2bbc-4980-9cf3-8f0d8fa0e0c0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/anal-yg/post/1488c6e8-064e-49db-8a65-f99ed2c777cc/image.png" alt=""></p>
<h1 id="결론">결론</h1>
<p>클러스터 개수가 많아질수록 예측 성능이 좋아지지만 학습에 사용할 수 있는 데이터 수는 점점 적어지기 때문에 클러스터 개수를 아주 많이 늘리더라도 예측성능의 향상에 한계 발생!</p>
<p>reference
이동통신 트래픽 예측을 위한 클러스터링 기법(2022) </p>
]]></description>
        </item>
    </channel>
</rss>