<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>데이터리드가 될 예정입니다.</title>
    <link>https://spaceofyujin.tistory.com/</link>
    <description>데이터를 무기로 비즈니스 가치를 창출하는 데이터 리드가 되고자 노력 중입니다 :)   
스스로를 Full-stack Data Expert로 소개할 날을 꿈꿉니다.</description>
    <language>ko</language>
    <pubDate>Thu, 28 May 2026 15:43:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Yuniverse.</managingEditor>
    <image>
      <title>데이터리드가 될 예정입니다.</title>
      <url>https://tistory1.daumcdn.net/tistory/6051623/attach/2111bbc3394a4674bc48038a744e6789</url>
      <link>https://spaceofyujin.tistory.com</link>
    </image>
    <item>
      <title>MAU 성장 레버, 데이터로 증명하기 &amp;mdash; 연관도&amp;middot;코호트&amp;middot;퍼널&amp;middot;SHAP 분석 실전</title>
      <link>https://spaceofyujin.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;올해 초 그로스 스쿼드에 합류하면서 전달받은 스쿼드의 미션은 단 한 줄이었습니다. 바로&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffd400;&quot;&gt;MAU를 상승시키는 것&lt;/span&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;b1f3&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;분석가가 조직에 가장 크게 기여할 수 있는 방향은, 스쿼드원들이 동일한 리소스를 투입했을 때 가장 큰 임팩트를 낼 수 있는 액션이 무엇인지를 데이터로 좁혀주는 일이라고 생각합니다.&lt;br /&gt;이에 그로스 PM과 논의하여, 액션을 본격적으로 기획하기 전에 미션에 영향을 미칠 수 있는 가장 견고한 레버부터 찾기로 했습니다. 바로 전사 최상위 KPI인 MAU의&lt;span&gt;&amp;nbsp;&lt;/span&gt;성장 레버를 데이터로 규명하는 작업이었습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;분석은 아래 4단계로 진행되었습니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- &lt;b&gt;연관도 분석&lt;/b&gt;: MAU를 얼마나 올려야 매출을 증대시킬 수 있을까&lt;br /&gt;- &lt;b&gt;Cohort 분석&lt;/b&gt;: 어떤 세그먼트의 유저를 노려야 할까&lt;br /&gt;- &lt;b&gt;Funnel 분석&lt;/b&gt;: 어느 단계를 가장 우선적으로 개선해야 할까&lt;br /&gt;- &lt;b&gt;SHAP 분석&lt;/b&gt;: 가장 영향도 큰 레버는 무엇일까&lt;/blockquote&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;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이 글은 &amp;ldquo;MAU를 상승시킨다&amp;rdquo;라는 미션을 위 4단계에 따라 분해해, 단 하나의 견고한 레버에 도달한 과정을 정리한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_1.webp&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;723&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0f8kk/dJMcaayuyMz/Q8nG1iLkmbyqGB4k4xZBK1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0f8kk/dJMcaayuyMz/Q8nG1iLkmbyqGB4k4xZBK1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0f8kk/dJMcaayuyMz/Q8nG1iLkmbyqGB4k4xZBK1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0f8kk%2FdJMcaayuyMz%2FQ8nG1iLkmbyqGB4k4xZBK1%2Fimg.webp&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;567&quot; height=&quot;313&quot; data-filename=&quot;picture_1.webp&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;723&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #ffffff; color: #9d9d9d; text-align: start;&quot;&gt;(*참고로 이 글의 &amp;lsquo;MAU&amp;rsquo;는 회사가 정의한 핵심 활성 기준에 따라 산출되는 MAU를 의미합니다. 단순 방문이 아닌, 유저가 서비스에서 가치를 만들어냈다고 볼 수 있는 행동을 기준으로 하였습니다.)&lt;/span&gt;&lt;/i&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 id=&quot;38f2&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;1. 연관도 분석: MAU를 얼마나 올려야 매출을 증대시킬 수 있을까&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;MAU를 올리는 이유는 결국 매출 증대에 있습니다. 따라서 MAU와 매출 사이에 유의미한 상관성이 실제로 존재하는지부터 확인하는 것이 출발점이었습니다. 우리 서비스의 MAU는 단순 방문이 아닌 가치 행동 기반으로 정의되어 있는 만큼, 그 정의가 매출 가치까지 반영하는지를 점검할 필요가 있었습니다. 이미 형성된 미션일지라도, 최상위 미션과의 연관성이 작다면 정의 자체가 수정될 필요가 있기 때문입니다.&lt;/span&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;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;1년치 MAU와 일 구독 매출 데이터를 바탕으로 회귀분석을 진행했습니다. 결과는 통계적으로 유의했고, 추정치의 방향과 크기는 안정적이어서 의사결정의 근거로 합리적이라고 판단했습니다. p-value, R&amp;sup2;, 신뢰구간 등 분석의 신뢰도를 점검하는 보조 지표들도 함께 확인했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;추가적으로 한 가지 질문을 더 검토했는데요,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;MAU를 단순히 N명 올리는 게 아니라, &amp;lsquo;어떤 세그먼트의 유저가&amp;rsquo; 올라가느냐에 따라 매출 임팩트가 달라지지 않을까?&amp;rdquo;&lt;/span&gt;&lt;/blockquote&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;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;미리캔버스의 유저를 여러 세그먼트로 분류하여 (이 글에서는 편의상 A, B, C, D &amp;hellip; 로 표기합니다) 세그먼트별로 결제율과 ARPU를 분석했더니, 격차가 뚜렷했습니다. 어떤 세그먼트는 결제율과 ARPU 모두 두드러지게 높았고, 회귀로 추정한 MAU 1명당 월 ARPU는 그 중 매출 기여가 가장 작은 세그먼트의 ARPU와 거의 일치했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_2.webp&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5XYZB/dJMcaipJ8aH/OQd03SiKgh60jU9DQELOoK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5XYZB/dJMcaipJ8aH/OQd03SiKgh60jU9DQELOoK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5XYZB/dJMcaipJ8aH/OQd03SiKgh60jU9DQELOoK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5XYZB%2FdJMcaipJ8aH%2FOQd03SiKgh60jU9DQELOoK%2Fimg.webp&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;682&quot; height=&quot;245&quot; data-filename=&quot;picture_2.webp&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;503&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;즉, MAU가 변동할 때 실제로 늘고 줄어든 것은 대부분 매출 기여가 가장 작은 세그먼트였습니다. 매출 임팩트가 가장 작은 세그먼트가 MAU 변동의 대부분을 만들고 있었다는 이 발견이, 이후 분석 전체의 출발점이 되었습니다.&lt;/span&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;&lt;b&gt;MAU를 &amp;lsquo;얼마나&amp;rsquo; 올리느냐만큼, &lt;span style=&quot;background-color: #ffd400;&quot;&gt;&amp;lsquo;누구를&amp;rsquo; 올리느냐&lt;/span&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 id=&quot;c5e6&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2. Cohort 분석: 어떤 세그먼트의 유저를 노려야 할까&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이 질문에 답하기 위해서는 MAU가 무엇으로 구성되어 있는지부터 파악해야 했습니다. 분석의 핵심 관점은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;MAU의 절대 규모(Stock)와 그 안의 유입&amp;middot;이탈 흐름(Flow)을 함께 보는 것&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이었는데요. 같은 규모의 MAU라도 그 안의 New / Retained / Returned 비율과 변동폭이 어떻게 다른지를 알아야 &amp;ldquo;누구를 노려야 할지&amp;rdquo;의 답이 도출되기 때문입니다. 이를 위해 MAU를 다음 3개 코호트로 분해했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;17e2&quot; style=&quot;list-style-type: disc; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;New&lt;/b&gt;: 가입 후 처음으로 활성된 유저&lt;/li&gt;
&lt;li id=&quot;07ba&quot; style=&quot;list-style-type: disc; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;Retained&lt;/b&gt;: 전월에도 활성이었던 유저&lt;/li&gt;
&lt;li id=&quot;a597&quot; style=&quot;list-style-type: disc; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;Returned&lt;/b&gt;: 그 이전엔 활성 이력이 있으나 직전 달은 비활성이었다가 다시 활성으로 돌아온 유저&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;월별 트렌드를 살펴보니 한 가지 패턴이 명확하게 드러났습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Retained가 항상 절대 다수이고, 변동폭도 가장 크다는 것입니다.&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이는 서비스가 탄탄하게 성장해왔다는 증거이기도 했습니다. 월별 증감은 사실상 Retained의 증감으로 설명되었으며, New는 비율로는 작지만 특정 시즌에 폭발적으로 급증하는 양상을 보였습니다. 비수기에는 세 코호트 모두 감소하는 가운데, Retained의 이탈이 전체 급감을 만들어내는 구조였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_3.webp&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzWh7r/dJMcaaebDAf/Wm8QDF8kfb51sxbN6Qbsd1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzWh7r/dJMcaaebDAf/Wm8QDF8kfb51sxbN6Qbsd1/img.webp&quot; data-alt=&quot;*비중은 실제 데이터와 달리, 임의의 수치를 표기.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzWh7r/dJMcaaebDAf/Wm8QDF8kfb51sxbN6Qbsd1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzWh7r%2FdJMcaaebDAf%2FWm8QDF8kfb51sxbN6Qbsd1%2Fimg.webp&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;679&quot; height=&quot;277&quot; data-filename=&quot;picture_3.webp&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;*비중은 실제 데이터와 달리, 임의의 수치를 표기.&lt;/figcaption&gt;
&lt;/figure&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;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이 분석을 바탕으로 아래 두 가지 전략 방향은 지양하는 것이 적절하다고 판단했습니다.&lt;/span&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;&lt;b&gt;첫째, New를 상시 전략의 중심에 두는 것.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;New는 비중도 작고, 유입량이 마케팅과 시즌에 의존하므로 프로덕트 레버로 흔들기 어렵습니다. 따라서 New가 폭발하는 시즌에 전환율에 집중하는 일시 전략이 더 효율적입니다.&lt;/p&gt;
&lt;p id=&quot;b1e4&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘째, Returned를 주 타겟으로 삼는 것.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Returned를 늘리려면 먼저 이탈시킨 후 복귀시켜야 한다는 역설이 따라옵니다. &amp;lsquo;이탈하지 않게 한다&amp;rsquo;는 관점의 Retained 유지가 선행되어야 합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉, 상시 전략의 무게중심은 Retained 유지에 두고, 시즌이나 환경 변화에 따라 New 전환에 단기적으로 베팅하거나 Retained 이탈 방어에 집중하는 보조 전략을 운영하는 구조가 바람직합니다.&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 id=&quot;96fc&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;3. Funnel 분석: 어느 단계를 가장 우선적으로 개선해야 할까&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;활성에 도달하기까지의 사용자 여정을 단계별 퍼널로 분석하고, 신규 유저와 기존 유저로 나누어 각 단계의 전환율을 비교했습니다. 이 과정에서 한 가지 패턴이 명확하게 드러났는데요. 초반 단계에서는 신규/기존 유저의 격차가 작았으나,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;뒷단계로 갈수록 격차가 점점 벌어졌고, 마지막 단계에서 정점을 찍었다는 것입니다.&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;누적 기준으로 신규 유저의 최종 전환율은 기존 유저에 비해 현저히 낮았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_4.webp&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVDPu4/dJMcafT6aue/ufH4GaTS7ORktfNKmTAkk0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVDPu4/dJMcafT6aue/ufH4GaTS7ORktfNKmTAkk0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVDPu4/dJMcafT6aue/ufH4GaTS7ORktfNKmTAkk0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVDPu4%2FdJMcafT6aue%2FufH4GaTS7ORktfNKmTAkk0%2Fimg.webp&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;639&quot; height=&quot;312&quot; data-filename=&quot;picture_4.webp&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;659&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;한 발 더 들어가, 활성 여부별로 유저들의 행동 분포를 분석했는데요. 미활성 집단을 살펴보니 주목할 만한 결과가 도출되었습니다. 단순히 서비스를 시작조차 하지 않은 유저가 아니라,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;서비스 사용을 시작했으나 체류 시간이 짧게 끝나버린 유저의 분포가 인상적이었습니다.&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;즉, 진입 자체보다 체류의 깊이가 문제라는 신호였습니다.&lt;/span&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;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;체류 시간 구간별로 활성 전환율을 분석한 결과,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;초반의 짧은 구간에서 전환율 기울기가 가장 가파르게 뛰었고&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;, 그 이후로는 완만한 단조 증가로 이어졌습니다. 짧은 체류로 이탈하는 유저를 일정 임계 시간 이상으로 유도할 수 있다면, 그 한 구간 이동만으로 활성 전환율이 크게 향상될 수 있다는 의미였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_5.webp&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;689&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ydCUM/dJMb99M3ZT0/75wdqwkV5NGVBVxynseKvK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ydCUM/dJMb99M3ZT0/75wdqwkV5NGVBVxynseKvK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ydCUM/dJMb99M3ZT0/75wdqwkV5NGVBVxynseKvK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FydCUM%2FdJMb99M3ZT0%2F75wdqwkV5NGVBVxynseKvK%2Fimg.webp&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;602&quot; height=&quot;340&quot; data-filename=&quot;picture_5.webp&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;689&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우선적으로 개선해야 할 행동은 &amp;lsquo;체류의 깊이&amp;rsquo;이며, 그 중에서도 초입의 짧은 구간을 임계 시간 이상으로 끌어올리는 것이 가장 큰 기회 구간입니다. &lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;다만 &amp;lsquo;체류의 깊이&amp;rsquo;는 추상적인 표현으로, 이를 측정할 수 있는 정량 지표의 정의가 후속 과제로 남았습니다. 측정할 수 없다면 관리할 수 없기 때문입니다.&lt;/span&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 id=&quot;656f&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;4. SHAP 분석: 가장 영향도 큰 레버는 무엇일까&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;활성 여부를 예측하는 분류 모델에 20여 개의 유저 행동 피처를 입력하고, SHAP feature importance로 어떤 행동이 활성을 가장 강하게 설명하는지 분석했습니다. 이번 섹션의 핵심은 단순히 SHAP 결과를 도출하는 것이 아니라,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;결론을 그대로 받아들이지 않고 두 번 더 검증하게 만든 사고의 흐름&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;을 정리하는 데 있었습니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;c151&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;SHAP, 그 자체로는 인과 도구가 아니다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;SHAP은 &amp;ldquo;머신러닝 모델이 예측을 내릴 때 각 피처가 얼마나 기여했는가&amp;rdquo;를 게임 이론(Shapley value) 기반으로 분배해 보여주는 방법론입니다. 어떤 피처가 모델 예측에 가장 큰 영향을 주는지 파악할 때 널리 활용되는 도구인데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;분석 과정에서 주의해야 할 점은, 이 결과를 &amp;ldquo;모델 예측에 기여하는 피처&amp;rdquo;가 아닌 &amp;ldquo;실제로 결과를 만드는 원인&amp;rdquo;으로 오해하는 경우입니다. 이는 데이터 관련 아티클에서 자주 강조되는 사항이기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;SHAP은 &amp;lsquo;어떤 변수가 모델 예측에 기여하는지&amp;rsquo;를 설명할 뿐, 인과관계를 검증하는 도구가 아닙니다.&lt;/blockquote&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;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;SHAP feature importance 1위가 곧 &amp;lsquo;그 행동을 늘리면 결과가 늘어난다&amp;rsquo;를 보장하지 않습니다. 이 간극을 메우기 위해 아래 세 가지 유의점을 추가로 검토하였습니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 76px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;유의점&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;핵심 위험&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;검증 도구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;다중공선성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;같은 개념의 컬럼 다수 &amp;rarr; 기여도 분산&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;Permutation Importance, 그룹 셔플&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;동시성 상관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;같은 시점 행동&amp;middot;결과 &amp;rarr; 자명한 상관&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;시간 분리 모델 (t-1 &amp;rarr; t)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;셀렉션 바이어스&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;관찰 가능 변수만으로는 완전 통제 불가&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;PSM (Propensity Score Matching)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;190d&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;[유의점 1] 다중공선성: 같은 개념이 여러 컬럼으로 분리되어 있을 때&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;서로 강하게 상관된 피처들이 함께 입력되면, SHAP 기여도가 해당 피처들 사이에 분산 배분됩니다. 이 경우 개별 피처의 순위는 다중공선성에 좌우되어 왜곡될 수 있습니다. 실제 데이터에서도 하나의 개념이 여러 컬럼으로 분리된 구조가 존재했고, SHAP 결과는 그 영향을 받고 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_6.webp&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKiKuH/dJMcaiiXr2H/DC5RBKta1RGHPE38WUyeKk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKiKuH/dJMcaiiXr2H/DC5RBKta1RGHPE38WUyeKk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKiKuH/dJMcaiiXr2H/DC5RBKta1RGHPE38WUyeKk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKiKuH%2FdJMcaiiXr2H%2FDC5RBKta1RGHPE38WUyeKk%2Fimg.webp&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;634&quot; height=&quot;320&quot; data-filename=&quot;picture_6.webp&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이를 검증하기 위해 Permutation Importance로 교차 검증하고, 상관 그룹 단위로 동시에 셔플하여 그룹 단위의 실제 기여도를 측정했습니다. 그 결과, 상관이 강한 컬럼들이 단일 construct로 묶인다는 것을 확인할 수 있었습니다. 같은 construct 안에서 특정 컬럼의 순위를 단정 짓는 것은 다중공선성 함정에 빠질 위험이 있는 작업이었습니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;afc7&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;[유의점 2] 동시성 상관: &amp;lsquo;같은 달에 일어난 일&amp;rsquo;은 인과의 증거가 아니다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;또 다른 검토 사항은 모델이 동시성 상관(simultaneous correlation)을 학습한 결과를 인과로 오해하는 것입니다. &amp;ldquo;이번 달에 오래 체류한 사용자가 이번 달에 활성된다&amp;rdquo;는 사실상 자명한 진술입니다. 같은 달에 활발한 유저는 모든 행동이 동시에 많을 수밖에 없기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이를 걸러내기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;시간 분리 모델&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;을 적용했습니다. 이전 달(t-1)의 행동만으로 다음 달(t)의 결과를 예측하도록 데이터를 분리하여 학습시키는 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;picture_7.webp&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FWYPy/dJMcacpwYyp/8RyrK0A3BaKzExrVzL0BRk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FWYPy/dJMcacpwYyp/8RyrK0A3BaKzExrVzL0BRk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FWYPy/dJMcacpwYyp/8RyrK0A3BaKzExrVzL0BRk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFWYPy%2FdJMcacpwYyp%2F8RyrK0A3BaKzExrVzL0BRk%2Fimg.webp&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;651&quot; height=&quot;255&quot; data-filename=&quot;picture_7.webp&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이렇게 시간을 분리하면, 당월에 동시에 발생하여 강하게 보이는 피처의 기여도는 감소하고, 과거 행동이 미래 결과를 실제로 예측하는 피처의 기여도는 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;6124&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;[유의점 3] 셀렉션 바이어스: 그럼에도 인과를 완벽히 밝혀낼 수는 없다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;동시성 상관까지 확인하더라도, 이를 완전한 인과관계라고 단정할 수는 없습니다. &amp;lsquo;A 행동을 한 사람이 B 행동을 한다&amp;rsquo;와 &amp;lsquo;A 행동을 하면 B 행동까지 하게 된다&amp;rsquo; 사이에는 여전히 간극이 존재합니다. 이 간극의 일부는 PSM(Propensity Score Matching) 기법으로 추정해볼 수 있습니다. 관찰 가능한 변수(가입 기간, 유저 유형, 과거 활동 이력 등)로 Treatment와 Control을 매칭한 뒤, 매칭 전후의 격차 변화를 비교하는 방식입니다. 다만 사용 목적&amp;middot;역량 같은 비관측 교란변수는 통제가 불가하므로, 이를 인과 효과로 직접 해석하기는 어렵습니다.&lt;/span&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;&lt;b&gt;만약 SHAP 분석까지만 진행한 뒤 SHAP score가 가장 높은 행동 피처를 핵심 레버라고 주장했다면, 이후 액션을 실행했음에도 MAU가 움직이지 않았을 수 있습니다. 인과성을 밝히기 위한 검증을 한 단계 더 거치면서 액션 방향이 수정되었습니다.&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 id=&quot;4039&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;이 분석의 결론은 한 줄로 요약됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffd400;&quot;&gt;MAU의 가장 견고한 행동 레버를 발견했고, 이를 기반으로 액션들의 우선순위를 정해 설계해 나가게 되었다&lt;/span&gt;는 것입니다.&lt;/b&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;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;스쿼드의 최종 분석은 &amp;ldquo;N개월간 레버 기반 여러 액션들로 인해 MAU가 최종적으로 n% 상승하였다&amp;rdquo;가 되어야 합니다. 그런 점에서 이 분석은 끝이 아니라 시작입니다. 그러나 스쿼드 모두가 납득하는 하나의 기준이 수립되었다는 것, 그것이 이 분석이 제공하는 가장 큰 가치일 것입니다.&lt;/span&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;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;*해당 글은 &lt;a href=&quot;https://medium.com/miridih/mau-%EC%84%B1%EC%9E%A5-%EB%A0%88%EB%B2%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EC%A6%9D%EB%AA%85%ED%95%98%EA%B8%B0-%EC%97%B0%EA%B4%80%EB%8F%84-%EC%BD%94%ED%98%B8%ED%8A%B8-%ED%8D%BC%EB%84%90-shap-%EB%B6%84%EC%84%9D-%EC%8B%A4%EC%A0%84-a0f426b7631c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;미리디 회사 블로그&lt;/a&gt;에도 기고되었습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>데이터</category>
      <category>data</category>
      <category>Data Analytics</category>
      <category>Product Analytics</category>
      <category>데이터분석</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/56</guid>
      <comments>https://spaceofyujin.tistory.com/56#entry56comment</comments>
      <pubDate>Sun, 10 May 2026 13:40:21 +0900</pubDate>
    </item>
    <item>
      <title>데이터로 미래를 설계하기: 시뮬레이션 분석(Simulation Analysis)</title>
      <link>https://spaceofyujin.tistory.com/55</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;시뮬레이션분석.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvaZuU/dJMb9dAqcTp/PkKvkUr5jWK8Gai1q3BNc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvaZuU/dJMb9dAqcTp/PkKvkUr5jWK8Gai1q3BNc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvaZuU/dJMb9dAqcTp/PkKvkUr5jWK8Gai1q3BNc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvaZuU%2FdJMb9dAqcTp%2FPkKvkUr5jWK8Gai1q3BNc0%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;232&quot; height=&quot;232&quot; data-filename=&quot;시뮬레이션분석.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2025년도 10월에 접어들면서 나 또한 어느덧 데이터분석가로 일한지 만 4년이 되었다. 4년의 시간동안 코호트 분석, 퍼널 분석, 리텐션 분석, AB테스트 성과 분석 등 다양한 주제들을 여러 방법론을 사용하며 분석해왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석을 진행할 때마다 &lt;i&gt;&quot;3단계 퍼널의 전환율이 가장 낮아서, 해당 퍼널을 개선하면 전체적인 지표 상승을 기대할 수 있습니다&quot;&lt;/i&gt;, &lt;i&gt;&quot;세그먼트 B의 리텐션이 가장 높아서 이 세그먼트를 중점적으로 타겟한다면 전체적인 리텐션이 높아질 것입니다&quot;&lt;/i&gt; 등의 인사이트를 제안하며 프로덕트와 비즈니스에 도움이 되고자 노력해왔지만, 항상 스스로 해결 못한 질문 하나가 남았었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그래서 내 제안대로 개선한다면, 실제로 어느 정도의 임팩트를 낼 수 있을까?&lt;/span&gt;&lt;/blockquote&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;이 질문에 대한 답을 데이터를 기반으로 예측할 수 있는 것.&amp;nbsp;&quot;이 정도 임팩트가 예상된다&quot;고 말할 수 있는 근거를 만드는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것이 바로 시뮬레이션 분석(Simulation Analysis)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시뮬레이션 분석이란?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;시뮬레이션 분석은 &amp;ldquo;현실의 시스템을 수학적&amp;middot;통계적 모델로 모사(simulate)하여, 다양한 가정을 적용했을 때 결과가 어떻게 달라지는지를 실험적으로 분석하는 기법&amp;rdquo;이다.&lt;/blockquote&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;lsquo;만약 이런 정책을 시행한다면 결과가 어떻게 변할까?&amp;rsquo;를 데이터 모델을 통해 미리 재현해보는 것이다.&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;시뮬레이션 분석은 여러 분야에서 쓰인다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;비즈니스 &amp;amp; 마케팅 분석&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;가격 정책, 프로모션, 기능 제한 등 시나리오별 매출&amp;middot;전환율 변화를 모델링&lt;/td&gt;
&lt;td&gt;Freemium 서비스의 유료 전환율 예측, 가격 민감도 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;데이터 사이언스 / 통계학&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;몬테카를로 시뮬레이션(Monte Carlo Simulation)처럼 확률 분포 기반의 결과 예측&lt;/td&gt;
&lt;td&gt;A/B테스트 결과의 불확실성 평가, 리스크 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;운영관리(Operations Research)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;재고, 생산, 물류 등 복잡한 시스템을 시뮬레이션으로 최적화&lt;/td&gt;
&lt;td&gt;생산 라인의 병목 최소화, 고객 대기시간 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;금융공학(Financial Engineering)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;주가, 옵션, 리스크를 확률적 모델로 시뮬레이션&lt;/td&gt;
&lt;td&gt;VaR(Value at Risk), 옵션 가격 평가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;UX / Product 실험&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정책 변경 시 유저 행동 변화를 가정하고, 데이터로 반응 예측&lt;/td&gt;
&lt;td&gt;추천 알고리즘 개편 시 클릭/이탈 시나리오 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1063&quot; data-start=&quot;978&quot; data-ke-size=&quot;size16&quot;&gt;이번에는 '정책 변화의 효과를 예측하는 시뮬레이션'에 대해 보다 자세하게 작성하고자 한다.&lt;/p&gt;
&lt;p data-end=&quot;1063&quot; data-start=&quot;978&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;399&quot; data-start=&quot;349&quot; data-ke-size=&quot;size16&quot;&gt;많은 사람이 사용하는 Notion의 무료 플랜을 떠올려보자. Notion은 무료 사용자의 팀 초대 인원을 5명으로 제한하고 있다.&lt;/p&gt;
&lt;p data-end=&quot;399&quot; data-start=&quot;349&quot; data-ke-size=&quot;size16&quot;&gt;즉, 개인이나 소규모 팀이 함께 협업할 수는 있지만 조직 전체가 무료로 쓰는 건 어렵다. 그 제한이 곧 유료 전환을 유도하는 장치이다.&lt;/p&gt;
&lt;p data-end=&quot;553&quot; data-start=&quot;530&quot; data-ke-size=&quot;size16&quot;&gt;이 '5명'이라는 제한을 시뮬레이션 분석을 통해 설계한다면 다음과 같다.&lt;/p&gt;
&lt;blockquote data-end=&quot;615&quot; data-start=&quot;554&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;615&quot; data-start=&quot;556&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;초대 가능한 인원에 대한 제한선을 어디에 두면&lt;br /&gt;대다수의 사용자 경험을 해치지 않으면서 월 N명 이상의 유료 사용자를 만들어낼 수 있을까?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 제한선 (Threshold) 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초대 가능한 인원을 3, 5, 7명 등으로 가정한다. 이때 제한선 후보를 정하는 기준은 &amp;lsquo;해당 기능을 실제로 사용하는 사용자의 분포(백분위수)&amp;rsquo;를 참고하는 것이 좋다. 예를 들어, &amp;ldquo;사용자 초대 기능을 사용하는 유저&amp;rdquo;의 분위 95%가 3명이라면, 3명 미만으로 제한할 경우 Notion 전체 사용자 중 약 5%가 이 제한을 직접 체감하게 된다. 이는 곧 사용자 경험에 부정적인 영향을 미칠 리스크가 커진다는 뜻이다.&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;b&gt;2. 체감 비율 (Perceived Limit Rate) 계산&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1875&quot; data-start=&quot;1792&quot; data-ke-size=&quot;size16&quot;&gt;제한선에 도달하는 무료 사용자의 비율이다. &amp;ldquo;얼마나 많은 유저가 실제로 그 제한에 도달하는가&amp;rdquo;를 시간축에서 보는 개념이라는 점에서 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1단계의 백분위수와 다르다. &lt;/span&gt;예를 들어, '3명' 초대 제한이 전체 기준으로 분위 95%에 해당한다 하더라도, 가입 이후 3명을 초대하기까지 평균 11개월이 걸린다면 월별 체감 비율은 5%보다 훨씬 작아질 것이다.&lt;/p&gt;
&lt;p data-end=&quot;1875&quot; data-start=&quot;1792&quot; data-ke-size=&quot;size16&quot;&gt;대다수 서비스에서 유저가 제한을 &amp;lsquo;처음으로&amp;rsquo; 마주할 때 전환율이 가장 높기 때문에, &amp;lsquo;체감 비율&amp;rsquo;을 정교하게 추정하는 것은 매우 중요하다.&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;b&gt;3. 전환율 (Conversion Rate) 설정&lt;/b&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;보통은 보수 전환율 / 중간 전환율 / 낙관 전환율로 나누어 각각의 전환율에 따른 임팩트를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스가 초입 단계라면 5% / 10% / 30%로 임의로 설정하는 것도 나쁘지 않지만, 사용자 수가 많은 서비스일 경우엔 기존의 전환율을 '낙관 전환율'로 잡고 보수와 중간 전환율을 낙관 전환율보다 작게 잡는 것도 하나의 방법이다.&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;b&gt;4. 예상 유료 전환자 수 계산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1과 3을 설정했다면, 이제 예상 유료 전환자 수를 계산한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;월별 예상 유료 전환자 수 = 월별 활성사용자 수 x 제한수에 따른 체감 비율 x 기대 전환율&lt;/blockquote&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;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2438&quot; data-start=&quot;2362&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2391&quot; data-start=&quot;2362&quot;&gt;월간 활성 사용자(MAU)가 1억 명이고,&lt;/li&gt;
&lt;li data-end=&quot;2419&quot; data-start=&quot;2392&quot;&gt;초대 제한이 5명일 때 체감 비율이 6%,&lt;/li&gt;
&lt;li data-end=&quot;2438&quot; data-start=&quot;2420&quot;&gt;기대 전환율이 10%라면,&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2497&quot; data-start=&quot;2440&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 위의 조합에서의 예상 유료 전환자 수는 1억 &amp;times; 0.06 &amp;times; 0.10 = 60만 명이 된다.&lt;/p&gt;
&lt;p data-end=&quot;2497&quot; data-start=&quot;2440&quot; data-ke-size=&quot;size16&quot;&gt;제한수 후보와 기대 전환율 개수에 따라 시나리오는 더 많이 나올 수 있고(이번 예시에서는 9개의 조합에 따른 예상 유료 전환자 수를 구할 수 있다.) 해당 조합들 중에서 체감 비율이 용납할 수준으로 낮고, 유료 전환자 수가 높은 조합을 제시하는 것이 시뮬레이션 분석이라고 할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;2497&quot; data-start=&quot;2440&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2497&quot; data-start=&quot;2440&quot; data-ke-size=&quot;size16&quot;&gt;이 단순한 모델은 완벽하진 않지만, &amp;ldquo;정책을 이렇게 변경하면 월 약 X명 수준의 신규 전환이 발생할 것이다&amp;rdquo;라는 정량적 근거를 제시할 수 있게 한다. 이런 방식으로 시뮬레이션을 반복하면 단순한 &amp;ldquo;좋을 것 같습니다&amp;rdquo;에서 벗어나 &amp;ldquo;이 정도의 변화를 기대할 수 있습니다&amp;rdquo;로 말할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1063&quot; data-start=&quot;978&quot; data-ke-size=&quot;size16&quot;&gt;결국 시뮬레이션 분석은 단순히 기초 통계량을 보는 것을 넘어 데이터를 &amp;lsquo;의사결정의 언어&amp;rsquo;로 바꾸는 방법론이다.&lt;br /&gt;&lt;b&gt;과거를 설명하는 것에서 그치는 게 아니라, 미래를 설계하고 예측하는 단계로 확장하는 것.&lt;/b&gt; 그게 바로 프로덕트와 비즈니스에 데이터 직군이 가장 임팩트 있게 기여하는 방식이 아닐까?&lt;/p&gt;
&lt;p data-end=&quot;1063&quot; data-start=&quot;978&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1284&quot; data-start=&quot;1218&quot; data-ke-size=&quot;size16&quot;&gt;*이 글이 저처럼 시뮬레이션 분석을 처음 시도해보려는 분들에게 작은 단서와 도움이 되기를 바랍니다 &lt;/p&gt;</description>
      <category>데이터</category>
      <category>data</category>
      <category>Simulation Analysis</category>
      <category>데이터분석</category>
      <category>시뮬레이션분석</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/55</guid>
      <comments>https://spaceofyujin.tistory.com/55#entry55comment</comments>
      <pubDate>Sun, 19 Oct 2025 18:51:48 +0900</pubDate>
    </item>
    <item>
      <title>리소스를 적게 쓰는 방향이 아닌, 옳게 쓰는 방향으로 일한다는 것</title>
      <link>https://spaceofyujin.tistory.com/54</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL4m9O/btsOqRVAxQo/bkWT6u4tk6SpaJgD4AmJ1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL4m9O/btsOqRVAxQo/bkWT6u4tk6SpaJgD4AmJ1k/img.png&quot; data-alt=&quot;내가 생각하는 프로덕트 개선 사이클&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL4m9O/btsOqRVAxQo/bkWT6u4tk6SpaJgD4AmJ1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL4m9O%2FbtsOqRVAxQo%2FbkWT6u4tk6SpaJgD4AmJ1k%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;1116&quot; height=&quot;246&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내가 생각하는 프로덕트 개선 사이클&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;사이클의 특정 단계에서만 참여하는 것이 아니라, &lt;u&gt;시작부터 마지막까지 함께하여 의견을 내고 발전시켜 나가는 것&lt;/u&gt;. 그것이 내가 생각하는 &amp;lsquo;좋은 데이터 분석가&amp;rsquo;이고, 내가 되고 싶은 최종TO-BE이다.&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;span style=&quot;color: #666666;&quot;&gt;&lt;i&gt;&amp;lsquo;이&amp;nbsp;회의에&amp;nbsp;들어갔다가&amp;nbsp;내일까지&amp;nbsp;끝내기로&amp;nbsp;한&amp;nbsp;일을&amp;nbsp;못할&amp;nbsp;것&amp;nbsp;같은데?&amp;rsquo;,&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;i&gt;&amp;lsquo;논의할&amp;nbsp;시간에&amp;nbsp;차라리&amp;nbsp;일하는&amp;nbsp;게&amp;nbsp;더&amp;nbsp;나을까?&amp;rsquo;&amp;nbsp;&lt;/i&gt;&lt;/span&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;문제는 이런 생각이 드는게 나뿐만이 아니라는 점이다. 내가 바빠보이면 그 순간부터 타 부서 동료들도 나에게 의견을 묻거나 업무를 주기에 망설여진다. 그러면 이때부터 나를 대하는(업무를 주는) 방식이 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목적에 대한 Why를 함께 의견 나누며, 데이터 관점에서의 How는 나를 믿고 맡겼던 방식에서&lt;/li&gt;
&lt;li&gt;목적에&amp;nbsp;대한&amp;nbsp;Why는&amp;nbsp;결과로만&amp;nbsp;전달되고,&amp;nbsp;How까지도&amp;nbsp;결정되어&amp;nbsp;그&amp;nbsp;중&amp;nbsp;일부만&amp;nbsp;나에게&amp;nbsp;요청이&amp;nbsp;오는&amp;nbsp;방식이&amp;nbsp;된다.&lt;/li&gt;
&lt;/ul&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;lsquo;데이터 정합성에 문제가 없는지 확인&amp;rsquo;, &amp;lsquo;쿼리 작성 및 이미 존재하는 쿼리에 오류가 없는지 검토&amp;rsquo;, &amp;lsquo;대시보드 수정&amp;rsquo; 등으로 이루어진다. 해당 업무를 하는 게 잘못되었다는 건 아니지만, 그러한 일들로만 나의 칸반보드가 채워져 있을 때 보람있게 일하고 있다는 생각은 들지 않는다.&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;-&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;작년에 있었던 일이다. 스쿼드리드로부터 A라는 기능에 대한 성과를 알고 싶은데, 이러이러한 지표만 간단하게 확인 좀 해달라는 업무였다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;나는 그 업무 요청을 받고 나서 왜 저 지표를 봐야하는지 납득이 안 갔다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lsquo;왜 저 지표를 보지? 너무 뒷 퍼널의 지표 같은데?&amp;rsquo;라는 생각이 들었다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;일을 하기 싫어서도 아니고, 일이 어려워서도 아니었다. 진짜 그냥 그 지표를 통해선 고객이 A 기능을 만족했는지 여부를 알기 힘들 것 같았다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;그래서&amp;hellip; 일단 스쿼드리드가 원하는대로 지표를 구했다. 할 수 있는 한 가장 빠르게 구했다. 그리고 대들었다. ()&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-renderer-start-pos=&quot;836&quot; data-ke-style=&quot;style2&quot;&gt;- 요청주신 지표를 구할 수 있는 쿼리를 짜고, A 기능의 성과를 구해보았습니다. 하지만 이 지표가 A 기능의 성과를 제대로 파악할 수 있는지 잘 모르겠습니다.&lt;br /&gt;- 지표에 문제가 있나요?&lt;br /&gt;- 아니요. 지표에 문제는 없지만, 고객들이 A 기능을 마주하는 건 퍼널의 앞쪽이고, 현재의 지표는 가장 마지막 퍼널의 전환률인데, 이 둘을 연결짓는 게 의아합니다. 지표를 구하는 저 스스로조차도 설득이 안 되고, 스스로가 설득이 안 되는데 타인을 설득시킬 수 있는지 모르겠어요. 앞단 퍼널의 전환률을 먼저 보고, 그 곳에서 효과가 있었다는 게 나오면 뒷단 퍼널까지도 봐야 하는 게 아닐까요?&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;스쿼드리드는 나의 말에 잠깐 생각하더니, &amp;ldquo;유진님 말씀이 맞다고 봐요.&amp;rdquo;라고 했다. 그리고 덧붙였다. &amp;ldquo;유진님이 말씀주신 지표와 그 이후의 지표 모두를 기준으로 분석을 요구하고 싶긴 한데, 너무 복잡한가 해서 업무 범위를 줄였었어요.&amp;rdquo;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;결국 이 또한 나에 대한 배려였다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;고민하다가 메세지를 보냈다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;836&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_0c3d740b-bcad-437d-a1d2-fbf28e5c3d5d.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mqRSK/btsOrA7cHTo/WklxYw0qCFi3FXz6cOhcoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mqRSK/btsOrA7cHTo/WklxYw0qCFi3FXz6cOhcoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mqRSK/btsOrA7cHTo/WklxYw0qCFi3FXz6cOhcoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmqRSK%2FbtsOrA7cHTo%2FWklxYw0qCFi3FXz6cOhcoK%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;1266&quot; height=&quot;190&quot; data-filename=&quot;edited_0c3d740b-bcad-437d-a1d2-fbf28e5c3d5d.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;190&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;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 그 이후엔 스쿼드 내의 기능 배포나 의사결정에 대해서 나랑 의견을 아주 많이 나누었다. 그 전에도 안 나눈 건 아니었지만 더더욱 많이 나누었다. 작은 배포여도 배포 이전에 회의실을 잡고 킥오프 미팅을 열었고, 배포가 없더라도 간이의자를 끌고 와서 &lt;span style=&quot;color: #666666;&quot;&gt;&lt;i&gt;&amp;ldquo;이러이런 걸 확인하고 싶은데, 어떤 식으로 데이터를 보면 될까요?&amp;rdquo;, &amp;ldquo;데이터 전문가로써 유진님 생각은 어때요? 내가 생각하는 것보다 더 나을 것 같은데.&amp;rdquo;&lt;/i&gt;&lt;/span&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;lsquo;데이터 전문가&amp;rsquo;로써 믿고 맡겨준 게 나를 더 불타오르게 했다. 나의 리소스를 적게 쓰는 방향을 고민하는 게 아니라, 옳게 쓰는 방향을 고민해준 게 좋았다. 내 의견이 받아들여진 것도 있고, 반박당한 것도 많지만. 그 과정이 모두 프로덕트 개선 사이클 안에 있었기에 스쿼드에 더욱 몰입하여 일할 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;2172&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;2172&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;2172&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;2172&quot; data-ke-size=&quot;size16&quot;&gt;서로가 서로의 리소스를 옳게 쓰는 방향을 고민한다면, 그 조직은 반드시 성과를 내보일 것이라고 믿는다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-renderer-start-pos=&quot;2172&quot; data-ke-size=&quot;size16&quot;&gt;그런 조직에서 일하는게 즐겁기에, 나도 동료의 리소스를 옳게 쓰는 방향을 고민하며 그런 조직을 만드는 데 기여하고 싶다.&lt;/p&gt;</description>
      <category>일상&amp;amp;잡담</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/54</guid>
      <comments>https://spaceofyujin.tistory.com/54#entry54comment</comments>
      <pubDate>Sat, 7 Jun 2025 13:03:09 +0900</pubDate>
    </item>
    <item>
      <title>일본 미야코지마 3박4일 여행 기록글</title>
      <link>https://spaceofyujin.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;2025.04.16 ~ 2025.04.19 3박4일간 일본 미야코지마 여행을 다녀왔다. 혼자만의 여행은 아니었고, 엄마와 동생 셋이서 모녀여행을 다녀왔었다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;회사를 3년 근속한 결과로 한달 간의 휴식기(사내에서는 이것을 '리프레시 휴가 제도'라고 부른다.)가 주어졌다. 무엇을 하고 싶어 리프레시를 신청했냐고 묻는다면··· 아무 것도 하고 싶지 않아 신청했다. 나는 지쳐있었고, 그 어떤 것도 할 자신이 없었고, 그렇기에 한 번 stop 해야겠다 느꼈다. 본래 집에만 있을 생각이었는데, 30년 인생을 돌아봤을 때 집에만 은둔하여 있을 때 더욱 걱정과 우울에 빠져드는 타입이라 새로운 곳으로 떠나야겠다고 마음먹었다. 인적이 드문 조용한 바닷가에서 가만히 앉아 마음을 돌아보고 싶기도 했다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5dE83/btsNrvxZDd6/qKFVjTm8adnC9ZTPnrBQH1/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5dE83/btsNrvxZDd6/qKFVjTm8adnC9ZTPnrBQH1/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5dE83/btsNrvxZDd6/qKFVjTm8adnC9ZTPnrBQH1/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5dE83%2FbtsNrvxZDd6%2FqKFVjTm8adnC9ZTPnrBQH1%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;비행기에서 내려다 본 미야코지마의 바다.&lt;br&gt;미야코지마의 바다 색깔은 맑고 청아하면서도 아름다워서 미야코블루(Miyako Blue)라고 불린다.&lt;br&gt;&lt;br&gt;비행기 안에서 미야코블루를 내려다보며 내가 지금 새로운 곳을 왔구나 싶었고, 동시에 오길 잘했다 싶었다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bad13F/btsNsqw0777/iM3ALtk1WJ9Ozv8TnMbJd0/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bad13F/btsNsqw0777/iM3ALtk1WJ9Ozv8TnMbJd0/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bad13F/btsNsqw0777/iM3ALtk1WJ9Ozv8TnMbJd0/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbad13F%2FbtsNsqw0777%2FiM3ALtk1WJ9Ozv8TnMbJd0%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCNTbr/btsNsjkA5YZ/UkQsKFXzL2RQjswFDveyQ0/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCNTbr/btsNsjkA5YZ/UkQsKFXzL2RQjswFDveyQ0/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCNTbr/btsNsjkA5YZ/UkQsKFXzL2RQjswFDveyQ0/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCNTbr%2FbtsNsjkA5YZ%2FUkQsKFXzL2RQjswFDveyQ0%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;내가 묵었던 호텔인 '소라니와 호텔 앤드 카페(Soraniwa Hotel and Cafe)'.&lt;br&gt;미야코지마 본섬은 아니고 이라부섬에 위치한 호텔인데, 굉장히 만족스러웠다.&lt;br&gt;&lt;br&gt;밟을 때마다 기분이 좋아졌던 나무 마루바닥도, 폭신하고 포근한 침구도, 풀숲과 바다가 한눈에 보이는 테라스도 모든 게 다 좋았지만&lt;br&gt;제일 좋았던 것은 호텔 관리인들의 친절함이었다.&lt;br&gt;요새 '다정하기는 어렵다. 하지만 그래서 다정한 것이 가장 강하다.'라고 생각하고 있기 때문에 더더욱 이분들의 다정한 친절함이 좋았다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEmzJ/btsNsPiZUbZ/xkOL6FTJ1QpKMh2Eo83qi1/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEmzJ/btsNsPiZUbZ/xkOL6FTJ1QpKMh2Eo83qi1/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEmzJ/btsNsPiZUbZ/xkOL6FTJ1QpKMh2Eo83qi1/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEmzJ%2FbtsNsPiZUbZ%2FxkOL6FTJ1QpKMh2Eo83qi1%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;체크인할 때 직접 타서 건네주었던 웰컴티.&lt;br&gt;나는 일본어를 못했고, 관리인께서는 한국어를 못했기에 소통하기 힘들었을텐데 손짓과 구글 번역기를 사용하며 하나하나 설명해주셨다.&lt;br&gt;&lt;br&gt;소라니와에서 묵는 내내 호텔 밖에서 택시를 기다리고 있거나 서성거리고 있으면, 다가와서 &quot;May I help you?&quot;라고 물어보셨는데 그 말 한 마디가 우리의 여행을 더욱 따뜻하게 만들어주었다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2720&quot; data-origin-height=&quot;3869&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLvaes/btsNsHxWLUM/FzzzuxzvYDfuBnthzXAerK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLvaes/btsNsHxWLUM/FzzzuxzvYDfuBnthzXAerK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLvaes/btsNsHxWLUM/FzzzuxzvYDfuBnthzXAerK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLvaes%2FbtsNsHxWLUM%2FFzzzuxzvYDfuBnthzXAerK%2Ftfile.jpg&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;2720&quot; height=&quot;3869&quot; data-origin-width=&quot;2720&quot; data-origin-height=&quot;3869&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDYObX/btsNr9vMgOx/k2CIDKTQD5d67M9WKDjzhk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDYObX/btsNr9vMgOx/k2CIDKTQD5d67M9WKDjzhk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDYObX/btsNr9vMgOx/k2CIDKTQD5d67M9WKDjzhk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDYObX%2FbtsNr9vMgOx%2Fk2CIDKTQD5d67M9WKDjzhk%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;매일 아침식사도 매우 잘 나왔다.&lt;br&gt;아침을 먹을 때마다 영화 &amp;lt;리틀 포레스트&amp;gt; 속에 들어온 기분이었다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;그래서 3박4일간 얼마나 알찬 여행을 했냐고 묻는다면... 알차게 보내지 않았다!!! 아마 인터넷이나 유튜브에 '미야코지마 가야할 곳 필수 정리' 이런 것들을 검색해본다면 내가 간 곳은 단 한 군데도 없을 수도 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ukDSB/btsNqr3YiaJ/cyG0kqokzQV9mFMbFOkY8k/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ukDSB/btsNqr3YiaJ/cyG0kqokzQV9mFMbFOkY8k/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ukDSB/btsNqr3YiaJ/cyG0kqokzQV9mFMbFOkY8k/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FukDSB%2FbtsNqr3YiaJ%2FcyG0kqokzQV9mFMbFOkY8k%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;하루는 아침에 일어나서 30분간 호텔 근처를 달렸다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3748&quot; data-origin-height=&quot;2108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNTDlg/btsNtg1i9iC/K63Efnl8iPXmipyng1MyIk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNTDlg/btsNtg1i9iC/K63Efnl8iPXmipyng1MyIk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNTDlg/btsNtg1i9iC/K63Efnl8iPXmipyng1MyIk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNTDlg%2FbtsNtg1i9iC%2FK63Efnl8iPXmipyng1MyIk%2Ftfile.jpg&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;3748&quot; height=&quot;2108&quot; data-origin-width=&quot;3748&quot; data-origin-height=&quot;2108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;하루는 호텔에서 1시간 가량 걸어가 근처 해변에서 멍하니 바다를 바라봤다.&lt;br&gt;(미야코지마를 가면 꼭 가봐야 하는 거북이를 볼 수 있는 해변이 있다던데 그런 곳도 아니었다.)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu2lGH/btsNsTlcB7H/0HQTlzBuh7VZJS6QKhtkpK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu2lGH/btsNsTlcB7H/0HQTlzBuh7VZJS6QKhtkpK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu2lGH/btsNsTlcB7H/0HQTlzBuh7VZJS6QKhtkpK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu2lGH%2FbtsNsTlcB7H%2F0HQTlzBuh7VZJS6QKhtkpK%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;아예 호텔을 나가지도 않고 테라스에서 바다를 바라본 날도 있다.&lt;br&gt;*낮에 테라스에 햇살이 딱 적당히 비춰, 이곳에서 바닷바람을 맞으며 책을 읽기도 했다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/behfEA/btsNtrBvIvi/NZ8s5SCAI9NxidoFhkrIak/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/behfEA/btsNtrBvIvi/NZ8s5SCAI9NxidoFhkrIak/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/behfEA/btsNtrBvIvi/NZ8s5SCAI9NxidoFhkrIak/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbehfEA%2FbtsNtrBvIvi%2FNZ8s5SCAI9NxidoFhkrIak%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1fFag/btsNruTqt0A/E180XIum6xfY7RTcccwZhK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1fFag/btsNruTqt0A/E180XIum6xfY7RTcccwZhK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1fFag/btsNruTqt0A/E180XIum6xfY7RTcccwZhK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1fFag%2FbtsNruTqt0A%2FE180XIum6xfY7RTcccwZhK%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NsxqK/btsNtqWUnyO/BnkE2XFZ2kAxm5f3gIwmO0/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NsxqK/btsNtqWUnyO/BnkE2XFZ2kAxm5f3gIwmO0/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NsxqK/btsNtqWUnyO/BnkE2XFZ2kAxm5f3gIwmO0/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNsxqK%2FbtsNtqWUnyO%2FBnkE2XFZ2kAxm5f3gIwmO0%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;또 다른 날은 호텔에서 반대 방향으로 1시간 정도 걸어가 나오는 전망대에서 바다를 바라보기도 했다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FB0Mp/btsNrs2pcg7/eJeXL18ASE5ahGZdMxU1T1/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FB0Mp/btsNrs2pcg7/eJeXL18ASE5ahGZdMxU1T1/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FB0Mp/btsNrs2pcg7/eJeXL18ASE5ahGZdMxU1T1/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFB0Mp%2FbtsNrs2pcg7%2FeJeXL18ASE5ahGZdMxU1T1%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;아, 온천욕을 좋아해서 시기라 오공온센(황금온천)은 일부러 찾아서 갔다왔었다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9XHYo/btsNsbf3hpr/zksKxSLBS5UGzeexfagzGk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9XHYo/btsNsbf3hpr/zksKxSLBS5UGzeexfagzGk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9XHYo/btsNsbf3hpr/zksKxSLBS5UGzeexfagzGk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9XHYo%2FbtsNsbf3hpr%2FzksKxSLBS5UGzeexfagzGk%2Ftfile.jpg&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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;밤에는 호텔 옥상의 자쿠지에서 몸을 녹이며 밤하늘의 별들을 바라보았다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;여행하는동안 '나' 스스로를 돌아보고 돌봐주려고 했다. 자연 한가운데에 있으니까 마음이 많이 편안해지는 게 느껴져서 좋았다.&lt;br&gt;&lt;br&gt;물론 그럼에도 어떤 날은 새벽 3시에 깨서 잠을 이루지 못하고 뒤척였다. (불면이 제일 괴롭다...ㅎ)&lt;br&gt;그 날은 구태여 잠을 더 자려고 하지 않고, 테라스로 나가 밤하늘의 달을 바라보며 내 생각을 글로 적었다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bid24D/btsNpVqEkbx/v0rJye8LM5HadekeYOJap1/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bid24D/btsNpVqEkbx/v0rJye8LM5HadekeYOJap1/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bid24D/btsNpVqEkbx/v0rJye8LM5HadekeYOJap1/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbid24D%2FbtsNpVqEkbx%2Fv0rJye8LM5HadekeYOJap1%2Ftfile.jpg&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;4000&quot; height=&quot;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;그날 적은 글...&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style3&quot;&gt;2025.04.17 새벽 3시 21분&lt;br&gt;&lt;br&gt;잠에서 깼다. 어젯밤 11시 반쯤 기분좋게 잠들었는데, 요새 이 시간 쯔음에 눈이 떠지는 날이 잦다. 평화로운 여행의 나날에서는 안 그럴 줄 알았는데 이 곳에서도 마음이 완전히 평온에 다다르진 못했나보다. 뭐, 그럴 수도 있지.&lt;br&gt;몇 번 뒤척이다 잠에 들지 못할 것 같아 몸을 일으켰다. 어제 맥스밸류 마트에서 산 물을 도자기컵에 따라 마시고 테라스로 나왔다. 테라스의 의자에 앉아 가만히 풍경을 바라본다.&lt;br&gt;&lt;br&gt;눈에는 이런 것들이 들어온다.&lt;br&gt;주변에 별빛마저 집어삼킨양 저홀로 빛나는 보름달.&lt;br&gt;바람에 이끌려 오른쪽으로 한발한발 움직이고 있는 구름떼.&lt;br&gt;똑같이 어둡지만 넘실거리며 명확하게 구분선을 긋고 있는 바다.&lt;br&gt;&lt;br&gt;귀에는 이런 것들이 들려온다.&lt;br&gt;촤르르륵 철럭. 파도가 육지로 밀려들어오며 방파제에 부딪치는 소리.&lt;br&gt;찌르르르르. 찌찌찌찍. 밤이라는 것을 모르는건지, 아니면 나처럼 잠이 깬건지 울어대는 벌레소리.&lt;br&gt;&lt;br&gt;피부로는 이런 것들이 느껴진다.&lt;br&gt;강한 듯하면서 강하지 않게 내 머리를 넘겨주는 바람.&lt;br&gt;어제 잠들기 전 마신 맥주 때문일까 약간의 속 울렁임.&lt;br&gt;시원하면서도 습도있는 짠내.&lt;br&gt;&lt;br&gt;내 두 눈에 담기는 것들이 어여쁘다.&lt;br&gt;내 두 귀에 담기는 것들이 사랑스럽다.&lt;br&gt;내 피부에 느껴지는 것들이 아름답다.&lt;br&gt;&lt;br&gt;새벽에 깨어난 덕분에 새벽의 미야코지마도 보게 되었다. 아침과는, 낮과는, 저녁과는 또 다른 미야코지마도 만나게 되었다. 깨어나준 마음에 감사하다. 아름다운 모습으로 나를 위로해주는 새벽의 미야코지마에 감사하다.&lt;br&gt;&lt;br&gt;벌써 1시간이 훌쩍 지났다. 포근한 이불에 누워 마지막으로 잠을 청하고 아침의 미야코지마를 만나야겠다.&lt;br&gt;&lt;br&gt;내일도 새벽에 마음이 나를 깨울 수 있다. 모레도 그렇다. 더 나중의 시간이 흐른 뒤에도 그럴 수 있다. 하지만 괜찮다. 그때 또 그때의 풍경들이 그리고 나 자신이 마음을 위로해 줄 것이다. 그때의 '현재 나 자신'에 집중하면 된다.&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;</description>
      <category>일상&amp;amp;잡담</category>
      <category>미야코지마</category>
      <category>미야코지마여행</category>
      <category>일본여행</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/53</guid>
      <comments>https://spaceofyujin.tistory.com/53#entry53comment</comments>
      <pubDate>Sun, 20 Apr 2025 19:15:06 +0900</pubDate>
    </item>
    <item>
      <title>대격변 AI시대, 데이터로 사고하고 데이터로 리드하라</title>
      <link>https://spaceofyujin.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;992&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crTJL6/btsM2ewqnsm/HfBmWMberFCG5pgNdZpzSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crTJL6/btsM2ewqnsm/HfBmWMberFCG5pgNdZpzSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crTJL6/btsM2ewqnsm/HfBmWMberFCG5pgNdZpzSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrTJL6%2FbtsM2ewqnsm%2FHfBmWMberFCG5pgNdZpzSK%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;237&quot; height=&quot;345&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;992&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #292a2e; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;책 제목: 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라&lt;/li&gt;
&lt;li&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;h3 data-ke-size=&quot;size23&quot;&gt;기록해두고 싶은 문장&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4419%;&quot;&gt;&lt;b&gt;1장 무엇이 문제일까&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5581%;&quot;&gt;데이터는 복잡하다. 데이터에 관한 문제는 대부분 근본적으로 어렵다. 설사 가장 명석한 분석가가 방대한 데이터를 확보해서 적절한 도구와 분석 기법으로 작업하더라도 실수를 피하기 어렵다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4419%;&quot;&gt;&lt;b&gt;3장 통계적 사고를 위한 준비를 갖추자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5581%;&quot;&gt;오늘날 데이터 과학의 혜택은 실재하며 그 어느 때보다도 중요하다. 예측이 점점 정확해짐에 따라 데이터 과학 결과물의 가치는 더욱 높아질 것이며 이 분야에 대한 관심도 커질 것이다. 하지만 간혹 이런 발전은 우리를 안주하게 하고 결함을 감춰버리기도 한다. 확률적 추론과 증거에 대한 평가를 더 깊이 이해하는 것은 데이터 리드가 갖춰야 할 기본 소양이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4419%;&quot;&gt;&lt;b&gt;4장 데이터와 논쟁하자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5581%;&quot;&gt;조직이나 사람은 누구나 실수할 수 있으며 실제로도 실수를 저지른다. 그렇기에 팀원들과 질문을 공유하고 의견을 조율하는 일은 반드시 필요하다. 데이터 리드는 어렵고 까다로운 질문을 끊임없이 제기하면서 데이터에 얽힌 문제를 해결하는 능력을 스스로 입증해야 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4419%;&quot;&gt;&lt;b&gt;5장 데이터를 탐색하자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5581%;&quot;&gt;&lt;span&gt;데이터 리드는 탐색적 데이터 분석 과정을 수행해야 한다. EDA에서 다음과 같은 일이 가능하다.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f0f1f2; color: #292a2e; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;문제를 해결하기 위한 명확한 과정 도출&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터에서 확인한 제한 조건에 따라 비즈니스 문제 재정의&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터를 이용해 해결해야 할 새로운 문제 식별&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;프로젝트 중단. 해결할 수 없는 문제에 시간과 돈을 낭비하지 않게 됐다면 썩 만족스럽지는 않지만 그것만으로도 탐색적 분석은 성공한 셈이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4419%;&quot;&gt;&lt;b&gt;6장 확률이란 무엇인가&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5581%;&quot;&gt;데이터 리드로 성장하는 과정에서 확률과 불확실성에 대해 적극적으로 토론하려는 자세는 정말 중요하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4419%;&quot;&gt;&lt;b&gt;14장 조직 구성원의 다양한 성향을 파악하자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5581%;&quot;&gt;&lt;span style=&quot;color: #292a2e; text-align: start;&quot;&gt;데이터 리드는 뼛속부터 &amp;lsquo;회의론자&amp;rsquo;다. 남들에게 불편을 유발하기 위해 회의적인 태도를 취하는 것이 아니라 데이터에 대한 비판적 사고 기법을 활용한다는 뜻이다. 데이터 리드의 건전한 회의론은 기술 지식과 분야 전문성에 근거하므로 공감대를 형성하며 전달된다. 데이터 리드가 된다는 것은 팀 전체의 의견을 경청하는 것에서 시작된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;느낀 점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어릴 때부터 답이 명확하게 존재한다는 점이 좋아 수학을 선택했다. 실생활과 밀접하게 연관되었다는 점이 좋아 통계를 선택했다. 그리고 실제 사람들의 행동을 수치로 환산하고, 이를 통해 의미를 도출할 수 있다는 점이 좋아 데이터를 선택했다. 내가 가진 &amp;lsquo;통계&amp;rsquo;라는 Theory에 &amp;lsquo;데이터&amp;rsquo;라는 Practical을 결합하면, 복잡한 문제에도 논리적인 Solution을 찾을 수 있으리라 믿어 의심치 않았다.&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;lsquo;옳은 정답&amp;rsquo;인지 확신할 수 없었다. 데이터가 말해주는 답이 명확할 것이라 기대했지만, 수집 방식에 따라, 분석 기법에 따라, 해석하는 사람에 따라 결과는 달라졌고, 그러다 보니 &amp;lsquo;이게 과연 진실일까?&amp;rsquo;라는 의문이 끊임없이 따라다녔다.&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;lt;대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라&amp;gt;를 추천하는 글을 보게 되었다. 답을 찾는 방법, 그리고 내가 찾은 답이 정답인지 검증하는 방법이 담겨있길 바랐던 나는 망설임 없이 책을 구매했다. 하지만 책은 여러 번에 걸쳐 반복적으로 &quot;그런 건 없다&quot;라고 말해주었다. 처음에는 다소 실망스러웠다. 내가 원했던 정답을 주는 대신, 오히려 지금까지 가졌던 확신을 흔들어 놓았으니까. 하지만 모순적이게도 그 점이 만족스러웠다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 책에서 제시한 &amp;lsquo;좋은 데이터 리드&amp;rsquo;의 개념은 앞으로 내가 어떤 방향으로 성장해야 할지를 고민하게 만들었다. 내가 처음 데이터 분석가를 시작했을 때는 단순히 분석을 잘하는 사람이 되고 싶었지, '리드'가 되는 것에 대한 고민은 하지 않았다. 하지만 연차가 조금씩 쌓이고, '리드'에 대한 생각과 꿈을 갖게 되었다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;책에서 말하는 &amp;lsquo;좋은 데이터 리드&amp;rsquo;란 단순히 데이터를 잘 해석하는 것을 넘어, 불확실성 속에서도 최선의 결정을 내릴 수 있도록 방향을 제시하는 사람이다.&lt;/span&gt; 점점 더 많은 데이터를 다루고, 더 나은 분석을 고민할수록 단순히 숫자를 뽑아내는 것이 아니라 &amp;lsquo;어떤 방향으로 분석할 것인가&amp;rsquo;, &amp;lsquo;어떤 질문을 던질 것인가&amp;rsquo;가 더 중요하다는 걸 알게 되었다. 이 책을 읽기 전까지는 답을 찾는 것만이 중요하다고 생각했지만, 이제는 &amp;lsquo;어떤 답을 찾을 것인가&amp;rsquo;, 그리고 &amp;lsquo;그 답을 어떻게 활용할 것인가&amp;rsquo;가 더 중요하다는 사실을 배웠다.&lt;/p&gt;</description>
      <category>책리뷰</category>
      <category>BookReview</category>
      <category>대격변ai시대데이터로사고하고데이터로리드하라</category>
      <category>데이터</category>
      <category>데이터분석</category>
      <category>책리뷰</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/52</guid>
      <comments>https://spaceofyujin.tistory.com/52#entry52comment</comments>
      <pubDate>Sun, 30 Mar 2025 11:14:55 +0900</pubDate>
    </item>
    <item>
      <title>[Dakerton] 어떤 광고가 효과적일까? 데이터로 풀어보는 Attribution Model</title>
      <link>https://spaceofyujin.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우리&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;팀은&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2025년&lt;/span&gt;부터&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;일주일에&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;한&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;번씩&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;모여&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;데커톤(Dakerton)을&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;진행하고&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;있다. '데커톤'은&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;데이터(Data)와&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;해커톤&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(H&lt;span style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;ackathon&lt;/span&gt;)&lt;/span&gt;을&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;조합해서&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;만든&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;우리&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;팀만의&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;문화로&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;한&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;명씩 돌아가며&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[&lt;/span&gt;분석하고&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;싶은&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;주제]를&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;제안하고&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;주제에&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;대해&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1~2&lt;/span&gt;시간동안&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;각자의 방법으로 데이터를&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;분석하고&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;공유하며&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2, 3&lt;/span&gt;주에&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;걸쳐&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;결론을&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;내는&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;것이다&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&quot;우리 프로덕트에 도움이 되는&lt;/u&gt;&lt;/span&gt;&lt;u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주제여야&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;한다&lt;/u&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;u&gt;&quot;&lt;/u&gt;&lt;/span&gt;는&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;단&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하나의&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;룰만&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;지키면&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;참석&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;여부도&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;분석&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;방법론도&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;모든&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;게&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;자유이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SrPRU/btsMAJpYUzS/RxYEok5rHErtFymE5zs0s0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SrPRU/btsMAJpYUzS/RxYEok5rHErtFymE5zs0s0/img.jpg&quot; data-alt=&quot;미리캔버스 'AI로고 만들기'로 제작한 데커톤 로고 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SrPRU/btsMAJpYUzS/RxYEok5rHErtFymE5zs0s0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSrPRU%2FbtsMAJpYUzS%2FRxYEok5rHErtFymE5zs0s0%2Fimg.jpg&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;300&quot; height=&quot;300&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;미리캔버스 'AI로고 만들기'로 제작한 데커톤 로고 &lt;/figcaption&gt;
&lt;/figure&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;데커톤의 두 번째 주제는 종만님께서 제안주셨는데, 광고 및 마케팅 성과 측정 시 자주 사용되는 'Attribution Model'의 개념을 적용하여, 회사의 여러 캠페인 광고 데이터를 분석하는 것이었다. 종만님은 광고 분야에 대한 이해도가 높고, 최근 프로젝트에서도 광고 데이터를 자주 다루셨기에 이 주제를 제안해 주셨는데, 나로서는 평소 접할 기회가 적었던 데이터라 더욱 흥미롭게 다가왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Attribution Model이란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'기여도'를 뜻하는 Attribution이 붙은 모델답게, Attribution Model은 사용자가 제품이나 서비스를 구매하거나 특정 행동을 수행하기까지의 경로에서 각 마케팅 캠페인이 얼마나 기여했는지를 분석하는 방법론이다. 고객이 광고를 접하고 전환에 이르기까지 어떤 요소들이 영향을 미쳤는지를 정량적으로 평가하는 데 사용된다. 여기서의 '전환'은 정의하기 나름인데, '가입 전환'을 목표로 둘 수도 있고, '구매 전환'을 목표로 둘 수도 있다. 구독형 비즈니스 모델일 경우에는 '구독 전환' 또한 물론 가능하다.&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;Search Ads, Display Ads 등 다양한 채널을 운영하는 기업이라면, 어느 채널이 가장 높은 전환율을 이끄는지, 어떤 조합이 시너지 효과를 내는지를 파악하는 것이 필수적이다. 그래야만 마케팅 비용을 보다 효율적으로 배분하고, 성과가 높은 채널에 집중 투자하여 ROI를 극대화할 수 있기 때문이다. 하지만 디지털 광고 환경에서는 사용자의 구매 여정이 복잡해지고 다채널 마케팅이 보편화됨에 따라, 단순히 '마지막 클릭'만을 평가하는 방식으로는 정확한 성과 분석이 어렵다. 따라서 각 회사의 도메인과 비즈니스에 맞는 Attribution(기여도)을 설정해가면서 고객 행동을 보다 정교하게 분석하는 것이 중요하다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;마케팅 및 광고 분야에서 Attribution Model은 효과적인 예산 배분과 전략 최적화의 핵심 도구로 활용된다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Attribution Model의 종류: 단일 터치 모델 &amp;amp; 다중 터치 모델&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Attribution Model은 크게 단일 터치 모델(Single-Touch Attribution)과 다중 터치 모델(Multi-Touch Attribution)로 나뉜다. 단일 터치 모델은 전환 과정에서 오직 하나의 터치포인트만을 성과 기여도로 인정하는 방식이다. 계산이 간단하고 직관적이지만, 고객의 전체 여정을 반영하지 못한다는 한계가 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.6745%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;모델명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.3255%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.6745%;&quot;&gt;&lt;b&gt;First-Touch Attribution&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.3255%;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;526&quot; data-start=&quot;482&quot;&gt;고객이 처음으로 접한 광고 또는 채널에 100% 기여도 부여.&lt;/li&gt;
&lt;li data-end=&quot;564&quot; data-start=&quot;527&quot;&gt;브랜드 인지도 향상과 초기 고객 유입을 중시하는 경우 유용.&lt;/li&gt;
&lt;li data-end=&quot;621&quot; data-start=&quot;565&quot;&gt;이후의 광고 접점을 무시하므로, 실제 전환에 중요한 후속 채널의 영향을 반영하지 못함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.6745%;&quot;&gt;&lt;b&gt;Last-Touch Attribution&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.3255%;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;707&quot; data-start=&quot;659&quot;&gt;고객이 전환 직전에 접한 광고 또는 채널에 100% 기여도 부여.&lt;/li&gt;
&lt;li data-end=&quot;756&quot; data-start=&quot;708&quot;&gt;직접적인 전환을 유도하는 광고의 효과를 측정하는 데 유용.&lt;/li&gt;
&lt;li data-end=&quot;805&quot; data-start=&quot;757&quot;&gt;초기 또는 중간 단계에서 고객이 영향을 받은 터치포인트의 영향을 반영하지 못함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;반면, 다중 터치 모델은 고객 여정에서 여러 터치포인트에 기여도를 배분하는 방식이다. 계산의 복잡도는 상승하지만, 고객 행동을 보다 정교하게 분석할 수 있다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.7907%;&quot;&gt;&lt;b&gt;모델명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.2093%;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.7907%;&quot;&gt;&lt;b&gt;Linear Attribution&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.2093%;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1009&quot; data-start=&quot;971&quot;&gt;전환 과정에서 발생한 모든 터치포인트에 동일한 가중치를 부여.&lt;/li&gt;
&lt;li data-end=&quot;1057&quot; data-start=&quot;1010&quot;&gt;모든 채널을 균등하게 평가하므로, 각 채널의 상대적 중요도를 반영하기 어려움.&lt;/li&gt;
&lt;li data-end=&quot;1094&quot; data-start=&quot;1058&quot;&gt;단순하지만, 각 채널이 고르게 기여하는 경우 적절한 모델.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.7907%;&quot;&gt;&lt;b&gt;Time Decay Attribution&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.2093%;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1164&quot; data-start=&quot;1132&quot;&gt;전환에 가까운 터치포인트일수록 높은 가중치를 부여.&lt;/li&gt;
&lt;li data-end=&quot;1207&quot; data-start=&quot;1165&quot;&gt;고객이 점점 더 결정을 확정해 나가는 과정을 반영하기 때문에 현실적.&lt;/li&gt;
&lt;li data-end=&quot;1244&quot; data-start=&quot;1208&quot;&gt;단점: 초기 터치포인트의 영향을 과소평가할 가능성이 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.7907%;&quot;&gt;&lt;b&gt;Position-Based Attribution (U-Shaped)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.2093%;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1360&quot; data-start=&quot;1297&quot;&gt;첫 번째 터치포인트와 마지막 터치포인트에 높은 가중치를 부여하고, 중간 터치포인트에는 낮은 가중치를 할당.&lt;/li&gt;
&lt;li data-end=&quot;1422&quot; data-start=&quot;1361&quot;&gt;일반적으로 첫 터치와 마지막 터치에 각각 40%, 중간 터치에 나머지 20%를 배분하는 방식이 사용됨.&lt;/li&gt;
&lt;li data-end=&quot;1462&quot; data-start=&quot;1423&quot;&gt;브랜드 인지도 형성과 전환 유도 모두 중요한 경우 적합한 모델.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 37.7907%;&quot;&gt;&lt;b&gt;Data-Driven Attribution (Algorithmic)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.2093%;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1564&quot; data-start=&quot;1515&quot;&gt;머신러닝 및 통계 기법을 활용하여 각 터치포인트의 기여도를 데이터 기반으로 계산.&lt;/li&gt;
&lt;li data-end=&quot;1663&quot; data-start=&quot;1565&quot;&gt;Google Analytics의 Data-Driven Attribution(DDA)처럼 대규모 데이터를 분석하여 최적의 가중치를 자동으로 할당하는 방식이 대표적.&lt;/li&gt;
&lt;li data-end=&quot;1725&quot; data-start=&quot;1664&quot;&gt;가장 정교한 방식이지만, 데이터 수집과 모델링이 필요하며, 일정량 이상의 데이터가 확보되어야 효과적임.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MVUDG/btsMyEwUNGs/wvF3fbKtkFvf7X3CNrh7zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MVUDG/btsMyEwUNGs/wvF3fbKtkFvf7X3CNrh7zk/img.png&quot; data-alt=&quot;출처: What is Attribution in Digital Marketing? (Pathlabs)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MVUDG/btsMyEwUNGs/wvF3fbKtkFvf7X3CNrh7zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMVUDG%2FbtsMyEwUNGs%2FwvF3fbKtkFvf7X3CNrh7zk%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;656&quot; height=&quot;343&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: What is Attribution in Digital Marketing? (Pathlabs)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Attribution Model을 활용해 광고 데이터 분석하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 Attribution Model을 활용해 회사 서비스의 광고 데이터를 분석하려면 어떻게 해야 할까? 답은 항상 똑같다. 분석을 통해 구하고자 하는 '목표'를 분명히 하고, 이후 해당 목표를 달성할 수 있는 '가설'을 세워야한다. 데이터는 어디까지나 수단이어야 하지, 데이터를 분석하는 행위 자체가 목적이 되면 안 되기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;- 구글 광고는 매체에서 7 day click attribution model을 사용하고 있는데, 우리 서비스에도 7 day를 적용하는 게 최적일까? 데이터 상으로 봤을때 구글 유입 후 2주 후 가입하는 비중이 높다면 14 day click attribution model을 사용해야 하지 않을까?&lt;br /&gt;- 최초 유입은 메타 광고로 많이 일어나는데, last click 대부분은 구글 광고로 잡히고 있다면? 두 유입간의 간격이 1일 내외라면? 만약 이 가설이 참이라면 메타로 우리 서비스를 인지하고, 다음날 사이트 진입을 위해 구글에서 검색한 후 브랜드 키워드 광고를 클릭했을 가능성이 높다. 그렇다면 실제 기여는 메타 광고가 하고 있다고 봐야하므로 우리는 last click으로 광고를 off 하지 않게 기여 모델을 적용해야한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;*나는 아이데이션 과정에서 인사이트가 풍부해진다고 믿는 사람으로써, 가설 단계에서부터 맘껏 공유하고 피드백 나누는 팀을 지향하고 있다 &lt;/span&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;이렇게 서로의 아이디어에 대해 이야기를 나누며 가설을 뾰족하게 한 뒤, 각자 데이터 분석을 진행했다. 나는 광고 데이터를 EDA했을 때 중간 터치포인트에는 굳이 큰 기여도를 줄 필요는 없다고 판단했다. 따라서 다음과 같이 캠페인별 기여도를 부여했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. First Touch에는 30%의 기여도 부여.&lt;br /&gt;2. Last Touch에는 50%의 기여도 부여.&lt;br /&gt;3. 그 외의 Touch에는 균등 기여도 부여.&lt;br /&gt;&amp;nbsp; &amp;nbsp; ex. First, Last를 제외한 캠페인이 2개일 경우엔 {100-(30+50)}/2 % 씩 기여도 부여.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말하자면, Position-Based Attribution과 Linear Attribution을 적절히 응용한 방식이라고 볼 수 있다. 요새 pyspark 문법에 익숙해지려고 노력하는 중이라 코드는 pyspark를 활용해서 작성했다. &lt;span style=&quot;color: #666666;&quot;&gt;&lt;i&gt;(양심선언: Chat-GPT의 힘을 아주 많이 빌렸다^^)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740898701053&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from pyspark.sql import functions as F
from pyspark.sql.window import Window

def assign_attribution(df):
    # 유저별로 이벤트를 날짜순으로 정렬하는 윈도우 함수 정의
    user_window = Window.partitionBy(&quot;user_id&quot;).orderBy(&quot;visit_date&quot;)
    
    # 첫 번째 및 마지막 캠페인 식별
    df_campaigns = df.filter(F.col(&quot;event&quot;) != &quot;conversion&quot;) \
                     .withColumn(&quot;first_campaign&quot;, F.first(&quot;event&quot;).over(user_window)) \
                     .withColumn(&quot;last_campaign&quot;, F.last(&quot;event&quot;).over(user_window))
    
    # 유저별 conversion 여부를 flag로 생성
    conversion_users = df.filter(F.col(&quot;event&quot;) == &quot;conversion&quot;).select(&quot;user_id&quot;).distinct()
    
    # conversion 유저의 캠페인 데이터만 필터링
    df_campaigns = df_campaigns.join(conversion_users, &quot;user_id&quot;, &quot;inner&quot;)
    
    # 중간 캠페인 개수 계산 (총 개수 - 첫 번째 - 마지막)
    df_campaigns = df_campaigns.withColumn(&quot;total_campaigns&quot;, F.count(&quot;event&quot;).over(user_window))
    df_campaigns = df_campaigns.withColumn(
        &quot;middle_campaign_count&quot;,
        F.when(F.col(&quot;total_campaigns&quot;) &amp;gt; 2, F.col(&quot;total_campaigns&quot;) - 2).otherwise(0)
    )
    
    # 기여도 계산 (첫 캠페인: 30%, 마지막 캠페인: 50%, 중간 캠페인: 20% / n)
    df_campaigns = df_campaigns.withColumn(
        &quot;contribution&quot;,
        F.when(F.col(&quot;event&quot;) == F.col(&quot;first_campaign&quot;), 0.3)  # 첫 번째 캠페인
         .when(F.col(&quot;event&quot;) == F.col(&quot;last_campaign&quot;), 0.5)  # 마지막 캠페인
         .when(F.col(&quot;middle_campaign_count&quot;) &amp;gt; 0, 0.2 / F.col(&quot;middle_campaign_count&quot;))  # 중간 캠페인
         .otherwise(0)
    ).filter(F.col(&quot;contribution&quot;) &amp;gt; 0)
    
    return df_campaigns.select(&quot;user_id&quot;, &quot;event&quot;, &quot;contribution&quot;) \
                       .withColumnRenamed(&quot;user_id&quot;, &quot;user_id&quot;) \
                       .withColumnRenamed(&quot;event&quot;, &quot;campaign&quot;)&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3주에 걸쳐 본인의 가설을 검증한 뒤, 결론과 인사이트를 공유하는 시간을 가졌다. 우리 회사는 &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://www.bizhows.com/&quot;&gt;비즈하우스&lt;/a&gt;와 &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://www.miricanvas.com/&quot;&gt;미리캔버스&lt;/a&gt; 2가지의 서비스를 운영 중인데, 어떤 서비스의 데이터를 대상으로 했는지 &amp;amp; 전처리는 어떻게 수행했는지 등에 따라 가설 및 분석의 방향이 조금씩 다른 것도 신기했다. 평소에는 본인의 프로젝트에만 딥다이브하다보니 다른 프로젝트의 도메인은 얕게 알 때가 많은데, 동료가 분석한 내용을 공유받으며 도메인 지식을 쌓아나가는 것도 데커톤의 큰 장점이다.&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;또한, Attribution Model이 주로 광고 데이터 분석에 사용되긴 하지만, 프로덕트 데이터 분석에도 충분히 활용될 수 있는 모델이라고 느꼈다. conversion 유저가 가장 최근에 한 행동일수록 기여도를 크게 부여하는 방식으로? 고객을 알아간다는 측면에서 딥다이브할만한 가치가 있는 듯해 데커톤이 끝난 후 나만의 백로그에 담아두었다 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;참고 문서&lt;span style=&quot;background-color: #ffffff; color: #141349; letter-spacing: -1px; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #141349; letter-spacing: -1px; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.appsflyer.com/glossary/attribution-modeling/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Attribution Modeling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pathlabs.com/blog/what-is-attribution-in-digital-marketing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;What is Attribution in Digital Marketing?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sirensearch.co.uk/2020/06/08/guide-to-attribution-modelling/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Beginner's Guide to Attribution Modeling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>데이터</category>
      <category>attribution model</category>
      <category>dakerton</category>
      <category>data analysis</category>
      <category>광고 데이터 분석</category>
      <category>데이터분석</category>
      <category>데커톤</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/51</guid>
      <comments>https://spaceofyujin.tistory.com/51#entry51comment</comments>
      <pubDate>Sun, 2 Mar 2025 16:27:11 +0900</pubDate>
    </item>
    <item>
      <title>[Dakerton] 데이터에서 숨은 패턴을 찾다: Apriori 알고리즘을 활용한 연관분석</title>
      <link>https://spaceofyujin.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우리&lt;span&gt; &lt;/span&gt;팀은&lt;span&gt; 2025년&lt;/span&gt;부터&lt;span&gt; &lt;/span&gt;일주일에&lt;span&gt; &lt;/span&gt;한&lt;span&gt; &lt;/span&gt;번씩&lt;span&gt; &lt;/span&gt;모여&lt;span&gt; &lt;/span&gt;데커톤&lt;span&gt;(Dakerton)&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;진행하고&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;. '&lt;/span&gt;데커톤&lt;span&gt;'&lt;/span&gt;은&lt;span&gt; &lt;/span&gt;데이터&lt;span&gt;(Data)&lt;/span&gt;와&lt;span&gt; &lt;/span&gt;해커톤&lt;span&gt;(H&lt;span style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;ackathon&lt;/span&gt;)&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;조합해서&lt;span&gt; &lt;/span&gt;만든&lt;span&gt; &lt;/span&gt;우리&lt;span&gt; &lt;/span&gt;팀만의&lt;span&gt; &lt;/span&gt;문화로&lt;span&gt;, &lt;/span&gt;한&lt;span&gt; &lt;/span&gt;명씩 돌아가며&lt;span&gt; [&lt;/span&gt;분석하고&lt;span&gt; &lt;/span&gt;싶은&lt;span&gt; &lt;/span&gt;주제&lt;span&gt;]&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;제안하고&lt;span&gt;, &lt;/span&gt;그&lt;span&gt; &lt;/span&gt;주제에&lt;span&gt; &lt;/span&gt;대해&lt;span&gt; 1~2&lt;/span&gt;시간동안&lt;span&gt; &lt;/span&gt;각자의 방법으로 데이터를&lt;span&gt; &lt;/span&gt;분석하고&lt;span&gt; &lt;/span&gt;공유하며&lt;span&gt; 2, 3&lt;/span&gt;주에&lt;span&gt; &lt;/span&gt;걸쳐&lt;span&gt; &lt;/span&gt;결론을&lt;span&gt; &lt;/span&gt;내는&lt;span&gt; &lt;/span&gt;것이다&lt;span&gt;. &lt;u&gt;&quot;우리 프로덕트에 도움이 되는&lt;/u&gt;&lt;/span&gt;&lt;u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주제여야&lt;span&gt; &lt;/span&gt;한다&lt;/u&gt;&lt;span&gt;&lt;u&gt;&quot;&lt;/u&gt;&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;단&lt;span&gt; &lt;/span&gt;하나의&lt;span&gt; &lt;/span&gt;룰만&lt;span&gt; &lt;/span&gt;지키면&lt;span&gt;, &lt;/span&gt;참석&lt;span&gt; &lt;/span&gt;여부도&lt;span&gt; &lt;/span&gt;분석&lt;span&gt; &lt;/span&gt;방법론도&lt;span&gt; &lt;/span&gt;모든&lt;span&gt; &lt;/span&gt;게&lt;span&gt; &lt;/span&gt;자유이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Dakerton.jpg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEeJEG/btsL3XpM93W/j19FYn6K8iROiRBgUsnX9k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEeJEG/btsL3XpM93W/j19FYn6K8iROiRBgUsnX9k/img.jpg&quot; data-alt=&quot;미리캔버스 'AI로고 만들기'로 제작한 데커톤 로고 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEeJEG/btsL3XpM93W/j19FYn6K8iROiRBgUsnX9k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEeJEG%2FbtsL3XpM93W%2Fj19FYn6K8iROiRBgUsnX9k%2Fimg.jpg&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;300&quot; height=&quot;300&quot; data-filename=&quot;Dakerton.jpg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;미리캔버스 'AI로고 만들기'로 제작한 데커톤 로고 &lt;/figcaption&gt;
&lt;/figure&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;데커톤의 첫 주제는 가장 최근에 입사하신 혜인님께서 낸 아이디어로부터 시작되었다.&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;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;hellip; 이거 완전 러키비키 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게&lt;span&gt; &lt;/span&gt;&lt;span&gt;첫 번째 데커톤의 주제&lt;/span&gt;는 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;[우리 서비스 고객의&amp;nbsp;구매 상품간의 연관성 분석하기] &lt;/span&gt;&lt;/b&gt;가&lt;span&gt; &lt;/span&gt;되었다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;연관분석(Association Analysis)이란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연관분석은&lt;span&gt; &lt;/span&gt;데이터마이닝&lt;span&gt; &lt;/span&gt;기술&lt;span&gt; &lt;/span&gt;중&lt;span&gt; &lt;/span&gt;하나로&lt;span&gt;, &lt;/span&gt;데이터&lt;span&gt; &lt;/span&gt;내에서&lt;span&gt; &lt;/span&gt;항목&lt;span&gt; &lt;/span&gt;간의&lt;span&gt; &lt;/span&gt;관계를&lt;span&gt; &lt;/span&gt;발견하는&lt;span&gt; &lt;/span&gt;데&lt;span&gt; &lt;/span&gt;사용된다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;주로&lt;span&gt; '&lt;/span&gt;연관&lt;span&gt; &lt;/span&gt;규칙'을 알아내어&lt;span&gt;&amp;nbsp;&lt;/span&gt;결과를&lt;span&gt; &lt;/span&gt;도출한다&lt;span&gt;. &lt;/span&gt;연관분석에서&lt;span&gt; &lt;/span&gt;가장&lt;span&gt; &lt;/span&gt;유명한&lt;span&gt; &lt;/span&gt;활용&lt;span&gt; &lt;/span&gt;분야는&lt;span&gt; &lt;/span&gt;장바구니&lt;span&gt; &lt;/span&gt;분석&lt;span&gt;(Basket Analysis)&lt;/span&gt;이다&lt;span&gt;. &lt;/span&gt;예를&lt;span&gt; &lt;/span&gt;들면&lt;span&gt;, &lt;/span&gt;슈퍼마켓에서&lt;span&gt; &lt;/span&gt;고객들이&lt;span&gt; &lt;/span&gt;함께&lt;span&gt; &lt;/span&gt;자주&lt;span&gt; &lt;/span&gt;구매하는&lt;span&gt; &lt;/span&gt;상품들을&lt;span&gt; &lt;/span&gt;분석하여&lt;span&gt; &lt;/span&gt;고객의&lt;span&gt; &lt;/span&gt;구매&lt;span&gt; &lt;/span&gt;패턴을&lt;span&gt; &lt;/span&gt;파악하여&lt;span&gt; &lt;/span&gt;마케팅이나&lt;span&gt; &lt;/span&gt;비즈니스&lt;span&gt; &lt;/span&gt;전략에&lt;span&gt; &lt;/span&gt;활용하는&lt;span&gt; &lt;/span&gt;식이다&lt;span&gt;. 뿐만 아니라,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;추천&lt;span&gt; &lt;/span&gt;시스템에서&lt;span&gt; &lt;/span&gt;사용자의&lt;span&gt; &lt;/span&gt;과거&lt;span&gt; &lt;/span&gt;행동을&lt;span&gt; &lt;/span&gt;바탕으로&lt;span&gt; &lt;/span&gt;추천할&lt;span&gt; &lt;/span&gt;상품을&lt;span&gt; &lt;/span&gt;찾는&lt;span&gt; &lt;/span&gt;데에도&lt;span&gt; &lt;/span&gt;활용된다&lt;span&gt;. &lt;/span&gt;연관분석을&lt;span&gt; &lt;/span&gt;수행하는&lt;span&gt; &lt;/span&gt;대표적인&lt;span&gt; &lt;/span&gt;방법론에는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;Apriori 알고리즘&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;이&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Apriori &lt;span&gt;알고리즘&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;연관분석-001.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KZOxi/btsL4wkXZq6/M0Jk5U8KlhEsihyo1rNqtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KZOxi/btsL4wkXZq6/M0Jk5U8KlhEsihyo1rNqtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KZOxi/btsL4wkXZq6/M0Jk5U8KlhEsihyo1rNqtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKZOxi%2FbtsL4wkXZq6%2FM0Jk5U8KlhEsihyo1rNqtk%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;522&quot; height=&quot;294&quot; data-filename=&quot;연관분석-001.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apriori 알고리즘은 빈번히 함께 발생하는 항목 집합을 찾는 방법론으로, 데이터에서 '빈발 항목 집합(Frequent Itemsets)'을 발견하고 연관 규칙을 도출하는 데에 목표를 둔다. 이 알고리즘의 핵심 아이디어는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;상위의 항목 집합은 반드시 하위의 항목 집합을 포함해야 한다 &lt;/span&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;Apriori 알고리즘은 크게 세 가지 주요 단계로 나뉜다:&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. 빈발 항목 집합 찾기: 최소 지지도(minimum support) 기준을 만족하는 항목들을 찾는다.&lt;br /&gt;&lt;span&gt;2. 연관&lt;/span&gt; &lt;span&gt;규칙&lt;/span&gt; &lt;span&gt;생성&lt;/span&gt;: &lt;span&gt;빈발&lt;/span&gt; &lt;span&gt;항목&lt;/span&gt; &lt;span&gt;집합을&lt;/span&gt; &lt;span&gt;기반으로&lt;/span&gt; &lt;span&gt;신뢰도&lt;/span&gt;(minimum confidence)&lt;span&gt;가&lt;/span&gt; &lt;span&gt;높은&lt;/span&gt; &lt;span&gt;연관&lt;/span&gt; &lt;span&gt;규칙을&lt;/span&gt; &lt;span&gt;생성한다&lt;/span&gt;.&lt;br /&gt;&lt;span&gt;3. 규칙&lt;/span&gt; &lt;span&gt;평가&lt;/span&gt;: &lt;span&gt;생성된&lt;/span&gt; &lt;span&gt;연관&lt;/span&gt; &lt;span&gt;규칙을&lt;/span&gt; &lt;span&gt;향상도&lt;/span&gt;(minimum lift)&lt;span&gt;와&lt;/span&gt; &lt;span&gt;같은&lt;/span&gt; &lt;span&gt;다른&lt;/span&gt; &lt;span&gt;지표를&lt;/span&gt; &lt;span&gt;통해&lt;/span&gt; &lt;span&gt;평가한다&lt;/span&gt;.&lt;/blockquote&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;span&gt; &lt;/span&gt;온라인&lt;span&gt; &lt;/span&gt;쇼핑몰에서&lt;span&gt; &lt;/span&gt;고객들이&lt;span&gt; &lt;/span&gt;구매한&lt;span&gt; &lt;/span&gt;상품에&lt;span&gt; &lt;/span&gt;대한&lt;span&gt; &lt;/span&gt;데이터가&lt;span&gt; &lt;/span&gt;다음과&lt;span&gt; &lt;/span&gt;같이&lt;span&gt; &lt;/span&gt;존재한다고&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;때&lt;span&gt; Apriori &lt;/span&gt;알고리즘을&lt;span&gt; &lt;/span&gt;적용해보자&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;고객 ID&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;구매 상품 목록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;12345&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;{티셔츠, 구두, 모자}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;67890&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;{티셔츠, 구두, 가방}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;13579&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;{티셔츠, 버터, 가방}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;24680&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;{티셔츠, 구두}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;48954&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;{구두, 가방}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;b&gt;1. 빈발 항목 집합 찾기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개별 상품들에 대해 지지도(support)를 계산하여, 최소 지지도 기준을 만족하는 항목들을 찾는다. 최소 지지도는 분석가가 서비스에 맞게 설정하는데, 임의로 0.5를 기준으로 두었다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;상품명&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;구매 횟수&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;지지도&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;기준 충족 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;티셔츠&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;4/5 = 0.8&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;만족&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;구두&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;4/5 = 0.8&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;만족&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;모자&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;2/5 = 0.4&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;불만족&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;가방&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;3/5 = 0.6&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;만족&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모자를 제외한 티셔츠, 구두, 가방 3개의 상품이 최소 지지도 기준을 만족하는 빈발 항목 집합인 것으로 나타났다.&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;b&gt;2. 연관 규칙 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빈발 항목 집합을 바탕으로 신뢰도(confidence)를 계산하여 연관 규칙을 도출한다. 예를 들어, &quot;티셔츠 &amp;rarr; 구두&quot;라는 규칙을 생성하고 신뢰도를 계산해 보면 아래와 같다. 이처럼 신뢰도가 높은 규칙을 지속적으로 생성하면서 최종적으로 유용한 연관 규칙을 찾아낸다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;규칙: 티셔츠 &amp;rarr; 구두&lt;br /&gt;신뢰도 = P(구두 | 티셔츠) = 3/4 = 0.75 (즉, 티셔츠를 구매한 고객 중 75%가 구두를 함께 구매)&lt;/blockquote&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;b&gt;3. 규칙 평가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 규칙의 향상도(lift)를 계산하여 연관 규칙의 유효성을 평가한다. 향상도는 두 항목이 독립적일 경우의 구매 확률에 비해 얼마나 높은 확률로 함께 구매되는지에 대한 지표이다. 즉, 두 상품 간의 관계가 우연에 의한 것이 아닌지를 평가하는 것이다. 향상도 값이 1보다 크면 두 항목 간에 긍정적인 관계가 있다고 할 수 있고, 1보다 작으면 부정적인 관계를 의미한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRS8Zh/btsL5riOn0Y/7eicdH62vUiyG31WdOlqkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRS8Zh/btsL5riOn0Y/7eicdH62vUiyG31WdOlqkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRS8Zh/btsL5riOn0Y/7eicdH62vUiyG31WdOlqkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRS8Zh%2FbtsL5riOn0Y%2F7eicdH62vUiyG31WdOlqkK%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;403&quot; height=&quot;114&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;티셔츠 &amp;rarr; 구두&quot; 규칙의 향상도를 구하면 약 0.94가 나오는데, 이는 티셔츠와 구두가 독립적으로 발생하는 것보다 함께 발생하는 확률이 낮다는 의미이다. 다시 말하면 두 상품이 함께 구매되는 경향이 상대적으로 적다는 것을 나타낸다.&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;Apriori 알고리즘은 다양한 도메인의 서비스에서, 단순하고 직관적으로, 효율적인 후보 집합 생성이 가능하다는 장점을 가지고 있다. 하지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;대규모의&lt;span&gt; &lt;/span&gt;데이터셋에서는&lt;span&gt; &lt;/span&gt;후보&lt;span&gt; &lt;/span&gt;항목&lt;span&gt; &lt;/span&gt;집합간의&lt;span&gt; &lt;/span&gt;연산량&lt;span&gt; &lt;/span&gt;증대로&lt;span&gt; &lt;/span&gt;성능이&lt;span&gt; &lt;/span&gt;떨어질&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;. &lt;/span&gt;이&lt;span&gt; &lt;/span&gt;문제를&lt;span&gt; &lt;/span&gt;해결하기&lt;span&gt; &lt;/span&gt;위해&lt;span&gt; FP-growth &lt;/span&gt;알고리즘이&lt;span&gt; &lt;/span&gt;등장하기도&lt;span&gt; &lt;/span&gt;했다&lt;span&gt;. &lt;/span&gt;다만,&lt;span&gt; &lt;/span&gt;우리 서비스에서는&lt;span&gt; 이러한 단점이 크게 문제되지 않아&lt;/span&gt;서&lt;span&gt; Apriori 알고리즘을 &lt;/span&gt;사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Apriori 알고리즘, 실제 서비스에 적용하기&lt;/h3&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;A 상품을 구매한 이후 n일 이내에 B 상품을 구매했을 경우, A 상품과 B 상품은 함께 구매된 것으로 판단.&lt;/li&gt;
&lt;li&gt;상품의 옵션(크기, 색상 등)만 다를 경우에는 동일 상품으로 취급.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 전처리 작업은 서비스 특성에 맞는 시간적 범위를 설정하여 보다 의미 있는 연관 규칙을 찾기 위해서였고, 두 번째 전처리는 상품의 옵션이 다르다고 해서 완전히 다른 상품으로 처리하면, 이로 인해 고객의 구매 패턴을 오히려 왜곡할 수 있기 때문이었다. 즉, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;오랜 시간 '우리 서비스의 고객'이 원하는 것을 알아내려고 노력해 온 분석가들의 판단이었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;MLxtend 라이브러리&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;Apriori 알고리즘을 코드로 구현하기 위해 가장 처음에 사용했던 방식이다. &lt;/span&gt;&lt;/span&gt;MLxtend는 &lt;i&gt;machine learning extensions&lt;/i&gt;의 줄임말로, 여러 가지 기계 학습 및 데이터 분석 작업에 도움이 되는 함수들을 제공하는 파이썬 라이브러리이다. Apriori 알고리즘도 내장 함수로 구현되어 있어서 그대로 가져다 쓰면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1738477425222&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# pandas, mlxtend import
import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules

# data example
data = {
    '티셔츠': [1, 1, 1, 1, 0],
    '구두': [1, 1, 0, 1, 1],
    '모자': [1, 0, 0, 0, 0],
    '가방': [0, 1, 1, 0, 1],
    '버터': [0, 0, 1, 0, 0]
}
df = pd.DataFrame(data)

# Apriori 알고리즘을 사용해 빈번한 항목 집합 찾기 (min_support=0.2)
frequent_itemsets = apriori(df, min_support=0.2, use_colnames=True)

# 연관 규칙 도출
rules = association_rules(frequent_itemsets, metric=&quot;lift&quot;, min_threshold=1)

# '티셔츠' -&amp;gt; '모자' 규칙 찾기
result = rules[(rules['antecedents'] == {'티셔츠'}) &amp;amp; (rules['consequents'] == {'모자'})]

print(&quot;신뢰도 (Confidence)와 향상도 (Lift):&quot;)
print(result[['antecedents', 'consequents', 'confidence', 'lift']])&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;2308&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pappl/btsL47ERwcq/TV77FvwJtbv9BYkqlGRmk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pappl/btsL47ERwcq/TV77FvwJtbv9BYkqlGRmk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pappl/btsL47ERwcq/TV77FvwJtbv9BYkqlGRmk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpappl%2FbtsL47ERwcq%2FTV77FvwJtbv9BYkqlGRmk1%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;2308&quot; height=&quot;154&quot; data-origin-width=&quot;2308&quot; data-origin-height=&quot;154&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;
&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;하드코딩으로 연관분석 함수 작성&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MLxtend 라이브러리는 기본적으로 Apriori 알고리즘을 사용할 수 있는 함수를 제공하지만, 특정 조건에 맞는 맞춤형 알고리즘을 구현해야 하는 경우에는 MLxtend의 기본 지원 함수만으로는 해결하기에 충분치 않을 수 있다. 이 경우에는 하드코딩으로 각 서비스만의 알고리즘을 구현하는 것이 유연성 측면에서 유리할 수 있다.&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 id=&quot;code_1738478479795&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def calculate_rules(frequent_itemsets, min_confidence):
    rules_list = []
    for i, row in frequent_itemsets.iterrows():
        antecedent_support = row['support']
        for antecedent in row['itemsets']:
            for consequent in row['itemsets'] - frozenset([antecedent]):
                consequent_support = frequent_itemsets.loc[frequent_itemsets['itemsets'] == frozenset([consequent]), 'support'].values[0]
                confidence = antecedent_support / consequent_support
                if confidence &amp;gt;= min_confidence:
                    rules_list.append({
                        'antecedents': frozenset([antecedent]),
                        'consequents': frozenset([consequent]),
                        'confidence': confidence,
                    })
    return pd.DataFrame(rules_list)
rules = calculate_rules(frequent_itemsets, min_confidence = 0.3)

print(&quot;rules:&quot;)
print(rules)&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;MLxtend 라이브러리의 내장 함수는 빠르고 효율적이며 사용이 간편하지만, 하드코딩된 calculate_rules 함수는 유연성이 뛰어나고, 특정 요구 사항에 맞게 커스터마이징할 수 있다는 장점이 있다. 각 서비스의 상황에 더 적합한 방식대로 진행하면 된다. 중요한 것은 코드를 어떻게 구현했는지가 아니라 데이터를 분석하는 목적과 이를 통해 얻어낸 인사이트이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&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;</description>
      <category>데이터</category>
      <category>Apriori</category>
      <category>dakerton</category>
      <category>data analysis</category>
      <category>데이터분석</category>
      <category>데커톤</category>
      <category>연관분석</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/50</guid>
      <comments>https://spaceofyujin.tistory.com/50#entry50comment</comments>
      <pubDate>Sun, 2 Feb 2025 16:12:17 +0900</pubDate>
    </item>
    <item>
      <title>CQGR로 우리 서비스의 성장률 측정하기</title>
      <link>https://spaceofyujin.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 다루는 사람이라면 &lt;i&gt;&quot;고객이 우리 서비스에 만족하고 있다&quot;&lt;/i&gt;는 추상적인 문장을 정량적이고 수치적으로 표현할 수 있어야 한다. 그러나 서비스 맞춤형 지표를 설계하는 일은 결코 쉬운 일이 아니다. 오늘은 같은 팀의 동료 데이터분석가가 본인 스쿼드에서 설계한 지표를 소개하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt; *참고: 우리 회사에서는 데이터분석가가 각 스쿼드&lt;i&gt;ㅡ프로젝트 단위 조직ㅡ&lt;/i&gt;에 전담으로 배정되어, 해당 스쿼드의 목표 달성을 위해 데이터를 분석하고 지표를 설계한다. 그렇게 본인 스쿼드에 집중하다가, 매주 한 번씩 분석가들끼리 모여 분석한 내용을 공유하는 시간을 가진다. 오늘 내가 소개하고자 하는 지표도 매주 한 번씩 진행되는 위클리 시간에 알게됐다 :)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CAGR &amp;rarr; CQGR&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CAGR은 &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: justify;&quot;&gt;경제나 주식에 관심이 많은 사람들이라면 기사에서 많이 접했을 단어일텐데, &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: justify;&quot;&gt;Compound Annual Growth Rate의 약자로 우리말로는 '복리 연평균 성장률'을 의미한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck2YGh/btsL08kx4x5/Fu9aklkK7QegM4IvhoJqKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck2YGh/btsL08kx4x5/Fu9aklkK7QegM4IvhoJqKk/img.png&quot; data-alt=&quot;CAGR 공식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck2YGh/btsL08kx4x5/Fu9aklkK7QegM4IvhoJqKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck2YGh%2FbtsL08kx4x5%2FFu9aklkK7QegM4IvhoJqKk%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;510&quot; height=&quot;154&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CAGR 공식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;From. ChatGPT&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;CAGR(Compound Annual Growth Rate, 복리 연평균 성장률)은 일정 기간 동안 투자나 자산의 성장률을 연평균으로 나타내는 지표입니다. 이 지표는 성장률이 일정하게 유지된다고 가정하고, 초기 값에서 최종 값까지의 복리 성장을 측정합니다. CAGR은 금융 투자, 기업의 매출 성장, 경제 지표 등 다양한 분야에서 사용되며, 복잡한 성장 패턴을 단순화하여 성과를 평가하는 데 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 한 기업의 매출이 5년 동안 1억 원에서 2억 원으로 증가했다고 할 때, 이 기업의 CAGR을 계산하면 연평균 몇 퍼센트의 성장을 이루었는지 알 수 있습니다. CAGR은 복리 성장률이기 때문에, 예를 들어 매년 동일한 비율로 성장했다고 가정하고 계산합니다. 이를 통해 투자자들은 다양한 투자처의 성과를 비교하거나 기업의 성장성을 평가할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;span style=&quot;background-color: #ffffff; color: #000000; text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: justify;&quot;&gt;CAGR을 사용하면 단순 연평균 성장율이나 YoY를 구할 때보다 아래와 같은 측면에서 이점이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 127px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 35.9302%; height: 57px;&quot;&gt;1. 복잡한 성장 패턴을 단순화할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 64.0698%; height: 57px;&quot;&gt;CAGR은 일정 기간 동안의 성장률을 하나의 단순한 숫자로 요약해 주기 때문에, 연도별로 성장률이 다를 경우에도 복잡한 변동성 없이 전체 기간의 평균 성장률을 쉽게 이해할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 35.9302%; height: 19px;&quot;&gt;2. 비교가 쉽다.&lt;/td&gt;
&lt;td style=&quot;width: 64.0698%; height: 19px;&quot;&gt;다양한 자산, 기업, 시장의 성과를 비교할 때 유용하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 35.9302%; height: 17px;&quot;&gt;3. 장기적인 성과 평가가 가능하다.&lt;/td&gt;
&lt;td style=&quot;width: 64.0698%; height: 17px;&quot;&gt;단기적인 변동성이나 일시적인 사건에 영향을 받지 않기 때문에, 전체적인 성장 궤적을 파악하는 데 유용하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 35.9302%; height: 17px;&quot;&gt;4. 계산이 간단하고 직관적이다.&lt;/td&gt;
&lt;td style=&quot;width: 64.0698%; height: 17px;&quot;&gt;간단한 수학 공식으로 이루어져 있어 쉽게 구할 수 있다. 또한, 복리 효과를 반영하므로 단순한 연평균 성장률보다 더 정확하게 성장의 실제 효과를 나타낼 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 35.9302%; height: 17px;&quot;&gt;5. 목표 설정과 예측하는 데 도움을 줄 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 64.0698%; height: 17px;&quot;&gt;과거 몇 년간의 CAGR을 바탕으로 향후 몇 년간의 성장률을 추정하고, 이를 바탕으로 목표를 설정하거나 전략을 수립할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동료는 담당 스쿼드에서 우리 서비스의 성장률을 측정하기 위한 지표를 설계하고 있었다. 목표는 이전 대비 서비스가 기대 이상의 성과를 거두었는지, 아니면 기대에 미치지 못했는지를 평가하는 것이었다. 여러 고민을 거듭한 이후, CAGR을 응용하여 우리 서비스에 맞는 맞춤형 지표를 만들기로 결정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동료가 선택한 방식은 CAGR을 응용한 CQGR(Cumulative Quarterly Growth Rate) 지표를 도입하는 것이었다.&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Annual이 아닌 Quarterly 단위를 사용하는 CQGR을 선택한 이유는,&lt;/span&gt; 서비스가 시작된 지 10년이 채 되지 않은 상황에서 연평균 성장률을 계산하기엔 기간이 충분히 길지 않다고 판단했기 때문이었다. 단순히 연평균 지표만으로는 변화나 성과를 명확히 평가하기 어려울 수 있다고 생각했고, 그래서 분기별 성장률을 반영하는 방식을 사용했다고 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CQGR은 분기별 복리 성장률을 계산하여 전체 기간 동안의 성장을 분기별로 평가하는 지표이다.&lt;/b&gt; 이를 활용하면 단기적인 변동성도 반영하면서, 동시에 장기적인 성장 트렌드도 파악할 수 있게 된다. 무엇보다, CAGR을 사용했을 때보다 훨씬 더 많은 데이터를 바탕으로 세밀한 성장 분석이 가능해졌다. CAGR의 공식을 그대로 사용하되, 기간을 연간이 아닌 분기 단위로 설정하면 되기 때문에 구하는 데 복잡하거나 오랜 시간을 소요하지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;대시보드에 CQGR 표현하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전사 비데이터 직군 동료들한테 매 분기마다 지표를 계산하여 전달할 수는 없기 때문에, 데이터 분석가는 설계한 지표를 대시보드에 나타낼 수 있어야 한다. 우리 회사에서는 시각화 툴로 Tableua를 활용하고 있기 때문에, 태블로에서 CQGR을 나타내는 방법을 설명해보고자 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태블로에서 CQGR을 나타내는 것은 어렵지 않다. 태블로에서 제공하는 퀵 테이블 계산 함수(Quick Table Calculation)를 잘 사용하면 된다. &lt;b&gt;태블로 퀵 테이블 계산에서 제공하는 함수 중 하나인 '통합 성장률(CGR, Compound Growth Rate)'은 기본적으로 복리 성장률을 구하는 함수이다.&lt;/b&gt; 이 함수는 두 시점 간의 성장률을 계산하는 데 사용되며, 기간의 시작값과 끝값을 기반으로 성장률을 계산한다. 따라서, [분기] 기준으로 데이터를 표기한 후에, 통합 성장률 함수를 적용하면 CQGR을 쉽게 구할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;1248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brq9mu/btsL1y39bHU/mSUEkgB1x680XK1itQCx20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brq9mu/btsL1y39bHU/mSUEkgB1x680XK1itQCx20/img.png&quot; data-alt=&quot;가상 데이터 [서비스 사용량]에 퀵 테이블 계산 &amp;amp;gt; 통합 성장률을 적용 한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brq9mu/btsL1y39bHU/mSUEkgB1x680XK1itQCx20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrq9mu%2FbtsL1y39bHU%2FmSUEkgB1x680XK1itQCx20%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;399&quot; height=&quot;277&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;1248&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가상 데이터 [서비스 사용량]에 퀵 테이블 계산 &amp;gt; 통합 성장률을 적용 한 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KZj1h/btsL052rVUR/qpP9LG5Q4Gzod20BonkHSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KZj1h/btsL052rVUR/qpP9LG5Q4Gzod20BonkHSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KZj1h/btsL052rVUR/qpP9LG5Q4Gzod20BonkHSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKZj1h%2FbtsL052rVUR%2FqpP9LG5Q4Gzod20BonkHSk%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;399&quot; height=&quot;201&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;594&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, CQGR뿐만 아니라 윗 사진과 같이 &lt;b&gt;[이전 서비스 사용량]에 (1+CQGR)을 곱한 값을 별도로 구해두는 것도 추천한다.&lt;/b&gt; 대시보드는 사람들에게 얼마나 직관적으로 우리의 목표를 보여줄 수 있느냐가 중요하다. 위와 같은 지표를 구해둔다면 아래와 같이 지금까지 우리가 기대한 성장률(CQGR) 대비 실제 성과가 얼마나 잘 나왔는지, 보완할 점은 무엇인지 한 눈에 판단할 수 있게 된다. 이를 통해 실시간으로 조정이 필요하거나 개선할 부분을 식별할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;980&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7FVte/btsL1Vrtjft/YbHRHTmBHaatRl1UyPUdP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7FVte/btsL1Vrtjft/YbHRHTmBHaatRl1UyPUdP0/img.png&quot; data-alt=&quot;현재 서비스의 기대 충족/미충족 정도를 한눈에 파악할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7FVte/btsL1Vrtjft/YbHRHTmBHaatRl1UyPUdP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7FVte%2FbtsL1Vrtjft%2FYbHRHTmBHaatRl1UyPUdP0%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;427&quot; height=&quot;237&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;980&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;현재 서비스의 기대 충족/미충족 정도를 한눈에 파악할 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&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;CQGR은 단순히 과거 성과를 측정하는 지표에 그치지 않고, 미래의 성장 가능성을 예측하고 목표 달성 여부를 점검할 수 있어 더욱 가치있는 지표인 것으로 보이는데, 이는 YoY나 단순 연평균 성장률만 구하려 했던 나에게 정말 새로운 지식이었다. 또한, 대시보드에 표현하는 방법이 매우 간단하면서도 직관적이어서, 활용도도 굉장히 높게 느껴졌다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 문서&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;article-heading_1-0&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.investopedia.com/terms/c/cagr.asp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Compound Annual Growth Rate (CAGR) Formula and Calculation&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.bankofbaroda.in/banking-mantra/investment/articles/what-is-cagr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Understanding CAGR: Formula, Calculation, and Importance&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://medium.com/@deepak.holla/quick-table-calculations-that-are-less-popular-and-other-tips-tricks-while-using-them-in-tableau-90cc86b70fee&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;Quick Table Calculations that are less popular and other Tips &amp;amp; Tricks while using them in Tableau Desktop&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터</category>
      <category>CAGR</category>
      <category>cqgr</category>
      <category>data analysis</category>
      <category>데이터분석</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/49</guid>
      <comments>https://spaceofyujin.tistory.com/49#entry49comment</comments>
      <pubDate>Sun, 26 Jan 2025 19:15:08 +0900</pubDate>
    </item>
    <item>
      <title>Databricks에서 원하는 조건의 순서에 맞게 배열 정렬하기</title>
      <link>https://spaceofyujin.tistory.com/48</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;부제: 데이터 분석가는 그의 업무시간 중 70%를 데이터 전처리에 쓴다.&lt;/blockquote&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;챗&lt;span&gt;GPT&lt;/span&gt;와&lt;span&gt; &lt;/span&gt;논쟁 &amp;rarr;&lt;span&gt;&amp;nbsp; &lt;/span&gt;구글링 &amp;rarr; 각종 도큐멘트 정독 등등의 과정을 거치며&lt;span&gt;&amp;nbsp;&lt;/span&gt;알아낸 정보를 기록해둔다. 나중에 같은 문제를 맞닥뜨린 누군가가 해당 글을 통해 더 빠르게 문제를 해결할 수 있기를... &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HEvfx/btsLJCfPHIf/IaKg3U961wbURjBIfiWbLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HEvfx/btsLJCfPHIf/IaKg3U961wbURjBIfiWbLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HEvfx/btsLJCfPHIf/IaKg3U961wbURjBIfiWbLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHEvfx%2FbtsLJCfPHIf%2FIaKg3U961wbURjBIfiWbLK%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;148&quot; height=&quot;74&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span&gt;내가 마주한 문제&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;우리 서비스의 고객 행동을 분석하고, 관련 지표를 설계하던 중 로우데이터의 일부를 하나의 배열 안에 넣을 필요가 있었다. 근데 배열 안에 데이터를 넣을 때 event_time 순서대로 넣어야 했다.&lt;/span&gt;&lt;/span&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;&lt;span&gt;&lt;span&gt;예를 들면,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceTOoq/btsLL84O6hH/8Qg2CdBAx92EU8RgumWZR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceTOoq/btsLL84O6hH/8Qg2CdBAx92EU8RgumWZR0/img.png&quot; data-alt=&quot;user_id별 영화 시청기록 데이터 (가상)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceTOoq/btsLL84O6hH/8Qg2CdBAx92EU8RgumWZR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceTOoq%2FbtsLL84O6hH%2F8Qg2CdBAx92EU8RgumWZR0%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;553&quot; height=&quot;133&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user_id별 영화 시청기록 데이터 (가상)&lt;/figcaption&gt;
&lt;/figure&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;&lt;span&gt;&lt;span&gt;이러한 로우데이터를 가공을 통해 아래와 같은 데이터를 만들어내야 했다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bolwn/btsLLOFzA54/vUQmdALk4OIr9N9b2jwaVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bolwn/btsLLOFzA54/vUQmdALk4OIr9N9b2jwaVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bolwn/btsLLOFzA54/vUQmdALk4OIr9N9b2jwaVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBolwn%2FbtsLLOFzA54%2FvUQmdALk4OIr9N9b2jwaVk%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;554&quot; height=&quot;67&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;154&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;
&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;흠, 쉽네.&lt;br /&gt;ARRAY_AGG()로 film을 묶은 다음에 event_time 기준으로 ORDER BY 하면 되겠군.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yoY3k/btsLKBfTdAk/9H89QRmzi7cWtyKkFNq6HK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yoY3k/btsLKBfTdAk/9H89QRmzi7cWtyKkFNq6HK/img.png&quot; data-alt=&quot;나는 이 데이터 전처리에 나의 일요일 오후를 통째로 쓰게 될 줄 몰랐다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yoY3k/btsLKBfTdAk/9H89QRmzi7cWtyKkFNq6HK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyoY3k%2FbtsLKBfTdAk%2F9H89QRmzi7cWtyKkFNq6HK%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;400&quot; height=&quot;225&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;699&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나는 이 데이터 전처리에 나의 일요일 오후를 통째로 쓰게 될 줄 몰랐다.&lt;/figcaption&gt;
&lt;/figure&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;h3 data-ke-size=&quot;size23&quot;&gt;PostgreSQL의 ARRAY_AGG()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt; ARRAY_AGG()&amp;nbsp;&lt;/span&gt; 함수는&lt;span&gt; PostgreSQL&lt;/span&gt;의&lt;span&gt; &lt;/span&gt;네이티브&lt;span&gt; &lt;/span&gt;함수&lt;span&gt; &lt;/span&gt;중&lt;span&gt; &lt;/span&gt;하나로&lt;span&gt;, &lt;/span&gt;값&lt;span&gt; &lt;/span&gt;집합을&lt;span&gt; &lt;/span&gt;받아들이고&lt;span&gt; &lt;/span&gt;집합의&lt;span&gt; &lt;/span&gt;각&lt;span&gt; &lt;/span&gt;값이&lt;span&gt; &lt;/span&gt;배열의&lt;span&gt; &lt;/span&gt;요소에&lt;span&gt; &lt;/span&gt;할당된&lt;span&gt;&amp;nbsp;&lt;/span&gt;배열을&lt;span&gt; &lt;/span&gt;반환하는&lt;span&gt; &lt;/span&gt;집계&lt;span&gt; &lt;/span&gt;함수이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://neon.tech/postgresql/postgresql-aggregate-functions/postgresql-array_agg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PostgreSQL Tutorial&lt;/a&gt;에 나와있는 예제에 따르면 아래와 같이 사용된다. &lt;i&gt;(*&lt;a href=&quot;https://neon.tech/postgresql/postgresql-getting-started/postgresql-sample-database&quot;&gt;샘플 데이터베이스&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #131415; text-align: start;&quot;&gt;의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;film&lt;span style=&quot;background-color: #ffffff; color: #131415; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;film_actor&lt;span style=&quot;background-color: #ffffff; color: #131415; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;actor&lt;span style=&quot;background-color: #ffffff; color: #131415; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블 사용)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736675922931&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    title,
    ARRAY_AGG (first_name || ' ' || last_name) actors
FROM
    film
INNER JOIN film_actor USING (film_id)
INNER JOIN actor USING (actor_id)
GROUP BY
    title
ORDER BY
    title;&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;640&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfGCJE/btsLJVTELGg/w31DKV9WN8ds65W3P3Vtek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfGCJE/btsLJVTELGg/w31DKV9WN8ds65W3P3Vtek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfGCJE/btsLJVTELGg/w31DKV9WN8ds65W3P3Vtek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfGCJE%2FbtsLJVTELGg%2Fw31DKV9WN8ds65W3P3Vtek%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;226&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;226&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력값에서 actors를 first_name 순서대로 order by 하고 싶으면 ARRAY_AGG() 함수에 단 하나의 옵션만 추가해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1736676033148&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    title,
    ARRAY_AGG (
        first_name || ' ' || last_name
        ORDER BY
            first_name
    ) actors
FROM
    film
INNER JOIN film_actor USING (film_id)
INNER JOIN actor USING (actor_id)
GROUP BY
    title
ORDER BY
    title;&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;640&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9mEUK/btsLKsQ0bMy/Ha939sXHKWsbkmN73uODEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9mEUK/btsLKsQ0bMy/Ha939sXHKWsbkmN73uODEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9mEUK/btsLKsQ0bMy/Ha939sXHKWsbkmN73uODEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9mEUK%2FbtsLKsQ0bMy%2FHa939sXHKWsbkmN73uODEK%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;267&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;267&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 회사는 현재는 데이터플랫폼으로 Databricks를 사용하지만, 몇 년 전에는 PostgreSQL를 사용했었던지라 ARRAY_AGG()에 대해서 알고 있었다. 또한, 순서(order)를 고려했던 적이 없었을 뿐 Databricks에서도 ARRAY_AGG()를 사용했던 경험이 있었기 때문에 안 될거란 생각을 전혀 않고 내가 아는대로 코드를 작성하여 실행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[PARSE_SYNTAX_ERROR] Syntax error at or near 'ORDER': missing ')'&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네? Syntax error요? &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 예상 못한 타입의 에러가 떠서 챗GPT한테 물어봤더니&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ARRAY_AGG&amp;nbsp;함수 내에서&amp;nbsp;ORDER BY&amp;nbsp;절을 사용하는 것은 일부 SQL 엔진에서 지원되지 않을 수 있습니다. 대신, ordered_event CTE에서&amp;nbsp;event_time을 기준으로 정렬하는 방법을 사용할 수 있습니다. ARRAY_AGG 함수는 기본적으로 입력된 순서대로 배열을 생성합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 답변을 주었다. 이 답변을 받고 나는 '아하 그렇구나. 데이터브릭스에서는 ORDER BY 옵션이 지원되지 않는군. 뭐, 입력된 순서대로 배열을 생성한다면 CTE를 통해 순서를 선행적으로 정렬하면 되겠지'라고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 ordered_event라는 event_time 순서대로 정렬된 CTE를 추가한 뒤에, 최종 SELECT문에서는 ARRAY_AGG(film) AS film_lst를 작성했다. 에러도 안 뜨고 출력값도 그럴싸하게 나오길래 '성공인가?'하고 몇몇 데이터를 골라서 검토하는데 &lt;i&gt;&lt;b&gt;전혀!!&lt;/b&gt;&lt;/i&gt; event_time 순서대로 나온 게 아닌, film들이 랜덤하게 리스트 안에 들어가 있었다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;입력된 순서대로 배열 생성한다며...!!&lt;/i&gt;&lt;/span&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;이 때 곧바로 공식 도큐멘트를 찾아보는 등의 구글링을 시작했다면 좋았겠지만, 챗GPT와 논의를 주고받는 게 너무 익숙해진 나는 4차례 정도 더 논의를 주고받고 나서야 챗GPT로부터는 해결책을 얻어낼 수 없다는 걸 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; text-align: left;&quot;&gt;Spark에서의 ARRAY_AGG() 함수 제한&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; text-align: left;&quot;&gt;한 시간이 넘는 구글링 끝에 내가 찾아낸 결론은 Spark에서는 PostgreSQL의 네이티브 함수를 완전히 동일하게 사용하지 못하는 경우들이 왕왕 있다는 것이었다. 즉, ARRAY_AGG()를&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Spark&lt;/span&gt;에서도&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용할&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;수&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;있지만, Spark SQL에서는&amp;nbsp;ARRAY_AGG()&amp;nbsp;함수에&amp;nbsp;ORDER BY&amp;nbsp;조건을&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;직접&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;적용할&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;수&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;없는&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;제한이&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;있다. 그리고 이는 &lt;/span&gt;Apache Spark&lt;span&gt;를&lt;/span&gt; &lt;span&gt;기반으로&lt;/span&gt; &lt;span&gt;하는&lt;/span&gt; &lt;span&gt;클라우드&lt;/span&gt; &lt;span&gt;기반의&lt;/span&gt; &lt;span&gt;데이터&lt;/span&gt; &lt;span&gt;분석&lt;/span&gt; &lt;span&gt;플랫폼인&lt;/span&gt; Databricks&lt;span&gt;에서도&lt;/span&gt; &lt;span&gt;동일했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*참고: Spark에서 ARRAY_AGG()를 사용할 수 있었던 것도 3.3.0 버전부터로, 그 전까지는 함수 자체가 존재하지 않았다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUSZtV/btsLLB0JMjj/pm1EPo2tjc3YKK7ErTytG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUSZtV/btsLLB0JMjj/pm1EPo2tjc3YKK7ErTytG1/img.png&quot; data-alt=&quot;구글링하다 나와 똑같은 문제를 겪는 사람을 찾으면 그렇게 반가울 수가 없다...!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUSZtV/btsLLB0JMjj/pm1EPo2tjc3YKK7ErTytG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUSZtV%2FbtsLLB0JMjj%2Fpm1EPo2tjc3YKK7ErTytG1%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;416&quot; height=&quot;418&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글링하다 나와 똑같은 문제를 겪는 사람을 찾으면 그렇게 반가울 수가 없다...!&lt;/figcaption&gt;
&lt;/figure&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;그러면 &lt;span&gt;Databricks&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;원하는 조건의&amp;nbsp;&lt;/span&gt;순서대로&lt;span&gt; &lt;/span&gt;데이터를&lt;span&gt; &lt;/span&gt;배열화해야&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;경우에는&lt;span&gt;&amp;nbsp;어떻게 해야 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;COLLECT_LIST() &amp;amp;&lt;span style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;SORT_ARRAY()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답은 바로&amp;nbsp;&lt;span style=&quot;background-color: #dddddd;&quot;&gt; COLLECT_LIST()&amp;nbsp;&lt;/span&gt; 함수와&amp;nbsp;&lt;span style=&quot;background-color: #dddddd;&quot;&gt; SORT_ARRAY()&amp;nbsp;&lt;/span&gt; 함수를 사용하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceTOoq/btsLL84O6hH/8Qg2CdBAx92EU8RgumWZR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceTOoq/btsLL84O6hH/8Qg2CdBAx92EU8RgumWZR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceTOoq/btsLL84O6hH/8Qg2CdBAx92EU8RgumWZR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceTOoq%2FbtsLL84O6hH%2F8Qg2CdBAx92EU8RgumWZR0%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;553&quot; height=&quot;133&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;356&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;
&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;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;1. event_time&lt;/span&gt;와 film을&amp;nbsp;연결하여 정렬 기준을 만든다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1736688628572&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CONCAT(CAST(event_time AS STRING), '_', film) AS combined&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;2.&amp;nbsp;SORT_ARRAY()&lt;span&gt;와&lt;/span&gt;&amp;nbsp;COLLECT_LIST()&lt;span&gt;를&lt;/span&gt; &lt;span&gt;조합하여&lt;/span&gt; &lt;span&gt;데이터를&lt;/span&gt; &lt;span&gt;원하는&lt;/span&gt; &lt;span&gt;순서로&lt;/span&gt; &lt;span&gt;배열에&lt;/span&gt; &lt;span&gt;집계한다&lt;/span&gt;.&lt;/p&gt;
&lt;pre id=&quot;code_1736688680237&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sort_array(COLLECT_LIST(combined)) AS sorted_combined&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;3. 정렬된&lt;span&gt; &lt;/span&gt;배열에서&lt;span&gt; &lt;/span&gt;정렬&lt;span&gt; &lt;/span&gt;키&lt;span&gt;(event_time)&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;제거하여&lt;span&gt; &lt;/span&gt;최종&lt;span&gt; &lt;/span&gt;데이터를&lt;span&gt; &lt;/span&gt;얻는다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736688718875&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ARRAY_AGG(regexp_replace(combined, '^[^_]+_', '')) AS film_lst&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 CTE들을 연결해 전체 SQL 쿼리를 작성하면 이런 형태가 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1736688813284&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH film_events AS (
    SELECT
        event_date,
        user_id,
        CONCAT(CAST(event_time AS STRING), '_', film) AS combined
    FROM film_table
), sorted_film_events AS (
    SELECT 
        event_date, 
        user_id, 
        sort_array(COLLECT_LIST(combined)) AS sorted_combined
    FROM film_events
    GROUP BY user_id, event_date
)
SELECT 
    event_date,
    user_id,
    ARRAY_AGG(regexp_replace(combined, '^[^_]+_', '')) AS film_data_lst
FROM sorted_film_events
LATERAL VIEW explode(sorted_combined) exploded AS combined
GROUP BY user_id, event_date
ORDER BY user_id, event_date&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;Spark에 대해 잘 알고 있는 사람 입장에서는 '기본기'와 같은 지식일 수 있겠지만, 나는 Spark를 최근 들어서야 조금씩 알아가는 단계이다 보니까 애먹었다. 이걸 아는데만 오늘 오후 통째로 썼다ㅎㅎ; 예전에는&lt;span&gt; &lt;/span&gt;분석하고&lt;span&gt; &lt;/span&gt;싶어서&lt;span&gt; &lt;/span&gt;노트북&lt;span&gt; &lt;/span&gt;열었다가&lt;span&gt;&amp;nbsp;오늘처럼&amp;nbsp;&lt;/span&gt;전처리하는 데에만&lt;span&gt;&amp;nbsp;&lt;/span&gt;시간을&lt;span&gt;&amp;nbsp;&lt;/span&gt;다&lt;span&gt; &lt;/span&gt;쓰면&lt;span&gt; &amp;lsquo;&lt;/span&gt;이게&lt;span&gt; &lt;/span&gt;맞나&lt;span&gt;&amp;hellip;?&amp;rsquo; &lt;/span&gt;싶었는데&lt;span&gt; &lt;/span&gt;이젠&lt;span&gt; &lt;/span&gt;전처리&lt;span&gt; &lt;/span&gt;과정도&lt;span&gt; &lt;/span&gt;분석의&lt;span&gt; &lt;/span&gt;중요한&lt;span&gt; &lt;/span&gt;일부라는&lt;span&gt; &lt;/span&gt;걸&lt;span&gt; &lt;/span&gt;깨달아서&lt;span&gt; &lt;/span&gt;그런지&lt;span&gt; &lt;/span&gt;괜찮아졌다&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;몰랐던&lt;span&gt; &lt;/span&gt;함수도&lt;span&gt; &lt;/span&gt;이렇게&lt;span&gt; &lt;/span&gt;삽질하면서&lt;span&gt; &lt;/span&gt;하나하나&lt;span&gt; &lt;/span&gt;알아가는거지&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Databricks에서 특정 컬럼의 순서에 따라 배열을 반환하고 싶다면 SORT_ARRAY()와 COLLECT_LIST()를 활용한다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고문서&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://neon.tech/postgresql/postgresql-aggregate-functions/postgresql-array_agg&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://neon.tech/postgresql/postgresql-aggregate-functions/postgresql-array_agg&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.databricks.com/en/sql/language-manual/functions/sort_array.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.databricks.com/en/sql/language-manual/functions/sort_array.html&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;+ 혹시 이 방법 외에 더 단순하고 간단한 방법이 있다면 말씀해주시면 감사하겠습니다! &lt;/p&gt;</description>
      <category>데이터</category>
      <category>databricks</category>
      <category>Spark</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/48</guid>
      <comments>https://spaceofyujin.tistory.com/48#entry48comment</comments>
      <pubDate>Sun, 12 Jan 2025 22:41:15 +0900</pubDate>
    </item>
    <item>
      <title>(스터디) 실무로 통하는 인과추론 with 파이썬 - PART 5</title>
      <link>https://spaceofyujin.tistory.com/47</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;1306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqZpep/btsLADLAjjU/W2KncCg75aG8QuMtlL79I1/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqZpep/btsLADLAjjU/W2KncCg75aG8QuMtlL79I1/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqZpep/btsLADLAjjU/W2KncCg75aG8QuMtlL79I1/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqZpep%2FbtsLADLAjjU%2FW2KncCg75aG8QuMtlL79I1%2Ftfile.dat&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;245&quot; height=&quot;316&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;1306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[실무로 통하는 인과추론 with 파이썬]을 읽고 내용을 정리한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://spaceofyujin.tistory.com/45&quot;&gt;(스터디) 실무로 통하는 인과추론 with 파이썬 - PART 4&lt;/a&gt;에서 이어집니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;PART 5. 대안적 실험 설계&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;10장 지역 실험과 스위치백 실험&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지역 실험 &amp;amp; 스위치백 실험: 실험 대상의 수가 적을 때 대안적 실험 설계 방법&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;b&gt;통제집단합성법&lt;/b&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;장점:&amp;nbsp;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;실험&lt;span&gt; &lt;/span&gt;대상의&lt;span&gt; &lt;/span&gt;수가&lt;span&gt; &lt;/span&gt;상대적으로&lt;span&gt; &lt;/span&gt;적을&lt;span&gt; &lt;/span&gt;때&lt;span&gt; &lt;/span&gt;매우&lt;span&gt; &lt;/span&gt;유용하다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;평균을&lt;span&gt; &lt;/span&gt;잘&lt;span&gt; &lt;/span&gt;재현하는&lt;span&gt; &lt;/span&gt;실험&lt;span&gt; &lt;/span&gt;대상에&lt;span&gt; &lt;/span&gt;처치할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;이월&lt;span&gt; &lt;/span&gt;효과의&lt;span&gt; &lt;/span&gt;차수가&lt;span&gt; &lt;/span&gt;커서&lt;span&gt; &lt;/span&gt;처치효과가&lt;span&gt; &lt;/span&gt;사라지는&lt;span&gt; &lt;/span&gt;데&lt;span&gt; &lt;/span&gt;오랜&lt;span&gt; &lt;/span&gt;시간이&lt;span&gt; &lt;/span&gt;걸리는&lt;span&gt; &lt;/span&gt;경우에&lt;span&gt; &lt;/span&gt;적합하다&lt;span&gt;. &amp;rarr; 이월 효과의 차수가 작을 때는? &lt;b&gt;스위치백 실험&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&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;1354&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vukKc/btsLzEdAwsG/MOXavnNzYN0YTBlMy7DAi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vukKc/btsLzEdAwsG/MOXavnNzYN0YTBlMy7DAi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vukKc/btsLzEdAwsG/MOXavnNzYN0YTBlMy7DAi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvukKc%2FbtsLzEdAwsG%2FMOXavnNzYN0YTBlMy7DAi1%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;556&quot; height=&quot;220&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;536&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;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;f: 각 실험 대상이 전체 평균에 기여하는 가중치&lt;br /&gt;w: 가상의 실험군에 대한 가중치&lt;br /&gt;v: 가상의 대조군에 대한 가중치&lt;br /&gt;m:&amp;nbsp;실험군의&amp;nbsp;최대&amp;nbsp;수에&amp;nbsp;대한&amp;nbsp;제약조건&lt;/blockquote&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;b&gt;스위치백 실험&lt;/b&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;/li&gt;
&lt;li&gt;특징: 처치 확률과 랜덤화 지점 또는 랜덤화가 이루어지는 기간에 따라 정의된다. &amp;rarr; 이월 효과의 차수인 m이 0보다 큼을 안다면, 최적 설계는 m+1 기간마다 랜덤화하는 것&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;850&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PWMZE/btsLz5hIfuU/hD5MnSrWI9Do7dy5YkKr90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PWMZE/btsLz5hIfuU/hD5MnSrWI9Do7dy5YkKr90/img.png&quot; data-alt=&quot;n = T/m&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PWMZE/btsLz5hIfuU/hD5MnSrWI9Do7dy5YkKr90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPWMZE%2FbtsLz5hIfuU%2FhD5MnSrWI9Do7dy5YkKr90%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;558&quot; height=&quot;63&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;n = T/m&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;11장 불응과 도구변수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;불응&lt;/b&gt;: 서비스나 제품의 제공 여부를 무작위로 결정하더라도 고객이 이를 받아들이지 않는 것 &amp;rarr; 처치를 배정받은 모든 사람이 처치받지 않음을 의미&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처치 배정과 처치 적용을 분리하면 4그룹으로 나뉜다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;순응자: 자신에게 배정된 처치를 받는 사람&lt;/li&gt;
&lt;li&gt;항시 참여자: 배정과 관계없이 항상 처치 받는 사람&lt;/li&gt;
&lt;li&gt;항시 불참자: 배정과 관계없이 항상 처치받지 않는 사람&lt;/li&gt;
&lt;li&gt;반항자: 배정된 처치와 반대되는 처치를 받는 사람&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제: 각 그룹에 누가 속해있는지 알 수 없다. &amp;rarr;&amp;nbsp;&lt;b&gt;도구변수&lt;/b&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;&lt;b&gt;도구변수 Z&lt;/b&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;li&gt;처치를 거치지 않으면 결과에 영향을 미치지 않는 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;한&lt;span&gt; &lt;/span&gt;방향으로만&lt;span&gt; &lt;/span&gt;처치를&lt;span&gt; &lt;/span&gt;준다고&lt;span&gt; &lt;/span&gt;가정하면&lt;span&gt; (&lt;/span&gt;단조성&lt;span&gt; &lt;/span&gt;가정&lt;span&gt;) &lt;/span&gt;순응자에&lt;span&gt; &lt;/span&gt;대한&lt;span&gt; &lt;/span&gt;평균&lt;span&gt; &lt;/span&gt;처치효과를&lt;span&gt; &lt;/span&gt;파악할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;.&lt;/span&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;1150&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgBBfM/btsLA7TcFHP/4pFBr3ZgkLAsQC8tNk5QRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgBBfM/btsLA7TcFHP/4pFBr3ZgkLAsQC8tNk5QRK/img.png&quot; data-alt=&quot;처치 의도 효과를 순응률로 정규화하면 평균 처치효과를 파악 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgBBfM/btsLA7TcFHP/4pFBr3ZgkLAsQC8tNk5QRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgBBfM%2FbtsLA7TcFHP%2F4pFBr3ZgkLAsQC8tNk5QRK%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;557&quot; height=&quot;116&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;처치 의도 효과를 순응률로 정규화하면 평균 처치효과를 파악 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;순응률이 낮으면 Z 추정값의 분산은 OLS의 분산보다 훨씬 커질 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;ex) &lt;/span&gt;순응률&lt;span&gt; = 50%&lt;/span&gt;이면&lt;span&gt;, &lt;/span&gt;순응&lt;span&gt; &lt;/span&gt;문제가&lt;span&gt; &lt;/span&gt;없는&lt;span&gt; &lt;/span&gt;경우&lt;span&gt;(&lt;/span&gt;순응률&lt;span&gt; = 100%)&lt;/span&gt;와&lt;span&gt; &lt;/span&gt;동일한&lt;span&gt; &lt;/span&gt;표준오차를&lt;span&gt; &lt;/span&gt;얻기&lt;span&gt; &lt;/span&gt;위해서는&lt;span&gt; 4&lt;/span&gt;배&lt;span&gt; &lt;/span&gt;더&lt;span&gt; &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;표본이&lt;span&gt; &lt;/span&gt;필요&lt;/li&gt;
&lt;li&gt;&amp;rarr; &lt;span&gt;OLS&lt;/span&gt;처럼&lt;span&gt; &lt;/span&gt;결과를&lt;span&gt; &lt;/span&gt;잘&lt;span&gt; &lt;/span&gt;예측하는&lt;span&gt; &lt;/span&gt;변수를 찾아야 한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>데이터</category>
      <category>데이터분석</category>
      <category>스터디</category>
      <category>인과추론</category>
      <author>Yuniverse.</author>
      <guid isPermaLink="true">https://spaceofyujin.tistory.com/47</guid>
      <comments>https://spaceofyujin.tistory.com/47#entry47comment</comments>
      <pubDate>Sat, 28 Dec 2024 13:14:15 +0900</pubDate>
    </item>
  </channel>
</rss>