<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>양갱로그</title>
    <link>https://whereisend.tistory.com/</link>
    <description>양정아</description>
    <language>ko</language>
    <pubDate>Wed, 6 May 2026 17:01:08 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>양갱맨</managingEditor>
    <image>
      <title>양갱로그</title>
      <url>https://tistory1.daumcdn.net/tistory/3038886/attach/be3cb1fcdaa74d4a8640a819a53cde78</url>
      <link>https://whereisend.tistory.com</link>
    </image>
    <item>
      <title>분노의 청년 버팀목 전세대출 받기 1편 (feat. 2번 거절)</title>
      <link>https://whereisend.tistory.com/394</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 글을 쓰는 지금은..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주거래 은행 2개 지점에서 대출 거절을 받고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;새로운 은행으로 기금e든든 재신청하고 대기중인 상태&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(다시 생각하려니 또 화가 치밀어 오른다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 나의 상태부터 정리하면...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;현재 사는 곳은 서울이고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이사갈 곳은 경기도였다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;집은 도시개발지역에 지어진 오피스텔이고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;공실이 아닌 세입자가 있는 곳을 계약한 상태&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;청년 버팀목 전세대출은 이 과정으로 진행된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 집 5% 계약금 입금 및 계약 완료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 기금e든든 사전심사 신청&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 사전심사 '적격' 시, 기금e든든 신청할 때 선택한 은행으로 대출 신청하러 가기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 은행 대출 심사&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 최종 심사 통과 시, 대출 실행일 맞춰 대출 진행&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나는...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;보증금 1억 7천 중 &lt;b&gt;850만(5%)을 계약금으로 넣은 상태&lt;/b&gt;였다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;5% 계약금 납입까지 완료한 상태였기 때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나에게 남은 과정은 2~5번!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2번, 기금e든든 사전심사를 신청하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;적격 결과를 받았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbI15d/btsPf3UjtMr/RPCDYDI2ylpsCpaCx3ykqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbI15d/btsPf3UjtMr/RPCDYDI2ylpsCpaCx3ykqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbI15d/btsPf3UjtMr/RPCDYDI2ylpsCpaCx3ykqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbI15d%2FbtsPf3UjtMr%2FRPCDYDI2ylpsCpaCx3ykqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;290&quot; height=&quot;157&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과받는데 하루 걸림!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(오래 걸릴 줄 알았는데..다행이다!)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과를 받자마자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3번, 은행 대출 신청하러 갔다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 집 근처 주거래 은행을 갔다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서부터 고난 START &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 주의할 점&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;가려는 은행이 출장소인가?&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기선 환전이나 간단한 업무만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;봤었기 때문에 대출이 안되는지 몰랐다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;가서 은행 청경분에게&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대출 신청하러 왔다고 하니까&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;여긴 출장소라서 대출 업무를 안합니다.&quot; 였다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;출장소는 대출 X라는 걸&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;모른 내 잘못도 있기 때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;별 말 없이, 아..네.. 하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나와서 다른 영업점을 찾아갔다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;거기는 대출을 하는 곳이었음!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정말 다행히 대기자가 없어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 대출 상담을 받는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;서류를 보더니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;대출받으려면 이 근처 지점으로 가셔야합니다.&quot;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;라는 대답을 들었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 왜 이 근처로 가야하냐? 하니까&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정확한 사유 설명없이&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;대출받으려면 그 근처에서만 나와요&quot; 라고 함&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;아니 그니까 왜 그런건데요;;;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정확한 사유를 말하라고요;;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;시간낭비하고 싶지 않아서 빠르게 나와서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계약할 곳 근처 지점으로 출발했다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;참고로.. 차로 40분 거리&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;도착해서 근처 지점을 갔는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;행원이 하는 말,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&quot;본인 소득대비 대출 금액이 커서 다 못해주고 8천만원만 가능하세요.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;그리고 허그는 안되고 다른걸로 보증보험 따로 개인적으로 가입하셔야합니다.&quot;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이게 뭔 말임..?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;청년 버팀목은 최소소득이 아니라&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최대 소득 제한&lt;/b&gt;(결혼예정X 미혼인 경우, 5천만원 이하)고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가 빌리려는 금액은 &lt;b&gt;1억7천 중 80%&lt;/b&gt;인&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1억 3600만원임&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내 소득과 빌리려는 돈이&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;최대금액을 넘는 것도 아니었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;또한,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;애초에 도시개발사업 지역은&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대지권등기가 아직 안난 곳들이 있고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런 경우에는 HUG 보증보험만 가능하다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;근데 무슨 소득대비&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;금액이 커서 대출을 못해주며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;허그 보증보험이 안된다는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;소리를 하는건지&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어이가 없었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계속 뭐 안된다 이러길래 짜증나서 나왔다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다른 지점으로 가서 또 대기...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여긴 될까 하고 상담 받는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;오피스텔 시가 대비 전세가가 80%를 넘어서 대출을 못해주겠다&quot;&lt;/b&gt; 란다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하..ㅋㅋㅋㅋ 진짜 어이가 없음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가 계약한 오피스텔은&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;완공되고 입주한지 1년 된 곳이라&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;KB시세가 없어&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;국세청 기준시가를 기준으로 확인하는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그거를 떠나서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;갑자기 오피스텔 시가 대비 전세가가 80% 넘는다고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오피스텔 보증금을 낮춰오란다;;;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;진짜 이 은행에서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대출받는거 걍 포기했고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기금e든든 취소하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다른 은행으로 재신청했다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;( 대출 다 끝나면 주거래은행 바꾼다 진짜 좋은 점이 하나도 없음)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;진짜 화가 난다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;찾아보니 실적도 안되고 할 건 많아서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안해준다는 기사도 많던데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정부 정책을 은행에서 이렇게 기준 세워서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;못해주겠다 해서 거절하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;신청자들은 뭐 어떻게 해야함?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;진짜 말 그대로 뺑뺑이 돌라는 소리밖에 없다;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 아까운 내 연차 날렸고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나는 다음주에 또 연차를 써야한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;담주는 연차가 소중히 잘 쓰일지,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;또 이번처럼 날리게 될지...&lt;/p&gt;</description>
      <category>대출거절</category>
      <category>버팀목거절</category>
      <category>오피스텔전세</category>
      <category>전세대출</category>
      <category>전세대출거절</category>
      <category>청년버팀목</category>
      <category>청년버팀목전세대출</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/394</guid>
      <comments>https://whereisend.tistory.com/394#entry394comment</comments>
      <pubDate>Sat, 12 Jul 2025 13:54:48 +0900</pubDate>
    </item>
    <item>
      <title>탐색적 데이터 분석 (EDA) - 변이 추정</title>
      <link>https://whereisend.tistory.com/393</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;변이 : 데이터 값이 얼마나 퍼져있는지 알 수 있는 척도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변이 추정 하는 방법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;편차 : 데이터가 중앙값을 주변으로 얼마나 퍼져 있는지에 대한 값&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;평균절대편차 : 편차의 대푯값을 추정하는 법&lt;br /&gt;&lt;i&gt;단순히 편차를 평균을 내면 편차의 합이 항상 0이 되기 때문에 사용할 수 없게 된다.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CyhQp/btsC6SRaUdj/t4HokT4iqcx1mkD11KnaF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CyhQp/btsC6SRaUdj/t4HokT4iqcx1mkD11KnaF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CyhQp/btsC6SRaUdj/t4HokT4iqcx1mkD11KnaF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCyhQp%2FbtsC6SRaUdj%2Ft4HokT4iqcx1mkD11KnaF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;173&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분산 : 제곱편차의 평균&lt;/li&gt;
&lt;li&gt;표준편차 : 분산의 제곱근
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;표준편차는 원래 데이터와 스케일이 같아서 해석이 쉽다.&lt;/li&gt;
&lt;li&gt;수식이 복잡해도 수학적으로 제곱한 값이 절댓값보다 통계 모델 다루기 편리하다는 이론을 근거로 평균절대편차보다 표준편차를 더 선호한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;중위절대편차 : 분산, 표준편차, 평균절대편차는 특잇값, 극단값이 민감하다. 로버스트한 값을 얻기위해서 중위절대편차를 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm0xQj/btsDbdUiss3/a85W15Ifgb1Pl8SDipN4ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm0xQj/btsDbdUiss3/a85W15Ifgb1Pl8SDipN4ok/img.png&quot; data-alt=&quot;평균절대편차는 극단값때문에 평균이 커져서 절대편차의 합도 커지게 된다.중간값을 쓰면 극단값에 대해 로버스트해지기 때문에 극단값 영향을 받지 않음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm0xQj/btsDbdUiss3/a85W15Ifgb1Pl8SDipN4ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm0xQj%2FbtsDbdUiss3%2Fa85W15Ifgb1Pl8SDipN4ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;919&quot; height=&quot;175&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;평균절대편차는 극단값때문에 평균이 커져서 절대편차의 합도 커지게 된다.중간값을 쓰면 극단값에 대해 로버스트해지기 때문에 극단값 영향을 받지 않음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;백분위수를 사용한 추정&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사분위범위(IQR) : 25번째 백분위수와 75번째 백분위수 차이를 통해 변위측정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AICLW/btsDbfq1VXD/KnfFJcJHKxKc7kmMqEDLH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AICLW/btsDbfq1VXD/KnfFJcJHKxKc7kmMqEDLH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AICLW/btsDbfq1VXD/KnfFJcJHKxKc7kmMqEDLH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAICLW%2FbtsDbfq1VXD%2FKnfFJcJHKxKc7kmMqEDLH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;312&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Machine Learning/Statistics</category>
      <category>IQR</category>
      <category>데이터 과학을 위한 통계</category>
      <category>데이터분석</category>
      <category>분산</category>
      <category>사분위범위</category>
      <category>절대편차</category>
      <category>중위절대편차</category>
      <category>통계</category>
      <category>편차</category>
      <category>표준편차</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/393</guid>
      <comments>https://whereisend.tistory.com/393#entry393comment</comments>
      <pubDate>Sun, 7 Jan 2024 00:16:55 +0900</pubDate>
    </item>
    <item>
      <title>탐색적 데이터 분석 (EDA) - 데이터 종류와 대푯값</title>
      <link>https://whereisend.tistory.com/392</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;보통 처음 데이터가 주어지면 데이터의 유형, 분포 등 데이터에 대해 탐색하는 작업을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 &lt;b&gt;Exploratory Data Analysis, 탐색적 데이터 분석 (EDA)&lt;/b&gt;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 얻게되면 쓸모있는 데이터 외에도 무의미한 정보들이나 이상치 등 다양한 데이터들이 함께 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 데이터를 활용하기 위해 어떻게 전처리할 것인지 기준을 세우고, 변환하는 과정을 하는 것이 중요한 작업이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 원시 데이터를 가공하여 &lt;b&gt;정형 데이터로 변환&lt;/b&gt;하는 작업을 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정형 데이터의 종류&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1. 수치형 데이터
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연속형 : 일정 구간 내 어떤 값이든 가질 수 있는 변수&lt;/li&gt;
&lt;li&gt;이산형 : 정수 값을 갖는 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2. 범주형 데이터
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이진형 : True/False, 0 또는 1 등 둘 중 하나의 값을 갖는 변수&lt;/li&gt;
&lt;li&gt;순서형 : 평점처럼 범주 내 값들이 순위를 가지고 순서대로 나타나는 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 접하는 데이터 중 대부분은 테이블 데이터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부할 때 사용하는 예제 데이터(csv, xlsx)나 회사에서 사용하는 DB, 스프레드 시트 데이터들이 모두 테이블 데이터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 데이터는 행(row,레코드)과 열(column,속성)로 이뤄진 2차원 행렬이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj5lgg/btsCVFDU7U5/tvvAx7wqi8KTLwk7kBeMF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj5lgg/btsCVFDU7U5/tvvAx7wqi8KTLwk7kBeMF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj5lgg/btsCVFDU7U5/tvvAx7wqi8KTLwk7kBeMF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj5lgg%2FbtsCVFDU7U5%2FtvvAx7wqi8KTLwk7kBeMF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;133&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면, 인덱스, 이름, 나이, 성별, 주소 각각이 속성명으로 feature가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레코드는 1, 홍길동, 19, 남, 서울 강북구 이 한 줄이 레코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 구조에 대해 좀 더 알고 싶다면, 데이터베이스 관련 도서나 영상을 찾아보면 공부가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 문자열, 숫자, 이진형 변수는 테이블 데이터로 구성하여 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 테이블 형태로 구조화되지 않는 데이터는 뭐가 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 구성하기 나름이긴 하지만..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 구조나 공간 데이터 등은 다른 방식으로 구성이 되기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 나는 그래프나 공간데이터를 다뤄본 적이 없어서,, 어떻게 구성되어있는지 예시는 잘 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프는 vetex, edge로 구성된 데이터겠지..?&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정형화된 데이터를 얻었으면, 그 다음은 뭘 해야될까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 각 &lt;b&gt;feature의 type value를 찾는 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;type value는 대부분의 값이 위치하는 &lt;b&gt;중심경향을 나타내는 추정값&lt;/b&gt;을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시로, &quot;너 보통 유튜브 보는 시간이 얼마나 돼?&quot; 라는 질문에 &quot;평균 한 40분?&quot; 이라는 대답을 한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 시청시간(feature)의 type value는 40분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 모든 특성들의 대푯값은 평균으로 구하면 되지 않을까? 라고 생각할 수도 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 반에 10명의 학생들의 몸무게가 [40, 42, 44, 46, 47, 50, 32, 44, 78, 80] 이렇게 있다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균은 (40+42+44+46+47+50+32+44+78+80) / 10 = 50.3이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;40kg대의 학생들이 과반수를 차지하고 있음에도 불구하고 78, 80kg의 학생들의 영향으로 평균 몸무게가 50kg가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;평균은 극단값의 영향을 받기 때문에&lt;/b&gt; 무조건 평균을 대푯값으로 사용하는 것은 좋은 방법이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 사용하는 대표값&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;평균값
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 값의 총합 / 값의 개수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;중간값
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 정렬했을때 한 가운데에 위치하는 값, 짝수개라면 중간 값 2개의 평균값으로 한다.&lt;/li&gt;
&lt;li&gt;가중평균처럼 가중중간값을 사용하기도 하고, 중간값은 극단값이 있는 데이터에서는 평균보다 유용하다.&lt;br /&gt;중간값은 평균처럼 쉽게 변하지 않기 때문에 robustness 특성이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;최빈값
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 자주 나오는 값, 평균이나 중간값이 의미가 없는 질적 자료의 대표값을 선정할 때 자주 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사분위수
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 같은 갯수로 4개의 그룹으로 나누는 기준 값&lt;/li&gt;
&lt;li&gt;사분위수를 이용해 이상치를 제거하기도 한다.&lt;br /&gt;이건 좀 중요해서 나중에 더 자세히 정리할 예정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xVKlN/btsCVItSKmk/xWKtjRMJP75Q8Aym0W5NgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xVKlN/btsCVItSKmk/xWKtjRMJP75Q8Aym0W5NgK/img.png&quot; data-alt=&quot;https://towardsdatascience.com/understanding-boxplots-5e2df7bcbd51&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xVKlN/btsCVItSKmk/xWKtjRMJP75Q8Aym0W5NgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxVKlN%2FbtsCVItSKmk%2FxWKtjRMJP75Q8Aym0W5NgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;266&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://towardsdatascience.com/understanding-boxplots-5e2df7bcbd51&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;백분위수
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 정렬해서 x%인 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;절사평균
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;크기 순으로 정렬하고 양 끝에서 일정 개수의 값들을 삭제하고 나서 평균을 구한다.&lt;br /&gt;절사평균은 극단값을 제거한다는 장점이 있지만, 데이터가 많지 않은 경우에는 사용하기 어려운 평균이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;가중평균
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 값에 가중치를 곱한 값들의 총합을 가중치의 총합으로 나눈 평균&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;기댓값
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;얻을거라고 기대하는 값의 평균&lt;/li&gt;
&lt;li&gt;가능한 값 * 확률의 합계&lt;/li&gt;
&lt;li&gt;기댓값은 평균과 같다고 볼 수 있는데, 식을 써놓고 보면 확률변수가 얻는 값의 가중평균으로 계산할 수 있다.&lt;br /&gt;이해가 잘 안간다면 &lt;a href=&quot;https://hsm-edu.tistory.com/1233&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hsm-edu.tistory.com/1233&lt;/a&gt; 이 포스팅 추천!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Machine Learning/Statistics</category>
      <category>1일1포스팅</category>
      <category>Eda</category>
      <category>대푯값</category>
      <category>데이터분석</category>
      <category>데이터종류</category>
      <category>통계</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/392</guid>
      <comments>https://whereisend.tistory.com/392#entry392comment</comments>
      <pubDate>Tue, 2 Jan 2024 00:00:18 +0900</pubDate>
    </item>
    <item>
      <title>2024 목표 : 블로그 새단장하기</title>
      <link>https://whereisend.tistory.com/391</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;제목 그대로 블로그를 새단장하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 글 업로드도 오래됐고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부하던게 중구난방으로 정리가 안돼서 하나씩 정리해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝, 딥러닝 특성 상 수식이 많아서 블로그에서 정리하다보면 귀찮아서 자꾸 개인적으로 태블릿에 정리하게 되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러다 보면 블로그에 업로드를 안하게 된다는....ㅜㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 블로그를 열심히 해보자!!!&lt;/p&gt;</description>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/391</guid>
      <comments>https://whereisend.tistory.com/391#entry391comment</comments>
      <pubDate>Sun, 17 Dec 2023 23:06:49 +0900</pubDate>
    </item>
    <item>
      <title>중기청 전액 상환!</title>
      <link>https://whereisend.tistory.com/390</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2023년 10월 28일자로 중기청 대출 1억은 전액 상환했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준 미달로 인해 버팀목 전환 시점과 더불어 남자친구네 집으로 동거인으로 들어갈 예정이라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전셋집을 알아볼 필요가 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;28일에 전세 계약이 만료되고, 대출 은행인 KB국민은행 어플에 들어가서 대출 전액 상환을 해버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 대출 만기일이 도래했을 때, 연장신청을 한게 아니라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 은행 계좌에 빠져나갈 잔액만 있으면 자동적으로 상환이 된다고 한다. (전화로 통화함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 난 그냥 그때까지 기다리기 싫어서 바로 상환 다 해버림!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 청약 잘 알아봐야겠땅,,,!&lt;/p&gt;</description>
      <category>Daily</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/390</guid>
      <comments>https://whereisend.tistory.com/390#entry390comment</comments>
      <pubDate>Mon, 30 Oct 2023 18:45:45 +0900</pubDate>
    </item>
    <item>
      <title>Content-based Filtering 이해하기</title>
      <link>https://whereisend.tistory.com/389</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;참고도서 : python을 이용한 개인화 추천 시스템 - 임일&lt;/p&gt;
&lt;h1&gt;Content-base Filtering (CB; 내용 기반 필터링)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CB는 제품의 내용을 분석해서 추천하는 기술.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히나 &lt;b&gt;텍스트 정보&lt;/b&gt;가 많은 책, 뉴스에 많이 사용되는 &lt;b&gt;추천 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CB 절차&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;아이템 간 유사도 구하기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추천 대상자(user)가 선호하는 아이템 선정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선호 아이템과 유사도가 가장 높은 N개 아이템 찾기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N개 아이템을 추천&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 절차에서 발생하는 이슈&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유사도 함수 정하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유사도 함수는 여러가지가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;N을 몇으로 설정할 것인지
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N이 많을수록 추천 성능이 올라가겠지만, 몇 개가 최적인지 알 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;N개 아이템 각각 유사도 높은 아이템들이 있을텐데, 이것들을 어떻게 조합할 것인지&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화 데이터를 통해 CB 추천 시스템을 만들어보자.&lt;/p&gt;
&lt;pre class=&quot;capnproto&quot;&gt;&lt;code&gt;import pandas
from sklearn.feature_extraction.text import TfidfVectorizer # 유사도 측정을 위한 전처리
from sklearn.metrics.pairwise import cosine_similarity # 유사도 함수 (코사인유사도)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 데이터 읽기
movies = pd.read_csv('./데이터-2판/movies_metadata.csv', encoding='latin-1', low_memory=False)
movies = movies[['id','title','overview']]
movies.head(10)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-17 오전 12.06.41.png&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ho6XE/btrWq9GGQoI/3sBjKOwrRBNdPgPKJo6LQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ho6XE/btrWq9GGQoI/3sBjKOwrRBNdPgPKJo6LQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ho6XE/btrWq9GGQoI/3sBjKOwrRBNdPgPKJo6LQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHo6XE%2FbtrWq9GGQoI%2F3sBjKOwrRBNdPgPKJo6LQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;431&quot; height=&quot;202&quot; data-filename=&quot;스크린샷 2023-01-17 오전 12.06.41.png&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화 id, 제목, 줄거리 정보가 있는 데이터셋이다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;#preprocessing
movies.dropna(inplace=True) # 결측치 제거
movies['overview'].fillna(' ',inplace=True) # 줄거리가 비어있는 부분은 빈칸으로 대체&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 영화 간 유사도를 구할 수 있도록 전처리 과정이 필요하다.&lt;br /&gt;왜냐? 전처리하지 않고 사용한다면, &lt;b&gt;정상 데이터 속에 섞인 이상치들이 모델 성능에 어떤 영향을 끼칠지 모르기 때문에 최대한 데이터를 깔끔하게 정제해서 추천시스템에 적용해야 정확성이 높아진다.&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;tfidf = TfidfVectorizer(stop_words='english') # stop_words='english'로 설정
tfidf_matrix = tfidf.fit_transform(movies['overview']) # tf-idf 계산&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 영화의 각 줄거리 내용 중 &lt;b&gt;필요 없는 단어들은 추천 시스템이 알고 있어봤자 방해만 되는 요소&lt;/b&gt;일 것이다.&lt;br /&gt;이런 요소들을 &quot;불용어&quot;라고 하고,&lt;b&gt; tf-idf 는 이러한 불용어들의 가중치를 줄이면서 문장 속 단어들의 중요도를 계산하는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://whereisend.tistory.com/388&quot;&gt;2023.01.17 - [추천시스템] - TF-IDF&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;tf-idf 값이 크다는 건, 특정 문서에서 단어 빈도가 높고 전체 문서들 중 그 단어를 사용하는 빈도가 낮다는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화 줄거리의 핵심 단어를 추출하기 위해 &lt;code&gt;TfidfVectorizer()&lt;/code&gt;를 사용하자.&lt;br /&gt;&lt;code&gt;stop_words&lt;/code&gt; 는 불용어를 설정할 수 있는 파라미터다.&lt;br /&gt;&lt;code&gt;'english'&lt;/code&gt; 로 하면 영어를 불용어로 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화 줄거리 &lt;code&gt;overview&lt;/code&gt; 컬럼 데이터의 tf-idf 값을 계산한다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
cosine_sim = pd.DataFrame(cosine_sim, index=movies.index, columns=movies.index)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tf-idf 값을 가지고 코사인 유사도를 통해 영화 간 유사도를 구한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-17 오전 12.59.23.png&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bymHjH/btrWnoSx8GJ/tzrBmkNeq56FB3BXiLbhtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bymHjH/btrWnoSx8GJ/tzrBmkNeq56FB3BXiLbhtk/img.png&quot; data-alt=&quot;이 행렬의 대각원소는 모두 1이다. 자기 자신과 자기 자신의 유사도는 1이니까&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bymHjH/btrWnoSx8GJ/tzrBmkNeq56FB3BXiLbhtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbymHjH%2FbtrWnoSx8GJ%2FtzrBmkNeq56FB3BXiLbhtk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;192&quot; data-filename=&quot;스크린샷 2023-01-17 오전 12.59.23.png&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이 행렬의 대각원소는 모두 1이다. 자기 자신과 자기 자신의 유사도는 1이니까&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화 간 유사도를 편하게 행렬형태로 보기 위해 데이터프레임으로 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 인덱스, 컬럼에 있는 숫자들은 영화의 인덱스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 첨부된 이미지 데이터로만 봤을 때, index가 1인 영화와 유사도가 높은 2개 영화를 꼽는다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 자신을 제외한 0번 영화(0.14985)와 7번 영화(0.102595) 가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 유사도가 높은 영화 제목을 알고싶은 것이니까 영화제목과 인덱스값을 매칭시킬 수 있도록 변수를 하나 만들자.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;indices = pd.Series(movies.index, index=movies['title'])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 내가 입력한 영화제목과 유사도가 높은 N개의 영화제목을 반환해주는 함수를 통해 추천 시스템 코드 작성을 마무리한다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def content_recommender(title, n):
    idx = indices[title]
    sim_scores = cosine_sim[idx]
    sim_scores = sim_scores.sort_values(ascending=False)[1:n+1] # [1:n+1] -&amp;gt; 나 자신을 제외한 나머지 영화들
    return movies.loc[sim_scores.index]['title']

print(content_recommender('The Lion King', 5))
print(content_recommender('The Dark Knight Rises', 10))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-17 오전 1.09.06.png&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nqROk/btrWq3GAjxa/wrR6ek4NqOf3XDWnJfeYg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqROk/btrWq3GAjxa/wrR6ek4NqOf3XDWnJfeYg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqROk/btrWq3GAjxa/wrR6ek4NqOf3XDWnJfeYg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnqROk%2FbtrWq3GAjxa%2FwrR6ek4NqOf3XDWnJfeYg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;447&quot; height=&quot;126&quot; data-filename=&quot;스크린샷 2023-01-17 오전 1.09.06.png&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-17 오전 1.09.15.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIymDI/btrWpoEIY82/tJlsTkAw4zDMi8EYwsULSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIymDI/btrWpoEIY82/tJlsTkAw4zDMi8EYwsULSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIymDI/btrWpoEIY82/tJlsTkAw4zDMi8EYwsULSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIymDI%2FbtrWpoEIY82%2FtJlsTkAw4zDMi8EYwsULSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;441&quot; height=&quot;225&quot; data-filename=&quot;스크린샷 2023-01-17 오전 1.09.15.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>추천시스템</category>
      <category>cb</category>
      <category>content-based</category>
      <category>python</category>
      <category>Recommendation</category>
      <category>내용기반필터링</category>
      <category>추천시스템</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/389</guid>
      <comments>https://whereisend.tistory.com/389#entry389comment</comments>
      <pubDate>Tue, 17 Jan 2023 01:11:12 +0900</pubDate>
    </item>
    <item>
      <title>TF-IDF</title>
      <link>https://whereisend.tistory.com/388</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;TF-IDF&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TF-IDF는 자연어 처리에서 굉장히 중요한 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 문서들 중에 해당 단어가 특정 문서에서 얼마나 중요한지를 나타내는 통계값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TF-IDF 에서 사용되는 단어들의 정의를 보면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TF : Term Frequency(단어 빈도), 말 그대로 특정 단어가 문서 내에 자주 사용되는지를 나타낸다.&lt;/li&gt;
&lt;li&gt;DF : Document Frequency(문서 빈도), 특정 단어가 문서군 내에 얼마나 자주 사용되는지를 나타낸다.&lt;/li&gt;
&lt;li&gt;IDF : Inverse Document Frequency(역문서 빈도), DF의 역수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단어 빈도가 커지면 특정 단어가 해당 문서 내에서 핵심 단어가 된다고 해석할 수 있다.&lt;br /&gt;문서 빈도가 커지면 역문서 빈도는 작아지고, 이는 특정 단어가 여러 개의 문서에서 자주 사용된 단어라고 해석할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 TF가 크고 IDF는 작다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 전자제품들의 사용 설명서 데이터가 있다.&lt;br /&gt;여기서 &quot;제품&quot; 이라는 단어는 TF 값이 매우 높을 것이다. IDF는 어떨까?&lt;br /&gt;IDF는 굉장히 작아질 것이다. 왜냐하면 전자제품 사용설명서마다 모두 &quot;제품&quot; 이라는 단어가 등장하기 때문이다.&lt;br /&gt;&quot;제품&quot;이라는 단어는 DF 값이 매우 높아, DF의 역수인 IDF는 굉장히 낮은 값을 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TF가 크고 IDF가 작은 단어는 그 문서에서 핵심 역할을 하는 단어라고 보기 어렵기 때문에 가중치가 낮게 계산된다.&lt;br /&gt;TF-IDF 계산 방식은 다음 링크를 참고하자.&lt;br /&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/Tf-idf&quot;&gt;https://ko.wikipedia.org/wiki/Tf-idf&lt;/a&gt;&lt;/p&gt;</description>
      <category>추천시스템</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/388</guid>
      <comments>https://whereisend.tistory.com/388#entry388comment</comments>
      <pubDate>Tue, 17 Jan 2023 00:48:43 +0900</pubDate>
    </item>
    <item>
      <title>집단별 추천해보기 (협업필터링 아님!)</title>
      <link>https://whereisend.tistory.com/387</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;참고도서 : python을 이용한 개인화 추천 시스템 - 임일&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;집단별 추천 시스템&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;취향이 아니라 직업, 성별 등 단순 통계적으로 구분할 수 있는 집단으로 구분하여 추천 시스템을 만들어보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB4YT9/btrWdfBqRSt/tQwijKlWNCkkTar436pzjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB4YT9/btrWdfBqRSt/tQwijKlWNCkkTar436pzjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB4YT9/btrWdfBqRSt/tQwijKlWNCkkTar436pzjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB4YT9%2FbtrWdfBqRSt%2FtQwijKlWNCkkTar436pzjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;721&quot; height=&quot;61&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 순서로 구성해야 한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np

u_cols = ['user_id','age','sex','occupation','zip_code']
users = pd.read_csv('./u.user', sep='|', names=u_cols, encoding='latin-1')
i_cols = ['movie_id','title','release date',' video release date','IMDB URL','unknown','action','adventure','animation','children\'s','comedy','crime','documentary','drama','fantasy','film-noir','horror','musical','mystery','romance','sci-fi','thriller','war','western']

movies = pd.read_csv('./u.item', sep='|', names=i_cols, encoding='latin-1')
r_cols = ['user_id','movie_id','rating','timestamp']
ratings = pd.read_csv('./u.data',sep='\t',names=r_cols,encoding='latin-1')

ratings = ratings.drop('timestamp',axis=1) # 타임스탬프 컬럼 제거
movies = movies[['movie_id','title']] #영화 아이디랑 제목만 사용&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞 포스팅과 같은 데이터를 사용하기 때문에 로드하는 방식도 똑같다.&lt;/p&gt;
&lt;pre class=&quot;nix&quot;&gt;&lt;code&gt;#train/test set 분리
from sklearn.model_selection import train_test_split
x = ratings.copy()
y = ratings['user_id']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, stratify=y)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 데이터와 평가 데이터를 나누기위해 &lt;code&gt;sklearn&lt;/code&gt;을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;# 정확도함수
def RMSE(y_true, y_pred):
    return np.sqrt(np.mean((np.array(y_true)-np.array(y_pred))**2))

# 모델 예측 후 에러값 측정
def score(model):
    id_pairs = zip(x_test['user_id'], x_test['movie_id'])
    y_pred = np.array([model(user, movie) for (user, movie) in id_pairs])
    y_true = np.array(x_test['rating'])
    return RMSE(y_true, y_pred)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천 모델의 추천 성능을 확인할 수 있는 함수를 작성한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;# 학습 데이터(x_train)의 full matrix 만들기
rating_matrix = x_train.pivot(index='user_id',columns='movie_id',values='rating')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rating matrix는 다음과 같이 생겼는데, 각 셀은 user별로 전체 영화에 대해서 준 평점이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.21.39.png&quot; data-origin-width=&quot;1738&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSkx5/btrWir1ESut/hQ4JYx6se0bXeCeyLcztJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSkx5/btrWir1ESut/hQ4JYx6se0bXeCeyLcztJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSkx5/btrWir1ESut/hQ4JYx6se0bXeCeyLcztJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrSkx5%2FbtrWir1ESut%2FhQ4JYx6se0bXeCeyLcztJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1738&quot; height=&quot;632&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.21.39.png&quot; data-origin-width=&quot;1738&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 앞서 작성했던 베스트셀러 방식을 확인해보자.&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;def best_seller(user_id, movie_id):
    try : 
        rating = train_mean[movie_id]
    except:
        rating = 3.0
    return rating

train_mean = x_train.groupby(['movie_id'])['rating'].mean() # 영화별 평균 평점
score(best_seller)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.27.09.png&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GdvHA/btrWc1XDoKW/EKJpEl8BvMsYT46upwtNqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GdvHA/btrWc1XDoKW/EKJpEl8BvMsYT46upwtNqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GdvHA/btrWc1XDoKW/EKJpEl8BvMsYT46upwtNqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGdvHA%2FbtrWc1XDoKW%2FEKJpEl8BvMsYT46upwtNqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;230&quot; height=&quot;41&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.27.09.png&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베스트셀러방식은 1.02가 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞 포스팅보다 RMSE 값이 커졌는데&lt;i&gt;(커지면 성능이 안좋다는 것임),&lt;/i&gt; 그 이유는 Train, Test set을 분리해서 &lt;b&gt;test set에 대해서만 평가를 했기 때문이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전에 봤던 데이터(Train set)라면 잘 판단할 수 있지만 처음보는 데이터(Test set)를 가지고 예측을 하자니, 잘 못하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 특정 기준을 가지고 사용자 집단을 분리하여 추천하는 모델을 만들어보면 더 좋은 성능을 가지지 않을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 간단히 &quot;성별&quot; 로 사용자를 나눠서 예측해보는 모델을 만들었다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 성별기준 추천

merged_ratings = pd.merge(x_train, users)
users = users.set_index('user_id')

# 영화별 각 성별의 평균평점 구하기
g_mean = merged_ratings[['movie_id','sex','rating']].groupby(['movie_id','sex'])['rating'].mean()

def cf_gender(user_id, movie_id):
    if movie_id in rating_matrix: 
        gender = users.loc[user_id]['sex']
        if gender in g_mean[movie_id]:
            gender_rating = g_mean[movie_id][gender]
        else:
            gender_rating = 3.0
    else:
        gender_rating = 3.0

    return gender_rating

score(cf_gender)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.35.14.png&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qVNzz/btrWnnjYGAN/PcKYW9J9RuB9p2jbRfh0n0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qVNzz/btrWnnjYGAN/PcKYW9J9RuB9p2jbRfh0n0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qVNzz/btrWnnjYGAN/PcKYW9J9RuB9p2jbRfh0n0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqVNzz%2FbtrWnnjYGAN%2FPcKYW9J9RuB9p2jbRfh0n0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;199&quot; height=&quot;40&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.35.14.png&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오히려 나빠졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 말은 성별이 영화 추천 정확도 개선에 영향이 없다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다른 변수를 기준으로 집단을 나눠보자.&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;# 직업기준 추천
# 성별 추천 코드를 수정해서 직업에 따라 집단을 나눠 예측값을 구하는 함수와 정확도 계산하는 코드 작성해보기
o_mean = merged_ratings[['movie_id','occupation','rating']].groupby(['movie_id','occupation'])['rating'].mean()

def cf_job(user_id, movie_id):
    if movie_id in rating_matrix:
        job = users.loc[user_id]['occupation']
        if job in o_mean[movie_id]:
            job_rating = o_mean[movie_id][job]
        else:
            job_rating = 3.0
    else:
        job_rating = 3.0

    return job_rating

score(cf_job)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.38.16.png&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csvyoH/btrWgZ5num7/TNRwZsoRLBCZ28T1h3Rbz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csvyoH/btrWgZ5num7/TNRwZsoRLBCZ28T1h3Rbz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csvyoH/btrWgZ5num7/TNRwZsoRLBCZ28T1h3Rbz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsvyoH%2FbtrWgZ5num7%2FTNRwZsoRLBCZ28T1h3Rbz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;204&quot; height=&quot;33&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.38.16.png&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 안 좋아졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 여러 변수를 기준으로 잡아 좀 더 세부적으로 그룹화하여 추천해준다면 정확도가 개선될 수 있을까?&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;# 성별, 직업 기준 추천

# 성별과 직업을 동시에 고려한 집단을 나눠서 예측값을 구하는 함수를 만들고, 정확도 계산 코드 작성하기
go_mean = merged_ratings[['movie_id','occupation','sex','rating']].groupby(['movie_id','occupation','sex'])['rating'].mean()

def cf_job_and_gender(user_id, movie_id):
    if movie_id in rating_matrix:
        job = users.loc[user_id]['occupation']
        gender = users.loc[user_id]['sex']
        if (job, gender) in go_mean[movie_id]: # 순서중요
            go_rating = go_mean[movie_id][job,gender]
        else:
            go_rating = 3.0
    else :
        go_rating = 3.0

    return go_rating

score(cf_job_and_gender)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.40.06.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9cRzi/btrWc23lvIK/GFWdHLvnQAEqkr5CyAkFg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9cRzi/btrWc23lvIK/GFWdHLvnQAEqkr5CyAkFg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9cRzi/btrWc23lvIK/GFWdHLvnQAEqkr5CyAkFg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9cRzi%2FbtrWc23lvIK%2FGFWdHLvnQAEqkr5CyAkFg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;196&quot; height=&quot;41&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.40.06.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웬걸;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베스트셀러, 성별만 그룹화, 직업만 그룹화한 것 보다도 더 안좋은 결과가 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 끝낼 수 없다. 책에서 더 나아가 다른 변수로 추천을 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;users&lt;/code&gt; 데이터프레임에는 &lt;code&gt;'age','sex','occupation','zip\_code'&lt;/code&gt; 컬럼이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 생각했을때, 아무래도 영화 선호에는 성별과 나이가 영향을 미치지 않을까 싶다.&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;ag_mean = merged_ratings[['movie_id','age','sex','rating']].groupby(['movie_id','age','sex'])['rating'].mean()

def cf_age_and_gender(user_id,movie_id):
    if movie_id in rating_matrix:
        age = users.loc[user_id]['age']
        gender = users.loc[user_id]['sex']
        if (age, gender) in ag_mean[movie_id]:
            ag_rating = ag_mean[movie_id][age,gender]
        else:
            ag_rating = 3.0
    else:
        ag_rating = 3.0
    return ag_rating

score(cf_age_and_gender)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.50.52.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYPHXu/btrWg1WsilJ/F9KTbUhAy6PLlrTljhHPG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYPHXu/btrWg1WsilJ/F9KTbUhAy6PLlrTljhHPG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYPHXu/btrWg1WsilJ/F9KTbUhAy6PLlrTljhHPG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYPHXu%2FbtrWg1WsilJ%2FF9KTbUhAy6PLlrTljhHPG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;174&quot; height=&quot;40&quot; data-filename=&quot;스크린샷 2023-01-15 오후 10.50.52.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것도 아니네...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 단순히 취향이 아닌 인구통계적 변수(직업, 성별, 나이 등)를 가지고 집단을 나눠서 추천을 하는 것은 성능이 좋지 못하다는 것을 알았다.&lt;/p&gt;</description>
      <category>추천시스템</category>
      <category>Recommendation System</category>
      <category>집단별 추천</category>
      <category>추천시스템</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/387</guid>
      <comments>https://whereisend.tistory.com/387#entry387comment</comments>
      <pubDate>Sun, 15 Jan 2023 22:55:06 +0900</pubDate>
    </item>
    <item>
      <title>사용자 정보가 없을때는? Best-Seller 방식!</title>
      <link>https://whereisend.tistory.com/386</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;참고도서 : python을 이용한 개인화 추천 시스템 - 임일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;데이터 로드하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하는 데이터셋은 영화 리뷰 데이터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 데이터를 읽어보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 데이터는 &quot;python을 이용한 개인화 추천 시스템&quot; 도서에서 제공하고있는 데이터를 사용했다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np

# Load Users

u_cols = ['user_id','age','sex','occupation','zip_code']
users = pd.read_csv('./u.user',sep='|',encoding='latin-1',names=u_cols)
users.set_index('user_id',inplace=True)
users.head()

# Load Movies

i_cols = ['movie_id','title','release_date','video_release_date,','IMDB_URL','unknown','action','adventure','animation','children','comedy','crime','documentary','drama','fantasy','film-noir','horror','musical','mystery','romance','sci-fi','thriller','war','western']
movies = pd.read_csv('./u.item', sep='|', names=i_cols,encoding='latin-1')
movies.set_index('movie_id',inplace=True)
movies.head()

# Load Ratings
r_cols = ['user_id','movie_id','rating','timestamp']
ratings = pd.read_csv('./u.data', sep='\t', names=r_cols, encoding='latin-1')
ratings.set_index('user_id',inplace=True)
ratings.head()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z0jvl/btrTRp0CMsj/ehDfKAmLDfNXmoWT4vpFDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z0jvl/btrTRp0CMsj/ehDfKAmLDfNXmoWT4vpFDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z0jvl/btrTRp0CMsj/ehDfKAmLDfNXmoWT4vpFDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ0jvl%2FbtrTRp0CMsj%2FehDfKAmLDfNXmoWT4vpFDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;286&quot; height=&quot;167&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 테이블에는 유저아이디, 나이, 성별, 직업, 우편번호&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.05.20.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XyQi4/btrTRBmpkIN/df0lkxrhkRbSgmcnpFk5rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XyQi4/btrTRBmpkIN/df0lkxrhkRbSgmcnpFk5rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XyQi4/btrTRBmpkIN/df0lkxrhkRbSgmcnpFk5rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXyQi4%2FbtrTRBmpkIN%2Fdf0lkxrhkRbSgmcnpFk5rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;598&quot; height=&quot;205&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.05.20.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화 테이블에는 영화아이디, 제목, 개봉일자 등 정보와 각 장르컬럼&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.05.30.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/moeVU/btrTXLnuBHo/7IUdDi6KoK7oZmTQHpGehK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/moeVU/btrTXLnuBHo/7IUdDi6KoK7oZmTQHpGehK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/moeVU/btrTXLnuBHo/7IUdDi6KoK7oZmTQHpGehK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmoeVU%2FbtrTXLnuBHo%2F7IUdDi6KoK7oZmTQHpGehK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;333&quot; height=&quot;207&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.05.30.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평점 테이블에는 유저아이디, 영화아이디, 평점, 평가일시&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자에 대한 정보가 없는 경우?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 인기 있는 제품을 추천하면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;lt; best-seller 방식 &amp;gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리뷰가 있다면, 평균평점이 가장 높은 순으로 추천하면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 이 추천시스템이 성능이 좋은지는 어떻게 알까?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;추천시스템의 정확도를 평가하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test set에 대한 예측값과 실제 정답의 차이를 정확도로 판단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서도 같은 정확도를 사용함 (GT와 prediction의 차이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 많이 사용하는 지표 RMSE(Root Mean Squared Error.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말 그대로 루트, 평균, 제곱, 차이를 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.13.08.png&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Oux8V/btrTT7dDSkN/Fx9T1pDXMp2JJ5TZaWzbUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Oux8V/btrTT7dDSkN/Fx9T1pDXMp2JJ5TZaWzbUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Oux8V/btrTT7dDSkN/Fx9T1pDXMp2JJ5TZaWzbUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOux8V%2FbtrTT7dDSkN%2FFx9T1pDXMp2JJ5TZaWzbUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;197&quot; height=&quot;89&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.13.08.png&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답과 예측값의 차이를 제곱하여 합한 뒤, 데이터의 개수로 나눠 평균을 구한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;def best_seller(n_items):
    # 내림차순 정렬하여 n_items개 영화의 제목 반환
    movie_sort = movie_mean.sort_values(ascending=False)[:n_items]
    best_movies = movies.loc[movie_sort.index]
    return best_movies['title']

# 영화아이디 별 평균평점 계산
movie_mean = ratings.groupby(['movie_id'])['rating'].mean()
best_seller(10)

def RMSE(y_true, y_pred):
    return np.sqrt(np.mean((np.array(y_true)-np.array(y_pred))**2))

    rmse = []

# ratings index : user_id
for user in set(ratings.index):
    y_true = ratings.loc[user]['rating'] # 각 유저의 평점
    y_pred = movie_mean[ratings.loc[user]['movie_id']] # 유저가 평가한 영화의 평균평점
    acc = RMSE(y_true,y_pred) # 정확도 계산
    rmse.append(acc)
np.mean(rmse)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.11.14.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSMuI0/btrTVUE0nXV/rt28kw1nWrBCua8bVkWwt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSMuI0/btrTVUE0nXV/rt28kw1nWrBCua8bVkWwt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSMuI0/btrTVUE0nXV/rt28kw1nWrBCua8bVkWwt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSMuI0%2FbtrTVUE0nXV%2Frt28kw1nWrBCua8bVkWwt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;534&quot; height=&quot;300&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.11.14.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 10개 영화들의 평균평점을 확인해보면 5.0으로 가장 높은 평균평점을 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RMSE 값을 구해보니 0.9960 정도가 나왔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.11.27.png&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5gYjs/btrTUDwMKvG/24tkjHNHmhxCJxNB2H7pKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5gYjs/btrTUDwMKvG/24tkjHNHmhxCJxNB2H7pKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5gYjs/btrTUDwMKvG/24tkjHNHmhxCJxNB2H7pKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5gYjs%2FbtrTUDwMKvG%2F24tkjHNHmhxCJxNB2H7pKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;155&quot; height=&quot;29&quot; data-filename=&quot;스크린샷 2022-12-18 오후 6.11.27.png&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>추천시스템</category>
      <category>best seller</category>
      <category>RMSE</category>
      <category>베스트셀러</category>
      <category>추천시스템</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/386</guid>
      <comments>https://whereisend.tistory.com/386#entry386comment</comments>
      <pubDate>Sun, 18 Dec 2022 18:14:58 +0900</pubDate>
    </item>
    <item>
      <title>추천시스템의 개념과 기본 알고리즘의 개념</title>
      <link>https://whereisend.tistory.com/385</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;참고도서 : python을 이용한 개인화 추천 시스템 - 임일&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추천 시스템(recommender system)이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 사용자의 데이터를 바탕으로 사용자에게 필요한 정보를 제시하는 시스템.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;추천&quot; 이라는 것은, 비즈니스 관점에서 고객들의 취향을 기준으로 비슷한 고개들끼리 나누고(segment),&lt;br /&gt;각 집단에 맞는 제품이나 소비스를 골라주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집단의 규모를 굉장히 작게, 극단적으로 작게 하면 집단을 구성하는 사람이 1명이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 &lt;b&gt;개인화(personalization)&lt;/b&gt;다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천 시스템의 주요 알고리즘은 크게 몇 가지 분류로 나뉘고, 이것들이 발전해서 다양한 알고리즘이 파생된 형태라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 대표적인 알고리즘은 다음 세 가지다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;협업 필터링 (collaborative filtering ; CF)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내용 기반 필터링 (content-based filtering ; CB)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지식 기반 필터링 (knowledge-based filtering ; KB)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 추가로, 딥러닝 알고리즘이 많이 적용되고있다. &lt;i&gt;(역시, 딥러닝은 데이터활용분야에서 절대 빠지지 않는다.)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝과 다른 알고리즘을 섞어서 하이브리드로 사용하는 기술도 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 협업 필터링 ( Collaborative Filtering ; CF)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하자면, &lt;b&gt;취향 비슷한 사람들끼리 상대방이 안 써본 거 추천해주는 방식.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 평가 패턴이 비슷한 유저들을 한 집단으로 묶는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서로 접하지 않은 서비스, 제품을 제시한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CF는 호불호가 확실한 제품들을 추천&lt;/b&gt;할 때, 적용하기 적절하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CF 방식을 사용하려고 보니 이런 생각이 들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;리뷰가 없으면 어떡하지?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 바로 CF의 한계점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유저들의 리뷰데이터를 얻기 어렵다면 CF도 적용하기 힘들다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 CF를 써야한다면.. &lt;b&gt;간접적&lt;/b&gt;으로라도 유저의 취향을 알아내는 수 밖에.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 데이터, 장바구니 데이터를 수집해서 이 정보들을 분석하여 취향을 알아낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 유저들이 &lt;b&gt;본인의 관심사를 클릭&lt;/b&gt;해서 만들어낸 정보를 &lt;b&gt;&quot;클릭스트림 데이터&quot;&lt;/b&gt;라고 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 내용 기반 필터링 ( Content-Based Filtering ;&amp;nbsp; CB )&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용 기반 필터링은 &lt;b&gt;제품의 내용을 기반&lt;/b&gt;으로 추천해주는 기술.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트가 주 데이터인 경우에 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 줄로 표현하면, &lt;b&gt;핵심 키워드가 유사한 상품&lt;/b&gt;을 추천하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 주유소를 가면 휘발유가 리터당 1500원대였는데, 어제가보니 1400원대로 내려가 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;기름값 하락&quot; 에 대한 기사를 찾아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그랬더니, 옆 추천 기사에 &quot;경기도 기름값 1300원대 주유소 등장....&quot;, &quot;기름값 하락세 지속...&quot; 등 기름값 하락과 관련된 기사들이 쭈르륵 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 여기서 뜬금없이 &quot;카타르 월드컵&quot; 관련 기사가 나온다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기름값 관련 기사를 읽을 확률은 높지만, 월드컵 관련 기사를 읽을 확률을 굉장히 낮을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게&lt;b&gt; 유저가 보는 내용의 핵심 키워드와 유사한 키워드를 가진 서비스를 제공하는 것이 CB&lt;/b&gt;다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 지식 기반 필터링 ( Knowledge-Based Filtering ; KB )&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식 기반 필터링은 특정 분야의 전문가를 통해 해당 분야의 지식구조를 만들어 활용하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CF, CB와 달리 유저가 &lt;b&gt;&quot;왜 그 제품을 좋아하는지&quot; 에 대해 설명&lt;/b&gt;할 수 있는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 고객에게 &quot;와인&quot;을 추천하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 가장 크게 레드와인, 화이트와인으로 분류하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 와인의 산지, 당도 등 다양한 항목으로 분류될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와인 전문가를 통해 와인 지식구조를 만들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소비자가 관심있는 제품과 관련있는 제품들을 분류해놓은 지식구조 속에서 찾아 제시하는 방법이 KB다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KB는 적용하려는 분야에 대한 전문가를 찾아야하고, 전문가의 능력도 각각 다르기 때문에, 전 분야에 대해서 적용하기 어렵다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 딥러닝 ( Deep Learning )&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝은 &lt;b&gt;다양한 사용자와 제품의 feature를 입력 데이터&lt;/b&gt;로 사용하여, 선호도를 출력으로 얻는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수 많은 아이템들을 입력해서 예상선호도를 계산하여 높은 선호의 아이템을 추천&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝을 사용하면, 정말 다양한 분야에서 적용할 수 있다는 장점이 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨티뉴어스한 값으로 표현되는 상황에서는 다른 알고리즘과 성능이 크게 별 차이가 없어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이브리드 방식으로 많이 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 추천 시스템을 만들 때, 한 가지만 사용하는게 아니라 2개 이상의 기술을 섞어서 구축한다고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능을 향상시켜 정확한 추천을 하는 것이 베스트이기 때문에 당연히 단일 기술만 사용하기 보다는 하이브리드로 사용하는 것이 적절하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 어떤 기술들을 섞어서 사용하는 것이 좋을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 사용하는 데이터, 적용 산업 및 환경 등 다양한 조건에 따라 달라지기 때문에 Try-and-error가 필요하다.&lt;/p&gt;</description>
      <category>추천시스템</category>
      <category>내용기반필터링</category>
      <category>지식기반필터링</category>
      <category>추천시스템</category>
      <category>협업필터링</category>
      <author>양갱맨</author>
      <guid isPermaLink="true">https://whereisend.tistory.com/385</guid>
      <comments>https://whereisend.tistory.com/385#entry385comment</comments>
      <pubDate>Sun, 18 Dec 2022 17:07:53 +0900</pubDate>
    </item>
  </channel>
</rss>