<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ah_yo_ninde_yo.log</title>
        <link>https://velog.io/</link>
        <description>서비스기획/.AI/데이터분석</description>
        <lastBuildDate>Wed, 15 Apr 2026 12:23:32 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ah_yo_ninde_yo.log</title>
            <url>https://velog.velcdn.com/images/ah_yo_ninde_yo/profile/bf9a4876-a358-4f98-9e66-8c2cc50d37e8/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ah_yo_ninde_yo.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ah_yo_ninde_yo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[추천 시스템] 시간 정보를 반영한 Temporal Bias & Latent Factor 모델
]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%9C%EA%B0%84-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EB%B0%98%EC%98%81%ED%95%9C-Temporal-Bias-Latent-Factor-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%9C%EA%B0%84-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EB%B0%98%EC%98%81%ED%95%9C-Temporal-Bias-Latent-Factor-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Wed, 15 Apr 2026 12:23:32 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 
이제 중간고사까지 시간이 얼마 없네요...</p>
<p>오늘은 추천 시스템에서 <strong>&#39;시간&#39;</strong>이라는 요소가 별점 예측에 어떤 영향을 미치는지, 
그리고 이를 지난 &quot;별점 예측(Rating Prediction) 모델&quot;을 이해한 것에서, 어떻게 반영할 수 있을지 후딱 정리해 보려 합니다. </p>
<h1 id="1-별점에-미치는-시간의-영향"><strong>1. 별점에 미치는 ‘시간’의 영향</strong></h1>
<p>우리가 별점을 매길 때, 단순히 &#39;취향&#39;만 작용할까요? 사실 <strong>시간</strong>은 생각보다 큰 변수입니다.</p>
<ul>
<li><strong>명작의 법칙</strong>: <ul>
<li>오래된 영화일수록 평점이 높은 경향이 있습니다. 시간이 흘러도 회자되어 평점이 매겨지는 영화는 대개 &#39;명작&#39;인 경우가 많기 때문이죠.</li>
</ul>
</li>
<li><strong>주기적 패턴</strong>: <ul>
<li>계절이나 요일도 영향을 미칩니다. </li>
<li>혹은, 명절 시즌이 되면 어김없이 영화에 대한 수요나 평가가 증가하기도 합니다.</li>
</ul>
</li>
<li><strong>선호도의 변화</strong>:<ul>
<li>서비스의 UI/UX 변화 (별점 부여 방식의 변경)</li>
<li>커뮤니티 내의 재평가 여론 형성</li>
<li>특정 시리즈 정주행으로 인한 팬심 상승</li>
<li>시간이 흐르며 유저가 해당 장르의 전문가가 됨</li>
</ul>
</li>
</ul>
<p>그렇다면 시간 정보가 추천 예측에 필요하다는 건 알겠고,,,</p>
<h2 id="그럼-어떻게-시간-정보를-반영할-수-있을까요">그럼, <strong>어떻게 시간 정보를 반영할 수 있을까요?</strong></h2>
<p><strong>&quot;파라미터를 시간의 함수로 표현하는 것&quot;</strong>입니다. 
즉, $t$에 따라 파라미터 값이 유동적으로 변하게 만들면 됩니다!
지난 번에 기본적인 bias 모델과 이 bias 모델에 유저와 아이템의 관계 정보도 반영한 Latent 모델을 정리했는데, 관련된 내용을 아래 글 참고!!</p>
<blockquote>
<h3 id="👉-bias-model-latent-model-이해하기">👉 Bias Model, Latent Model 이해하기</h3>
<p><a href="https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B3%84%EC%A0%90-%EC%98%88%EC%B8%A1Rating-Prediction-%EB%AA%A8%EB%8D%B8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0">https://velog.io/@ah_yo_ninde_yo/추천-시스템-별점-예측Rating-Prediction-모델-이해하기</a></p>
</blockquote>
<br>

<h1 id="2-temporal-bias-model"><strong>2. Temporal Bias Model</strong></h1>
<hr>
<p>복잡한 Latent 모델에 바로 적용하기 전, 가장 기본이 되는 <strong>Bias(편향) 모델</strong>에 시간 정보를 반영해보자!!</p>
<p>기본 Bias 모델이 아래와 같았다면,</p>
<blockquote>
<p>$$\alpha + \beta_{u} + \beta_{i}$$</p>
</blockquote>
<p>시간 정보를 파라미터로 넣어주면 아래와 같다. </p>
<blockquote>
<p>$$b_{u,i}(t) = \alpha + \beta_{u}(t) + \beta_{i}(t)$$</p>
</blockquote>
<ul>
<li><strong>$\beta_{u}(t)$ (User Bias)</strong>: 시간이 흐름에 따라 변하는 유저의 평가 경향성. (어떤 유저는 갈수록 평점이 짜질 수 있음)</li>
<li><strong>$\beta_{i}(t)$ (Item Bias)</strong>: 시간에 따른 아이템의 인기도 변화. (개봉 직후 거품이 빠지는 현상 등)</li>
</ul>
<p>이제 본격적으로 각각 User Bias와 Item Bias를 어떻게 구성할 수 있을지 알아보겠다. </p>
<p>먼저 비교적 간단한 Item Bias 부터!!</p>
<h2 id="21-item-bias-모델링"><strong>2.1 Item Bias 모델링</strong></h2>
<p>아이템의 편향은 크게 두 가지 방식으로 나뉩니다.</p>
<ul>
<li><p><strong>Binning (데이터 등분)</strong> : $$\beta_{i,\text{Bin}(t)}$$</p>
<ul>
<li>전체 시간을 일정 구간(Bin)으로 나누어 각 구간마다 독립적인 bias를 할당한다.</li>
<li>예시) 아이템 1,000개 × 30개 구간 = 30,000개 파라미터</li>
</ul>
</li>
<li><p><strong>Periodicity (주기성)</strong> : $$\beta_{i, period(t)}$$</p>
<ul>
<li>요일이나 계절 같은 주기적 특성을 반영</li>
</ul>
</li>
</ul>
<blockquote>
<p>  $$\beta_{i}(t) = \beta_{i} + \beta_{i,\text{Bin}(t)} + \beta_{i, period(t)}$$</p>
</blockquote>
<br>

<h2 id="22-user-bias-모델링"><strong>2.2 User Bias 모델링</strong></h2>
<p>유저의 시간적 편향을 반영하기 위해서는 아이템보다 고려해야 하는 게 좀 더 많다.
기본적으로 유저는 아이템보다 훨씬 &#39;변덕&#39;이 심하다. 취향이 갑자기 바뀌기도 하는 등..
따라서, 이러한 편향을 잘 반영하기 위해서는 아이템에서 등분을 나눴던 것보다 훨씬 잘게 나눠야 할 것이다. 
(⇒ 파라미터 증가)
또한, 유저 수가 아이템보다 훨씬 많아 파라미터는 더더욱 증가할 것이다.</p>
<h3 id="방법-1-drifting-dynamics-함수-활용"><strong>[방법 1] Drifting dynamics (함수 활용)</strong></h3>
<p>수식을 통해 시간에 따른 변화를 부드럽게 표현합니다.</p>
<blockquote>
<p>$$\beta_{u}^{(1)}(t) = \beta_{u} + \alpha_{u} \cdot \text{dev}_{u}(t)$$</p>
</blockquote>
<ul>
<li>$$\text{dev}_{u}(t)$$ : 기준 시점으로부터의 <strong>시간 차이</strong>를 계산하는 함수<ul>
<li>$$\text{dev}<em>{u}(t) = \text{sign}(t - t</em>{u}) \cdot |t - t_{u}|^{x}$$<ul>
<li>$x$ :  koren(논문 작성자)는 $x$를 0.4로 설정했다. (실험 결과 토대로)</li>
<li>$0.4$의 의미: (그래프를 그려보면) 시간이 지남에 따라 증가하긴 증가하는데, 증가 정도가 감소한다. 만약, $x$가 2 였으면 시간이 지남에 따라 증가 정도가 매우 가파르게 올랐을 것이다. </li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li><strong>$\alpha_{u}$</strong>: <strong>유저별 시간 변화 가중치</strong>. (양수면 갈수록 후해지고, 음수면 갈수록 짜짐)</li>
</ul>
<ul>
<li><strong>장점</strong>: 유저당 파라미터가 하나($\alpha_{u}$)만 추가되어 효율적이다. </li>
<li><strong>한계</strong>: 정해진 함수 형태(시그모이드와 유사한 형태 등)로만 표현 가능하며, 갑작스러운 변화를 감지하지 못한다.</li>
</ul>
<h3 id="방법-2-spline-interpolation-기법">[방법 2] Spline (Interpolation 기법)</h3>
<p>Drifting dynamics의 부족한 표현력을 보정하기 위한 방법이다. 
유저마다 Control Points를 두어 시간에 따른 선호도 곡선을 더 유연하게 반영할 수 있다.</p>
<ul>
<li><p>핵심: 유저별 별점 개수($n_u$)에 따라 Control Point의 개수를 다르게 설정한다. </p>
<ul>
<li>(Koren은 $n_u^{0.25}$를 권장)</li>
<li>e.g.) 어떤 유저가 16개의 평점을 남겼다면? → 해당 유저의 Control Point는 $16^{0.25} = 2$개가 된다.</li>
</ul>
</li>
<li><p><strong>장점</strong>: Drifting dynamics보다 훨씬 정교한 선호도 변화 묘사가 가능하다.</p>
</li>
<li><p><strong>한계</strong>: 파라미터 수가 늘어나며, 특정 날의 기분 같은 &#39;갑작스러운 변화&#39;는 여전히 감지하기 어렵다.</p>
</li>
</ul>
<h3 id="per-day-user-bias-일별-편향">Per-day User Bias (일별 편향)</h3>
<p>기존 방법만으로는 특정 날에만 발생하는 편향을 반영하기엔 한계가 있었다.
따라서, 유저의 &#39;그날의 기분&#39;을 반영하기 위해 아예 날짜별로 파라미터를 둔다.</p>
<p>그런데, 이때 날마다의 기분을 파라미터로 표현하려 한다면, 아래와 같은 문제가 발생합니다.</p>
<ul>
<li><strong>문제</strong>: 10만 유저 × 6년 치 데이터를 다 만들면 파라미터가 2억 개? 😱</li>
</ul>
<p>따라서 아래와 같은 방법을 통해 해결합니다. </p>
<ul>
<li><strong>해결</strong>: 실제 유저가 별점을 남긴 날(평균 40일)에 대해서만 파라미터를 생성하여 400만 개 수준으로 압축!</li>
</ul>
<p>즉, <code>Per-day User Bias</code>는 테스트 시점에서 &#39;값을 더해주는 용도&#39;가 아니라, <strong>학습 데이터</strong>에 포함된 <strong>노이즈를 효과적으로 격리</strong>한다.</p>
<h2 id="23-아이템-편향의-확장-scaling-factor-c_ut">2.3 아이템 편향의 확장: Scaling Factor $c_u(t)$</h2>
<p>지금까지는 유저와 아이템의 편향을 각각 구해서 단순히 &#39;더해&#39;주었다.
하지만 우리가 latent 모델에서 아이템과 유저의 관계에 대한 정보를 반영해 준 것처럼, 
실제 현실에서는 Item bias가 영향에 미치는 정도가 시간과 유저마다 다름.</p>
<p>Item bias에 per day bias 더해 줄 수 있다! 
심지어 같은 사람이라도 &#39;시기와 상황&#39;에 따라 대중성에 영향을 받는 정도가 유동적으로 변할 수 있기 때문에, 이러한 현실적인 요소를 수식에 반영하기 위해 도입된 것이 바로 Scaling Factor, $c_u(t)$ 이다.</p>
<blockquote>
<p>$$\alpha + \underbrace{\beta_u + \alpha_u \cdot \text{dev}<em>u(t) + \beta</em>{u,t}}<em>{\text{User Bias}(t)} + \underbrace{(\beta_i + \beta</em>{i,\text{Bin}(t)}) }_{\text{Item Bias}(t)}$$</p>
</blockquote>
<br>

<h2 id="✅-최종-temporal-bias-model-수식">✅ 최종 Temporal Bias Model 수식</h2>
<p>위 내용들을 모두 대입해서 쓰면 다음과 아래와 같다.</p>
<blockquote>
<p>$$\alpha + \underbrace{\beta_u + \alpha_u \cdot \text{dev}<em>u(t) + \beta</em>{u,t}}<em>{\text{User Bias}(t)} + \underbrace{(\beta_i + \beta</em>{i,\text{Bin}(t)}) }_{\text{Item Bias}(t)}$$</p>
</blockquote>
<ul>
<li><strong>$\alpha$ (Global Offset)</strong><ul>
<li>데이터셋 전체의 평균 평점 (모든 예측의 베이스라인).</li>
</ul>
</li>
<li><strong>$\beta_u$ (User Bias)</strong><ul>
<li>유저 고유의 성향 (기본적으로 점수를 후하게 주는지, 짜게 주는지).</li>
</ul>
</li>
<li><strong>$\alpha_u \cdot \text{dev}_u(t)$ (Gradual Deviation)</strong><ul>
<li>시간이 흐름에 따라 서서히 변하는 유저의 취향 변화(Drift).</li>
</ul>
</li>
<li><strong>$\beta_{u,t}$ (Single-day Dynamics)</strong><ul>
<li><em>특정 날짜($t$)*</em>에 유독 평점이 튀는 현상을 반영. (예: 기분이 매우 좋거나 나쁜 날의 변덕)</li>
</ul>
</li>
<li><strong>$\beta_i$ (Item Bias)</strong><ul>
<li>아이템이 가진 고유의 매력도나 기본 인기도.</li>
</ul>
</li>
<li><strong>$\beta_{i,\text{Bin}(t)}$ (Gradual Item Bias Drift)</strong><ul>
<li>시간이 지나면서 변하는 아이템의 인기나 가치 (예: 개봉 직후 효과 소멸 등).<br>

</li>
</ul>
</li>
</ul>
<h1 id="3-temporal-latent-factor-models"><strong>3. Temporal Latent Factor Models</strong></h1>
<hr>
<p>이번엔 Bias를 넘어 유저와 아이템의 관계를 나타내는 <strong>Latent Factor(잠재 요인)</strong>에도 시간을 반영해보자.</p>
<h2 id="31-gamma_u-bias-모델링">3.1 $\gamma_u$ Bias 모델링</h2>
<blockquote>
<p>$$\alpha + \beta_u(t) + \beta_i(t) + \gamma_i^T \gamma_u(t)$$</p>
</blockquote>
<p>이 때, $\gamma_{u}$는 이렇게 표현할 수 있다. </p>
<blockquote>
<p>$\gamma_{u}   \rightarrow    \gamma_{u,k}(t) = \gamma_{u,k} + \alpha_{u,k} \cdot \text{dev}<em>u(t) + \gamma</em>{u,k,t}$</p>
</blockquote>
<ul>
<li><p>$k$ : rank 중에 한 개 </p>
</li>
<li><p><strong>왜 $\gamma_i$ (아이템 벡터)에는 시간 정보를 안 넣나요?</strong></p>
<ul>
<li>아이템(영화)의 고유 속성은 잘 변하지 않기 때문이다.</li>
<li>아이템의 인기도 변화는 <strong>$\beta_i(t)$ (Bias)</strong>에서 이미 처리하므로, 벡터까지 동적으로 만들 필요가 없을 것이다. <h2 id="✅-최종-temporal-latent-factor-model-수식">✅ 최종 Temporal Latent Factor Model 수식</h2>
</li>
</ul>
</li>
</ul>
<p>식을 풀어서 쓰면 다음과 같은 거대한 형태가 된다.</p>
<blockquote>
<p>$$\alpha + \underbrace{\beta_u + \alpha_u \cdot \text{dev}<em>u(t) + \beta</em>{u,t}}<em>{\text{User Bias}(t)} + \underbrace{(\beta_i + \beta</em>{i,\text{Bin}(t)}) \cdot c_u(t)}<em>{\text{Item Bias}(t)} + \gamma_i^T \underbrace{\left( \gamma_u + \alpha_u^{vec} \cdot \text{dev}_u(t) + \gamma</em>{u,t} \right)}_{\text{User Latent Factor}(t)}$$</p>
</blockquote>
<br>

<h1 id="4-교훈-및-실무-한계점"><strong>4. 교훈 및 실무 한계점</strong></h1>
<hr>
<ol>
<li><em>*Lessons</em></li>
</ol>
<ul>
<li>무작정 딥러닝 모델을 깊게 쌓는 것보다, 
데이터의 도메인 특성(시간)을 수식에 정교하게 반영하는 것이 성능 향상에 매우 효과적이다.</li>
</ul>
<ol start="2">
<li><strong>Limitations</strong>:<ul>
<li><strong>Cold Start</strong>: 신규 유저에게는 적용하기 어렵다.</li>
<li><strong>Data Density</strong>: Per-day Bias는 같은 날 여러 별점이 쌓여야 잘 학습된다. (데이터가 희소하면 &#39;기분 탓&#39;인지 &#39;영화 탓&#39;인지 알 수 없음)</li>
<li><strong>도메인 특성</strong>: 영화처럼 단발성 소비가 아닌, 반복 구매가 잦은 이커머스에는 그대로 적용하기엔 한계가 있습니다.</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[추천 시스템] 별점 예측(Rating Prediction) 모델 이해하기
]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B3%84%EC%A0%90-%EC%98%88%EC%B8%A1Rating-Prediction-%EB%AA%A8%EB%8D%B8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B3%84%EC%A0%90-%EC%98%88%EC%B8%A1Rating-Prediction-%EB%AA%A8%EB%8D%B8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 05 Apr 2026 06:08:00 GMT</pubDate>
            <description><![CDATA[<p>이제 과제들이 밀려오고 있어서 velog review가 좀 늦었슴니다.. (보시는 분이 있을진 몰겠지만 ㅎㅅㅎ)</p>
<p>추천시스템에서 별점을 예측하는 방법은 크게 두 가지로 나뉩니다.</p>
<ol>
<li><strong>유사도 기반 (Memory-based CF)</strong>: 원본 데이터를 매번 참조하여 유사도를 계산</li>
<li><strong>모델 기반 (Model-based CF)</strong>: 데이터의 패턴을 수학적 파라미터로 학습
그럼 하나씩 살펴볼까용~~<br>

</li>
</ol>
<h1 id="1-유사도-기반-rating-prediction-memory-based-cf">1. 유사도 기반 Rating Prediction (Memory-based CF)</h1>
</h1> 
= Similarity-based Rating prediction

<hr>
<ul>
<li>가장 직관적인 방법에 해당합니다!</li>
<li><code>item 들 간의 유사도</code> 혹은 <code>user들 간의 유사도</code>를 활용해 user가 item에 내릴 별점($$r$$)을 <strong>가중평균</strong>으로 예측합니다.<ul>
<li>유사도 지표로 <strong>피어슨 상관계수(Pearson Correlation)</strong>를 사용하고, 그 결과값을 가중평균의 가중치로 사용합니다.</li>
<li><strong>분자 ($\sum S \cdot R$)</strong>
단순히 별점을 더하는 게 아니라, &#39;나와 얼마나 닮았나($s_{ij}$)&#39;를 곱해서 더합니다. 유사도가 높을 수록, 별점이 차지하는 비중(가중치)이 커집니다.</li>
<li><strong>분모 ($\sum |S|$)</strong>
왜 유사도의 합으로 나누냐면, 결과값의 단위(Scale)를 &#39;별점&#39;으로 되돌리기 위해서! 
유사도를 곱해서 커진 값을 다시 유사도들의 총합으로 나누어줌으로써, 최종 예측값이 원래의 별점 범위(e.g. 1~5점) 안에 들어오게 만드는 &#39;정규화&#39; 과정입니다.<br>

</li>
</ul>
</li>
</ul>
<blockquote>
<h2 id="r--fracsum-textsimilarity-times-textratingsum-textsimilarity">$$r = \frac{\sum (\text{Similarity} \times \text{Rating})}{\sum |\text{Similarity}|}$$</h2>
</blockquote>
<ul>
<li><strong>$s_{ij}$</strong>: Item/혹은 User 사이 간의 유사도 (중 높은 N개)</li>
<li><strong>$r_{xj}$</strong>: 사용자 $x$가 기존에 아이템 $j$에 내린 점수</li>
<li><strong>$N$</strong>: 사용자 $x$가 평가한 아이템 집합</li>
</ul>
<blockquote>
<p>💡 <strong>Tip</strong> 
수식에서는 분모의 유사도($s_{ij}$)에 절댓값을 씌우라고 되어 있지만, 실제 구현(Programming) 시에는 0 미만의 값은 모두 <strong>0</strong>으로 치부하는 것이 정확도가 더 높다고 합니다.</p>
</blockquote>
<h4 id="유사도가-음수일-때-0으로-처리하는-이유">유사도가 음수일 때 &#39;0&#39;으로 처리하는 이유?</h4>
<blockquote>
<ol>
<li>성향 반대(Negative Correlation)의 불확실성
피어슨 상관계수에서 음수는 &#39;정반대 취향&#39;을 의미합니다. 하지만 추천 시스템처럼 데이터가 희소(Sparse)한 환경에서는 단순히 몇 개의 아이템에 대한 평가가 달랐을 뿐인데도 매우 큰 음수 유사도가 도출될 수 있습니다. 이를 &#39;확신&#39;으로 받아들여 예측에 반영하면 오히려 정확도가 떨어집니다.</li>
<li>Top-K Selection의 신뢰도 확보
유사도 순으로 상위 $N$개를 정렬(Sorting)할 때, 신뢰도가 낮은 음수값들이 상위에 노출되는 것을 막아야 합니다. 0으로 처리함으로써 오직 <strong>&#39;나와 조금이라도 닮은&#39;</strong> 데이터들만 예측 계산에 참여하게 하여 노이즈를 제거하는 것입니다.</li>
</ol>
<p><strong>⇒ 결론:</strong> 음수 유사도는 정보로서의 가치보다 <strong>노이즈</strong>로서의 성격이 강하므로, 실무에서는 이를 0으로 밀어버리는(Thresholding) 것이 일반적입니다.</p>
</blockquote>
<h2 id="11-item-item-collaborative-filtering">1.1 Item-Item Collaborative Filtering</h2>
<ul>
<li><code>아이템 간의 유사도</code>를 계산하여 user $x$가 item $i$에 내릴 별점($$r_{xi}$$)을 가중평균으로 예측합니다.</li>
</ul>
<blockquote>
<h2 id="r_xi--fracsum_j-in-n-s_ij-times-r_xjsum_j-in-n-s_ij">$$r_{xi} = \frac{\sum_{j \in N} s_{ij} \times r_{xj}}{\sum_{j \in N} |s_{ij}|}$$</h2>
</blockquote>
<ul>
<li><strong>$s_{ij}$</strong>: <strong>아이템 $i$와 아이템 $j$</strong> 사이의 유사도</li>
<li><strong>$r_{xj}$</strong>: 사용자 $x$가 기존에 아이템 $j$에 내린 점수</li>
<li><strong>$N$</strong>: 사용자 $x$가 평가한 아이템 집합</li>
</ul>
<blockquote>
<p><strong>$S_{ij}$(유사도)를 구하는 공식</strong>: 피어슨 상관계수 </p>
</blockquote>
<p>$$s_{ij} = \frac{\sum_{u \in U} (r_{ui} - \bar{r}<em>i)(r</em>{uj} - \bar{r}<em>j)}{\sqrt{\sum</em>{u \in U} (r_{ui} - \bar{r}<em>i)^2} \sqrt{\sum</em>{u \in U} (r_{uj} - \bar{r}_j)^2}}$$</p>
<blockquote>
<ul>
<li><em>$\bar{r}$ : 해당 아이템이 받은 모든 별점의 평균</em></li>
<li><em>분자 : 아이템 $i와 j$ 모두 평가한 <strong>공통 유저</strong>들의 편차 곱 합계</em></li>
<li><em>분모_왼쪽 루트 : 아이템 $i$를 평가한 모든 유저의 편차 제곱합</em></li>
<li><em>분모_오른쪽 루트: 아이템 $j$를 평가한 모든 유저의 편차 제곱합</em></li>
</ul>
</blockquote>
<h3 id="🔵-예제-item-item-cf---아이템-b와-아이템들-간의-유사도-s_bj">🔵 예제 (Item-Item CF) - 아이템 $b$와 아이템들 간의 유사도 (<strong>$s_{bj}$</strong>)</h3>
<p><em>출처: 국민대학교 박하명 교수님</em></p>
<ul>
<li><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/78e727aa-1f27-439f-aa74-aa65ba2fea76/image.png" alt=""> <h3 id="1-사전-계산">1. 사전 계산</h3>
</li>
<li>$\bar{r}$ : 해당 아이템이 받은 모든 별점의 평균<ul>
<li>$\bar{r}_a$: $(4+5+5+3+1)/5 =$ 3.6</li>
<li>$\bar{r}_b$: $(3+2+4+4+5)/5 =$ 3.6</li>
<li>$\bar{r}_c$: $(5+3+4+3+2+1+4+2)/8 =$ 3.0</li>
<li>$\bar{r}_d$: $(2+4+5+4+2)/5 =$ 3.4</li>
<li>$\bar{r}_e$: $(5+3+2+4+3+4)/6 =$ 3.5</li>
<li>$\bar{r}_f$: $(4+2+3+3+1)/5 =$ 2.6</li>
</ul>
</li>
<li>각 아이템의 분모 항에 들어갈 <strong>편차 제곱합의 루트</strong>($\sqrt{\sum (r_{ui} - \bar{r}_i)^2}$)<ul>
<li>아이템 a ($\bar{r}_a = 3.6$)
: $\sqrt{(4-3.6)^2 + (5-3.6)^2 + (5-3.6)^2 + (3-3.6)^2 + (1-3.6)^2} = \sqrt{11.2} \approx \mathbf{3.346}$</li>
<li><span style="color:DodgerBlue"><strong>아이템 b</strong> ($\bar{r}_b = 3.6$)</span>  : $\sqrt{(3-3.6)^2 + (2-3.6)^2 + (4-3.6)^2 + (4-3.6)^2 + (5-3.6)^2} = \sqrt{5.2}$ <span style="color:DodgerBlue">$\approx\mathbf{2.280}$</span>  </li>
<li>아이템 c ($\bar{r}_c = 3.0$)
: $\sqrt{(5-3)^2 + (3-3)^2 + (4-3)^2 + (3-3)^2 + (2-3)^2 + (1-3)^2 + (4-3)^2 + (2-3)^2} = \sqrt{12.0} \approx \mathbf{3.464}$</li>
<li>아이템 d ($\bar{r}_d = 3.4$)
: $\sqrt{(2-3.4)^2 + (4-3.4)^2 + (5-3.4)^2 + (4-3.4)^2 + (2-3.4)^2} = \sqrt{7.2} \approx \mathbf{2.683}$</li>
<li>아이템 e ($\bar{r}_e = 3.5$)
: $\sqrt{(5-3.5)^2 + (3-3.5)^2 + (2-3.5)^2 + (4-3.5)^2 + (3-3.5)^2 + (4-3.5)^2} = \sqrt{5.5} \approx \mathbf{2.345}$</li>
<li>아이템 f ($\bar{r}_f = 2.6$)
: $\sqrt{(4-2.6)^2 + (2-2.6)^2 + (3-2.6)^2 + (3-2.6)^2 + (1-2.6)^2} = \sqrt{5.2} \approx \mathbf{2.280}$<h3 id="2-아이템-b와-a-sim-f-각각의-유사도-도출-과정">2. 아이템 $b$와 $a \sim f$ 각각의 유사도 도출 과정</h3>
</li>
</ul>
</li>
</ul>
<h3 id="①-simb-a---011">① $sim(b, a) = -0.11$</h3>
<ul>
<li>분자 계산 : <ul>
<li>공통 유저 : <strong>유저 $J$</strong><ul>
<li>유저 $J$: $(5 - 3.6) \times (3 - 3.6) = 1.4 \times (-0.6) = -0.84$</li>
</ul>
</li>
</ul>
</li>
<li>분모 계산:<ul>
<li>아이템 $b$를 본 5명의 편차 제곱합 : $\sqrt{5.2} \approx \mathbf{2.28}$</li>
<li>아이템 $a$를 본 5명의 편차 제곱합 : $\sqrt{11.2} \approx \mathbf{3.35}$</li>
</ul>
</li>
<li>최종 결과 (<strong>$S_{ba}$</strong>) $= -0.84 / (2.28  \times 3.35) = -0.84 / 7.638 \approx \mathbf{-0.11}$</li>
</ul>
<h3 id="②-simb-b--1">② $sim(b, b) = 1$</h3>
<ul>
<li>자기 자신과의 비교이므로 모든 데이터가 완벽히 일치합니다. 
따라서 상관계수는 항상 <strong>$1$</strong>이 됩니다.</li>
</ul>
<h3 id="③-simb-c---010">③ $sim(b, c) = -0.10$</h3>
<ul>
<li>분자 계산 : <ul>
<li>공통 유저 : <strong>유저 $C, F, I$</strong><ul>
<li>유저 $C$: $(2-3.6) \times (3-3.0) = 0$</li>
<li>유저 $F$: $(4-3.6) \times (3-3.0) = 0$</li>
<li>유저 $I$: $(4-3.6) \times (1-3.0) = 0.4 \times -2.0 = -0.8$
$\rightarrow 0 + 0 + (-0.8) =-0.8$</li>
</ul>
</li>
</ul>
</li>
<li>분모 계산:<ul>
<li>아이템 $b$를 본 5명의 편차 제곱합 : $\sqrt{5.2} \approx \mathbf{2.28}$</li>
<li>아이템 $c$를 본 8명의 편차 제곱합 : $\sqrt{12.0} \approx \mathbf{3.46}$</li>
</ul>
</li>
<li>최종 결과 (<strong>$S_{bc}$</strong>) $= -0.8 / (2.28 \times 3.46) = -0.8 / 7.888799 \approx \mathbf{-0.10}$</li>
</ul>
<h3 id="④-simb-d--014">④ $sim(b, d) = 0.14$</h3>
<ul>
<li>분자 계산 : <ul>
<li>공통 유저 : *<em>유저 $J$ *</em><ul>
<li>유저 $J$: $(5 - 3.6) \times (4 - 3.4) = 1.4 \times 0.6 = \mathbf{0.84}$ </li>
</ul>
</li>
</ul>
</li>
<li>분모 계산:<ul>
<li>아이템 $b$를 본 5명의 편차 제곱합 : $\sqrt{5.2} \approx \mathbf{2.28}$</li>
<li>아이템 $d$를 본 5명의 편차 제곱합 :  $\sqrt{7.2} \approx \mathbf{2.683}$</li>
</ul>
</li>
<li>최종 결과 (<strong>$S_{bd}$</strong>) $= 0.84 / (2.28 \times 2.68) = 0.8 / 6.1104 \approx \mathbf{0.14}$</li>
</ul>
<h3 id="⑤-simb-e---007">⑤ $sim(b, e) = -0.07$</h3>
<ul>
<li>분자 계산 : <ul>
<li>공통 유저 : *<em>유저 $A, I, J$ *</em><ul>
<li>유저 $A$: $(3 - 3.6) \times (5 - 3.5) \approx -0.9$ </li>
<li>유저 $I$: $(4 - 3.6) \times (3 - 3.5) = -0.2$ </li>
<li>유저 $J$: $(5 - 3.6) \times (4 - 3.5) = 0.7$ 
$\rightarrow (-0.9) + (-0.2) + 0.7 = \mathbf{-0.4}$</li>
</ul>
</li>
</ul>
</li>
<li>분모 계산:<ul>
<li>아이템 $b$를 본 5명의 편차 제곱합 : $\sqrt{5.2} \approx \mathbf{2.28}$</li>
<li>아이템 $e$를 본 6명의 편차 제곱합 : $\sqrt{5.5} \approx \mathbf{2.34}$</li>
</ul>
</li>
<li>최종 결과 ($S_{be}$) $= -0.4 / (2.28 \times 2.34) \approx -0.4 / 5.335199
\approx \mathbf{-0.07}$</li>
</ul>
<h3 id="⑥-simb-f--0108">⑥ $sim(b, f) = 0.108$</h3>
<ul>
<li>분자 계산 : <ul>
<li>공통 유저 : *<em>유저 $J$ *</em><ul>
<li>유저 $J$ : $(5 - 3.6) \times (3 - 2.6) = 1.4 \times 0.4 \approx 0.5599$ </li>
</ul>
</li>
</ul>
</li>
<li>분모 계산:<ul>
<li>아이템 $b$를 본 5명의 편차 제곱합 : $\sqrt{5.2} \approx \mathbf{2.28}$</li>
<li>아이템 $f$를 본 5명의 편차 제곱합 : $\sqrt{5.2} \approx \mathbf{2.28}$</li>
</ul>
</li>
<li>최종 결과 ($S_{be}$) $= 0.5599 / (2.28 \times 2.28) \approx 0.5599 / 5.198399 \approx \mathbf{0.108}$</li>
</ul>
<h3 id="🟪-python-구현-코드">🟪 Python 구현 코드</h3>
<pre><code class="language-python">import pandas as pd
import numpy as np

# 1. 데이터 정의: 행은 아이템(a~f), 열은 유저(A~L)
ratings = {
    &#39;a&#39;: {&#39;B&#39;: 4, &#39;D&#39;: 5, &#39;G&#39;: 5, &#39;J&#39;: 3, &#39;L&#39;: 1},
    &#39;b&#39;: {&#39;A&#39;: 3, &#39;C&#39;: 2, &#39;F&#39;: 4, &#39;I&#39;: 4, &#39;J&#39;: 5},
    &#39;c&#39;: {&#39;B&#39;: 5, &#39;C&#39;: 3, &#39;D&#39;: 4, &#39;F&#39;: 3, &#39;H&#39;: 2, &#39;I&#39;: 1, &#39;K&#39;: 4, &#39;L&#39;: 2},
    &#39;d&#39;: {&#39;B&#39;: 2, &#39;E&#39;: 4, &#39;H&#39;: 5, &#39;J&#39;: 4, &#39;K&#39;: 2},
    &#39;e&#39;: {&#39;A&#39;: 5, &#39;B&#39;: 3, &#39;G&#39;: 2, &#39;H&#39;: 4, &#39;I&#39;: 3, &#39;J&#39;: 4},
    &#39;f&#39;: {&#39;B&#39;: 4, &#39;E&#39;: 2, &#39;H&#39;: 3, &#39;J&#39;: 3, &#39;L&#39;: 1}
}
df = pd.DataFrame(ratings).T # 행/열 전환하여 아이템을 행으로 설정

# 2. 사전 계산 (Pre-calculation)
### 아이템별 평균 평점 계산
row_means = df.mean(axis=1)

### 모든 아이템의 에너지(편차 제곱합 루트) 미리 구하기
item_norms = {}
for idx in df.index:
    # 각 점수에서 평균을 뺀 편차(deviation) 구하기
    dev = df.loc[idx] - row_means[idx]
    # 편차 제곱합의 루트 계산 (결측치는 제외)
    item_norms[idx] = np.sqrt((dev.dropna()**2).sum())

# 3. 기준 아이템(b)와의 유사도 계산
### 기준값 고정 (루프 밖에서 선언하여 효율성 증대)
target = &#39;b&#39;
results = {}

r_target = df.loc[target]
mean_target = row_means[target]
norm_target = item_norms[target]

### 유사도 계산
for other in df.index:
    r_other = df.loc[other]
    mean_other = row_means[other]
    norm_other = item_norms[other]

    # 분자: 공통 유저(Common Users)의 편차 곱 합산
    common_idx = r_target.notnull() &amp; r_other.notnull()
    dev_target = r_target[common_idx] - mean_target
    dev_other = r_other[common_idx] - mean_other
    numerator = (dev_target * dev_other).sum()

    # 분모: 미리 계산된 두 아이템의 에너지를 곱함
    denominator = norm_target * norm_other

    # 최종 유사도 계산
    similarity = numerator / denominator if denominator != 0 else 0
    results[other] = round(similarity, 4)

print(&quot;아이템 b 기준 유사도 결과:&quot;)
print(results)</code></pre>
<hr>
<ul>
<li><p><strong>Q1. 아이템 B에 대한 유저 H의 별점 예측</strong> ($$r_{HB}$$)</p>
<ul>
<li><strong>선정 아이템</strong> : $d$ (유사도 0.1373), $f$ (유사도 0.1077)</li>
<li><strong>유저 H의 해당 아이템 평점</strong> : $r_{Hd} = 5$, $r_{Hf} = 3$</li>
<li><strong>계산 과정</strong> :  $$\frac{(5 \times 0.1373) + (3 \times 0.1077)}{0.1373 + 0.1077} = \frac{0.6865 + 0.3231}{0.2450} \approx \mathbf{4.12}$$</li>
</ul>
<p>$\rightarrow$ <strong>결과</strong>: 유저 H는 아이템 b에 약 <strong>4.12점</strong>을 줄 것으로 예측됩니다.</p>
<hr>
</li>
<li><p><strong>Q2. 아이템 B에 대한 유저 B의 별점 예측</strong> ($r_{Bb}$)</p>
<ul>
<li><strong>선정 아이템</strong> : $d$ (유사도 0.1373), $f$ (유사도 0.1077)</li>
<li><strong>유저 B의 해당 아이템 평점</strong> : $r_{Bd} = 2$, $r_{Bf} = 4$</li>
<li><strong>계산 과정</strong> : $$\frac{(2 \times 0.1373) + (4 \times 0.1077)}{0.1373 + 0.1077} = \frac{0.2746 + 0.4308}{0.2450} \approx \mathbf{2.88}$$</li>
</ul>
<p>$\rightarrow$ <strong>결과</strong>: 유저 B는 아이템 b에 약 <strong>2.88점</strong>을 줄 것으로 예측됩니다.</p>
</li>
</ul>
<h2 id="12-user-item-collaborative-filtering">1.2 User-Item Collaborative Filtering</h2>
<ul>
<li><code>유저 간의 유사도</code>를 계산하여 user $x$가 item $i$에 내릴 별점을 가중평균으로 예측합니다.</li>
</ul>
<blockquote>
<h2 id="r_xifracsum_yin-ns_xytimes-r_yisum_yin-ns_xy">$$r_{xi}=\frac{\sum_{y\in N}s_{xy}\times r_{yi}}{\sum_{y\in N}|s_{xy}|}$$</h2>
</blockquote>
<ul>
<li><strong>$s_{xy}$</strong>: <strong>유저 $x$와 유저 $y$</strong>사이의 유사도 </li>
<li><strong>$r_{yi}$</strong>: 유저 $y$가 기존에 아이템 $j$에 내린 점수</li>
<li><strong>$N$</strong>: 유저 $x$와 유사한 유저들의 집합 (아이템 $i$를 평가한 유저들 중 상위 $K$명)</li>
</ul>
<h2 id="13-특징-및-한계">1.3 특징 및 한계</h2>
<ul>
<li><p><strong>Item-Item vs User-User:</strong></p>
<ul>
<li>유저는 주관적이고 변동성이 크지만, 아이템은 속성이 안정적이어서 <strong>Item-Item 방식이 더 정확</strong>합니다. </li>
</ul>
</li>
<li><p><strong>Lazy Learning:</strong> </p>
<ul>
<li>유사도 기반 Rating Prediction은 Lazy Learning에 해당합니다.</li>
<li>미리 학습하지 않고, 추천 요청이 들어온 <strong>그 순간</strong>에 모든 유사도를 계산한다는 의미입니다.</li>
<li>따라서, 데이터가 커질수록 실시간 연산량이 급증하여 비효율적입니다.<br>


</li>
</ul>
</li>
</ul>
<h1 id="2-모델-기반-rating-prediction">2. 모델 기반 Rating Prediction</h1>
<hr>
<ul>
<li>수학적 모델(함수)을 학습하여 효율성과 정확도를 높이는 방식입니다.</li>
<li>Lazy Learning 방법의 비효율을 해결하기 위한 접근 방법입니다.</li>
</ul>
<h1 id="1️⃣-가장-단순한-모델-mean-model">1️⃣ 가장 단순한 모델 (Mean Model)</h1>
<hr>
<p>가장 단순한 모델?의 예측 함수는 다음과 같이 정의됩니다.</p>
<h2 id="11-가장-단순한-모델의-구조">1.1 가장 단순한 모델의 구조</h2>
<blockquote>
<h3 id="fu-i--alpha">$$f(u, i) = \alpha$$</h3>
</blockquote>
<ul>
<li>input, output 상관없이 특정값을 반환하는 함수입니다,</li>
<li>이 목적함수를 최소화 하는 $\alpha$를 찾으면, 결국 평균(mean)을 의미하게 될 것d입니다.</li>
<li><strong>왜 평균인가?</strong> 
오차(MSE)를 최소화하는 지점을 미분으로 찾으면, 그 값은 항상 데이터의 <strong>평균</strong>에 수렴하기 때문입니다. 
(mse를 가장 줄이는 것은 평균)
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/265e15c3-46db-4eb6-8616-48f6ac781bcf/image.png" alt=""></li>
</ul>
<br>

<h1 id="2️⃣-bias-model">2️⃣ Bias Model</h1>
<hr>
<p>단순히 유사도만 보는 것이 아니라, 유저와 아이템의 고유한 성향(편향)을 수학적으로 모델링합니다.</p>
<ul>
<li>유저와 아이템의 고유한 성향 반영이 필요한 경우 예시<ul>
<li>User Bias: 평소에 모든 영화에 1점만 주는 &#39;박한 사람&#39; vs 5점만 주는 &#39;후한 사람&#39;</li>
<li>Item Bias: &lt;왕과 사는 남자&gt;처럼 누구나 좋아해서 점수가 높은 영화 vs 호불호가 갈리는 영화</li>
</ul>
</li>
</ul>
<h2 id="21-bias-모델-구조">2.1 Bias 모델 구조</h2>
<p>Bias 모델의 예측 함수는 다음과 같이 정의됩니다.</p>
<blockquote>
<h3 id="fu-i--alpha--beta_u--beta_i">$$f(u, i) = \alpha + \beta_u + \beta_i$$</h3>
<p>목적함수 구성 요소</p>
</blockquote>
<ol>
<li><strong>$\alpha$ (Global Bias)</strong>: 전체 시스템의 평균 별점</li>
<li><strong>$\beta_u$ (User Bias)</strong>: 사용자의 성향 (평점을 후하게 주는지, 박하게 주는지)</li>
<li><strong>$\beta_i$ (Item Bias)</strong>: 아이템의 성향 (대체로 높은 점수를 받는지, 낮은지)</li>
</ol>
<h2 id="22-bias-모델의-목적함수-규제항의-필요성">2.2 Bias 모델의 목적함수 (규제항의 필요성)</h2>
<p>모델은 실제값($R_{ui}$)과 예측값 사이의 오차를 줄이려 노력합니다. 하지만 데이터가 부족할 때 모델이 특정 편향을 무리하게 키우는 과적합이 발생하므로, 이를 방지할 규제항(Regularization)이 필수적입니다.</p>
<blockquote>
<h3 id="arg-min_alpha-beta-sum_ui-alpha--beta_u--beta_i---r_ui2--lambda-sum_u-beta_u2--sum_i-beta_i2">$$\arg \min_{\alpha, \beta} \sum_{u,i} (\alpha + \beta_u + \beta_i - R_{u,i})^2 + \lambda [\sum_u \beta_u^2 + \sum_i \beta_i^2]$$</h3>
<p>이 식은 크게 두 부분으로 나누어 볼 수 있습니다.</p>
</blockquote>
<h4 id="a-오차-제곱합-sum-of-squared-errors--sum_ui-underbracealpha--beta_u--beta_itext예측값---underbracerui_text실제값2"><strong>A. 오차 제곱합 (Sum of Squared Errors)</strong> : $$\sum_{u,i} (\underbrace{\alpha + \beta_u + \beta_i}<em>{\text{예측값}} - \underbrace{R</em>{u,i}}_{\text{실제값}})^2$$</h4>
<p>⇒ 의미: &quot;내가 예측한 점수와 실제 유저가 준 점수가 얼마나 다른가?&quot;를 잽니다.
이 값이 작을수록 실제 데이터와 잘 맞는 모델이 됩니다.</p>
<h4 id="b-규제-항-regularization-term--lambda-sum_u-beta_u2--sum_i-beta_i2"><strong>B. 규제 항 (Regularization Term)</strong> : $$\lambda [\sum_u \beta_u^2 + \sum_i \beta_i^2]$$</h4>
<p>⇒ 의미: &quot;모델이 너무 복잡해지거나 특정 유저/아이템에 과하게 맞춰지지(Overfitting) 마라!&quot;라고 브레이크를 거는 장치입니다.</p>
<ul>
<li>$\lambda$ (람다): 규제의 강도를 조절합니다. 람다가 클수록 모델은 안전하고 보수적으로 변합니다.</li>
</ul>
<h4 id="💡-왜-규제가-필요한가">💡 왜 규제가 필요한가?</h4>
<p>모델은 가장 안전한 <strong>전체 평균(α)</strong>에서 출발합니다. 하지만 오직 현재의 오차를 0으로 만드는 데만 집착하는 모델은 다음과 같은 극단적인 선택을 합니다.</p>
<ul>
<li>실제가 평균보다 클 때 ($R_{ui}&gt;α$): 오차를 없애려고 β를 양수(+) 방향으로 깊숙이 보냅니다. (예: $β_u =+2.0$)</li>
<li>실제가 평균보다 작을 때 ($R_{ui} &lt;α$): 오차를 없애려고 β를 음수(-) 방향으로 깊숙이 보냅니다. (예: $β_u =−2.0$)</li>
</ul>
<p>문제는 데이터가 부족할 때입니다. 단 한 번의 평가만 보고 모델이 β를 0에서 너무 멀리 보내버리면, 그 유저나 아이템에 대해 &quot;남들보다 무조건 2점 높다(혹은 낮다)&quot;는 강한 편견을 갖게 됩니다. 이것이 바로 과적합입니다.</p>
<h4 id="💡-규제항의-원리와-설계-의도">💡 규제항의 원리와 설계 의도</h4>
<p>모델이 β를 0에서 너무 멀리 보내지 못하도록 목적함수에 $λβ^2$을 더합니다. 여기서 제곱을 쓰는 이유는 방향에 상관없이 <strong>&#39;0으로부터의 거리&#39;</strong>에 벌금을 매기기 위해서입니다.</p>
<ul>
<li>방향 무관 벌금: β가 양수(+)로 멀어지든, 음수(-)로 멀어지든 제곱을 하면 모두 큰 양수(+) 벌금이 됩니다. 즉, &quot;어느 방향이든 0(평균)에서 멀어지면 무조건 벌금이다!&quot;라는 원칙입니다.</li>
<li>중심으로 당기는 힘: β가 0에서 멀어질수록 벌금($λβ^2$)이 제곱으로 폭등합니다.</li>
</ul>
<h4 id="🤖-모델-내부의-밀당-과정">🤖 모델 내부의 밀당 과정</h4>
<p>e.g) 전체 평균이 3점인데 어떤 유저가 1점을 줬다면</p>
<ul>
<li>모델의 유혹: &quot;오차를 0으로 만들게 $β_u$를 $-2.0$ 로 보내버릴래!&quot;</li>
<li>규제항의 경고: &quot;어허, 0에서 그렇게 멀어지면 제곱 벌금이 $4$로 너무 커지는데?</li>
<li>모델의 타협: &quot;음... 벌금이 너무 세네. 그냥 $β_u$를 $-0.5$ 정도로만 실제값 정도로 움직이고, 남은 오차는 그냥 감수하자. 그게 전체 점수 관리에는 유리해.&quot;</li>
</ul>
<h4 id="✅-요약">✅ 요약</h4>
<p>결국 <strong>규제항($\lambda$)</strong>은 모델에 탄성력(고무줄)을 달아주는 것과 같습니다.</p>
<ul>
<li>오차 제거: <strong>실제 데이터 쪽</strong>으로 $\beta$를 당기는 힘 (예측을 정확하게!)</li>
<li>규제(벌금): <strong>다시 평균(0) 쪽</strong>으로 $\beta$를 끌어오는 힘 (너무 튀지 않게!)</li>
</ul>
<p>이 두 힘이 균형을 이루는 지점에서 가장 안정적인 $\beta$가 결정됩니다. 덕분에 데이터가 적은 상황에서도 모델이 미쳐 날뛰지(?) 않고 평균에 기반한 안정적인 예측을 할 수 있게 됩니다.</p>
<h2 id="23-bias-모델-최적화">2.3 Bias 모델 최적화</h2>
<h3 id="1-경사하강법">(1) 경사하강법</h3>
<p>함수의 기울기를 구하여 <strong>오차가 작아지는 방향(경사 아래)</strong>으로 파라미터를 조금씩 업데이트하며 최소값을 만드는 파라미터를 찾아가는 방식입니다.</p>
<h3 id="2-alternating-least-squaresals">(2) Alternating Least Squares(ALS)</h3>
<p>변수가 여러 개($\alpha, \beta_u, \beta_i$)일 때, 한꺼번에 최적값을 찾기 어렵기 때문에 <strong>나머지 변수를 고정하고 하나씩 순차적으로 업데이트</strong>하는 방식입니다. 
이를 반복하면 전체 오차가 최소화되는 지점에 수렴하게 됩니다.</p>
<h2 id="24-특징-및-한계">2.4 특징 및 한계</h2>
<p>Bias 모델은 개별 성향은 잘 파악하지만, <strong>&quot;사용자가 특정 장르를 선호한다&quot;</strong>와 같은 유저-아이템 간의 상호작용(Interaction)은 파악하지 못합니다. 
이를 해결하기 위해 이후 <strong>Latent Factor Model(잠재 요인 모델)</strong>로 발전하게 됩니다.
<br></p>
<h1 id="3️⃣-latent-factor-model">3️⃣ Latent Factor Model</h1>
<p>잠재 요인 모델</p>
<hr>
<p>Bias 모델이 유저/아이템의 &#39;평균적인 성향&#39;만 봤다면, 
잠재 요인 모델은 <strong>유저와 아이템 사이</strong>에 숨겨진 특징을 반영하는 모델입니다.</p>
<ul>
<li>Bias 모델의 한계: &quot;아현님은 평소 5점을 잘 주고, 영화 &lt;라라랜드&gt;는 원래 인기가 많아&quot;까지만 압니다. 유저와 아이템이 만났을 때 발생하는 <strong>&#39;특수한 선호 관계&#39;</strong>는 설명하지 못합니다.</li>
<li>Latent Factor 모델의 목표: &quot;아현님은 &#39;로코 장르&#39;를 좋아하고, &lt;라라랜드&gt;는 &#39;로코 요소&#39;가 강한 영화야. 그래서 둘이 잘 맞아!&quot;라는 숨겨진 특징을 찾아내는 것입니다.</li>
</ul>
<p>이러한 유저와 아이템의 속성을 <strong>벡터(Vector)</strong>로 표현하여 그들 사이의 특수한 선호 관계를 모델에 반영하는 것이 핵심입니다. 데이터(별점) 속에 숨겨져 있는, 무엇인지는 정확히 모르지만 분명히 존재하는 패턴을 찾아냅니다.</p>
<h2 id="31-모델의-핵심-원리-행렬-분해">3.1 모델의 핵심 원리: 행렬 분해</h2>
<p>수학적으로 이 벡터를 찾는 가장 정석적인 방법은 <strong>SVD</strong>입니다. </p>
<ul>
<li><strong>SVD (Singular Value Decomposition)</strong>: 
행렬 $X$를 $U\Sigma V^T$라는 세 개의 행렬로 분해하여, 데이터의 핵심 특징만 남기고 나머지는 압축할 수 있다는 것을 수학적으로 증명한 정리입니다. 즉, 행렬을 쪼개서 적은 양의 정보로도 원본을 복원할 수 있습니다. </li>
</ul>
<p>&quot;<code>거대한 평점 표(행렬)</code>를 <code>유저 벡터</code>와 <code>아이템 벡터</code>의 곱으로 쪼개서 볼 수 있다&quot;는 아이디어의 근거를 SVD에서 가져온 것입니다</p>
<p>즉, &#39;유저 수 $\times$ 아이템 수&#39;만큼의 엄청난 차원을 가진 원래 표를 우리가 정한 <strong>$k$개의 잠재 요인(Latent Factors)</strong>으로 압축하는 것이 목적입니다.</p>
<h3 id="예제">예제</h3>
<p><em>출처: 국민대학교 박하명 교수님</em>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/7deca48e-dc0f-493d-a20e-3e13408f6a30/image.png" alt=""></p>
<ul>
<li>별점 행렬 = 아이템 행렬 * 유저 행렬<ul>
<li>별점 행렬($6 \times 12$)이 두 개의 작은 행렬의 곱(Item Matrix $\times$ User Matrix)으로 표현되어 있습니다.</li>
</ul>
</li>
<li>아이템 행렬 (Item Matrix):<ul>
<li>각 아이템(a~f)을 3개의 잠재 요인으로 요약한 벡터입니다.</li>
<li>e.g) 아이템 $c$의 벡터 $\gamma_c = [0.4, 0.2, 0.8]$.</li>
</ul>
</li>
<li>유저 행렬 (User Matrix): <ul>
<li>각 사용자(A~L)가 그 3개의 잠재 요인을 얼마나 좋아하는지 나타낸 벡터입니다.</li>
<li>e.g) 사용자 $D$의 벡터 $\gamma_D = [0.1, 0.6, 0.7]$.</li>
</ul>
</li>
<li>실제 별점 예측 과정: $f(u, i) = \gamma_u \cdot \gamma_i$<ul>
<li>이미지의 예시인 <strong>&quot;사용자 $D$가 아이템 $c$를 보고 평점 얼마를 줄까?&quot;</strong><ul>
<li>$$f(c, D) = [0.4, 0.2, 0.8] \cdot [0.1, 0.6, 0.7]$$계산
: $(0.4 \times 0.1) + (0.2 \times 0.6) + (0.8 \times 0.7) 
= 0.04 + 0.12 + 0.56 = \mathbf{0.72}$</li>
<li>의미: 아이템 $c$가 가진 잠재적 속성들과 사용자 $D$가 선호하는 잠재적 취향을 <strong>내적</strong>하여 나온 이 점수가 바로 우리가 예측한 별점이 됩니다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="추천-시스템에서의-한계"><strong>추천 시스템에서의 한계</strong></h3>
<p>하지만 추천 시스템에서는 이 SVD를 그대로 쓰기 어렵습니다.</p>
<ol>
<li><strong>빈칸(Sparse) 문제</strong>
추천 데이터는 유저가 안 본 영화가 훨씬 많아 구멍이 숭숭 뚫려 있습니다. SVD는 빈칸이 있으면 계산이 안 됩니다.</li>
<li><strong>연산 효율</strong>
데이터가 거대해질수록 정통 SVD는 너무 느립니다.
원래 유저-아이템 행렬($R$)은 빈칸이 많은 거대한 행렬입니다. 이를 <strong>유저 행렬($P$)</strong>과 <strong>아이템 행렬($Q$)</strong>이라는 두 개의 작은 행렬로 쪼개는 것이 기본 원리입니다.</li>
</ol>
<p>따라서 우리는 SVD의 수식을 그대로 푸는 대신, &quot;빈칸은 무시하고, 이미 있는 값이라도 가장 잘 설명하는 벡터($\gamma$)들을 찾아내자&quot;는 방식으로 아이디어를 발전시켜 사용합니다.</p>
<h2 id="32-최종-예측-모델-기본점수--알파">3.2 최종 예측 모델: &quot;기본점수 + 알파&quot;</h2>
<p>그럼 구체적으로 latent factor 모델에 어떻게 반영할까요?
SVD는 단 한 번의 복잡한 수식 연산으로 행렬을 쪼개지만 , MF는 최적화(Optimization) 과정을 거칩니다.</p>
<ol>
<li><strong>초기화</strong> : 유저 벡터($\gamma_u$)와 아이템 벡터($\gamma_i$)에 아무 숫자(랜덤값)나 채워 넣습니다. (당연히 처음엔 엉터리 점수를 예측하겠죠?)<ol start="2">
<li><strong>예측 및 비교</strong>: 우리가 알고 있는 실제 점수($R_{u,i}$)와 두 벡터를 내적 해서 나온 점수($\gamma_u \cdot \gamma_i$)를 비교합니다.</li>
<li><strong>오차 수정</strong>: &quot;어라? 실제는 5점인데 내 모델은 2점이라고 하네?&quot; 그러면 오차(3점)를 줄이는 방향으로 벡터 속의 숫자들을 아주 조금씩 수정합니다.</li>
</ol>
</li>
</ol>
<p>이 과정을 반복하면, <strong>모든 유저와 아이템은 각각 고유한 숫자 묶음(벡터)</strong>을 갖게 됩니다.</p>
<p>이렇게 채워진 벡터와 아이템 벡터를 내적 해보면, 기존에 유저가 보지 않은 아이템에 대한 평점을 그럴싸하게 예측한 점수가 튀어나옵니다. 
이것이 바로 잠재 요인 모델이 데이터 속에 숨겨진 유저의 취향 패턴을 &#39;학습&#39;했기 때문에 가능한 결과입니다!</p>
<hr>
<p>위 과정을 수식으로 나타내보면 아래와 같습니다.
앞선 Bias 모델에 유저와 아이템의 <strong>상호작용 항</strong>을 더한 형태입니다.</p>
<p>즉, 유저와 아이템의 고유 성향(Bias)과 숨겨진 취향(Latent Factor)을 모두 결합한 최종 예측 모델입니다.</p>
<blockquote>
<h3 id="fu-i--underbracealpha--beta_u--beta_itextbaseline-기본-성향--underbracegamma_u-cdot-gamma_itextinteraction-취향-케미">$$f(u, i) = \underbrace{\alpha + \beta_u + \beta_i}<em>{\text{Baseline (기본 성향)}} + \underbrace{\gamma_u \cdot \gamma_i}</em>{\text{Interaction (취향 케미)}}$$</h3>
</blockquote>
<ul>
<li><strong>Baseline ($\mu + b_u + b_i$)</strong>: 
유저가 원래 후한지, 아이템이 원래 인기 있는지 같은 평균적인 성향(Baseline)을 잡아줍니다.<ul>
<li><strong>$\alpha$</strong>: Global baseline (전체 평균) </li>
<li><strong>$\beta_u$</strong>: 사용자 $u$의 bias (사용자 성향) </li>
<li><strong>$\beta_i$</strong>: 아이템 $i$의 bias (아이템 성향) </li>
</ul>
</li>
<li><strong>Interaction ($\gamma_u^T \gamma_i$)</strong>: 
유저 벡터($\gamma_u$)와 아이템 벡터($\gamma_i$)의 내적값입니다. 
Baseline만으로는 설명할 수 없는 <strong>&#39;유독 이 유저가 이 아이템을 좋아하는 이유&#39;</strong>를 잡아내는 역할을 합니다.
e.g) &quot;이 유저는 액션을 좋아하는데($\gamma_u$), 이 영화는 액션 요소가 얼마나 들어있는가($\gamma_i$)&quot;를 계산합니다. <ul>
<li><strong>$\gamma_u$</strong>: 사용자 $u$의 latent vector (사용자 잠재 요인)</li>
<li><strong>$\gamma_i$</strong>: 아이템 $i$의 latent vector (아이템 잠재 요인) </li>
</ul>
</li>
</ul>
<h2 id="33-목적함수와-규제항-regularization">3.3 목적함수와 규제항 (Regularization)</h2>
<p>최적화의 구조는 Bias 모델과 똑같습니다. 
<strong>오차(MSE)를 최소화하되, 파라미터들이 너무 튀지 않게 규제</strong>를 거는 원리입니다. </p>
<blockquote>
<h3 id="arg-min_alpha-beta-gamma-underbracesum_ui-alpha--beta_u--beta_i--gamma_u-cdot-gamma_i---r_ui2texterror--underbracelambda-left-sumu-beta_u2--sum_i-beta_i2--sum_i-gamma_i22--sumu-gamma_u22-righttextregularization">$$\arg \min_{\alpha, \beta, \gamma} \underbrace{\sum_{u,i} (\alpha + \beta_u + \beta_i + \gamma_u \cdot \gamma_i - R_{u,i})^2}<em>{\text{Error}} + \underbrace{\lambda \left[ \sum</em>{u} \beta_{u}^2 + \sum_{i} \beta_{i}^2 + \sum_{i} |\gamma_i|<em>2^2 + \sum</em>{u} |\gamma_u|<em>2^2 \right]}</em>{\text{Regularization}}$$</h3>
</blockquote>
<p>잠재 요인 모델에서도 목적함수에 <strong>규제항($\lambda |\gamma|^2$)</strong>이 추가됩니다. 이는 모델이 오차를 줄이려고 벡터 안의 숫자들을 무리하게 조정하는 것을 방지하기 위함입니다.</p>
<h4 id="a-오차-제곱합-sum-of-squared-errors--sum_ui-alpha--beta_u--beta_i--gamma_u-cdot-gamma_i---r_ui2"><strong>A. 오차 제곱합 (Sum of Squared Errors)</strong> : $$\sum_{u,i} (\alpha + \beta_u + \beta_i + \gamma_u \cdot \gamma_i - R_{u,i})^2$$</h4>
<p>&quot;내가 예측한 점수가 실제 별점($R_{u,i}$)과 얼마나 차이 나는가?&quot;를 계산합니다.</p>
<h4 id="b-규제-항-regularization-term--lambda-left-sum_u-beta_u2--sum_i-beta_i2--sum_i-gamma_i22--sumu-gamma_u_22-right"><strong>B. 규제 항 (Regularization Term)</strong> : $$\lambda \left[ \sum_{u} \beta_{u}^2 + \sum_{i} \beta_{i}^2 + \sum_{i} |\gamma_i|<em>2^2 + \sum</em>{u} |\gamma_u|_2^2 \right]$$</h4>
<p>&quot;모델이 너무 복잡해지거나 특정 취향에 편향되지 마라!&quot;라고 브레이크를 거는 장치입니다.</p>
<h4 id="💡-beta2과-gamma_22-왜-형태가-다른가요">💡 $\beta^2$과 $|\gamma|_2^2$, 왜 형태가 다른가요?</h4>
<p>두 기호는 모양만 다를 뿐, 본질적으로 <strong>&quot;값이 평균에서 멀어지면 벌금을 매기겠다&quot;</strong>는 원리가 똑같습니다. 단지 $\gamma$는 벡터(숫자 묶음)이라서 <strong>L2 Norm(제곱의 합)</strong>의 형태를 띠는 것입니다.</p>
<table>
<thead>
<tr>
<th align="left">구분</th>
<th align="left">대상</th>
<th align="left">규제 형태</th>
<th align="left">의미</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>Bias ($\beta$)</strong></td>
<td align="left"><strong>스칼라 (숫자 1개)</strong></td>
<td align="left">$\beta^2$</td>
<td align="left">숫자 하나의 크기를 제한</td>
</tr>
<tr>
<td align="left"><strong>Latent Vector ($\gamma$)</strong></td>
<td align="left"><strong>벡터 (숫자 $k$개 묶음)</strong></td>
<td align="left">$|\gamma|_2^2 = \gamma_1^2 + \gamma_2^2 + \dots + \gamma_k^2$$</td>
<td align="left">벡터 안 모든 숫자의 제곱 합</td>
</tr>
<tr>
<td align="left"><br></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
</tbody></table>
<h4 id="💡-왜-latent-vectorgamma에도-규제가-필요한가">💡 왜 Latent Vector($\gamma$)에도 규제가 필요한가?</h4>
<p>예시 )</p>
<ul>
<li>잠재 요인을 3개($k=3$)로 잡았다면, 각 벡터의 숫자는 [액션, 로맨스, 영상미] 같은 숨겨진 특징들의 강도를 의미합니다. <ul>
<li>두 모델이 똑같이 <strong>0.3</strong>이라는 점수를 예측했다고 가정해 봅시다.</li>
<li><strong>모델 A (안정적)</strong><ul>
<li>유저 벡터($\gamma_u$) : $[0.5, 0.5, 0.5]$</li>
<li>아이템 벡터($\gamma_i$) : $[0.2, 0.2, 0.2]$</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>$⇒ [0.5, 0.5, 0.5] \cdot [0.2, 0.2, 0.2] = 0.3$</p>
<ul>
<li><strong>모델 B (불안정)</strong><ul>
<li>유저 벡터($\gamma_u$) : $[1.0, 0, 0.5]$ (유저 벡터 값이 상대적으로 큼)
&quot;나는 액션을 매우 좋아하고(1.0), 로맨스는 관심 없고(0), 영상미는 조금 따져(0.5)&quot;
Error를 줄이는 데만 집착해서, 특정 벡터 값을 <strong>비정상적으로 크게</strong> 키워버린 경에 해당됨.</li>
<li>아이템 벡터($\gamma_i$) : $[0.2, 0.2, 0.2]$</li>
</ul>
</li>
</ul>
<p>$⇒ [1.0, 0, 0.5] \cdot [0.2, 0.2, 0.2] = 0.3$</p>
<ul>
<li><strong>만약 아이템의 정보가 아주 살짝 바뀌어서 $\gamma_i$가 $[0.3, 0.2, 0.2]$가 된다면?</strong><ul>
<li><strong>모델 A</strong> : $[0.5, 0.5, 0.5] \cdot [0.3, 0.2, 0.2] = 0.35$ (기존 0.3에서 <strong>0.05 변화</strong>)</li>
<li><strong>모델 B</strong> : $[1.0, 0, 0.5] \cdot [0.3, 0.2, 0.2] = 0.4$ (기존 0.3에서 <strong>0.10 변화</strong>)</li>
</ul>
</li>
</ul>
<p><strong>✅ 결론</strong></p>
<ul>
<li>특정 파라미터($\gamma$)의 절대값이 크면, 데이터가 아주 조금만 흔들려도 예측값이 요동치는 <strong>Fluctuation</strong>이 발생합니다. </li>
<li>규제항($\lambda ||\gamma||^2$)은 이 벡터들의 크기(L2 Norm)를 작게 유지시켜, 모델이 노이즈에 일희일비하지 않고 안정적으로 학습되도록 돕는 <strong>&#39;고무줄&#39;</strong> 역할을 합니다.</li>
</ul>
<h2 id="34-최적화-기법-als-alternating-least-squares">3.4 최적화 기법: ALS (Alternating Least Squares)</h2>
<p>학습 과정에서 이 파라미터들을 찾는 것은 Bias 모델보다 훨씬 까다롭습니다. 
Bias 모델은 <strong>Convex(볼록)</strong>하지만, Latent 모델은 <strong>Non-Convex(비볼록)</strong>하기 때문입니다.</p>
<ul>
<li><p><strong>Convex(볼록)와 Non-Convex(비볼록) 란?</strong></p>
<ul>
<li>Convex (볼록): 함수 모양이 매끄러운 &#39;그릇&#39; 모양인 경우. 
⇒ 어디서 시작해서 내려가든 무조건 최솟값(Global Optimum, 전역 최적해)에 도착합니다.</li>
<li>Non-Convex (비볼록): 함수 모양이 울퉁불퉁한 모양인 경우.
⇒ 최솟값이라 생각하고 내려갔는데 알고 보니 작은 웅덩이(Local Optimum, 지역 최적해)에 빠져버릴 수 있습니다.</li>
</ul>
</li>
<li><p><strong>왜 Non-Convex인가?</strong>
: 유저와 아이템의 <strong>&quot;곱하기($\gamma_u \cdot \gamma_i$)&quot;</strong> 때문입니다!</p>
<ul>
<li><strong>더하기 ($x + y$)</strong>: $x$와 $y$가 서로 간섭하지 않아 그래프가 매끄러운 그릇 모양을 유지합니다.</li>
<li><strong>곱하기 ($x \cdot y$)</strong>: $x$를 키웠을 때 결과가 커질지 작아질지가 <strong>상대방인 $y$의 값</strong>에 따라 바뀝니다. </li>
<li>이렇게 변수끼리 엉키는 &#39;상호작용&#39; 때문에 그래프가 울퉁불퉁한 산맥 모양이 되어 최적해를 찾기 어려워집니다.</li>
</ul>
</li>
<li><p><strong>그럼 어떻게 최적해를 찾는가?</strong>
: 사용자 또는 아이템 행렬 중 하나를 상수로 고정하면 다시 Convex 형태로 만들 수 있습니다!
이를 활용하여 &quot;번갈아 가며 $\gamma$를 고정합니다.&quot;</p>
<ol>
<li>유저 벡터($\gamma_u$)를 고정하고, 아이템 벡터($\gamma_i$)를 최적화합니다.</li>
<li>아이템 벡터($\gamma_i$)를 고정하고, 유저 벡터($\gamma_u$)를 최적화합니다.</li>
</ol>
<ul>
<li><strong>장점</strong>: <ul>
<li>하나를 고정하는 순간 선형 회귀 문제로 바뀌어 풀기가 매우 쉬워집니다.</li>
<li>유저별, 아이템별 계산이 독립적이라 <strong>병렬 처리(Parallelization)</strong>가 가능해 대규모 데이터에 유리합니다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="요약-추천-시스템의-진화">요약: 추천 시스템의 진화</h1>
<ol>
<li><strong>아이템 기반 / 유저 기반 CF</strong>: &quot;이거 산 사람들이 이것도 샀어&quot; (단순 통계)</li>
<li><strong>Bias Model</strong>: &quot;이 유저는 원래 좀 짜게 줘&quot; (개인 성향 반영)</li>
<li><strong>Latent Factor Model</strong>: &quot;이 유저는 이런 &#39;잠재적인 특징&#39;을 가진 아이템을 좋아해&quot; (숨겨진 취향 저격)</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[추천 시스템] MovieLens-32M 데이터를 활용한 유사 영화 추천기 구현 (Jaccard, Cosine, Pearson)]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-MovieLens-32M-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%9C%A0%EC%82%AC-%EC%98%81%ED%99%94-%EC%B6%94%EC%B2%9C%EA%B8%B0-%EA%B5%AC%ED%98%84-Jaccard-Cosine-Pearson</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-MovieLens-32M-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%9C%A0%EC%82%AC-%EC%98%81%ED%99%94-%EC%B6%94%EC%B2%9C%EA%B8%B0-%EA%B5%AC%ED%98%84-Jaccard-Cosine-Pearson</guid>
            <pubDate>Wed, 18 Mar 2026 18:34:51 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 오늘은 추천 시스템의 기초이면서 가장 강력한 방법 중 하나인 <strong>유사도 기반 추천(Similarity-based Recommendation)</strong>을 구현해 보겠습니다. 
MovieLens-32M 대용량 데이터셋을 활용하여 태그, 사용자 시청 기록, 별점 패턴에 따라 영화를 추천하는 과정을 단계별로 정리했습니다.</p>
<p><strong>🛠 개발 환경</strong></p>
<ul>
<li>언어: Python</li>
<li>환경: Google Colab (대용량 데이터 처리에 최적!)</li>
<li>Tip: VS Code 유저라면 &#39;Google Colab&#39; 확장을 통해 로컬에서도 편하게 연결할 수 있습니다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/ce839ffa-1abc-41e6-a8bc-506e1b25be29/image.png" alt=""></li>
</ul>
<blockquote>
<h3 id="💡-이전-포스팅"><strong>💡 이전 포스팅</strong></h3>
<p>본격적인 실습에 앞서, 
<strong>각 유사도 지표를 언제, 그리고 왜 사용해야 하는지</strong> 정리한 이전 포스팅을 먼저 읽어보시는 것을 추천드립니다.!</p>
</blockquote>
<p>👉 <a href="https://velog.io/@ah_yo_ninde_yo/%EC%9C%A0%EC%82%AC%EB%8F%84-%EC%B8%A1%EC%A0%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3%EC%A2%85-%EC%84%B8%ED%8A%B8-Jaccard-Cosine-Pearson">유사도 측정 알고리즘 3종 세트: Jaccard, Cosine, Pearson</a></p>
<h1 id="1️⃣-데이터-준비-data-preparation">1️⃣ 데이터 준비 (Data Preparation)</h1>
<hr>
<p><a href="https://grouplens.org/">https://grouplens.org/</a>
<a href="https://grouplens.org/datasets/movielens/">https://grouplens.org/datasets/movielens/</a></p>
<p>먼저 GroupLens에서 제공하는 MovieLens-32M 데이터를 다운로드하고 압축을 해제합니다. 이후 CSV 파일을 읽어 파이썬의 <code>dict</code> 구조로 변환합니다.</p>
<pre><code class="language-python"># 데이터 다운로드 및 압축 해제
!wget https://files.grouplens.org/datasets/movielens/ml-32m.zip
!unzip ml-32m.zip

import csv
from tqdm import tqdm

movies = {}

# 1. 영화 기본 정보 추출 (movieId, title, genres)
with open(&#39;ml-32m/movies.csv&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
    reader = csv.reader(f)
    next(reader) 
    for mid, title, genres in reader: 
        movies[int(mid)] = {
            &#39;title&#39;: title,
            &#39;genres&#39;: genres,
            &#39;users&#39;: set(),
            &#39;tags&#39;: set(),
            &#39;ratings&#39;: {}
        }

# 2. Tag 정보 추출 (userId, movieId, tag)
with open(&#39;ml-32m/tags.csv&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
    reader = csv.reader(f)
    next(reader)
    for _, mid, tag, _ in reader:
        mid_int = int(mid)
        if mid_int in movies:
            movies[mid_int][&#39;tags&#39;].add(tag)

# 3. Ratings 정보 추출 (userId, movieId, rating)
with open(&#39;ml-32m/ratings.csv&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;) as f:
    reader = csv.reader(f)
    next(reader)
    for uid, mid, rating, _ in reader:
        mid_int = int(mid)
        if mid_int in movies:
            uid_int = int(uid)
            movies[mid_int][&#39;users&#39;].add(int(uid))
            movies[mid_int][&#39;ratings&#39;][int(uid)] = float(rating)</code></pre>
<br>

<h1 id="2️⃣-유사도-지표-정의-similarity-metrics">2️⃣ 유사도 지표 정의 (Similarity Metrics)</h1>
<hr>
<p>추천의 핵심이 되는 유사도 알고리즘 두 가지를 정의합니다.</p>
<h2 id="21-자카드-유사도-jaccard-similarity">2.1 자카드 유사도 (Jaccard Similarity)</h2>
<p>집합 간의 유사도를 측정합니다. 태그가 얼마나 겹치는지, 혹은 시청한 유저 목록이 얼마나 비슷한지 비교할 때 유용합니다.</p>
<p>$$J(A, B) = \frac{|A \cap B|}{|A \cup B|}$$</p>
<pre><code class="language-python">def jaccard_similarity(a, b):
    union_size = len(a | b)
    intersection_size = len(a &amp; b)
    return intersection_size / union_size if union_size &gt; 0 else 0</code></pre>
<h2 id="22-코사인-유사도-cosine-similarity">2.2 코사인 유사도 (Cosine Similarity)</h2>
<p>평점과 같은 수치 벡터 사이의 각도를 측정합니다. 평가 패턴이 얼마나 유사한지 파악하는 데 적합합니다.</p>
<p>$$\text{similarity} = \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{|\mathbf{A}| |\mathbf{B}|}$$</p>
<pre><code class="language-python">def cosine_similarity(a, b):
    keys = a.keys() &amp; b.keys() # 공통 유저
    if not keys: return 0

    nom = sum(a[k] * b[k] for k in keys)
    denom = (sum(v**2 for v in a.values()) * sum(v**2 for v in b.values()))**0.5
    return nom / denom if denom &gt; 0 else 0</code></pre>
<h2 id="23-centered-코사인-유사도-centered-cosine-similarity--pearson">2.3 Centered 코사인 유사도 (Centered-Cosine Similarity / Pearson)</h2>
<p>별점을 기준으로 유사도를 측정하는 경우, <a href="#case-3-%ED%8F%89%EC%A0%90-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C-cf">[Case 3]</a>
유저마다 별점을 주는 기준(짜게 주는 사람 vs 후하게 주는 사람)이 다르기 때문에, 피어슨 상관계수를 사용하여 코사인 유사도를 구합니다.</p>
<ol>
<li><p>데이터 평준화 (Centering): 각 영화의 평균을 구하여 모든 평점에서 뺍니다.</p>
<pre><code class="language-python">for movie in movies.values():
   avg = sum(movie[&#39;ratings&#39;].values()) / len(movie[&#39;ratings&#39;])
   movie[&#39;p_ratings&#39;] = {uid: r - avg for uid, r in movie[&#39;ratings&#39;].items()}</code></pre>
</li>
<li><p>교정된 평점으로 유사도 계산</p>
<pre><code class="language-python">get_topk(152081, 10, key=&#39;p_ratings&#39;, similarity=cosine_similarity)</code></pre>
</li>
</ol>
<blockquote>
<h3 id="💡-참고-centered-cosine-similarity--pearson-">💡 참고) Centered-Cosine Similarity == Pearson ?</h3>
</blockquote>
<p>이 코사인 유사도 식에서 각 영화의 평균 평점을 뺀 뒤 계산하면, 그게 바로 <strong>피어슨 상관계수(Pearson Correlation Coefficient = Centered-Cosine Similarity)</strong>가 됩니다.</p>
<blockquote>
</blockquote>
<p>즉, 유저의 평점 편향을 제거하고 싶을 때
<strong>데이터를 먼저 Centering한 후</strong> 코사인 유사도를 적용하면 됩니다!</p>
<blockquote>
</blockquote>
<hr>
<p><strong><em>상세한 원리가 궁금하다면? 
&quot;<a href="https://velog.io/@ah_yo_ninde_yo/%EC%9C%A0%EC%82%AC%EB%8F%84-%EC%B8%A1%EC%A0%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3%EC%A2%85-%EC%84%B8%ED%8A%B8-Jaccard-Cosine-Pearson">유사도 측정 알고리즘 3종 세트: Jaccard, Cosine, Pearson</a>&quot;에서 확인하실 수 있습니다.</em></strong>
작성하신 핵심 내용을 하나도 빠뜨리지 않으면서, 블로그 독자들이 한눈에 원리를 파악할 수 있도록 <strong>시각적 요소(LaTeX, 표, 인용구)</strong>를 활용해 예쁘게 다듬어 보았습니다.</p>
<blockquote>
<h3 id="🚀-왜-corr보다-직접-구현한-centered-cosine이-더-정확할까">🚀 왜 .corr()보다 직접 구현한 Centered Cosine이 더 정확할까?</h3>
<p>판다스의 피어슨 <code>.corr()</code>은 두 영화를 <strong>공통으로 본 유저</strong>만 계산에 넣습니다. 이 경우 데이터가 적을 때 유사도가 <strong>1.0(완벽함)</strong>으로 튀는 &#39;과장&#39;이 발생하기 쉽습니다.</p>
<table>
<thead>
<tr>
<th align="left">상황</th>
<th align="left">데이터 규모</th>
<th align="left">결과</th>
<th align="left">신뢰도</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>상황 A</strong></td>
<td align="left">영화 X, Y를 딱 <strong>2명</strong>이 봄</td>
<td align="left">피어슨 <strong>1.0</strong></td>
<td align="left"><strong>낮음 (우연일 확률 ↑)</strong></td>
</tr>
<tr>
<td align="left"><strong>상황 B</strong></td>
<td align="left">영화 X, Y를 <strong>10,000명</strong>이 봄</td>
<td align="left">피어슨 <strong>1.0</strong></td>
<td align="left"><strong>높음 (진짜 인기작!)</strong></td>
</tr>
</tbody></table>
<p>컴퓨터는 둘 다 &#39;완벽한 추천&#39;으로 보겠지만, 우리는 상황 B가 훨씬 신뢰할 만하다는 것을 압니다. <strong>우리가 직접 구현한 방식</strong>은 이 신뢰도 차이를 수학적으로 잡아냅니다.</p>
</blockquote>
<hr>
<blockquote>
<h4 id="👉-해결책-평가-안-한-사람들을-분모에-참여시키기">👉 해결책: <strong><code>평가 안 한 사람들</code></strong>을 분모에 참여시키기!</h4>
<p>Centered Cosine은 평가하지 않은 수많은 유저를 <strong>&#39;중립(0)&#39;</strong>으로 계산에 참여시켜 일종의 <strong>브레이크</strong> 역할을 하게 합니다.</p>
</blockquote>
<ul>
<li><strong>분자:</strong> 공통 유저의 취향 방향(패턴)만 반영합니다.</li>
<li><strong>분모:</strong> 해당 영화를 본 <strong><code>전체 유저</code></strong>의 에너지(무게)를 모두 반영합니다.<blockquote>
<p><strong>&quot;Centered Cosine의 판단&quot;</strong>
*&quot;X와 Y의 패턴이 겹치는 건 2명뿐인데, X를 본 전체 인원은 100명이네? 나머지 98명의 의견을 모르니까 함부로 1.0이라고 하지 말고 유사도를 <strong>0.1 정도로 확 낮추자.</strong>&quot;*</p>
</blockquote>
즉, <strong>&quot;안 본 사람들의 데이터(0)&quot;</strong>를 분모에 참여시켜, 공통 유저가 적을수록 분모를 키워 유사도를 보수적으로 측정함으로써 <strong>추천 시스템의 안정성</strong>을 확보합니다.<blockquote>
</blockquote>
<pre><code class="language-python">def cosine_similarity(a, b):
  &quot;&quot;&quot;
  a, b: 영화 평점 딕셔너리 {user_id: centered_rating}
  &quot;&quot;&quot;
  ### 1. 분자 (Numerator)
  # 두 영화 모두 평점이 있는 유저들의 취향 일치도 합산
  common_keys = a.keys() &amp; b.keys()
  nom = sum(a[k] * b[k] for k in common_keys)
&gt;
### 분모
# 평가를 한 모든 사람의 점수가 반영됨!! (일반 pearson으로만 계산하는 경우에는 평가가 있는 경우만 계산에 반영함)
# 즉, 분자에선 모두 평가한 경우에 대해서만 반영하지만, 분모에서는 평가를 안 한 경우도 반영함.
# pearson과 달리 분모를 커지게 함으로써 유사도를 낮춤으로써 안정화시킴
# 추천시스템에선 빈 칸도 정보로서 활용하고자 하므로 - pearson보다 centered cosine 방식 사용이 더 정확함
denom = (sum(v**2 for v in a.values())* sum(v**2 for v in b.values()))**0.5
if denom == 0:
    return 0
&gt;  
return nom/denom</code></pre>
<blockquote>
</blockquote>
</li>
</ul>
<hr>
<blockquote>
</blockquote>
<p><strong>💡 정리하자면</strong>
추천 시스템에서는 빈칸(NaN)조차 소중한 정보!
판다스의 피어슨보다 <strong>직접 구현한 Centered Cosine 방식</strong>이 빈칸의 존재감을 분모에 반영하여 훨씬 정교하고 안전한 추천 결과를 만들어냅니다!</p>
<blockquote>
</blockquote>
<hr>
<br>


<h1 id="3️⃣-top-k-추천-엔진-구현">3️⃣ Top-K 추천 엔진 구현</h1>
<hr>
<p>특정 영화를 기준으로 가장 유사한 상위 $k$개의 영화를 찾는 핵심 함수입니다.</p>
<pre><code class="language-python">def get_topk(target_mid, k=20, key=&#39;tags&#39;, similarity=jaccard_similarity):
    target_set = movies[target_mid][key]
    res = []

    for mid, movie in tqdm(movies.items()):    
        if target_mid == mid or not movie[key]: 
            continue

        score = similarity(target_set, movie[key])
        if score &gt; 0:
            res.append((score, movie[&#39;title&#39;]))

    # 유사도 점수 기준 내림차순 정렬
    res.sort(key=lambda x: x[0], reverse=True)
    return res[:k]</code></pre>
<br>


<h1 id="4️⃣-실전-활용-예시">4️⃣ 실전 활용 예시</h1>
<hr>
<h2 id="case-1-태그-기반-내용-유사도-추천-cbf">Case 1: 태그 기반 내용 유사도 추천 (CBF)</h2>
<p>&quot;영화가 다루는 소재나 분위기가 비슷한 작품을 찾고 싶을 때&quot;</p>
<pre><code class="language-python"># &#39;152081&#39; 영화와 키워드(tags)가 유사한 영화 상위 10개
get_topk(152081, 10, key=&#39;tags&#39;, similarity=jaccard_similarity)</code></pre>
<h2 id="case-2-시청-유저-기반-추천-cf">Case 2: 시청 유저 기반 추천 (CF)</h2>
<p>&quot;이 영화를 본 사람들이 공통적으로 많이 본 다른 작품을 찾고 싶을 때&quot;</p>
<pre><code class="language-python"># &#39;152081&#39; 영화를 본 유저(users)들이 많이 본 영화 상위 10개
get_topk(152081, 10, key=&#39;users&#39;, similarity=jaccard_similarity)</code></pre>
<h2 id="case-3-평점-기반-추천-cf">Case 3: 평점 기반 추천 (CF)</h2>
<p>&quot;평점이 유사한 영화를 찾고 싶을 때&quot;</p>
<p>유저마다 별점을 주는 기준(짜게 주는 사람 vs 후하게 주는 사람)이 다르기 때문에, 피어슨 상관계수를 사용하여 코사인 유사도를 구합니다.</p>
<pre><code class="language-python"># 1. 피어슨 상관계수를 위한 데이터 Centering
for movie in movies.values():
    if not movie[&#39;ratings&#39;]: continue

    avg = sum(movie[&#39;ratings&#39;].values()) / len(movie[&#39;ratings&#39;])
    # 현재 영화 객체에 &#39;p_ratings&#39;라는 교정된 평점 데이터 추가
    movie[&#39;p_ratings&#39;] = {uid: r - avg for uid, r in movie[&#39;ratings&#39;].items()}

# 2. 교정된 평점으로 추천 실행
get_topk(152081, 10, key=&#39;p_ratings&#39;, similarity=cosine_similarity)</code></pre>
<blockquote>
<h3 id="참고"><strong>참고)</strong></h3>
<p>전처리가 완료된 <code>movies</code> 딕셔너리는 아래와 같이 원본 평점(<code>ratings</code>)과 교정된 평점(<code>p_ratings</code>)을 동시에 가지게 되어, 목적에 맞는 다양한 추천 전략을 구사할 수 있습니다.</p>
</blockquote>
<pre><code class="language-python">movies = {
    101: {
        &#39;title&#39;: &#39;인터스텔라&#39;,
        &#39;ratings&#39;: {1: 5.0, 2: 4.0},        # 원본 (0~5점)
        &#39;p_ratings&#39;: {1: 0.5, 2: -0.5},    # 교정 (평균 4.5 차감)
        ...
    }
}</code></pre>
<p>끝! 감사합니다~~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1-1. 자바의 시작과 개요]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/1-1.-%EC%9E%90%EB%B0%94%EC%9D%98-%EC%8B%9C%EC%9E%91%EA%B3%BC-%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/1-1.-%EC%9E%90%EB%B0%94%EC%9D%98-%EC%8B%9C%EC%9E%91%EA%B3%BC-%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Sun, 15 Mar 2026 14:36:05 GMT</pubDate>
            <description><![CDATA[<p>python에 이어 두번째 프로그래밍 언어..!!
한국어와 함께 3개 국어 학생이 되어보쟈..ㅋ (영어도 제발)</p>
<p>들어가기 앞서서,
python 로고가 뱀인 것처럼.. java 로고가 커피인 이유가 궁금했는데
원래 이름은 &#39;Oak&#39;였는데, 상표권 이슈로 개발자들이 자주 마시던 자바 커피에서 이름을 따온 거라고 한다.
역시.. 개발자들은 커피를 달고 사는 운명인가부다..
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c13a77a2-4f95-43c2-995b-1b6b22329212/image.png" alt=""></p>
<br>

<h1 id="span-stylecolor-007bff-1-컴퓨터-프로그래밍-언어span"><span style="color: #007bff"> 1. 컴퓨터 프로그래밍 언어</span></h1>
<h2 id="11-프로그래밍-언어">1.1 프로그래밍 언어</h2>
<hr>
<ol>
<li><strong>기계어</strong> (Low-level Language)<ul>
<li>0,1 이진수로 된 언어</li>
<li>cpu는 기계어만 이해함</li>
</ul>
</li>
<li><strong>어셈블리어</strong> (Low-level Language)<ul>
<li>기계어 명령을 단어/기호로 매핑시킨 것</li>
<li>ex) <code>ADD</code>, <code>SUB</code>, <code>MOVE</code></li>
</ul>
</li>
<li><strong>고급 언어 (High-level Language)</strong><ul>
<li>사람이 인지할 수 있는 언어</li>
<li>ex) <strong><code>java</code></strong>, <code>C++</code>, <code>python</code></li>
<li>절차 지향 언어 / 객체 지향 언어</li>
</ul>
</li>
</ol>
<h2 id="12-컴파일-compile">1.2 컴파일 (Compile)</h2>
<hr>
<p>고급 언어로 작성된 소스 파일은 컴퓨터가 이해할 수 없으므로 번역 과정이 필요</p>
<p><strong>전통적인 컴파일 (C, C++, Rust 등)</strong></p>
<aside>

<ul>
<li>&quot;소스파일을 컴퓨터가 이해할 수 있는 <strong>기계어로 만드는 과정</strong>&quot;</li>
<li>과정: 소스 코드(<code>.c</code>) → <strong>(컴파일러) →</strong> <strong>기계어(<code>.exe</code>, <code>.obj</code>)</strong></li>
<li>특징: 중간 단계 없이 바로 CPU가 이해할 수 있는 0과 1로 번역</aside>

</li>
</ul>
<p><strong>가상 머신 기반 컴파일 (Java, C# 등)</strong></p>
<aside>

<ul>
<li>Java나 C# 같은 언어들은 &#39;플랫폼 독립성&#39;을 위해 한 단계를 더 둠. (따라서 정의가 살짝 다름)</li>
<li>&quot;<strong>JVM이 이해할 수 있는 기계어(바이트코드)로 만드는 과정</strong>&quot;</li>
<li>과정: <strong>소스 파일(<code>.java</code></strong>) → (<strong>컴파일러)</strong> → <strong>타겟 파일(<code>.class</code>)</strong> → (JVM 실행 시, → <strong>기계어</strong>)<ul>
<li><strong>소스 파일</strong> : 프로그래밍 언어로 작성된 텍스트 파일  <code>.java</code></li>
<li><strong>컴파일</strong>(Compile) : 소스파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정</li>
<li><strong>타겟 파일</strong> : 바이트(Byte)화 된 코드로 이루어져 있음 <code>.class</code></li>
</ul>
</li>
<li>특징: Java에서는 컴파일 결과물을 실행해도 CPU가 바로 알아듣지 못하고 JVM이 한 번 더 통역해줘야 함</aside>

</li>
</ul>
<aside>

<blockquote>
<p><strong>cf) 컴파일 vs 인터프리트</strong></p>
</blockquote>
<ul>
<li>‘컴파일’ : 코드를 미리 번역해두는 언어</li>
<li>‘인터프리트’ : 실시간으로 해석하는 언어<blockquote>
</blockquote>
⇒ 자바는 &#39;컴파일&#39; 언어의 특성과  인터프리트&#39; 언어의 특성을 모두 가지고 있음.</li>
</ul>
</aside>

<br>

<h1 id="span-stylecolor-007bff-2-자바-프로그래밍span"><span style="color: #007bff"> 2. 자바 프로그래밍</span></h1>
<hr>
<ul>
<li>과정: <strong>소스 파일(<code>.java</code></strong>) → (<strong>컴파일러<code>javac</code>)</strong> → <strong>타겟 파일(<code>.class</code>)</strong> <strong>→ (</strong>JVM 실행 시, <strong>→ 기계어)</strong></li>
</ul>
<aside>

<ul>
<li>자바의 컴파일러 : <code>javac</code></li>
<li>소스 파일 확장자 &amp; 컴파일 된 파일 확장자<ul>
<li>자바 : <code>.java</code> → <code>.class</code></li>
</ul>
</li>
<li>소스 파일 이름 &amp; 컴파일 된 파일 이름<ul>
<li>소스 파일의  ‘클래스 이름’과 동일</aside>

</li>
</ul>
</li>
</ul>
<h2 id="22-자바의-플랫폼-독립성-🌟">2.2 자바의 플랫폼 독립성 🌟</h2>
<hr>
<p>한 번 작성하면 어디서든 실행된다(Write Once, Run Anywhere)”</p>
<ul>
<li>일반적인 C++ 등의 프로그램은 하드웨어에서 직접 실행해서 각기 다른 운영체제에 맞춰서 컴파일해야 하는 반면,</li>
<li>Java는 <strong>JVM</strong>을 사용하여 가상으로 실행 가능하기 때문에, 운영체제에 관계없이 독립적으로 실행 가능</li>
</ul>
<h3 id="java-실행-과정"><strong>Java 실행 과정</strong></h3>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/52b9a742-8500-47e9-b4c9-d0fa5a6ad072/image.png" alt=""></p>
<p><sub> JB = Java Bytecode(자바 바이트코드) = 컴파일된 <code>.class</code> 파일
출처 : <a href="https://youtu.be/OxvtGYvVkRU?si=M2vodliACaAZfkpu">https://youtu.be/OxvtGYvVkRU?si=M2vodliACaAZfkpu</a> </sub></p>
<ul>
<li><p>Platform  (=Hardware + OS) 위에 → JVM만 있으면 <code>.class</code> 파일(=바이트 코드, 타겟 파일)이 실행됨</p>
</li>
<li><p>Hardware 위에 → OS 위에 → JVM을 설치하면 그 위에서 Java  <code>.class</code>파일이 실행됨</p>
</li>
<li><p>JVM 실행 = &quot;<code>.class</code> 파일이 실행된다&quot;</p>
<p>  JVM이라는 통역사가 <code>.class</code>라는 공통 설계도를 보고, 당신의 컴퓨터(Windows, Mac 등)에 딱 맞는 기계어로 실시간 통역하여 CPU에게 일을 시킨다</p>
</li>
</ul>
</aside>

<h2 id="23-jvm-java-virtual-machine">2.3 JVM (Java Virtual Machine)</h2>
<hr>
<ul>
<li>OS에 맞는 JVM이 설치되어 있다면, 동일한 <code>.class</code> 파일을 어디서든 그대로 실행할 수 있음</li>
<li>동적 로딩(Dynamic Loading): 실행 중 필요한 시점에 클래스를 로드하여 <strong>메모리 효율적임</strong></li>
</ul>
<h3 id="jvm-실행-과정"><strong>JVM 실행 과정</strong></h3>
<aside>

<p><code>.class</code> 파일이 실행되는 순간, JVM은 실행</p>
<ol>
<li><strong>클래스 로딩 (Loading):</strong> 필요한 <code>.class</code> 파일을 메모리에 올림</li>
<li><strong>검증 (Verifying):</strong> 이 파일이 혹시 해킹된 건 아닌지, 문법에 오류는 없는지 깐깐하게 검사</li>
<li><strong>실행 (Executing):</strong> JVM이 바이트코드를 읽어서 컴퓨터의 CPU가 알아들을 수 있는 <strong>기계어</strong>로 실시간 번역하며 명령</aside>

</li>
</ol>
<h2 id="24-실습-자바-프로그램-작성-및-실행">2.4 (실습). 자바 프로그램 작성 및 실행</h2>
<hr>
<p>우리가 <code>Hello.java</code>를 작성하고
→  <code>javac</code>로 컴파일하면, 바이트 코드가 담긴 <code>.class</code> 파일이 생성되는데, 이것이 컴파일 과정의 타겟 파일</p>
<ol>
<li><p><strong>자바 파일 생성 (</strong><code>Hello.java</code>를 작성<strong>)</strong></p>
<pre><code class="language-jsx"> public class Hello {   // ① public &#39;클래스&#39; (파일당 1개만 가능)
     public static void main(String[] args) {   // ② public &#39;메서드&#39; (여러 개 가능)
         System.out.println(&quot;Hello, World!&quot;); 
     }
 }</code></pre>
 <aside>

<ul>
<li>자바 파일 구조 및 규칙<ul>
<li>Java의 코드는 대부분 클래스로 구성됨</li>
<li>public class : 한 파일에 하나 있는 게 좋음<ul>
<li>class명 : 대문자로 시작, 소스파일명과 동일해야 함.</li>
</ul>
</li>
<li>main:  시작하는 위치</li>
</ul>
</li>
</ul>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/78797c0a-d469-4858-bbd1-d50956185d4c/image.png" alt=""></p>
<ol start="2">
<li><p><strong>자바 파일 컴파일 (</strong><code>javac</code><strong>)</strong></p>
<pre><code class="language-jsx"> javac Hello.java  //컴파일하는 코드 &quot;javac {파일명}.java&quot;</code></pre>
</li>
</ol>
<pre><code>- 소스코드 → 바이트 코드
- `javac Hello.java` → `Hello.class` (바이트 코드) 생성

```jsx
public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2    // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3    // String Hello
       5: invokevirtual #4    // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
```</code></pre><p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/e74bd8cf-86ce-45ca-8b09-a0c0fb7d9cfb/image.png" alt=""></p>
<pre><code>컴파일된 경우의 확장자는 class</code></pre><ol start="3">
<li><p><strong>JVM실행  (</strong><code>java</code><strong>)</strong></p>
<p> <strong>= <code>.class</code> 파일 실행</strong></p>
<pre><code class="language-jsx"> java Hello //JVM 실행 코드 &quot;java {파일명}&quot;</code></pre>
<ul>
<li><p>바이트 코드 → 기계어</p>
</li>
<li><p>JVM이 바이트코드를 읽어서 컴퓨터의 CPU가 알아들을 수 있는 <strong>기계어</strong>로 실시간 번역하며 명령을 내림</p>
<pre><code class="language-jsx">10110010 00000000 00000010...</code></pre>
</li>
</ul>
</li>
</ol>
<h3 id="추가-디어셈블">(추가) <strong>디어셈블</strong></h3>
<pre><code class="language-jsx">  javap -c Hello &gt; Helloc.bc 
  // javap -c {컴파일된 class파일의 파일명} &gt; {저장할 파일명}.bc
  // JDK의 javap.exe 사용
  // 디어셈블된 결과 Hello.bc파일 생성</code></pre>
<ul>
<li>컴파일 된 <code>.class</code> 파일의 내용을 텍스트로 변환</li>
<li>즉, 클래스 파일에 있는 바이트 코드를 → just “텍스트”(소스코드X)로 볼 수 있게 하는 작업</li>
<li><strong>대상:</strong> <code>.class</code> 파일 (이진수 바이트코드)</li>
<li><strong>결과:</strong> <strong>JVM 명령어</strong> (예: <code>aload_0</code>, <code>getstatic</code>, <code>invokevirtual</code>)</li>
<li><strong>사용 도구:</strong> JDK에 포함된 <strong><code>javap</code></strong></li>
<li><strong>목적:</strong> JVM이 내부적으로 어떻게 동작하는지 분석할 때, 코드가 어떻게 최적화되었는지 확인하고 싶을 때</li>
</ul>
<h3 id="추가-디컴파일">(추가) <strong>디컴파일</strong></h3>
<ul>
<li>컴파일된 <code>.class</code> 파일을 다시 <code>.java</code> 소스 코드로 복구</li>
<li>클래스 파일에 있는 바이트 코드를 → 소스코드로 볼 수 있게 하는 작업</li>
<li><strong>대상:</strong> <code>.class</code> 파일 (이진수 바이트코드)</li>
<li><strong>결과:</strong> <strong><code>.java</code> 소스 코드</strong> (예: <code>public class Hello { ... }</code>)</li>
<li><strong>사용 도구:</strong> JD-GUI, Jad, 또는 IntelliJ IDEA(자동 지원)</li>
<li><strong>목적:</strong> 소스 코드를 분실했을 때 복구하기 위해, 다른 사람이 만든 라이브러리(.jar)가 어떻게 짜였는지 공부할 때</li>
</ul>
<br>

<h1 id="span-stylecolor-007bff-3-자바-vs-c-동작-방식-비교span"><span style="color: #007bff"> 3. 자바 vs C++: 동작 방식 비교</span></h1>
</aside>

<table>
<thead>
<tr>
<th></th>
<th><strong>자바 (Java)</strong></th>
<th><strong>C++</strong></th>
</tr>
</thead>
<tbody><tr>
<td>번역물</td>
<td>바이트 코드 (<code>.class</code>)</td>
<td>해당 OS 전용 기계어 (<code>.exe</code>, <code>.obj</code>)</td>
</tr>
<tr>
<td>실행 방식</td>
<td>JVM 위에서 가상으로 실행</td>
<td>하드웨어에서 직접 실행 (Native)</td>
</tr>
<tr>
<td>로딩 방식</td>
<td><strong>동적 로딩(Dynamic Loading):</strong> 실행 중 필요한 시점에 클래스를 로드하여 메모리 효율적임</td>
<td><strong>정적 로딩(Static Loading):</strong> 컴파일/링크 시점에 이미 결정됨</td>
</tr>
<tr>
<td>이식성</td>
<td>매우 높음 (JVM만 있으면 어디서든 실행)</td>
<td>낮음 (플랫폼 변경 시 다시 컴파일/링크 필요)</td>
</tr>
<tr>
<td>보안 및 관리</td>
<td>JVM이 메모리를 관리하여 상대적으로 안전</td>
<td>하드웨어 직접 제어로 성능은 좋으나 보안에 취약할 수 있음</td>
</tr>
</tbody></table>
<h2 id="java">JAVA</h2>
<hr>
<ul>
<li>컴파일러가 바로 바이트코드한 후 링크 과정없음</li>
<li>바이트코드는JVM에서만실행 가능</li>
<li>자바는 필요한 클래스들을 프로그램 실행 중에 동적으로 로딩</li>
<li>동적로딩은 JVM에 포함된 클래스 로더에 의해 이루어짐<ul>
<li>동적 : 실행 시에</li>
<li>정적(static) : 컴파일 시에 메모리에</li>
</ul>
</li>
<li>ClassLoader 클래스를 이용하여 개발자가 직접 클래스 로딩 가능</li>
</ul>
<h2 id="c">C++</h2>
<hr>
<ul>
<li>목적 코드 및 실행 파일은 플랫폼에 따라 다름</li>
<li>플랫폼이 바뀌거나 다른플랫폼에서 실행시키려면 다시 컴파일 및 링크
→  보안에 약함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[🏠 혼자 작업하면 딴짓하는 나를 위해 직접 만들었습니다: '모각작' 런칭 기록]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%ED%98%BC%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%A9%B4-%EB%94%B4%EC%A7%93%ED%95%98%EB%8A%94-%EB%82%98%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%A7%81%EC%A0%91-%EB%A7%8C%EB%93%A4%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%9F%B0%EC%B9%AD%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%ED%98%BC%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%A9%B4-%EB%94%B4%EC%A7%93%ED%95%98%EB%8A%94-%EB%82%98%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%A7%81%EC%A0%91-%EB%A7%8C%EB%93%A4%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%9F%B0%EC%B9%AD%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Sat, 14 Mar 2026 16:16:42 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 모각작 PM 아현입니다. 오랜만에 모각작 회고록으로 돌아왔습니다!
2025년 10월 큐시즘(KUSITMS) 활동으로 시작한 &#39;모각작&#39;이 드디어 이번 3월에 정식 릴리즈되었습니다!!!
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/e15582dc-7b38-4faf-85d3-856b4a60716d/image.png" alt=""></p>
<p>사실 학회 프로젝트로 끝날 수도 있었던 서비스가 진짜 유저를 만나기까지, &#39;과연 세상에 나올 수 있을까?&#39; 싶었던 순간들이 참 많았는데요. 
정식 출시를 기념하며, 그동안의 과정들을 기록해 보려 합니다.
지난 학회 활동하면서는 몇 차례 회고를 남겼었어서, 지금까지 내용을 다시 한번 요약하고, 그 이후의 과정 위주로 기록해 보려 합니다.</p>
<h1 id="1-우리가-함께-모여야-하는-이유">1. 우리가 &#39;함께&#39; 모여야 하는 이유</h1>
<p>서비스는 제 실제 니즈에서 출발했습니다. &quot;왜 나는 집에서 혼자 작업할 때 집중하기 어려울까?&quot;</p>
<p>저는 큐시즘 활동을 통해 모각작(모여서 각자 작업), 모각코(모여서 각자 코딩)를 처음 접하고 자주 참여했습니다. 하지만 매번 카페를 가기엔 비용이 부담스러웠고, 때로는 작업보다 잡담의 비중이 높아져 아쉬움이 남기도 했습니다. 
그렇다고 집에서 혼자 하려니 유튜브를 보게 되거나 결국 다시 카페로 향하곤 했죠. 
줌이나 디스코드는 카메라를 켜는 것이 부담스러웠고, 열품타는 랭킹 경쟁이 오히려 집중 흐름을 방해했습니다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/ce7028cf-2d92-4038-b6d7-40f38fe54c2b/image.png" alt=""></p>
<p>서로의 존재감은 느끼되 프라이버시는 지켜주는 실시간 온라인 작업실이 있으면 좋겠다고 생각했고, 모각작은 이런 갈증에서 태어났습니다.</p>
<h1 id="2-모각작이-실질적인-형태를-갖추기까지">2. 모각작이 실질적인 형태를 갖추기까지</h1>
<p>초기 기획 단계에서는 &#39;블러 조절을 통한 컴퓨터 화면 공유&#39;를 주요 기능으로 고민하기도 했습니다. 하지만 한정된 개발 리소스를 고려했을 때, 현실적으로 구현 가능한 범위 내에서 서비스의 본질을 살리는 것이 최우선이었습니다. 그 결과, 유저들이 원하는 건 &#39;부담은 없지만 함께하는 감각&#39;이라는 결론에 도달했습니다. </p>
<p>리소스 문제로 피벗을 거쳤지만, 우리가 유지하고자 했던 핵심은 같습니다. 
화면 블러 기능이 &#39;함께 있음을 공유하되 직접적인 노출은 피하는 것&#39;이었듯, 이를 타이머로 전환하여 함께 있음을 공유하면서도 작업 내용이나 참여 시간은 비공개할 수 있도록 설계했습니다.</p>
<p>이후 <strong>Usability Test(UT)</strong>와 <strong>전시회</strong>를 통해 서비스의 디테일을 구체화했습니다.</p>
<ul>
<li><strong>UI의 일원화 (사이드바 개편)</strong>: 처음에는 혼자 작업하게 되는 경우를 위해 &#39;개인 타이머 페이지&#39;를 따로 두었지만, 사용자들이 이용 방식에 혼란을 겪는 것을 발견했습니다. 이를 해결하기 위해 홈 화면과 그룹 방 어디에서든 동일하게 유지되는 &#39;사이드바&#39; 구조로 UI를 개편했습니다.</li>
<li><strong>불필요한 기능의 삭제</strong>: &quot;집중&quot;을 위한 요소들 외 자잘한 기능들은 없앴습니다.</li>
<li><strong>온보딩 프로세스 추가</strong>: 직관적인 UI라 가이드가 필요 없을 것이라 자신했지만, 실제 전시회에서 만난 유저들이 어려움을 겪는 것을 확인하고 정식 온보딩 과정을 추가하여 사용성을 높였습니다.</li>
</ul>
<p>이 과정에서의 세세한 고민과 시행착오는 아래 기록들에 더 자세히 담아두었습니다. 서비스의 뼈대를 잡는 과정이 궁금하신 분들은 함께 읽어보셔도 좋습니다 :)</p>
<blockquote>
<p><strong>이전 기획 일지</strong></p>
<ul>
<li><a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%91%EC%A4%91%EC%8B%9C%ED%82%A4%EC%A7%80-%ED%99%94%EB%A9%B4-%EB%B8%94%EB%9F%AC%EC%97%90%EC%84%9C-%ED%83%80%EC%9D%B4%EB%A8%B8%EA%B9%8C%EC%A7%80-%EA%B8%B0%ED%9A%8D-%EC%9D%BC%EC%A7%80">[1편] 기획 일지: 집중력을 설계하는 법</a></li>
<li><a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-12%EC%A3%BC%EC%B0%A8-%ED%98%91%EC%97%85%EB%B0%A9%EC%8B%9D-%EB%B0%8F-MVP-%EC%84%A4%EC%A0%95">[2편] 협업 방식 및 MVP 설정 스토리</a></li>
<li><a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-37%EC%A3%BC%EC%B0%A8-UT-%EB%B0%8F-%EC%9D%B8%ED%84%B0%EB%B7%B0%EC%97%90%EC%84%9C-%EB%B0%9C%EA%B2%AC%ED%95%9C-%EC%9D%B8%EC%82%AC%EC%9D%B4%ED%8A%B8-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%B5%9C%EC%A2%85-QA%EA%B9%8C%EC%A7%80">[3편] UT에서 발견한 반전 인사이트</a></li>
<li><a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-89%EC%A3%BC%EC%B0%A8-%EC%A0%84%EC%8B%9C%ED%9A%8C%EC%99%80-%EB%8D%B0%EB%AA%A8%EB%8D%B0%EC%9D%B4-%EA%B0%80%EC%84%A4%EC%9D%84-%EC%A6%9D%EB%AA%85%ED%95%98%EA%B3%A0-%EB%A7%88%EC%B9%A8%ED%91%9C%EB%A5%BC-%EC%B0%8D%EB%8B%A4">[4편] 데모데이와 전시회, 그 뜨거웠던 기록</a></li>
</ul>
</blockquote>
<h3 id="초기-ui--홈--그룹방--개인-타이머">[초기 UI] : 홈 &amp; 그룹방 &amp; 개인 타이머</h3>
<p>초기에는 홈, 그룹방, 개인 타이머 세 가지 공간으로 나누어 기획했습니다.</p>
<table>
<thead>
<tr>
<th align="center">홈 화면</th>
<th align="center">개인 타이머</th>
<th align="center">그룹방</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/0d5236f8-5a95-4ac4-80aa-302b9343a7b2/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/f73bd119-cc61-47de-ba12-a72bc0afea85/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/5143f448-b888-4b6f-83e6-471a76e7007e/image.png" alt=""></td>
</tr>
</tbody></table>
<h3 id="최종-픽스-ui-개인-타이머가-사이드바로-통합된-홈--그룹방">[최종 픽스 UI] 개인 타이머가 사이드바로 통합된 홈 &amp; 그룹방]</h3>
<p>사용자 테스트(UT) 피드백을 반영해, 어디서든 내 상태를 관리할 수 있도록 개인 타이머를 <strong>사이드바</strong>로 통합했습니다.</p>
<table>
<thead>
<tr>
<th align="center">홈 화면 (개인 타이머를 → 사이드바로 통합)</th>
<th align="center">최종 그룹방</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/d5e6f2fa-6482-4c64-ae26-a1380d3b4f3f/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/0f6bae2b-e072-466a-a9a0-f1acea3d7ae8/image.png" alt=""></td>
</tr>
</tbody></table>
<p><em>우리 디자이너들이 만든 캐릭터 넘 귀엽져!! &gt;&lt; 서비스를 사용할 수록 캐릭터들가 진화합니다!</em></p>
<h1 id="3-사이드-프로젝트-전환-후-디테일과-안정성을-잡는-시간">3. 사이드 프로젝트 전환 후: 디테일과 안정성을 잡는 시간</h1>
<p>학회 활동이 끝난 12월부터 &#39;모각작&#39;은 본격적인 사이드 프로젝트 체제로 전환되었습니다. 
다행히 팀원 8명 모두 끝까지 함께해주었고, 백엔드 개발자 한 분을 추가 영입하여 이어갔습니다.</p>
<p>이 시기 동안에는 학회 기간 중 만든 초기 서비스를 다듬고 운영 안정성을 확보하는 데 집중했습니다. 릴리즈 이후 개선 지표로 활용할 데이터 수집 기반도 마련했습니다.</p>
<h3 id="12월1월-서비스-기반-재구축">[12월~1월] 서비스 기반 재구축</h3>
<ul>
<li>백엔드 팀원 추가 영입 및 협업 체계 정비</li>
<li>방장 기능 및 개인정보 처리, 회원 탈퇴 기능 등 운영에 필수적인 디테일 구현</li>
<li>서비스의 첫 얼굴이 될 랜딩 페이지 제작</li>
<li>데이터 분석을 위한 GA 이벤트 로그 설계</li>
</ul>
<h3 id="2월3월-단계별-qa-및-최적화">[2월~3월] 단계별 QA 및 최적화</h3>
<p>총 3차에 걸친 QA를 통해 내실을 다졌습니다.</p>
<ul>
<li><strong>1차 QA (내부)</strong>: 개발된 기능들이 기획 의도대로 동작하는지 팀 내부에서 꼼꼼히 검증했습니다.</li>
<li><strong>2차 QA (외부/베타)</strong>: 베타 테스터를 모집하여 실제 유저 환경에서 발생하는 버그와 사용성 문제를 수집했습니다. 
특히 제 지인 중에는 예향 언니가 실제 유저로서 정말 많이 사용해 주었는데, 덕분에 서비스의 가능성을 확인하고 큰 희망을 얻었습니다.ㅎㅅㅎ</li>
<li><strong>3차 QA (최종)</strong>: 베타 테스트 피드백을 반영한 최종 수정 사항을 내부적으로 마지막 점검했습니다.</li>
<li><strong>소통 창구 마련</strong>: 유저와의 소통을 위한 FAQ 및 버그 제보 기능을 추가했습니다.</li>
<li><strong>SEO 최적화</strong>: 더 많은 유저가 검색을 통해 유입될 수 있도록 검색 엔진 최적화 작업을 진행했습니다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/5a6018bf-afe4-4f6e-b556-f47e7b59095a/image.jpg" width="45%"><sub>3차 대면 QA 했던 날!</sub></li>
</ul>
<p>단순히 기능을 구현하는 단계를 지나, 실제 서비스가 돌아가기 위해 필요한 &#39;현실적인 뒷면&#39;들을 하나씩 채워 넣는 시간이었습니다. 
유저가 탈퇴하고 싶을 때 바로 할 수 있게 만들고, 검색했을 때 우리 서비스가 잘 나오게 세팅하고, 혹시 모를 버그에 대비해 제보 창구를 만드는 일들 말이죠..ㅎㅎ</p>
<p>이 디테일들을 챙기면서, 비로소 서비스를 출시할 준비가 되었다는 확신을 얻었습니다!!(설렘)</p>
<p>특히 세 차례의 QA를 거치며 프론트엔드 담당 분량이 많았는데, 인원 보충 없이도 묵묵히 다 쳐내준 우리 프론트 팀원들에게 고맙다는 말을 슬쩍 남기고 싶네요.🥹 물론 우리 기디프백 팀원들 다 너무 고생 많았어요! 감사합니다!! ♥️🫶</p>
<h1 id="4-벨로그-유저를-위한-모각작-활용법">4. 벨로그 유저를 위한 &#39;모각작&#39; 활용법</h1>
<p>벨로그에는 각자의 성장에 몰입하는 분들이 많습니다. 모각작은 작업 흐름을 방해하지 않으면서도 적당한 긴장감을 주는 도구가 되고자 합니다.
또 모각작, 모각코에 익숙하신 분들이 많으실 것 같은데요. 이제 친구들과 온라인에서도 &#39;모각작&#39;을 해보세요!
이 글을 읽으시는 분들께 저희 &#39;모각작&#39;이 여러분의 작업 흐름에 방해가 되지 않으면서도, 적당한 긴장감을 주는 도구가 되길 바랍니다.</p>
<ul>
<li><strong>감시가 아닌 &#39;존재감&#39;</strong>: 카메라를 켜거나 화면을 공유할 필요가 없습니다. 그저 누군가와 같은 시간에 각자의 할 일을 하고 있다는 사실만으로도 혼자일 때보다 훨씬 덜 딴짓하게 됩니다.</li>
<li><strong>몰입을 돕는 심플한 도구</strong>: 복잡한 소통 기능은 덜어내고, 타이머와 상태 표시라는 본질에 집중했습니다. 다른 사람의 공부 시간을 랭킹으로 경쟁하기보다, 내가 오늘 계획한 시간을 채우는 것에만 집중해 보세요.</li>
<li><strong>성장의 기록</strong>: 집중한 시간은 캘린더와 캐릭터 성장으로 기록됩니다. 이 데이터를 벨로그 TIL이나 회고록에 활용해 보셔도 좋습니다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/f29641e0-d748-49a0-baae-0541bacc28b6/image.png" alt="">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c06414e5-d694-41fa-9c2a-ce06660af3bb/image.png" alt=""></li>
</ul>
<h1 id="5-마치며-릴리즈-그다음의-시작">5. 마치며: 릴리즈, 그다음의 시작</h1>
<p>드디어 정식 런칭을 했지만, 또 다른 도전이 시작됐네요!
이제부터의 목표는 이제부터 쌓일 데이터들을 보며 유저들이 어디서 불편해하는지 찾아내고, 하나씩 고쳐나가는 것입니다.</p>
<p>자잘한 일들이 쌓여 스트레스를 받거나 혼자 하는 작업이 유독 막막하게 느껴지는 날, 
집중이 안 될 때 언제든, [모각작]에서 저희와 함께 몰입해 보시는 건 어떨까요?</p>
<h3 id="👉-지금-바로-모각작-시작하기">👉 지금 바로 모각작 시작하기</h3>
<h3 id="-httpswwwmogakjakcom">** <a href="https://www.mogakjak.com/">https://www.mogakjak.com/</a>**</h3>
<blockquote>
<h3 id="서비스-소식도-궁금하다면">서비스 소식도 궁금하다면?</h3>
<p>아래 채널에도 놀러 오세요!</p>
</blockquote>
<ul>
<li><strong>공식 인스타그램</strong>: <a href="https://www.instagram.com/mogakjak_official">@mogakjak_official</a></li>
<li><strong>모든 링크 모아보기</strong>: <a href="https://linktr.ee/mogakjak">모각작 링크트리</a></li>
</ul>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/f2b73016-86db-4df5-b80a-bb2153f33cf5/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[추천시스템] 유사도 측정 알고리즘 3종 세트 (Jaccard, Cosine, Pearson)]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%9C%A0%EC%82%AC%EB%8F%84-%EC%B8%A1%EC%A0%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3%EC%A2%85-%EC%84%B8%ED%8A%B8-Jaccard-Cosine-Pearson</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%9C%A0%EC%82%AC%EB%8F%84-%EC%B8%A1%EC%A0%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3%EC%A2%85-%EC%84%B8%ED%8A%B8-Jaccard-Cosine-Pearson</guid>
            <pubDate>Thu, 12 Mar 2026 09:28:07 GMT</pubDate>
            <description><![CDATA[<p>이번 수업에서는 추천할 때 어떤 아이템들이 서로 유사한지를 계산하는 방법론들을 배웠다.</p>
<p>그 중 지난 시간에 모델을 분류 및 정리했었는데, 
그중에서 모델의 학습 유무에 따른 분류를 했을 때, 학습된 인공지능이 추천하는 (model-based Approach)가 아니고, 직관적이고 구현이 용이한 <strong>Memory-based Approach(메모리 기반 접근 방식)</strong>에서 사용하는 유사도 계산법들을 정리해 보겠다.</p>
<br>
첫번째로는 "콘텐츠 기반 필터링 (Contents-Based Filtering, CBF)"에 해당하는 경우!

<h1 id="1️⃣-특징이-비슷한-아이템-찾기">1️⃣ 특징이 비슷한 아이템 찾기</h1>
<hr>
<p>아이템이 가진 고유 정보(장르, 키워드 등)를 비교해서 유사도를 계산할 땐, 어떤 알고리즘이 적합할까?</p>
<p>이때 사용하는 대표적인 방법은 <strong>자카드 유사도(Jaccard Similarity)</strong>이다.
각 작품들을 나타내는 단어,키워드들을 집합으로 수 있기 때문이다</p>
<blockquote>
<h3 id="▶️-jaccard-similarity"><strong>▶️ Jaccard Similarity</strong></h3>
<p>두 집합 사이의 유사도를 측정하는 방법으로,
<strong>(교집합의 크기) / (합집합의 크기)</strong></p>
</blockquote>
<h3 id="🔵-예제">🔵 예제</h3>
<p>예시로 설명하기 위해 내 밥친구들 간의 유사도를 계산해보자! 임의로 각 작품들에 키워드를 선정했다.</p>
<ul>
<li><strong>무한도전</strong>: {예능, 코미디, 리얼버라이어티, 미션}</li>
<li><strong>런닝맨</strong>: {예능, 게임, 리얼버라이어티, 미션}</li>
<li><strong>크라임씬</strong>: {예능, 추리, 롤플레잉}</li>
</ul>
<h3 id="🟢-자카드-유사도-계산-결과">🟢 <strong>[자카드 유사도 계산 결과]</strong></h3>
<ul>
<li><p><strong>무한도전 vs 런닝맨</strong>: </p>
<ul>
<li>{예능, 리얼버라이어티,미션} / {예능, 코미디, 리얼버라이어티, 미션, 게임}</li>
<li>3 / 5 ≈ <strong>0.6</strong></li>
</ul>
</li>
<li><p><strong>무한도전 vs 크라임씬</strong>: </p>
<ul>
<li>{예능} / {예능, 코미디, 리얼버라이어티, 미션, 추리, 롤플레잉}</li>
<li>1 / 6 ≈ 0.16</li>
</ul>
</li>
<li><p><strong>런닝맨 vs 크라임씬</strong>:</p>
<ul>
<li>{예능} / {예능, 게임, 리얼버라이어티, 미션, 추리, 롤플레잉}</li>
<li>1/6 ≈ 0.16</li>
</ul>
</li>
</ul>
<p>⇒ 따라서, ‘무한도전’과 ‘런닝맨’의 유사도가 높은 것을 알 수 있다!</p>
<br>
<br>
두번째로 알아볼 예제들은  "협업 필터링 (Collaborative Filtering, CF)"에 해당하는
'유저-아이템 상호작용 데이터'(클릭, 좋아요, 별점)를 기반으로 유사도를 측정하는 경우!

<h1 id="2️⃣-암시적-데이터implicit-data-활용">2️⃣ 암시적 데이터(Implicit Data) 활용</h1>
<hr>
<p>얼마나 클릭했는지와 같은 &quot;양(Quantity)적&quot;인 지표가 중요한 경우, 어떤 유사도를 사용해야 할까?
클릭 여부(O/X)처럼 이진(Binary)으로 표현되는 데이터는 이를 <strong>유저 집합</strong>으로 간주하여 이전 예제와 마찬가지로  <strong>자카드 유사도</strong>를 사용한다.</p>
<blockquote>
<h3 id="▶️-jaccard-similarity-1">▶️ Jaccard Similarity</h3>
<p><strong>(교집합의 크기) / (합집합의 크기)</strong></p>
</blockquote>
<h3 id="🔵-예제-1">🔵 예제</h3>
<p>아래와 같이 제품을 클릭한 유저들이 A~F까지 있을 때, 
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/d621ad04-50ee-459f-a41a-0e31ecf98879/image.png" alt=""></p>
<ul>
<li>제품 X 클릭 유저: {A, B, D, E, F}</li>
<li>제품 Y 클릭 유저: {A, C, F}</li>
<li>제품 Z 클릭 유저: {A, B, D, F}</li>
</ul>
<h3 id="🟢자카드-유사도-계산-결과">🟢<strong>[자카드 유사도 계산 결과]</strong></h3>
<ul>
<li>X vs Y :<ul>
<li>2 / 6 ≈ 0.33</li>
</ul>
</li>
<li>X vs Z :<ul>
<li>4 / 5 = <strong>0.8</strong></li>
</ul>
</li>
<li>Y vs Z :<ul>
<li>2 / 5 = 0.4</li>
</ul>
</li>
</ul>
<p>⇒ 따라서, <strong>X와 Z</strong>의 유사도가 높은 것을 알 수 있다!</p>
<h3 id="🟪-python-구현-코드">🟪 [Python 구현 코드]</h3>
<br>


<h1 id="3️⃣-명시적-데이터explicit-data---좋아요싫어요">3️⃣ 명시적 데이터(Explicit Data) - 좋아요/싫어요</h1>
<hr>
<p>다음으로 &#39;호불호&#39;처럼 방향과 관련된 데이터의 경우, 
데이터를 벡터(Vector)로 변환하여 <strong>코사인 유사도</strong>를 측정한다.</p>
<blockquote>
<h3 id="▶️-cosine-similarity"><strong>▶️ Cosine Similarity</strong></h3>
<p>두 벡터 사이의 각도를 측정하여 유사도를 구한다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/aa6dcfd9-f81d-4ebb-8095-f2628517279b/image.png" alt=""></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c127b6c1-a63e-4e8d-bb8b-8d8c48d7ba02/image.png" alt=""></p>
<blockquote>
<ul>
<li>방향이 완전히 같으면 <strong>1</strong> (취향 일치)</li>
<li>반대 방향이면 <strong>-1</strong> (취향 정반대)</li>
</ul>
</blockquote>
<h3 id="🔵-예제-2">🔵 예제</h3>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c31fc8a4-a178-4d04-aec9-11157eb09c59/image.png" alt=""></p>
<p><strong>데이터 치환</strong>: 좋아요(+1), 싫어요(-1), 미응답(0)</p>
<ul>
<li>X = [1, -1, 0, 1, 1, -1]</li>
<li>Y = [-1, 1, 1, -1, 0, 0]</li>
<li>Z = [1, 0, 0, 1, 0, -1]</li>
</ul>
<h3 id="🟢코사인-유사도-계산-결과">🟢<strong>[코사인 유사도 계산 결과]</strong></h3>
<ul>
<li>X vs Y:
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/d39e378a-e67a-491e-9f40-e282c5b14fe1/image.png" alt=""></li>
<li>X vs Z:
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/0a5e5748-b4f4-434d-b331-4b4e10a56bc6/image.png" alt=""></li>
<li>Y vs Z:
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/263cb7d3-ff75-42db-a9f7-e9597294d49d/image.png" alt=""><h3 id="🟪-python-구현-코드-1">🟪 [Python 구현 코드]</h3>
</li>
</ul>
<br>

<h1 id="4️⃣-명시적-데이터explicit-data---별점rating">4️⃣ 명시적 데이터(Explicit Data) - 별점(Rating)</h1>
<hr>
<p>별점/평점처럼 rating이 존재하는 데이터는 어떻게 처리해야 할까? 
별점이나 평점처럼 수치가 존재하는 명시적 데이터는 단순히 숫자 크기만 비교할 경우 두 가지 함정에 빠지게 된다.</p>
<ol>
<li>미응답(Null) 데이터의 처리: 안 본 영화를 0점으로 처리하면 컴퓨터는 이를 &#39;최악의 평점&#39;으로 오해한다.</li>
<li>주관적 기준에 따른 편향(Bias): 유저마다 별점을 주는 기준이 다르며, 아이템마다 기본적인 인기도가 다르다.</li>
</ol>
<p>이 문제를 해결하기 위해 <strong>피어슨 상관계수(Pearson Correlation Coefficient)</strong>, 즉 <strong>Centered Cosine Similarity</strong>를 사용한다.</p>
<blockquote>
<h3 id="▶️-pearson-correlation-coefficient"><strong>▶️ Pearson Correlation Coefficient</strong></h3>
<h3 id="-centered-cosine-similarity">(= Centered Cosine Similarity)</h3>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/f27fcd2c-e358-4e4f-8ea7-cae15ee38b0a/image.png" alt=""></p>
<p>피어슨 상관계수는 코사인 유사도 공식의 각 데이터에서 &#39;유저의 평균 평점&#39;을 뺀 값을 대입하여 계산한다.
즉, <strong>Pearson Correlation Codfficient</strong> = <strong>Centered Cosine Similartiy</strong> 이다.</p>
</blockquote>
<p>또한, 이전 예제들처럼 미응답을 단순히 &#39;0&#39;으로 채우거나 &#39;평균&#39;으로 채우는 것보다, 왜 <strong>피어슨 상관계수</strong> 방식이 더 유리한지 상세히 살펴보겠다.</p>
<blockquote>
<h3 id="❓-null-채우기-전략-비교-0-vs-평균-vs-zero-centering">❓ Null 채우기 전략 비교: 0 vs 평균 vs Zero-centering</h3>
<p>미응답(Null) 데이터를 어떻게 채우느냐에 따라 추천 시스템의 성능과 변별력이 결정된다.</p>
</blockquote>
<table>
<thead>
<tr>
<th align="left">전략</th>
<th align="left">방식</th>
<th align="left">특징 및 한계점</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>1. 단순 0 채우기</strong></td>
<td align="left">미응답 = &#39;0&#39;</td>
<td align="left">유저가 관심이 없어 안 본 것인지, 정말 싫어서 낮은 점수를 준 것인지 구분하지 못한다. 데이터가 0에 치우치게 된다.</td>
</tr>
<tr>
<td align="left"><strong>2. 유저 평균으로 채우기</strong></td>
<td align="left">미응답 = &#39;유저 평균 &#39;(예: 3.2점)</td>
<td align="left">모든 별점이 양수 범위(1~5점)에 머물러 벡터 간 각도 차이가 줄어든다. <br>또한, 희소 행렬이 밀집 행렬(Dense Matrix)이 되어 메모리 부족(OOM)을 유발하고 연산 속도가 급격히 느려진다.</td>
</tr>
<tr>
<td align="left"><strong>3. Zero-centering</strong></td>
<td align="left">미응답 = &#39;0&#39; &amp; <strong>평준화</strong></td>
<td align="left"><strong>베스트 전략.</strong> <br> 평점 평균을 0으로 맞춘다. 평균보다 높은 점수는 양수(+), 낮은 점수는 음수(-)가 된다. 이때 빈칸을 0으로 채우면 &quot;평균적인(중립)&quot; 데이터가 되어 계산의 안정성을 확보한다..</td>
</tr>
</tbody></table>
<p>이제 아래 예제에 적용시켜보자!</p>
<h3 id="🔵-예제-3">🔵 예제</h3>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/047bfb4e-68ab-457c-94e2-815f67b5baab/image.png" alt=""></p>
<ul>
<li>X = [4, 2, 0, 4, 2, 1]</li>
<li>Y = [4, 0, 4, 0, 0, 2]</li>
<li>Z = [2, 5, 0, 2, 0, 4]</li>
</ul>
<br>

<h3 id="🟢-피어슨-상관계수-유사도-계산-결과">🟢 <strong>[피어슨 상관계수 유사도 계산 결과]</strong></h3>
<p>이미지의 <strong>Centered Matrix</strong>를 바탕으로, 코사인 유사도 공식 $U(x, y) = \frac{x \cdot y}{|x||y|}$을 적용해 계산하면 아래와 같다.</p>
<hr>
<h3 id="1-데이터-평준화-zero-centering">1. 데이터 평준화 (Zero-centering)</h3>
<p>코사인 유사도를 구하기 전, 데이터에서 평균값을 빼는 &#39;중심화(Centering)&#39; 과정을 거친다. </p>
<p>이때, <strong>무엇의 평균을 빼느냐에 따라 보정되는 편향의 종류가 달라진다.</strong></p>
<ul>
<li><strong>유저 평균 차감 (Adjusted Cosine):</strong> 유저가 평소에 주는 평균 점수를 뺀다. 깐깐한 유저와 관대한 유저의 주관적 기준을 평준화한다.</li>
<li><strong>아이템 평균 차감 (Centered Cosine):</strong> 영화가 받은 평균 점수를 뺀다. 원래 인기가 많아서 점수가 높은 영화와 비인기 영화 사이의 &#39;인기 편향&#39;을 제거한다.</li>
</ul>
<p>아래 예제에서는 아이템 평균을 구해보겠다.</p>
<ul>
<li><strong>Item X 의 평균:</strong> $[4, 2, 4, 2, 1] \rightarrow \text{평균} = 13/5 = 2.6$</li>
<li><strong>Item Y 의 평균:</strong> $[4, 4, 2] \rightarrow \text{평균} = 10/3 \approx 3.33$</li>
<li><strong>Item Z 의 평균:</strong> $[2, 5, 2, 4] \rightarrow \text{평균} = 13/4 = 3.25$<blockquote>
<p><strong>⚠️ 주의</strong>: 평균은 반드시 &#39;평가한 항목&#39;으로만 계산해야 한다.
Null(미응답)을 미리 0로 고려해서 평균을 구하면 분모(데이터 개수)가 커져 평균값이 왜곡된다. 
따라서 &quot;평균 계산 → 중심화 → Null 채우기 순서&quot;를 반드시 지켜야 한다.</p>
</blockquote>
</li>
</ul>
<p>각 점수에서 평균을 빼면 아래와 같은 <strong>Centered Matrix</strong>가 생성된다.</p>
<ul>
<li>X = [7/5, -3.5, 0, 7/5, -3/5, -8/5]</li>
<li>Y = [2/3, 0, 2/3, 0, 0, -4/3]</li>
<li>Z = [-5/4, 7/4, 0, -5/4, 0, 3/4]</li>
</ul>
<hr>
<h3 id="2-유사도-계산">2. 유사도 계산</h3>
<p>($U = \frac{x \cdot y}{|x||y|}$)</p>
<p><strong>① $U(X, Y)$ 계산</strong></p>
<ul>
<li><strong>분자:</strong> $(1.4 \times 0.67) + (-0.6 \times 0) + (0 \times 0.67) + (1.4 \times 0) + (-0.6 \times 0) + (-1.6 \times -1.33) \approx \mathbf{3.06}$</li>
<li><strong>분모:</strong><ul>
<li>$|X| = \sqrt{1.4^2 + (-0.6)^2 + 0^2 + 1.4^2 + (-0.6)^2 + (-1.6)^2} \approx \mathbf{2.68}$</li>
<li>$|Y| = \sqrt{0.67^2 + 0^2 + 0.67^2 + 0^2 + 0^2 + (-1.33)^2} \approx \mathbf{1.63}$</li>
</ul>
</li>
<li><strong>결과:</strong> $3.06 / (2.68 \times 1.63) \approx \mathbf{0.70}$ (양의 상관관계)</li>
</ul>
<p><strong>② $U(X, Z)$ 계산</strong></p>
<ul>
<li><strong>분자:</strong> $(1.4 \times -1.25) + (-0.6 \times 1.75) + 0 + (1.4 \times -1.25) + 0 + (-1.6 \times 0.75) \approx \mathbf{-5.75}$</li>
<li><strong>분모:</strong> $|X| \approx 2.68, |Z| = \sqrt{(-1.25)^2 + 1.75^2 + 0^2 + (-1.25)^2 + 0^2 + 0.75^2} \approx \mathbf{2.60}$</li>
<li><strong>결과:</strong> $-5.75 / (2.68 \times 2.60) \approx \mathbf{-0.82}$ (강한 음의 상관관계)</li>
</ul>
<p><strong>③ $U(Y, Z)$ 계산</strong></p>
<ul>
<li><strong>분자:</strong> $(0.67 \times -1.25) + 0 + 0 + 0 + 0 + (-1.33 \times 0.75) \approx \mathbf{-1.83}$</li>
<li><strong>결과:</strong> $-1.83 / (1.63 \times 2.60) \approx \mathbf{-0.43}$ (음의 상관관계)</li>
</ul>
<hr>
<h3 id="🟪-python-구현-코드-2">🟪 [Python 구현 코드]</h3>
<pre><code class="language-python">import numpy as np

# Centered 데이터 (이미지 기반)
X = np.array([1.4, -0.6, 0, 1.4, -0.6, -1.6])
Y = np.array([0.67, 0, 0.67, 0, 0, -1.33])
Z = np.array([-1.25, 1.75, 0, -1.25, 0, 0.75])

def get_similarity(v1, v2):
    # 1. 분자: 내적 (Dot Product)
    dot_product = np.sum(v1 * v2)

    # 2. 분모: 각 벡터의 크기(Magnitude)
    mag1 = np.sqrt(np.sum(v1**2))
    mag2 = np.sqrt(np.sum(v2**2))

    return dot_product / (mag1 * mag2) if (mag1 * mag2) != 0 else 0

print(f&quot;U(X, Y) = {get_similarity(X, Y):.2f}&quot;) # 0.70
print(f&quot;U(X, Z) = {get_similarity(X, Z):.2f}&quot;) # -0.82
print(f&quot;U(Y, Z) = {get_similarity(Y, Z):.2f}&quot;) # -0.43</code></pre>
<blockquote>
<h3 id="🚀-왜-직접-구현한-centered-cosine이-더-정확할까">🚀 왜 직접 구현한 Centered Cosine이 더 정확할까?</h3>
<p>판다스의 <code>.corr()</code> 메서드는 공통으로 평가한 데이터만 계산에 포함한다. 이는 데이터가 적을 때 유사도가 <strong>1.0(완벽 일치)</strong>으로 과장되는 문제를 야기한다. 반면, 직접 구현한 방식은 다음과 같은 공학적 이점을 가진다.</p>
</blockquote>
<ol>
<li><strong>빈칸의 정보화:</strong> 중심화를 거치면 평균 점수가 <strong>0</strong>이 된다. 이때 빈칸을 0으로 채우는 것은 &quot;해당 아이템에 대해 중립적인 의견을 가졌다&quot;는 합리적인 가정이 된다.</li>
<li><strong>분모를 통한 신뢰도 보정:</strong> 분모 계산 시 해당 아이템을 평가한 <strong>전체 유저</strong>의 에너지를 반영한다. 공통 유저가 적을수록 분모가 커져 유사도가 보수적으로 측정되므로, 데이터 부족으로 인한 유사도 거품을 방지한다.</li>
</ol>
<blockquote>
<h3 id="💡-핵심-요약">💡 핵심 요약</h3>
</blockquote>
<h3 id="1--평균-계산-기준-공통-항목만-계산한다">1.  <strong>평균 계산 기준:</strong> 공통 항목만 계산한다.</h3>
<p>중심화(Centering)를 위해 평균을 구할 때 <strong>실제 점수가 있는 항목 수</strong>로 나누어야 유저의 주관적 평점 기준(후한지, 박한지)이 정확히 반영된다.</p>
<ul>
<li><strong>해석적 이유:</strong> 영화 &#39;토이 스토리&#39;를 본 100명이 모두 5점을 줬다면, 이 영화의 객관적인 품질은 <strong>5.0</strong>이다. 만약 안 본 유저 9,900명을 0점으로 넣어서 평균을 내면 <strong>0.05점</strong>이 되어버린다. 이 0.05는 영화의 품질이 아니라 &#39;인기도&#39;를 의미하게 되므로 평준화의 목적에 맞지 않다.<ul>
<li><strong>중심화의 목적:</strong> 중심화의 목적은 <strong>&quot;평균(보통)을 0으로 만드는 것&quot;</strong>이다. 그래야 내가 준 4점이 남들보다 <strong>더 좋아하는 것(+)</strong>인지, <strong>덜 좋아하는 것(-)</strong>인지 방향성이 생기기 때문!</li>
<li><strong>이유:</strong> 실제 평가 점수들로만 평균을 내야, 그 평균을 뺐을 때 비로소 <strong>0이 &#39;딱 중간&#39;</strong>이라는 수학적 의미를 갖게 된다.<blockquote>
<h3 id="2-유사도-계산-기준-공통-항목만-계산하지-않는다">2. <strong>유사도 계산 기준:</strong> 공통 항목만 계산하지 않는다.</h3>
<p>유사도 계산 시에는 <strong>0을 포함한 전체 벡터</strong>를 대상으로 해야 변별력 있는 결과가 나온다.</p>
</blockquote>
</li>
<li><strong>분자 (내적):</strong> 어차피 한쪽이 0(미응답)이면 곱했을 때 0이 되어 사라져. 즉, 분자는 자동으로 <strong>&#39;공통 유저&#39;</strong>만 보게 된다.</li>
<li><strong>분모 (벡터 크기/Norm):</strong> 여기가 핵심! 분모에 0으로 채워진 빈칸들을 모두 포함시켜 벡터의 크기에 반영해야 한다.</li>
<li><strong>상황 A:</strong> 영화 X, Y를 공통 유저 2명이 똑같이 좋아함. (전체 유저도 딱 이 2명뿐임) $\rightarrow$ 분모가 작아서 유사도가 <strong>1.0</strong> 근처로 나옴.</li>
<li><strong>상황 B:</strong> 영화 X, Y를 공통 유저 2명이 똑같이 좋아함. (그런데 X는 1,000명이 봤음) $\rightarrow$ 분모가 엄청나게 커져서 유사도가 <strong>0.1</strong> 정도로 확 낮아짐.</li>
<li><strong>이유:</strong> 상황 B는 겨우 2명만 겹칠 뿐, 나머지 998명의 의견을 모르기 때문에 <strong>&quot;이 유사도는 아직 믿을 수 없어!&quot;</strong>라고 <strong>&#39;데이터 부족에 대한 페널티&#39;</strong>를 주기 위해서 이다.<blockquote>
<blockquote>
<h3 id="summary">SUMMARY</h3>
<p>⇒ 즉, <strong>평균은 ‘데이터의 본질(질)’</strong>을 파악하기 위해 구하는 것이고, <strong>유사도는 ‘데이터의 신뢰도(양)’</strong>를 반영하기 위해 구하기 때문에 범위의 차이가 발생한다!</p>
</blockquote>
<table>
<thead>
<tr>
<th align="left">단계</th>
<th align="left">고려 범위</th>
<th align="left">목적</th>
<th align="left">해석</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>평균 계산</strong></td>
<td align="left"><strong>본 사람만</strong></td>
<td align="left"><strong>기준점 설정</strong></td>
<td align="left">&quot;이 아이템/유저의 평소 수준은 이 정도다.&quot;</td>
</tr>
<tr>
<td align="left"><strong>유사도 분모</strong></td>
<td align="left"><strong>전체 유저</strong></td>
<td align="left"><strong>신뢰도 보정</strong></td>
<td align="left">&quot;데이터가 적으면 우연일 수 있으니 점수를 깎자.&quot;</td>
</tr>
</tbody></table>
</blockquote>
</li>
</ul>
</li>
</ul>
<br>

<h1 id="3-한계점과-극복-scalability-문제">3. 한계점과 극복 (Scalability 문제)</h1>
<hr>
<p>앞서 피어슨 상관계수를 설명하며 미응답 데이터를 평균값으로 채우지 않고, 0으로 두는 이유가 메모리 효율성(Sparse Matrix 유지) 때문이라고 언급했다. </p>
<p>하지만 데이터의 규모가 유저 수백만 명, 아이템 수십만 개 단위로 커지면, 단순히 행렬을 비워두는 것만으로는 해결되지 않는 확장성(Scalability) 문제에 직면하게 된다.</p>
<p><strong>🔴 왜 Sparse Matrix 유지방식만으로는 부족할까?</strong></p>
<ul>
<li>연산량의 폭주: 행렬이 비어 있어도, 유사도를 계산하기 위해 비교해야 할 유저나 아이템의 조합은 기하급수적으로 늘어난다. 실시간 추천이 불가능할 정도로 계산 속도가 느려진다.</li>
<li>정보의 희소성: 데이터가 너무 비어 있으면, 정작 유사도를 구하고 싶어도 공통으로 평가한 항목이 거의 없어 신뢰할 수 있는 결과를 얻기 어렵다.</li>
</ul>
<p>즉, 이전에는 <strong>&quot;빈칸을 억지로 채워서 메모리를 낭비하지 말자&quot;</strong>는 차원이었다면, 이제는 <strong>&quot;데이터의 차원 자체를 핵심만 남기고 줄여서 계산을 가볍게 만들자&quot;</strong>는 고민으로 확장되는 것이다. 
이를 해결하기 위해 차원 축소기술을 사용한다.</p>
<p>*<em>🔴 주요 차원 축소 기술 (Dimension Reduction) *</em></p>
<ul>
<li><strong>PCA (Linear)</strong>: 데이터의 분산을 보존하며 선형적으로 차원을 축소.</li>
<li><strong>AutoEncoder (Non-linear)</strong>: 딥러닝을 이용해 핵심 특징(Latent Factor)만 압축하여 추출. 복잡하고 정교한 유사도 파악 가능.</li>
</ul>
<hr>
<h2 id="📝-summary">📝 Summary</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>주요 지표</th>
<th>데이터 특징</th>
<th>사용 경우</th>
</tr>
</thead>
<tbody><tr>
<td><strong>CBF</strong></td>
<td>Jaccard</td>
<td>아이템 프로필 (태그, 키워드)</td>
<td>아이템 자체의 특징 비교</td>
</tr>
<tr>
<td><strong>CF (Implicit)</strong></td>
<td>Jaccard</td>
<td>클릭, 구매 (Binary)</td>
<td>양(Quantity)적인 유사도</td>
</tr>
<tr>
<td><strong>CF (Explicit)</strong></td>
<td>Cosine</td>
<td>좋아요/싫어요</td>
<td>방향성 위주의 유사도</td>
</tr>
<tr>
<td><strong>CF (Rating)</strong></td>
<td>Pearson</td>
<td>별점 (1~5점)</td>
<td>유저별 주관적 편차 제거</td>
</tr>
</tbody></table>
<p>참고로, CF도어떤 데이터냐에 따라 계산 방식이 다르듯, CBF도 데이터나 분석 목적에 따라 <strong>자카드 외에 다른 방식</strong>들도 있다. (아직 수업에서 안 배웠지만..)
예를 들어, 스마트폰 사양 비교 (배터리 용량, 무게, 가격)처럼 수치적인 차이를 알아야 할 때는 유클리드 거리, 완전히 동일한 단어는 아니더라도 유사한 의미의 단어가 있는 경우는 워드임베딩 등 !</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[추천시스템] Recommender System 개요]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Tue, 10 Mar 2026 07:24:33 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="목차">목차</h3>
<p><a href="#1-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B6%84%EB%A5%98">1. 추천시스템 분류</a>
<a href="#2-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-overview">2. 추천시스템 Overview</a>
    - <a href="#21-challenges">2.1 Challenges</a>
    - <a href="#22-data">2.2 Data</a>
    - <a href="#23-models">2.3 Models</a>
    - <a href="#24-evaluation">2.4 Evaluation</a></p>
</blockquote>
<hr>
<p>추천시스템을 처음 접했던 건 고3..
빅데이터나 AI가 지금만큼은 아니지만 막 화두되고 있던 시기</p>
<p>이쪽으로 입시를 하기로 맘먹고, 관련 도서를 뒤적거리다가
원래 광고나 마케팅에도 관심이 있어서 자연스럽게 추천시스템이 끌렸다. 
한창 넷플릭스의 추천 알고리즘이 떠올랐을 때라 넷플릭스 알고리즘 &#39;시네매치&#39;랑 아마존 추천 시스템을 비교하는 활동을 했었던 것 같다.
그러면서 collaborative filtering, cold start, long tail 등 용어를 처음 알게 됐었다.</p>
<p>그리고 휴학하면서는 서비스(모각작)를 만들었는데, 우리가 뭐 이커머스 같은 추천이 필요한 서비스는 아니지만, 그럼에도 이를 홍보하거나 SEO최적화를 할 때는 추천시스템에 대한 이해가 있으면 좋겠다는 생각을 하곤 했다.</p>
<p>그러다, 드디어 4-1인 이번에 <strong>&quot;추천시스템 설계&quot;</strong>라는 교과를 수강하게 되었다!! ㄷㄱㄷㄱ</p>
<p>대학교 내내 가장 로망이던 수업이라 무척 기대가 된다.
교수님도 휴학 전에 수업 들었던 교수님인데, 넘 좋아하는 교수님이라 너무 기대된다.
짧고 굵게, 동시에 재밌고 이해 쏙쏙 되게 설명해주시는 교수님이다~~ 아자스!!</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/eddecb21-ffde-42d7-8238-a14572223a0a/image.png" alt=""></p>
<p>앞으로 복습겸 주요 내용을 리뷰해보겠다.
오늘은 추천시스템에 대한 전반적인 개요!</p>
<h1 id="1-추천시스템-분류">1. 추천시스템 분류</h1>
<hr>
<p>여러 기준에 따라 분류가 가능하다</p>
<ul>
<li>추천 형식<ul>
<li>별점/평점 예측, 추천 목록 나열 (순위 매기기)</li>
</ul>
</li>
<li>사용 데이터<ul>
<li>별점 데이터, 간접 피드백 데이터 </li>
<li>유저 정보, 아이템 정보, 상황 정보 </li>
<li>관계 정보</li>
</ul>
</li>
<li>추천 방법<ul>
<li>collaboraitve filtering, content-based filtering</li>
<li>memory-base, model-based</li>
</ul>
</li>
</ul>
<br>

<h1 id="2-추천시스템-overview">2. 추천시스템 Overview</h1>
<hr>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/26fbd34b-5e8d-4559-8b8f-e9b82e15371b/image.png" alt=""></p>
<p>출처 :  <a href="https://github.com/jihoo-kim/awesome-RecSys">https://github.com/jihoo-kim/awesome-RecSys</a></p>
<h2 id="21-challenges">2.1 Challenges</h2>
<p>추천 시스템에서 고려해야 하는 challenge</p>
<ul>
<li><strong>Bias</strong> : 한쪽으로 너무 치우치는 추천. 정확도가 높더라도 너무 한쪽 (e.g. 한 브랜드)만 하는 건 좋은 추천이 아님</li>
<li><strong>Fairness</strong> :<ul>
<li>사용자 측면: 성별, 인종, 연령 등에 따라 차별적인 추천을 하지 않는가?</li>
<li>아이템 측면: 신규 판매자나 소외된 카테고리에도 노출 기회를 균등하게 제공하는가?</li>
</ul>
</li>
<li><strong>Cold-Start problem</strong> : 처음 데이터가 충분치 않아서 적절한 추천을 하지 못하는 상황</li>
<li><strong>Filter Bubble</strong> : 확증편향, 점점 특정 분야로만 추천 (e.g. 강아지 릴스 시청 → 강아지 관련밖에 안뜸. 인스타는 커뮤니티 보다 강아지 앱이 되어버림)</li>
<li><strong>Security, Privacy</strong></li>
</ul>
<br>

<h2 id="22-data">2.2 Data</h2>
<p>데이터들의 유형</p>
<ul>
<li><strong>User</strong> : 나이, 성별,,,</li>
<li><strong>Item</strong> : 제목, 이미지, 카테고리, 키워드,,,</li>
<li><strong>Context</strong> : 시간, 위치,,,</li>
<li><strong>User-Item Feedback</strong><ul>
<li><strong>Explicit Feedback:</strong> 사용자가 직접적으로 자신의  선호도나 평가를 표현한 데이터<ul>
<li>예) 별점,리뷰,좋아요/싫어요</li>
</ul>
</li>
<li><strong>Implicit Feedback:</strong> 사용자의 직접적인 평가나 선호도 표현없이, 사용자의 행동으로부터 간접적으로 추론할 수 있는데이터<ul>
<li>예) 페이지조회수,구매이력,장바구니추가,스트리밍시간,  클릭기록<blockquote>
<p><strong>User-Item Interaction Matrix</strong> (상호작용 행렬)
위에서 언급한 User와 Item 간의 피드백 데이터를 수학적으로 구조화한 것을 
&quot;User-Item Interaction Matrix, Utility Matrix, Rating Matrix&quot; 등으로 부른다.</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br> 

<h2 id="23-models">2.3 Models</h2>
<p>알고리즘의 복잡도, 데이터 활용의 범위 등에 따라 Basic, Advanced 로 분류할 수 있다.</p>
<p><strong>Basic</strong>
<em>이번 학기엔 대부분 Basic models을 주로 배우게 된다</em></p>
<p>  Basic 모델을 분류하는 기준에는 크게 두 가지 관점이 있다.</p>
<ul>
<li><p>관점 1 : &quot;어떤 정보를 사용&quot;해서 선호를 추정하는지</p>
<ol>
<li><p><strong>Collaborative Filteirng (CF)</strong> : ‘사용자-아이템 상호작용 데이터’를 사용해서 추천. 
&quot;<em>나와 비슷한 사람(User)_은 이것도 좋아하겠지?&quot; 혹은 &quot;_이 아이템을 산 사람은 저것도 사더라(Item)</em>&quot;</p>
<blockquote>
<p><strong>왜 &#39;collaborative&#39; 라고 이름 붙였을까</strong> 생각해보면,
내가 영화 A를 보고 남긴 별점이 나와 취향이 비슷한 다른 사람에게 영화 A를 추천할지 말지 결정하는 중요한 근거가 되듯이, 데이터들이 서로의 추천을 돕는(collaborate) 구조라는 의미 같다.</p>
</blockquote>
</li>
<li><p><strong>Content-base Filtering (CBF)</strong> : 아이템 속성(카테고리, 설명, 키워드, 장르)만을 사용해서 추천</p>
</li>
</ol>
</li>
<li><p>관점 2 : &quot;학습의 유무&quot;</p>
<ol>
<li><p><strong>memory-based Approach</strong> : 이전에 사용자가 봤던 영화와 비슷한 영화를 추천.
사용자/아이템 속성 간의 유사성을 <strong>직접 계산하여 추천</strong></p>
<blockquote>
<p>Similarities</p>
<ul>
<li><strong>Cosine Similarity:</strong> 두 벡터 사잇각의 cosine 값.<br>같은 방향(가까울수록) 1, 다른 반대 방향(유사도가 멀수록) 0</li>
<li><strong>Pearson Correlation Coefficient  (CenteredCosineSimilarity): ???</strong></li>
<li><strong>Jaccard Similarity :</strong> 두집합의 합집합 크기 대비 교집합  크기 비율
→ 이 3가지는 다음 포스팅에서 자세히 다루겠다!</li>
</ul>
</blockquote>
</li>
<li><p><strong>model-based</strong> : 인공지능이 파라미터를 학습해서 추천</p>
</li>
</ol>
</li>
</ul>
<p><strong>Advanced</strong></p>
<ul>
<li><strong>Multi-Amed Bandit</strong> (MAB) : <em>이건 베이지안 통계 수업 때 자세히 배웠었는데,</em> <strong>활용과 탐색</strong> 두 가지 중 하나를 선택하며 최적을 찾는 모델이다.<ul>
<li>활용 : 지금까지의 데이터상 반응이 가장 좋았던 아이템을 보여주는 것. </li>
<li>탐색 : 확신하기에 아직 데이터가 부족하지만 잠재력이 있는 새로운 아이템을 보여주는 것. </li>
</ul>
</li>
</ul>
<br>


<h2 id="24-evaluation">2.4 Evaluation</h2>
<h3 id="1-평가-환경-및-방법">(1) 평가 환경 및 방법</h3>
<aside>

<ul>
<li><p><strong>Offline evaluation</strong> 
사용중에 말고, 나중에 떼와서. 즉, 이미 수집된 과거 데이터를 사용하여 평가하는 방식</p>
</li>
<li><p><strong>Online evaluation</strong>
실제 운영 중인 서비스 환경에서 &#39;실제 사용자&#39;를 대상으로 평가하는 방식</p>
<ul>
<li><strong>A/B test</strong> : 여러 유저에게 다양한 버전으로 보여주고 → &#39;어떤 버전이 클릭률이 더 높다더라&#39; 하는 등의 분석 방법<br>ex) 넷플릭스 썸네일, UI/UX 등 여러 버전으로 배포. 
<em>실제로 서비스 기획 과정 중에, UT에서부터 MAZE 등을 사용해서 많이 했었다.</em></li>
</ul>
</li>
</ul>
<h3 id="2-evaluation-measure_평가-지표-및-속성">(2) Evaluation Measure_평가 지표 및 속성</h3>
<ul>
<li><p><strong>Acurracy</strong></p>
<blockquote>
<ul>
<li><strong>Rating Prediction  (별점/평점 오차 측정 방법)</strong>
사용자가 특정 아이템에 부여할 구체적인 수치를 정확하게 예측하는 것이 목표</li>
</ul>
</blockquote>
<ul>
<li>RMSE (Root Mean Square Error)</li>
<li>MAE (Mean Absolute Error)</li>
</ul>
<blockquote>
<ul>
<li><strong>Item Ranking (추천 순서를 고려한 오차 측정 방법)</strong>
사용자가 좋아할 만한 아이템을 <strong>순서대로 나열</strong>하는 것이 목표
추천은 기존 머신러닝보다 “순서”가 훨씬 중요하다는 차이점이 있음</li>
</ul>
</blockquote>
<ul>
<li>MAP <strong>(</strong>Mean Average Precision <strong>)</strong> :  모든k에 대한 Precision@k의평균</li>
<li>NDCG <strong>(</strong>NormalizedDiscountedCumulativeGain<strong>)</strong></li>
<li>MRR <strong>(</strong>Mean Reciprocal Rank<strong>)</strong></li>
</ul>
<ul>
<li><strong>Diversity :</strong> 얼마나 다양한가</li>
<li><strong>Novelty :</strong> 얼마나 새로운가</li>
<li><strong>Serendipity :</strong> 예상치 못한 즐거움을 주는가</li>
<li><strong>Stability:</strong> 시스템이 얼마나 안정적인가</li>
</ul>
</li>
</ul>
<br>

<p>끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[한국대학생IT경영학회 큐시즘] 31기 지원 과정 (지원서와 면접 꿀팁)]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0-%EC%A7%80%EC%9B%90-%EA%B3%BC%EC%A0%95-%EC%A7%80%EC%9B%90%EC%84%9C%EC%99%80-%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0-%EC%A7%80%EC%9B%90-%EA%B3%BC%EC%A0%95-%EC%A7%80%EC%9B%90%EC%84%9C%EC%99%80-%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81</guid>
            <pubDate>Sun, 21 Dec 2025 06:58:32 GMT</pubDate>
            <description><![CDATA[<p>지난 글에서는 왜 (Why)  큐시즘에 지원했는지를 이야기했다면, 이번에는 어떻게 (How) 지원했는지, 즉 지원서 작성 과정과 면접 후기를 공유하려고 한다. 예비 큐밀리들에게 큰 도움이 됐으면 하는 마음으로...</p>
<blockquote>
<p><strong>👉 지난 글 (큐시즘 소개, 지원 동기) 보러 가기</strong>
<a href="https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0-%EC%A7%80%EC%9B%90-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%81%90%EC%8B%9C%EC%A6%98%EC%9D%B4%EB%9E%80-%EC%9A%B4%EC%98%81%EC%A7%84%EA%B3%BC-%EC%9D%BC%EB%B0%98-%ED%95%99%ED%9A%8C%EC%9B%90-%EC%B0%A8%EC%9D%B4">https://velog.io/@ah_yo_ninde_yo/한국대학생IT경영학회-큐시즘-31기-지원-이야기-큐시즘이란-운영진과-일반-학회원-차이</a></p>
</blockquote>
<p>나는 운영진으로 큐시즘에 지원했기 때문에, 운영진 지원서와 학회원 지원서, 총 두 가지를 작성해야 했다.</p>
<ul>
<li>운영진 지원서: 경영총괄팀에 지원</li>
<li>학회원 지원서: 기획 파트에 지원</li>
</ul>
<p>각각의 지원서를 작성하면서 어떤 고민을 했고, 어떻게 답변을 구성했는지 하나씩 이야기해 보겠다.</p>
<h1 id="1️⃣-운영진-지원서--경영총괄팀">1️⃣ 운영진 지원서 – 경영총괄팀</h1>
<p>운영진 지원서에서는 크게 자기소개 및 지원 동기, 희망 업무와 강점, 협업 경험과 갈등 해결 방법, 행사 기획 아이디어를 작성해야 했다.</p>
<h2 id="📌-1-자기소개--경영총괄팀-지원-동기">📌 1) 자기소개 &amp; 경영총괄팀 지원 동기</h2>
<blockquote>
<p>어디든지 지원할 때 무조건 작성해야 하는 디폴트 문항..</p>
</blockquote>
<p>큐시즘은 매 기수마다 슬로건을 정하는데, 내가 지원한 31기 큐시즘의 비전은 &quot;도전하는 이들을 위한 시작점&quot;이었다. 이게 내가 지원 동기를 작성할 때 핵심이 되었다.</p>
<p>따라서 내 신념과 큐시즘의 비전을 연결해서 작성했다.</p>
<p><em>**&quot;실천 속에서 배우는 것이 주저하며 멈춰 있는 것보다 더 큰 가치를 만든다.&quot;
**</em>
나는 이 신념을 바탕으로, 도전과 협업을 통해 성장해왔다고 소개했다. 그리고 큐시즘에 지원한 이유를 설명하면서, 휴학을 하면서 새로운 직무로의 전환이나 네트워킹을 통해 시야를 확장하고 싶다는 점을 강조했다. 이 과정이 큐시즘의 비전과도 잘 맞았기 때문에, 큐시즘이 나에게 &#39;도전의 시작점&#39;이 될 거라고 확신했다.</p>
<p>또한, 큐시즘에서 가장 매력적으로 느꼈던 부분도 언급했다. 여러 요소 중에서 가장 인상적이었던 것은 경영총괄팀이 네트워킹을 담당하는 역할을 한다는 점이었다. 나는 <strong>사람과의 연결</strong>을 중요하게 생각하는 편이기 때문에, 큐시즘이야말로 내가 찾던 이상적인 환경이라고 느꼈다. 그래서 여러 운영진 팀 중에서도 경영총괄팀을 선택한 이유를 자연스럽게 연결했다.</p>
<h2 id="📌-2-희망-업무--나의-강점">📌 2) 희망 업무 &amp; 나의 강점</h2>
<blockquote>
<p>이 문항에서는 경영총괄팀에서 맡을 수 있는 업무(기획, 사무대관, 회계) 중 하나를 선택하고, 이를 어떻게 이해하고 있는지, 그리고 해당 업무에서 본인의 강점이 무엇인지를 작성해야 했다.</p>
</blockquote>
<p>나는 기획이 가장 관심 있는 분야였기 때문에, 답변을 작성할 때도 두괄식으로 ‘기획’이라고 명확하게 밝히고 시작했다. 그리고 <strong>큐시즘에 대한 이해도</strong>가 높다는 점을 어필하기 위해, 학회를 알아보면서 찾은 자료들을 적극적으로 활용했다. </p>
<p>지원서에서는 큐시즘을 알아보면서 접한 <strong>OB들의 면접 팁 영상, MT, 송별회 영상</strong> 등을 인상 깊게 봤다고 작성했다. 
_실제로도 송별회 영상이 30분이나 된다는 점이 진짜 인상적이었다. _</p>
<p>단순히 학회 활동을 공유하는 것이 아니라, 학회원들 간의 유대감과 협업 문화가 자연스럽게 드러나는 장면들이 많았다고 느꼈고, 따라서 큐시즘이 단순히 프로젝트를 진행하는 곳이 아니라, 함께 성장하는 네트워크라는 확신을 가졌었다. 때문에 이러한 네트워크를 형성하는 역할이 경영총괄팀이라는 점에서, 내가 지원한 팀과 내가 추구하는 가치가 찰떡콩떡처럼 잘 맞는다고 생각했다는 내용을 지원서에 담았다.</p>
<p>또한, 큐시즘은 IT 및 서비스 기획 학회이기 때문에 팀워크가 필수적이며, 원활한 팀워크를 위해서는 네트워킹이 잘 형성되어야 한다고 생각했다. 그래서 OT나 MT 같은 네트워킹 행사를 기획하고 싶다는 내용을 포함했다.</p>
<p>이와 함께, 이러한 업무를 수행할 수 있는 내 강점을 구체적으로 제시했다.</p>
<ul>
<li>학생회 기획부에서 직접 행사를 기획하고 운영했던 경험 (feat. 알파의 꼬꼬무,,)</li>
<li>학회에서 새로운 행사를 기획했던 경험 (가이드 세션이 이렇게 쓰이는구나.. 땡큐,,)</li>
</ul>
<p>이 두 가지 사례를 통해 내가 실제로 기획을 해본 경험이 있다는 점을 강조했다. </p>
<p>마지막으로, 경영총괄팀에서 기획뿐만 아니라 대관 및 회계 업무와도 협업해야 하기 때문에, 이에 대한 기본적인 이해가 있고 원활하게 협업할 수 있을 것이라는 점을 덧붙이며 답변을 마무리했다.</p>
<h2 id="📌-3-협업-과정에서-겪은-갈등--해결-방법">📌 3) 협업 과정에서 겪은 갈등 &amp; 해결 방법</h2>
<p>이 문항에서는 협업 과정에서 겪었던 갈등과 이를 해결했던 방법을 작성해야 했다. </p>
<p>나는 IT 프로덕트 기획 과정에서 발생했던 갈등을 예시로 들었다.
해당 경험을 바탕으로, 팀 전체의 목표와 개인 목표를 조율하는 방식이 중요하다는 점을 지원서에 작성했다. 그리고 큐시즘에서도 비슷한 상황이 발생할 경우, 우선순위를 명확히 설정하고, 팀원들의 의견을 조정하는 방식으로 협업을 원활하게 이끌어나가겠다는 내용을 담았다.</p>
<h2 id="📌-4-행사-기획-아이디어--나를-합격시킨-결정적-문항">📌 4) 행사 기획 아이디어 – 나를 합격시킨 결정적 문항!</h2>
<p>이 문항이야말로 내가 큐시즘 운영진으로 합격하는 데 가장 큰 영향을 준 질문이자 개인적으로 뜻깊은 문항이다! </p>
<h3 id="💭-내가-제안한-행사-아이디어-4가지">💭 내가 제안한 행사 아이디어 4가지</h3>
<ol>
<li><p>큐테드 – 영감을 나누는 세션</p>
</li>
<li><p>큐 챌린지 – &#39;OT&#39;에서 목표를 적고, 마지막 세션인 &#39;큐시즘의 밤&#39;에서 다시 돌아보는 타임캡슐</p>
</li>
<li><p>큐펀딩 – 밋업 프로젝트에서 전시회와 연계하여 펀딩 시스템 도입</p>
</li>
<li><p>큐포터즈 – 큐시즘 공식 서포터즈 운영</p>
</li>
</ol>
<p>이렇게 아이디어를 총 4가지 작성했고, 단순히 아이디어만 나열하는 것이 아니라 실제 진행 방안까지 서술했던 것이 좋게 평가된 것 같다. 구체적으로는 행사의 진행 시기, 운영 방식, 경영총괄팀에서 담당할 역할까지 서술하려고 노력했다.</p>
<ul>
<li>실제로 큐시즘에서 적용할 수 있을지?</li>
<li>운영진으로서 현실적으로 실행 가능한가?</li>
<li>기획 의도와 기대 효과가 명확한가?</li>
</ul>
<p>특히 이 세 가지를 고려해서 답변을 구성했다.</p>
<hr>
<p>큐포터즈 관해서는 면접에서도 관련 질문이 나왔다.</p>
<p><strong>Q. 큐포터즈와 대외홍보팀의 차이는 뭔가요?</strong>
<strong>A. 답변</strong></p>
<ul>
<li>대외홍보팀 → 공식적인 채널을 통해 큐시즘을 홍보하는 역할</li>
<li>큐포터즈 → 좀 더 자세하고, 오프더레코드 느낌을 담아, 친숙하면서도 구체적인 정보를 전달하는 것이 목표
라고 답했다..! 그러니 큐포터즈 많관부</li>
</ul>
<blockquote>
<p><strong>💡 이때 제시한 아이디어가 실제로 실현되었다!</strong></p>
</blockquote>
<p>지금 큐시즘 활동을 시작한 지 한 달쯤 된 시점에서, 내가 지원서에서 작성했던 아이디어 중 <strong>&quot;큐포터즈&quot;</strong>와 <strong>&quot;큐 챌린지&quot;</strong> 두 가지가 이미 실현되었다!!
<em>이맛에 운영진하지</em></p>
<p>내가 지금 쓰고 있는 이 블로그도 큐포터즈 활동의 일환!</p>
<p>특히 큐시즘이 아이디어를 존중하고, 실행할 기회를 준다는 점이 너무 감사했다.</p>
<p>그냥 &quot;좋은 생각이네&quot; 하고 끝나는 것이 아니라, 실제로 운영하도록 지원해 주면서 피드백도 아끼지 않으며, 더 발전시킬 기회를 준다는 점에서, 큐시즘이 단순한 학회가 아니라 도전을 장려하는 환경이라는 걸 다시 한번 실감했다. </p>
<h1 id="2️⃣-학회원-지원서--기획-파트">2️⃣ 학회원 지원서 – 기획 파트</h1>
<p>운영진 지원서와는 별개로, 학회원(파트) 지원서도 작성해야 했다. 앞서 말했다시피, 기획 파트에 지원했고, 이 지원서에서는 기획자로서의 경험과 역량을 중심으로 답변을 구성해야 했다.</p>
<h2 id="📌-1-pm-희망-여부--관심-분야">📌 1) PM 희망 여부 &amp; 관심 분야</h2>
<blockquote>
<p>첫 번째 질문에서는 PM(프로덕트 매니저) 희망 여부와 관심 분야를 간단히 작성해야 했다.</p>
</blockquote>
<p>PM을 희망한다면, 이후 면접 준비에서 <strong>&#39;본인이 생각하는 PM의 역할과 역량&#39;</strong>에 대해서 고민해보고 가는 것을 추천한다!</p>
<p>나는 관련한 질문이 면접에서 이어졌다.</p>
<p><strong>&quot;본인은 팔로워형인지, 서포터형인지, 리더형인지?&quot;</strong></p>
<p>나는 서포터형이라고 대답했다. 그리곤, 꼬리 질문으로 &quot;PM은 팀을 총괄하는 역할인데, 서포터형인 본인이 PM 역할을 어떻게 수행할 것인가?&quot;라고 질문했다.</p>
<p>이에 대해 나는 &quot;잘 따라봤던 사람이 잘 이끈다.&quot;라는 답변을 토대로, 팔로워나 서포터로 있으면서 리더들이 어떻게 소통할 때 팀원들이 더 잘 참여하고 협력하는지를 관찰한 경험이 있다는 점을 강조했다. 이 경험을 바탕으로, PM 역할을 맡게 되면 팀원들이 잘 협력할 수 있도록 조율하는 데 강점을 발휘할 것이라고 답변했다.</p>
<p>어찌저찌 답변은 했으나, 이 글을 보는 예비 큐밀리가 PM을 하고 싶은데 본인의 성향과 다소 맞지 않는다면, <strong>단순히 적극성을 보이기 위해 희망한다고 적을 필요가 없다고 얘기해 주고 싶었다!</strong></p>
<p>그리고 만약 희망한다면, &#39;왜 PM을 하고 싶은지, 그리고 적성과 다른 점을 어떻게 극복할 수 있을지&#39;를 명확하게 어필하는 것이 중요하다고 느꼈다.</p>
<h2 id="📌-2-도전에-대한-경험">📌 2) 도전에 대한 경험</h2>
<p>두 번째 문항은 &quot;인생에서 가장 두려웠던 도전과 이를 극복한 과정, 그리고 해당 도전이 삶에 남긴 의미&quot;를 작성하는 것이었다.</p>
<p>서비스 기획과 관련된 경험이 아니어도 괜찮다고 했기 때문에, 나는 기획 경험보다는 내가 처음으로 도전하면서 두려움을 느꼈던 경험을 적기로 했다. </p>
<p>해외 관련 경험은 너무 흔한 도전 사례일 것 같아서, 밴드부 활동을 했던 경험을 작성했다.</p>
<p>~~ 이 경험을 통해 도전에 몰입하는 법을 배웠고, 이후에는 더 큰 도전도 할 수 있는 자신감이 생겼다.</p>
<p>특히, 단순히 도전의 수를 늘리는 것이 아니라, 내가 진정으로 몰입할 수 있는 도전을 선택하는 역량을 키웠다는 점을 강조했다.</p>
<h2 id="📌-3-협업-과정에서-깨달은-실수와-배운-점">📌 3) 협업 과정에서 깨달은 실수와 배운 점</h2>
<p>세 번째 문항에서는 협업 과정에서 당시에는 몰랐지만, 돌이켜보니 내 방식이 틀렸다고 느꼈던 순간을 작성해야 했다.</p>
<p>나는 팀 내부에서만 문제를 해결하려 했던 실수를 예시로 들었다.</p>
<p>당시 교내 학회에서 컨퍼런스를 준비하고 있었는데, 프로젝트의 특성상 모든 팀이 같은 주제를 다루는 것이 아니라 각기 다른 목표를 설정하고 진행하는 방식이었다. 어떤 팀은 프로토타입을 제작했고, 또 다른 팀은 서비스 기획 단계까지만 진행했다. 이런 상황에서 나는 각 팀이 진행하는 프로젝트의 범위가 다르니, 외부 팀에게 조언을 구하는 것이 어려울 것이라 판단했다. 그래서 팀원들끼리만 해결하려 했지만, 논의가 계속 돌기만 하고 진전이 없었다.</p>
<p>그러다 발표 직전, 답답한 마음에 외부 팀원인 선배에게 가볍게 질문했는데, 예상치 못한 인사이트를 얻었다. &quot;진작에 물어봤으면 더 쉽게 해결할 수 있었을 텐데!&quot;라고 생각했다.</p>
<p>이 경험을 통해, 문제를 내부에서만 해결하려 하기보다 다양한 관점을 받아들이는 것이 중요하다는 걸 깨달았다. 큐시즘에서도 같은 실수를 반복하지 않도록 필요할 때는 외부 피드백을 적극적으로 활용하는 태도를 가지겠다는 다짐을 하게 되었다.</p>
<p>​</p>
<p>어찌보면 너무 당연한 깨달음이어서, 이 사례가 최선의 답변 일진 모르겠지만.. 지원서를 준비하는 분들이 조금이나마 참고할 게 있을까 싶어 공유해본다! 각자 상황에 맞게 더 좋은 소스가 있다면 맞춰서 작성하는 게 좋겠다!</p>
<h2 id="📌-4-큐시즘에서-기획해보고-싶은-웹앱-서비스">📌 4) 큐시즘에서 기획해보고 싶은 웹/앱 서비스</h2>
<p>나는 뷰티 예약 &amp; 정보 서치 플랫폼을 기획했다.</p>
<ul>
<li>속눈썹 펌이나 네일아트를 받으려면 SNS, 블로그, 예약 플랫폼을 모두 검색해야 해서 불편</li>
<li>정보가 흩어져 있고, 가격, 후기, 디자인을 한 번에 비교하기 어려움</li>
</ul>
<p>이러한 페인포인트를 문제정의로 제시했다.
면접에서 생각보다 이와 관련한 질문은 없었다.</p>
<h2 id="📌-5-다음-학기-계획--큐시즘-최우선">📌 5) 다음 학기 계획 – 큐시즘 최우선!</h2>
<p>이 문항을 물어보는 의도는 큐시즘에 최선을 다할 수 있는지를 확인하는 것일 거기 때문에, 큐시즘이 최우선 순위임을 거듭 강조했다.
<em>(실제로도 큐시즘이 최우선이여서 가능했던 답변)</em> </p>
<p>근데 진짜 큐시즘은 시간 투자를 많이 해야 한다. 나 혼자가 아닌, 모든 활동이 팀으로 이루어지기 때문에, <strong>책임감을 가지고 충분한 시간 투자</strong>를 할 수 있어야 한다. 이게 어려울 것 같다고 판단되면 솔직히 얘기하거나 지원 시점을 다시 고민해보길 추천한다.</p>
<p>실제로 면접에서 &quot;다 하면서 큐시즘 가능하냐?&quot;라고 물어봤을 때,  <code>2) 도전에 대한 경험</code> 에서 답한 것처럼, &quot;도전의 역량을 여러 분야로 퍼뜨려 활용한다&quot;는 점을 연결해 답변했다.</p>
<p>​</p>
<p>​</p>
<hr>
<p>이렇게 지원서를 작성하고, 포트폴리오를 함께 제출했더니, 서류 합격이 되었다!!!!!!!!! (두근)</p>
<p>이제 남은 단 하나의 관문,, 면접!</p>
<h1 id="3️⃣-면접-후기">3️⃣ 면접 후기</h1>
<p>면접은 나에 대한 첫인상을 남기는 기회이기도 하지만, 나도 내가 지원한 곳의 분위기를 알아갈 수 있는 기회이기도 하다! </p>
<p>내가 느낀 큐시즘의 첫인상은 &quot;되게 친절하고,,, 역시 체계적이다!&quot;였다.</p>
<p>면접 장소까지 오는 길을 사진으로 안내해 주는 세심한 배려도 좋았고, 면접 건물 곳곳에 붙어 있던 면접 안내 종이들을 보고, 정말 체계적으로 운영되고 있다는 느낌을 받았다. 큐시즘 OB분들 첵오..!</p>
<p>또, 나는 설탕가든 양이 대기 시간에 계속 말을 걸면서 긴장을 덜어준 게 정말 도움이 됐다! 😍</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/0023b159-0c0d-4347-aec2-b2dd6bab2b7a/image.png" alt=""></p>
<p>⭐면접을 보고 나니, 만족한 점도 있지만 아쉬운 점도 있었다. ⭐</p>
<p>다음 지원자들이 더 철저히 준비할 수 있도록 핵심 포인트만 정리해 보자면!!</p>
<h3 id="1-지식-기반-질문-꼭-대비하자">1. 지식 기반 질문, 꼭 대비하자!</h3>
<p>IT 서비스 기획 관련 주요 개념, PM 역할(희망한다 한 경우) 등 기본 개념 숙지는 필수!</p>
<p>와이어프레임, 사용자 플로우, QA, 협업 툴(피그마 주요 기능..? 혹은 사용 경험) 등</p>
<p>→ 나는 대답을 명쾌하게 못해서, 더 공부하겠다고 무한 반복했음...</p>
<h3 id="2-너무-긴장된다면-안정제-고려해볼-것">2. 너무 긴장된다면, 안정제 고려해볼 것!</h3>
<p>그리고! 나는 큐시즘 면접에서 처음으로 안정제를 먹어봤다. 실제로 아예 안 떨린 건 아니지만, 확실히 덜 떨렸던 느낌이었다. 플라시보 효과 때문인진 모르겠지만, 훗날 취업 면접 대비용으로라도 경험해 볼 만했다!</p>
<p>(이전 면접 후기를 찾아보니, 생각보다 많은 사람들이 안정제를 챙겨 먹었다는 걸 보고 처음 알았다...!</p>
<p>나는 청심환만 알던 할미였기에 너무 반가운 존재였다.)</p>
<h3 id="3-지원하는-곳큐시즘에-대한-애정-보이기">3. 지원하는 곳(큐시즘)에 대한 애정 보이기</h3>
<p>답변 중간중간 or 마지막 하고 싶은 말에서 큐시즘에 대한 아는 정보 다 얘기하기!! 나는 아래 영상을 보고, 마지막 말 언급함.</p>
<p>내가 지원하고자 하는 곳에 애정을 보이면 호감도 급상승은 당연한 이치..!</p>
<p><a href="https://youtu.be/b0WMObYeGkM?si=TVzQ1HfoKR41vGID">https://youtu.be/b0WMObYeGkM?si=TVzQ1HfoKR41vGID</a>
​</p>
<h3 id="4-아래와-같은-마인드-장착은-선택-아닌-필수">4. 아래와 같은 마인드 장착은 선택 아닌 필수..</h3>
<ul>
<li>생각보다 면접관들도 긴장한다.. 아무리 그래도 우리는 다같은 대학생 아니겠는가..</li>
<li>면접관 얼굴이 굳어있다? 그들도 긴장했을 확률 200%,, 실제론 천사같은 이들이니 쫄지말자!</li>
<li>&quot;내가 곧 인재요, 당신들이 날 보고 싶어하니, 와준다..&quot; 이런 마인드..</li>
<li>그리구 면접 시, 별명 및 MBTI 등 당황스러운 질문들은 사실 여러분의 긴장을 풀기 위함이에오..💙</li>
</ul>
<p>사실 말이 쉽지..ㅎㅎ 나두 왕긴장했었다ㅠㅠ
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/7ad25bba-cfff-4e2b-a3bd-c0a38955fcd3/image.png" alt=""></p>
<hr>
<p>이렇게 면접까지 마쳤더니</p>
<p>합..격..! </p>
<p>참... 다행이다~!</p>
<p>💙 이 후기가 예비 큐밀리들에게 도움이 되길 바라며, 모두 좋은 결과 있기를! 🔥💙</p>
<p>^ ^
( ̳• · • ̳)
/ づ♡     &quot;큐시즘 사랑해&quot;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[한국대학생IT경영학회 큐시즘] 31기 지원 이야기 (큐시즘이란? 운영진과 일반 학회원 차이?)]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0-%EC%A7%80%EC%9B%90-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%81%90%EC%8B%9C%EC%A6%98%EC%9D%B4%EB%9E%80-%EC%9A%B4%EC%98%81%EC%A7%84%EA%B3%BC-%EC%9D%BC%EB%B0%98-%ED%95%99%ED%9A%8C%EC%9B%90-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0-%EC%A7%80%EC%9B%90-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%81%90%EC%8B%9C%EC%A6%98%EC%9D%B4%EB%9E%80-%EC%9A%B4%EC%98%81%EC%A7%84%EA%B3%BC-%EC%9D%BC%EB%B0%98-%ED%95%99%ED%9A%8C%EC%9B%90-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Sun, 21 Dec 2025 06:32:09 GMT</pubDate>
            <description><![CDATA[<p>너무 길어져서, 내 지원서 내용은 다른 패이지에서 더 자세히 다루겠음</p>
<blockquote>
<p><strong>👉 지원서 관련 상세 글</strong>
<a href="https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0-%EC%A7%80%EC%9B%90-%EA%B3%BC%EC%A0%95-%EC%A7%80%EC%9B%90%EC%84%9C%EC%99%80-%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81">https://velog.io/@ah_yo_ninde_yo/한국대학생IT경영학회-큐시즘-31기-지원-과정-지원서와-면접-꿀팁</a></p>
</blockquote>
<h1 id="1️⃣-첫-휴학-그리고-큐시즘을-선택한-이유">1️⃣ 첫 휴학, 그리고 큐시즘을 선택한 이유</h1>
<p>2025년은 내 첫 휴학 도전기다! </p>
<p>나는 휴학에 꽤 많은 의미를 뒀다..! 장장 3살 때 어린이집을 다닌 이후 대학교까지, 늘 학교라는 일반적인 흐름 속에서 살아오다가, 처음으로 내가 선택해서 내 시간을 온전히 설계하는 첫 기회라 생각되기 때문이다. </p>
<p>지금까지는 너무 당연하게 흘러가는 길을 걸어왔지만, 
이제 곧 사회로 나가야 하는 시점에서 내가 <strong>진정으로 어떤 인생을 살아야 할지 고민</strong>도 하고, 학교 활동을 주로 해왔던 나에게 더 넓은 시야를 가질 시간이 필요했다. 그리고 나는 어딘가에 소속되지 않으면 무기력해지는 타입이라, 휴학을 하면서도 새로운 둥지를 틀어야 했다.</p>
<blockquote>
<p>그래서 내가 선택한 첫 둥지는 KUSITMS(큐시즘) 이었다!</p>
</blockquote>
<p>어느 둥지에 자리를 잡을까.. 하던 고민의 시작은 <strong>직무 고민</strong>에서부터였다.</p>
<p>지난 학기, 학과 내 학회인 D&amp;A에서 컨퍼런스에서 프로젝트를 진행했었다. 이때 당시에는 AI를 적용한 프로젝트를 만드는 게 처음이라 단순한 스트림릿 구현까지만 진행했었는데, 이후에 실제 웹사이트로 만들어보고 싶다는 생각이 들었다. 그런데 문제는, 도대체 어디서부터 뭘 해야 할지 감이 잡히지 않았고, 이런 실무적인 것들을 배우고 싶었다.</p>
<p>또, 우리는 같은 과 사람들끼리 프로젝트를 하다 보니 모두가 함께 코딩을 했었는데, 이걸 실제 서비스로 확장하려면 단순한 코딩 이상의 체계적인 역할과 기획이 필요하겠구나 싶었다. 그러면서부터 기획이라는 직무가 눈에 들어왔다.</p>
<p>마침 코딩할 때 아래 짤과 같은 기분 + 개발이 막히면 기한 내에 못할까봐 가슴이 두근거리고.. 계속 붙들고 있는다고 해결되지 않는 점 등..이 겹치면서 적성에 맞는지에 대한 고민도 강해져서, 과감히 기획이란 직무도 경험해보고자 했다!</p>
<p>이런 기분.. 다들 알자나여..?</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/68bcd5cb-e58a-49d1-b9bf-3e6aefa98d3b/image.gif" alt=""></p>
<h2 id="✅-왜-하필-큐시즘">✅ 왜 하필 큐시즘?</h2>
<p>이런 고민을 하던 차에 큐시즘을 알게 되었다. 같은 과 선배가 서비스 런칭을 준비하면서 설문 조사를 하던 때였다. 우리 학과에서도 프로젝트를 통해 서비스를 런칭하긴 하지만, 대체로 AI나 데이터 분석 같은 &#39;기술 활용&#39;에 초점이 둔 성격이 강했는데, 큐시즘은 &#39;기획/디자인/개발&#39;파트로 나뉘어 프로젝트를 진행한다는 점이 흥미로웠다. 온전히 서비스의 AtoZ를 다루는 느낌..</p>
<p>또 휴학 동안에는 단기 프로젝트보다 체계적인 조직 속에서 장기적으로 활동하는 경험을 하고 싶었다. </p>
<p>때문에 기획 역량도 키우고, 학회원들 간 네트워킹도 활발하다는 선배의 추천을 받고 확신이 들었다!</p>
<ul>
<li>학회의 비전이 매 기수마다 새롭게 설정되는 점</li>
<li>인스타 및 유튜브 운영이 활발한 점 (MT 영상 등 유잼 영상 다수 보유)</li>
<li>기업 협찬과 프로젝트 운영을 통해 실질적인 경험을 쌓을 수 있다는 점</li>
</ul>
<p>이런 점들을 보고 굉장히 체계적인 곳이라는 생각이 들었다. </p>
<p>특히, 기업과 함께 프로젝트를 진행한다는 점에서 이 학회가 얼마나 실질적이고 유의미한 경험을 제공하는지 확신이 들었다.</p>
<p>&#39;기업과 함께한다&#39;는 것만큼 이 학회가 체계적이고 유의미하다는 지표는 없지 싶다…</p>
<br>
그럼 도대체 큐시즘이 뭐 하는 곳이냐?! 라는 물음에 정리해본다면

<h1 id="2️⃣-kusitms큐시즘이란">2️⃣ KUSITMS(큐시즘)이란?</h1>
<p>💡<strong>한국대학생 IT 경영학회</strong>로, 매 기수 70-80명의 대학생들이 모여 각각 기획, 디자인, 개발(프론트/백엔드) 파트를 맡아 IT 프로덕트를 만드는 학회!!</p>
<p>기업과 연계하여 진행되는 기업 프로젝트, 자체적으로 서비스를 만드는 밋업 프로젝트 등 실무형 커리큘럼과 각종 네트워킹까지 알찬 학회!</p>
<p>더 구체적인 건 공식 홈페이지 및 인스타 참고!</p>
<ul>
<li><p>홈페이지
<a href="https://www.kusitms.com/">https://www.kusitms.com/</a></p>
</li>
<li><p>인스타
<a href="https://www.instagram.com/kusitms_official?utm_source=ig_web_button_share_sheet&amp;igsh=ZDNlZDc0MzIxNw==">https://www.instagram.com/kusitms_official?utm_source=ig_web_button_share_sheet&amp;igsh=ZDNlZDc0MzIxNw==</a></p>
</li>
</ul>
<h1 id="3️⃣-그럼-어떻게-조인해요">3️⃣ 그럼 어떻게 조인해요?</h1>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/58daa61d-e85a-41c2-aeff-0ef801f707d9/image.png" alt=""></p>
<p>큐시즘에 속하게 된 과정은 다음과 같다..</p>
<h2 id="✅-운영진경영총괄팀--파트기획-를-선택한-이유">✅ 운영진(경영총괄팀) &amp; 파트(기획) 를 선택한 이유</h2>
<h3 id="운영진경영총괄팀으로-지원">운영진(경영총괄팀)으로 지원?</h3>
<p>큐시즘 지원 시 ‘운영진 vs 학회원’을 선택해야 했다. (운영진은 학회원이 하는 프로젝트 참여 + 운영 관련 업무가 추가)</p>
<p>나는 하루 빨리 어딘가에 합류되어야 했기 때문에 (심신의 안정을 위해서라도), 모집 일정이 더 빠른 운영진을 택했다. 이것은 훗날 아주아주 잘한 선택이 되었다고 한다.</p>
<p>일반 학회원으로 지원한다면 어느 파트(기획/디자인/개발 중 택1)를 할지만 정하면 되지만, 운영진으로 지원했기에, 파트 뿐만 아니라 운영진 소속팀도 정해야 한다! </p>
<p>운영진은 크게 경영총괄팀, 대외홍보팀, 교육기획팀으로 나뉘는데, 나는 경영총괄팀을 택했다. </p>
<h4 id="💙-경영총괄팀">💙 경영총괄팀</h4>
<p>내가 속한 팀이라, 가장 자세하게 얘기 가능하다..</p>
<ul>
<li>기획(네트워킹 관리): 전문가 초청 강연, OB 초청데이, 큐시즘의 밤 등 네트워킹 세션 기획 및 진행</li>
<li>사무/대관: 학회 활동 장소 섭외 및 대관 업무 &amp; 각종 소모임 관리</li>
<li>회계: 학회 예산 및 회계 관리</li>
</ul>
<p>→ 나는 이 중, &#39;기획&#39;이다!</p>
<blockquote>
<p>_ cf) 지원 당시, 회계 담당 희망 여부를 선택할 수 있었는데 나는 돈 관리에 대한 부담이 있었음에도 불구하고 선택을 안 하면 적극성이 떨어져 보일까 봐 고민했었다. 
_
→ <strong>결론</strong>: 그런 거 신경 안 써도 됨!! 그냥 진짜 할 건지 말건지 물어본 거였다!</p>
</blockquote>
<h4 id="💙-대외홍보팀">💙 대외홍보팀</h4>
<p>큐시즘의 얼굴!
모든 홍보물 제작, 유튜브/릴스 콘텐츠 운영, 물품 협찬 제안 등 담당</p>
<h4 id="💙-교육-기획팀">💙 교육 기획팀</h4>
<p>여러 큐밀리들(큐시즘 학회원 별명)을 홀리는 커리큘럼을 만드는 곳!
큐시즘의 핵심 활동인 기업프로젝트와 밋업 프로젝트 커리큘럼 기획</p>
<h4 id="💙-학부학-학회장--부학회장">💙 학부학 (학회장 &amp; 부학회장)</h4>
<p>YB는 지원할 수 없지만, 학회의 든든한 기둥이기에 소개!</p>
<p>한 학기 활동 전반과 큐시즘을 대표한 각종 소통 담당!
큐시즘이 잘 운영되는 데에는 세계 최고 섹시한 일처리를 담당해 주시는 학부학이 있다</p>
<h3 id="내가-경영총괄팀을-선택한-이유">내가 경영총괄팀을 선택한 이유?</h3>
<p>나는 파트로는 &#39;기획&#39;을 택했는데, 이에 대한 경험이 없기 때문에 배우자는 마음가짐을 더 크게 먹었고, </p>
<p>운영진으로서는 경험이 풍부한 걸 택해서 기여하고자 하는 마음을 더 먹었다.</p>
<p>이전에 학과 학생회에서 네트워킹 기획을 담당했던 경험이 있어서, 큐시즘에서도 비슷한 경험을 살릴 수 있을 거라 생각했다. </p>
<p>이 글을 읽고 큐시즘이 궁금해졌다면, 바로 지원하자! 😉
휴학생활로, 대외활동으로, 큐시즘 강추한다!</p>
<p>Welcome to KUSITMS!!!!!!!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[모각작, 모여서 각자 작업하는 시간] 8~9주차 - 전시회와 데모데이, 가설을 증명하고 마침표를 찍다
]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-89%EC%A3%BC%EC%B0%A8-%EC%A0%84%EC%8B%9C%ED%9A%8C%EC%99%80-%EB%8D%B0%EB%AA%A8%EB%8D%B0%EC%9D%B4-%EA%B0%80%EC%84%A4%EC%9D%84-%EC%A6%9D%EB%AA%85%ED%95%98%EA%B3%A0-%EB%A7%88%EC%B9%A8%ED%91%9C%EB%A5%BC-%EC%B0%8D%EB%8B%A4</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-89%EC%A3%BC%EC%B0%A8-%EC%A0%84%EC%8B%9C%ED%9A%8C%EC%99%80-%EB%8D%B0%EB%AA%A8%EB%8D%B0%EC%9D%B4-%EA%B0%80%EC%84%A4%EC%9D%84-%EC%A6%9D%EB%AA%85%ED%95%98%EA%B3%A0-%EB%A7%88%EC%B9%A8%ED%91%9C%EB%A5%BC-%EC%B0%8D%EB%8B%A4</guid>
            <pubDate>Wed, 17 Dec 2025 15:32:45 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="모각작-서비스-바로가기">모각작 서비스 바로가기</h3>
</blockquote>
<h4 id="⏰-httpswwwmogakjakcom">⏰ <a href="https://www.mogakjak.com/">https://www.mogakjak.com/</a></h4>
<blockquote>
<p>런칭까지의 과정 요약은 여기서 ! 👉 <a href="https://velog.io/@ah_yo_ninde_yo/%ED%98%BC%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%A9%B4-%EB%94%B4%EC%A7%93%ED%95%98%EB%8A%94-%EB%82%98%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%A7%81%EC%A0%91-%EB%A7%8C%EB%93%A4%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%9F%B0%EC%B9%AD%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B8%B0%EB%A1%9D">[모각작-런칭까지의-최종-기록]</a></p>
</blockquote>
<blockquote>
<p>&lt;목차&gt;
0. Intro, 여정을 마무리하며</p>
</blockquote>
<ol>
<li>8주차, 전시회 회고 : 가설을 증명하다</li>
<li>번외, 마케팅 전략 : &#39;참여하는&#39; 콘텐츠</li>
<li>9주차, 데모데이 회고 : 경쟁과 고립 사이, &#39;지속 가능한 몰입&#39;을 제안하다</li>
<li>Outro, 비하인드</li>
</ol>
<blockquote>
<p>🖐️<em>*<em>글을 읽기 전에 잠깐. *</em></em>
<strong>모각작(Mogakjak)</strong>이란? &quot;함께 또 따로, 느슨한 연대&quot;를 지향하는 온라인 공유 타이머 서비스입니다. 혼자 집중하기 힘든 사람들이 모여, 서로 감시하는 대신 각자의 몰입 시간을 공유하며 함께 성장하는 문화를 만듭니다.</p>
</blockquote>
<p>👉 서비스 탄생 배경과 지난 개발 과정이 궁금하다면? </p>
<ul>
<li><a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-12%EC%A3%BC%EC%B0%A8-%ED%98%91%EC%97%85%EB%B0%A9%EC%8B%9D-%EB%B0%8F-MVP-%EC%84%A4%EC%A0%95">https://velog.io/@ah_yo_ninde_yo/모각작-모여서-각자-작업하는-시간-12주차-협업방식-및-MVP-설정</a></li>
<li><a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-37%EC%A3%BC%EC%B0%A8-UT-%EB%B0%8F-%EC%9D%B8%ED%84%B0%EB%B7%B0%EC%97%90%EC%84%9C-%EB%B0%9C%EA%B2%AC%ED%95%9C-%EC%9D%B8%EC%82%AC%EC%9D%B4%ED%8A%B8-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%B5%9C%EC%A2%85-QA%EA%B9%8C%EC%A7%80">https://velog.io/@ah_yo_ninde_yo/모각작-모여서-각자-작업하는-시간-37주차-UT-및-인터뷰에서-발견한-인사이트-그리고-최종-QA까지</a></li>
</ul>
<h1 id="0️⃣-intro-여정을-마무리하며">0️⃣ Intro, 여정을 마무리하며</h1>
<p>어느덧 약 두 달간의 대장정이 끝났다.
이번 글에서는 프로젝트의 피날레였던 <strong>8주차 전시 부스 운영</strong>과 <strong>9주차 최종 발표(데모데이)</strong>를 회고해 보려 한다.</p>
<p>사실 이번 32기 커리큘럼은 지난 31기와 순서가 조금 달랐다. 지난번에는 전시와 데모데이 발표를 같은 날 진행해서, 발표 준비에 치중하느라 전시를 급하게 준비했던 아쉬움이 있었다. 
나 역시 지난 기수 &#39;디어케이&#39; 밋업 당시, 하고 싶었던 아이디어는 많았지만 시간과 리소스 부족으로 타협해야 했고, 전시 장소의 접근성 문제로 지인 초대를 망설였던 기억이 있다.</p>
<p>그러나 이번 32기에는 전시회를 먼저 진행하고, 그 다음 주에 데모데이를 하는 방식으로 변경되었다. 덕분에 전시회에서 생생한 사용자 피드백을 확보할 수 있었고, 이를 바탕으로 데모데이 발표 내용을 보강하며 더 치밀한 전략으로 서비스를 검증할 수 있었다.</p>
<h1 id="1️⃣-8주차-전시회-회고--가설을-증명하다">1️⃣ 8주차, 전시회 회고 : 가설을 증명하다</h1>
<ul>
<li><strong>전시 일자</strong> : 11/22 (토), 12:00 ~ 17:00</li>
<li><strong>전시 장소</strong> : 을지트윈타워 오오오
(을지로4가역 1분 컷 바로 앞 건물 3층) <a href="https://www.spacecloud.kr/space/74019">https://www.spacecloud.kr/space/74019</a>
접근성이 워낙 좋아 가족, 지인분들은 물론 지나가던 분들도 많이 찾아주셨다. 덕분에 쉴 새 없이 관람객이 들어와 전시 내내 활기찬 분위기여서 넘넘 좋았다!!!!!<p align="center">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/70043a4a-7c5f-4eaf-b8ae-e559cde3192f/image.jpg" width="70%">


</li>
</ul>
<h2 id="✅-전시-기획-의도">✅ 전시 기획 의도</h2>
<p>전시회를 준비하며 가장 경계했던 건, &#39;그냥 서비스 한번 훑어보고 굿즈 받아가는 일회성 이벤트&#39;가 되는 것이었다. 굿즈가 사람을 모으기 위한 &#39;예쁜 미끼&#39;로만 소비되길 원치 않았고, 관람객이 부스를 나설 땐 &#39;모각작&#39;의 필요성을 확실히 느끼게 하고 싶었다. </p>
<p>그래서 우리는 다소 욕심 있는 <code>목표</code>를 세웠다.</p>
<ul>
<li>*<em>서비스 이해도 100% *</em>: &#39;혼자 집중하기 어려운 사람들&#39;에게 부담 없는 연대감을 알려주자.</li>
<li><strong>시연 참여율 90%</strong> : 타이머를 통해 &#39;시간을 통제하며 미션을 완수하는 경험&#39;을 시키자.</li>
<li><strong>온라인 전환율 80% : 오프라인 경험을 온라인 사용으로 연결하자.</strong></li>
</ul>
<h2 id="✅-컨셉-및-전략--3단계-몰입-여정">✅ 컨셉 및 전략 : 3단계 몰입 여정</h2>
<p>&#39;모각작&#39;은 긴 시간 동안 켜두고 사용하는 도구다. 반면 전시회는 짧은 시간 동안 많은 인원을 만나야 한다. 
이 간극을 메우기 위해 <strong>관람객의 동선 자체가 하나의 &#39;몰입 경험&#39;이 되도록 3단계 여정</strong>을 설계했다.</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/6dce6c0a-ec43-4ecd-85c2-165be062cd7c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/1d0b403c-6a2d-4c49-9254-30b1c847838a/image.png" alt=""></p>
<h3 id="step-1-입장--이벤트-안내">STEP 1: 입장 &amp; 이벤트 안내</h3>
<ul>
<li><strong>[운영 방식]</strong>
방문객에게 현재 시각(입장 시각)이 적힌 &#39;타이머 떡메모지&#39;를 건네주며 여정을 시작한다. 이 메모지가 나중에 굿즈와 교환할 수 있는 티켓이자 본인의 몰입 시간을 기록하는 도구다.</li>
<li><strong>[기획 의도: 보이지 않는 시간의 시각화]</strong>
전시회 특성상 장시간 서비스 이용이 불가능하다는 점을 역이용했다. 부스에 머무는 시간 자체를 &#39;서비스 체험 시간&#39;으로 정의하고, 눈에 보이지 않는 시간의 흐름을 손으로 직접 쓰고 색칠하게 했다. 
이를 통해 &quot;내가 시간을 주도적으로 관리했다&quot;는 모각작의 핵심 경험인 &#39;성취감&#39;을 물리적으로 느끼게 하고자 했다.
입구이자 출구인 우리 부스의 지리적 이점을 활용해 자연스러운 흐름을 만들 수 있었다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/2ea2297f-cb70-4d7c-a237-5d3a88d6f942/image.png" alt=""> </li>
</ul>
<hr>
<h3 id="step-2-서비스-시연--피드백">STEP 2: 서비스 시연 &amp; 피드백</h3>
<ul>
<li><p><strong>[운영 방식]</strong>
관람객이 팀원과 짝을 이뤄 핵심 기능을 빠르게 체험하도록 설계했다.</p>
<ol>
<li><strong>환경 세팅 (Cold Start 방지)</strong>: 회원가입이나 방 만들기 절차를 생략하고, 입장 즉시 핵심 기능을 체험할 수 있도록, 미리 더미 계정과 활성화된 데이터 방을 준비했다.</li>
<li><strong>전략 수정 (병목 현상 해결)</strong>: 초기엔 &#39;타이머 체험 + 설문조사&#39;를 동시에 하려 했으나, 대기 시간 발생을 우려해 <strong>&#39;구두 설명 &amp; 2인 1조 롤플레잉&#39;</strong>으로 전환해 회전율을 높였다.</li>
</ol>
<p align="center">
  <table>
    <tr>
      <td>
        <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/5e2e629b-d3d7-4cee-b35d-5c69c2dab11e/image.png" width="3100">
      </td>
      <td>
        <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/ff1082e3-a52f-4c03-bba5-5dab2bd2e905/image.png" width="550%">
      </td>
    </tr>
  </table>
<p/>  

</li>
</ul>
<blockquote>
<p><strong>[성과 및 인사이트]</strong> </p>
</blockquote>
<ul>
<li><strong>PIP 모드 및 크롬 알림 기능</strong>에 대한 반응이 특히 좋았다. </li>
<li>무엇보다 이전 UT(사용성 테스트)에서 아쉬웠던 점들이 <strong>잘 개선되었다</strong>는 피드백을 직접 들을 수 있어, 우리의 개선 방향이 틀리지 않았음을 확인할 수 있었다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/ceefef4d-fa86-480f-8051-512fdccd47c8/image.png" alt=""></li>
</ul>
<blockquote>
<p><strong>[인사이트 이후 반영 내용]</strong>
전시를 통해 얻은 가장 큰 소득 중 하나는 &#39;가이드&#39;의 필요성을 재확인한 것이다.</p>
</blockquote>
<ul>
<li><strong>초기 가설 vs 현실</strong> 
&quot;가이드가 필요 없을 만큼 직관적인 UI를 만들자&quot;는 전략으로 가이드 제작을 후순위로 미뤘었다. 하지만 현장에서는 처음 접하는 유저는 물론, 유사 서비스 경험자들도 &quot;어떻게 시작해야 할지 모르겠다&quot;, &quot;설명이 있으면 좋겠다&quot;는 반응을 보였다.<ul>
<li><strong>원인 분석 및 의사결정</strong> 
물론 전시 특성상 미리 채워둔 &#39;더미 데이터&#39;가 시야를 가려, 가이드에 대한 니즈가 실제보다 크게 느껴졌을 수도 있다. 하지만 이를 감안하더라도, 프로젝트 초반 In-depth Research에서 &#39;열품타&#39; 등 유사 서비스에서도 사용법을 많이 헤매는 모습을 관찰했던 게 다시금 떠올랐다. <blockquote>
</blockquote>
결국 전시회에서의 피드백은 우리가 잠시 간과했던 문제를 재확인시켜준 계기가 되었고, 과거 리서치 결과와 종합하여 사용자의 안착을 돕는 &#39;온보딩 프로세스&#39;를 정식 도입하기로 결정했다.<blockquote>
</blockquote>
그렇게 해서 만들어진 <strong>온보딩 페이지</strong>~  
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/83755e06-5199-498f-b7e1-71587ec39cc0/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h3 id="step-3-랜딩-페이지-안내--굿즈--제공">STEP 3: 랜딩 페이지 안내 &amp; 굿즈  제공</h3>
<ul>
<li><p><strong>[운영 방식 1: 타임 로그 월]</strong>
STEP 1에서 시작된 여정의 마무리다. 퇴장 시 떡메모지에 &#39;종료 시간&#39;을 적고, 몰입한 시간만큼 색칠해 벽면에 부착하게 했다.</p>
<blockquote>
<p><strong>[성과]</strong>
관람객들이 직접 기록한 시간이 벽면을 가득 채웠다~~ <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/7d38272d-c928-4bbf-88b4-922fe1027623/image.png" width="70%"></p>
</blockquote>
</li>
<li><p><strong>[운영 방식 2: 랜딩 페이지]</strong>
현장의 경험이 휘발되지 않도록, 모바일 랜딩 페이지를 통해 PC 환경으로의 연결을 유도했다.</p>
<ol>
<li><strong>카카오톡 나에게 보내기</strong>: 
우리 서비스 링크를 &#39;나에게 보내기&#39;함으로써, 나중에 실제로 쉽게 바로 사용할 수 있도록 현장 방문객(Mobile)을 실제 서비스 환경(PC)으로 연결하는 &#39;중검 다리&#39; 역할을 했다.<p align="center">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/11fd22cc-0dc8-4d69-8f3b-2a11a980112d/image.png" width="100%">
<p/></li>
<li><strong>인스타 스토리 &#39;모각Thing 챌린지&#39;</strong>: 
&#39;모각코 (모여서 각자 코딩) /모각작(모여서 각자 작업)&#39;등을 활용해서 &#39;모각 [ ]&#39; 빈칸 템플릿에 자신이 몰입할 주제를 적어 공유하는 이벤트이다. 이 용어들이 생소할지라도, &#39;모여서 각자 ~한다&#39;는 뜻에 익숙해지고, 일상의 언어로 치환하여 진입 장벽을 낮추고자 했다. 또한, 전시회에 못 온 사람들에게도 홍보하는 효과를 기대했담..!<p align="center">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c140935b-418b-48a2-8f13-73424383cee5/image.png" width="50%">
</li>
</ol>
</li>
<li><p><strong>[운영 방식 3: 굿즈 제공]</strong>
위 1,2번에 참여한 관람객들에게 아래 굿즈를 나눠주었다!<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/2dd6ed3d-f931-412e-ae6f-7318a10ae027/image.png" alt="">  솔직히 회고하자면, 굿즈 수령을 위한 미션(카톡 공유 + 팔로우 + 스토리 챌린지 + 타임로그)은 관람객에게 너무 과한 과제였다. 우리도 제공하는 굿즈에 비해 미션이 많아 중도 포기나 병목현상을 우려했었는데, 실제로 인스타 스토리 챌린지까지의 참여율은 저조했고 우려가 현실이 되었다.. ^!^ 
현장에서는 상황에 맞춰 &#39;카톡 보내기 &amp; 팔로우&#39;까지만 해도 굿즈를 제공하는 식으로 대처했었다. 다음에는 의도를 살리면서도 참여 장벽을 낮출 방법을 더 고민해봐야겠다!</p>
</li>
</ul>
<blockquote>
<p><strong>[성과]</strong></p>
</blockquote>
<ul>
<li>당일 전시 방문객 105명 중 <strong>86.7%(91명)</strong>가 랜딩페이지에 관심을 보이고 공유하기에 참여했다. 물론 &#39;굿즈&#39;라는 유인책 때문에 수치가 부풀려졌을 가능성도 배제할 수 없었다. 하지만 GA를 통해 실제 행동 데이터를 분석한 결과, 이는 단순한 호기심 그 이상이었음을 확인할 수 있었다.</li>
<li><strong>랜딩페이지 관심도</strong> : 방문객 105명 중 91명(86.7%)</li>
<li><strong>실제 서비스 접속</strong> : 관심 유저 중 67명(73.6%)</li>
<li><strong>최종 신규 가입</strong> : 28명(41.7%) (가장 유의미한 진성 유저 확보)<blockquote>
</blockquote>
목표했던 전환율 80%를 상회하는 86.7%의 유저가 우리 서비스에 관심을 보였다는 점은, &#39;모각작&#39;의 시장 가능성을 증명하는 가장 강력한 데이터가 되었다!! <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/387862d7-aaef-431e-bf3a-48bbb3e3a494/image.png" alt=""></li>
</ul>
<h2 id="✅-목표-달성-결과--우리는-무엇을-얻었나-성과-요약">✅ 목표 달성 결과 : 우리는 무엇을 얻었나 (성과 요약)</h2>
<p>초기에 설정했던 전시회의 KPI를 이뤘다!! </p>
<ol>
<li>시연 참여율 90% → 병목 현상을 막기 위해 &#39;타임로그&#39;와 &#39;롤플레잉&#39;으로 방식을 변경한 전략이 적중했다. 전시회에 온 대부분의 인원이 우리 부스에 들려서 기록을 남겼다.</li>
<li>서비스 이해도 100% → 수치로 측정하기 어려운 &#39;이해도&#39;는 현장의 피드백으로 채웠다. &quot;친절한 가이드가 필요하다는 니즈&quot;를 발견함으로써 확실한 개선점을 도출했다. </li>
<li>온라인 전환율 80% → &quot;실제 접속 73.6%, 진성 유저 확보&quot; 오프라인에서의 관심이 <strong>실제 서비스 접속(67명, 73.6%)</strong>으로 이어졌고, 나아가 <strong>28명(41.7%)</strong>이 최종 가입까지 완료하며 유의미한 진성 유저를 확보했다.</li>
</ol>
<h1 id="2️⃣-번외-마케팅-전략--참여하는-콘텐츠">2️⃣ 번외, 마케팅 전략 : &#39;참여하는&#39; 콘텐츠</h1>
<p>서비스 홍보를 위해 인스타그램 스토리에 올릴 때도 전시회 때처럼 단순히 정보를 전달하는 것을 넘어, 유저가 직접 &#39;터치&#39;하고 &#39;반응&#39;하도록 유도했다. 이때 인스타그램 스토리의 <strong>&#39;인터랙티브 기능&#39;</strong>을 적극 활용했는데, 이 역시 &quot;기발하다&quot;는 피드백을 얻었어서 뿌듯했다!!</p>
<ul>
<li>슬라이더 기능 활용: 몰입에 대한 페인포인트를 유저가 직접 슬라이더로 조절하게 하여 참여를 유도했다.</li>
<li>랜딩페이지 링크 삽입: 스토리 내 &#39;랜딩페이지&#39; 링크를 삽입해서, 마찬가지로 pc로의 전환과 서비스로의 유입을 설계했다.<p align="center">
  <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/3ea821ec-37cc-49e9-a631-2d56c012ae3e/image.png">

</li>
</ul>
<p><em>참여형으로 구성한 게 우리팀밖에 없었다!</em></p>
<h1 id="3️⃣-9주차-데모데이-회고--경쟁과-고립-사이-지속-가능한-몰입을-제안하다">3️⃣ 9주차, 데모데이 회고 : 경쟁과 고립 사이, &#39;지속 가능한 몰입&#39;을 제안하다</h1>
<p>9주차 최종 발표에서는 전시회에서 검증된 데이터를 바탕으로, 우리가 해결하고자 하는 문제와 솔루션을 짚었다.</p>
<ul>
<li><p><strong>Problem</strong> (경쟁은 지치고, 혼자는 외롭다)
기존 서비스들의 과도한 경쟁 피로도, 캠스터디의 얼굴 노출 부담 등 기존 서비스의 한계를 명확히 짚었다.</p>
</li>
<li><p><strong>Solution</strong> (자율성과 연대가 공존하는 3단계 장치)
우리는 &#39;함께&#39;의 시너지는 가져가되 압박은 덜어내기 위해, 다음 3가지 핵심 솔루션을 제안했다.</p>
<ol>
<li><strong>부담 없는 연결</strong> : 감시가 아닌 권유로 시작한다. &#39;콕 찌르기&#39; 기능으로 친구에게 가볍게 &quot;같이 하자&quot;고 제안할 수 있으며, 작업 내용이나 누적 시간 공개 여부는 유저가 선택하게 하여 프라이버시 부담을 없앴다.</li>
<li><strong>건강한 성취감</strong> : 남을 이기기 위한 실시간 랭킹이 아니다. 내가 설정한 목표 시간 대비 &#39;달성률(%)&#39;과 몰입 시간에 따라 성장하는 &#39;캐릭터&#39;를 통해, 경쟁 없이도 스스로 몰입할 수 있는 동기를 부여했다.</li>
<li><strong>끊김 없는 경험</strong> : PC로 작업하는 유저 환경을 고려한 &#39;PIP 모드&#39;와 &#39;크롬 팝업 알림&#39;을 통해 작업 흐름을 방해하지 않고 몰입을 유지하도록 설계했다</li>
</ol>
<p>라이브 데모에서는 팀원을 페르소나(나, 수민)로 설정하여 실제 사용 흐름을 시연했다. 
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/e3140617-4ef9-425f-8049-b8ad610187a4/image.png" alt=""></p>
</li>
</ul>
<blockquote>
<p><strong>[피드백]</strong>
멘토님들의 주요 피드백은 다음과 같았다.</p>
</blockquote>
<p>  <strong>시연 흐름의 논리성</strong>
    - (디자인 멘토님) &quot;발표 흐름 자체가 구조를 잘 갖추고 있었다.&quot;
    - (프론트엔드 멘토님) &quot;단순 기능 소개보다는 페르소나를 기반으로 한 실사용 시연을 보여줬으면 더 좋았을 것 같다.&quot; </p>
<blockquote>
</blockquote>
<p><strong>커뮤니케이션</strong>
      - (디자인 멘토님) &quot;커뮤니케이션에서는 크게 문제 없었다.&quot;</p>
<p>  나름 페르소나를 갖춰서 한다고 했는데, 전달이 잘 되지 않은 것 같아 앞으로 어떻게 해야 더 잘 할 수 있을지 고민해봐야겠다. 
그래도 나는 늘 발표 장표 구성 및 순서에 대한 압박 및 부담이 심한 편인데, 구조가 좋다는 피드백을 받아서 나름 만족했다!!)
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/f7b5f42f-37cb-4725-857b-aeed1154851c/image.jpg" alt=""></p>
<p>  <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/318270b8-b983-4350-abca-9ef97239ddec/image.jpg" alt=""></p>
<h1 id="4️⃣-outro-비하인드">4️⃣ Outro, 비하인드</h1>
<p>개인적으로는 서비스를 기획하는 것만큼이나, 유저를 직접 만나는 전시를 기획하는 과정이 정말 설레고 즐거웠다. (약간 과몰입했던 것 같기도..? 🙄) 다음에 또 한다면 이벤트 비중은 조금 줄이고 시연과 랜딩 페이지에 더 집중하면 좋겠다는 배움도 얻었지만, 이번 전시 역시 후회 없을 만큼 만족스러웠다. 진짜로!</p>
<p><strong>🍅 Behind 1.</strong> 
이 사진은 우리 팀 단체 사진인데, 어디 꿈속에서 찍힌 것 같아서 넘 웃겨서 내 최애짤이다 ㅋㅎㅋㅎ 
수민이가 선물해 준 토마토 머리핀을 단체로 꽂고, 오순도순 부스 운영도 하고, 첫 완전체 회식(노브랜드버거..?)도 하고, 함께해서 너무너무 즐거웠다~~
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/b8456f85-a42b-4910-9e37-c36db5af6486/image.jpg" alt=""></p>
<p>이거는 민주가 디자인해준 모각네컷!!! 넘 느좋이시다~~ &gt;&lt;
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c147cf61-97c1-48d6-812c-3e0e0ebb01ba/image.jpg" width="70%"></p>
<p>*<em>🍅 Behind 2. *</em>
굿즈를 담아뒀던 토마토 냄비는 실제로 내 자취방에서 라면 끓여 먹고하는 애착 냄비다. 집에서부터 그 무거운 모니터와 냄비를 바리바리 싸 들고 오느라 팔이 떨어질 뻔했지만, 전시 때 반응이 좋아서 뿌듯했다. 하지만... 뒷정리하다가 내가 떨어뜨려서 토마토 코팅이 벗겨지고 말았다... 🥲 </p>
<p><strong>🍅 Behind 3. (왜 하필 토마토인가요?)</strong>
많은 분들이 &quot;왜 캐릭터가 토마토냐&quot;고 물어보셨는데, 사실 아직은 서비스 자체를 알리는 게 우선이라 캐릭터 서사는 후순위로 뒀었다. 대신 궁금해하는 분들을 위해 이런 &#39;B급 감성&#39; 포스터로 유쾌하게 답변을 대신했다! 지우의 S급 능력에서 나오는 B급 포스터 
<em>&#39;모각@작 하자&#39;가 넘웃김ㅋㅋㅋㅋㅋ</em>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/bf282270-28e7-431e-b823-e8a2e4266b5b/image.png" width="70%"></p>
<hr>
<p>마지막으로 전시회에 와준 31기 동기들과 30기 기성 오빠 등 모든 분께 감사를 전한다. 나도 빨리 33기 밋업 보러 가고 싶다! (<em>수민아 기대할게!!!!</em>) 
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/9f220f37-ea14-42c1-9c29-9e12bb11a6c4/image.png" width="70%"></p>
<br>



<p>&#39;혼자 하면 외롭고, 함께 하면 부담스러운&#39; 아이러니한 시간. 
우리가 제시한 <strong>&#39;함께 또 따로&#39;의 가치</strong>가 여러분의 몰입에 작은 도움이 되었기를 바란다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[모각작, 모여서 각자 작업하는 시간] 3~7주차 - UT 및 인터뷰에서 발견한 인사이트, 그리고 최종 QA까지]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-37%EC%A3%BC%EC%B0%A8-UT-%EB%B0%8F-%EC%9D%B8%ED%84%B0%EB%B7%B0%EC%97%90%EC%84%9C-%EB%B0%9C%EA%B2%AC%ED%95%9C-%EC%9D%B8%EC%82%AC%EC%9D%B4%ED%8A%B8-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%B5%9C%EC%A2%85-QA%EA%B9%8C%EC%A7%80</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-37%EC%A3%BC%EC%B0%A8-UT-%EB%B0%8F-%EC%9D%B8%ED%84%B0%EB%B7%B0%EC%97%90%EC%84%9C-%EB%B0%9C%EA%B2%AC%ED%95%9C-%EC%9D%B8%EC%82%AC%EC%9D%B4%ED%8A%B8-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%B5%9C%EC%A2%85-QA%EA%B9%8C%EC%A7%80</guid>
            <pubDate>Sun, 14 Dec 2025 10:06:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="모각작-서비스-바로가기">모각작 서비스 바로가기</h3>
</blockquote>
<h4 id="⏰-httpswwwmogakjakcom">⏰ <a href="https://www.mogakjak.com/">https://www.mogakjak.com/</a></h4>
<blockquote>
<p>런칭까지의 과정 요약은 여기서 ! 👉 <a href="https://velog.io/@ah_yo_ninde_yo/%ED%98%BC%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%A9%B4-%EB%94%B4%EC%A7%93%ED%95%98%EB%8A%94-%EB%82%98%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%A7%81%EC%A0%91-%EB%A7%8C%EB%93%A4%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%9F%B0%EC%B9%AD%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B8%B0%EB%A1%9D">[모각작-런칭까지의-최종-기록]</a></p>
</blockquote>
<p>앞선 1<del>2주차를 통해 어느정도 서비스의 틀을 만들었다면,
3</del>7주차는 그 안을 견고하게 채우는 시간이었다!</p>
<p>사실상 8주차는 서비스 전시, 9주차는 서비스 발표여서 7주차까지 개발을 거의 완료해야 했다. 7주라는 짧은 시간 동안 막연하던 아이디어가 웹 서비스로 따-란✨ 하고 나왔다는 게 아직도 신기하다!!
모두 우리 몰딥브 팀원들 (수빈, 지우, 민주, 나은, 수민, 은진, 준혁) 덕분입니다!! 고마워욧~~🫶</p>
<blockquote>
<p>&lt;목차&gt;
0. Intro, 우리가 처음 상상했던 &#39;모각작&#39; (초기 MVP)</p>
</blockquote>
<ol>
<li>3~4주차, 시험 기간을 활용한 리서치 (가설 검증)</li>
<li>5~6주차, UT 데이터가 가리킨 개선사항 (사용성 개선)</li>
<li>7주차, 리서치 기반의 구조 개선 &amp; QA</li>
<li>Outro..</li>
</ol>
<h1 id="0️⃣-intro-우리가-처음-상상했던-모각작-초기-mvp">0️⃣ Intro, 우리가 처음 상상했던 &#39;모각작&#39; (초기 MVP)</h1>
<p>모든 검증이 시작되기 전, 우리가 책상 위에서 설계했던 <strong>초기 모델</strong>은 다음과 같았다.</p>
<h3 id="🍎-핵심-가설--느슨한-연대가-경쟁보다-강력하다">🍎 핵심 가설 : &quot;느슨한 연대가 경쟁보다 강력하다&quot;</h3>
<p>기존 서비스(열품타, 디스코드 등)의 실시간 랭킹이나 채팅, 음성 등은 사용자에게 불필요한 경쟁심과 피로도를 유발한다고 판단했다. 따라서, 우리는 경쟁이나 직접적인 소통 없이 <strong>&quot;서로 공부하는 모습(타이머)만 공유하는 침묵의 연대&quot;</strong>가 오히려 더 깊은 몰입을 유도할 것이라 가정했다.</p>
<h3 id="🔧-초기-핵심-기능-변경-전">🔧 초기 핵심 기능 (변경 전)</h3>
<p>이 가설을 실현하기 위해 설계한 초기 MVP의 구조는 다음과 같았다.</p>
<blockquote>
<p>기능별 자세한 UI는 이전 회고록 하단 참고..
🔗 <a href="https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-12%EC%A3%BC%EC%B0%A8-%ED%98%91%EC%97%85%EB%B0%A9%EC%8B%9D-%EB%B0%8F-MVP-%EC%84%A4%EC%A0%95">https://velog.io/@ah_yo_ninde_yo/모각작-모여서-각자-작업하는-시간-12주차-협업방식-및-MVP-설정</a></p>
</blockquote>
<ul>
<li><p><strong>분리된 타이머 구조 (개인 vs 그룹)</strong></p>
<ul>
<li>초기에는 <strong>&#39;개인 몰입&#39;</strong>과 <strong>&#39;그룹 몰입&#39;</strong>의 공간을 물리적으로 분리하여 페이지를 따로 두는 전략을 취했다.</li>
<li>그룹 활동이 핵심이지만, 친구가 접속하지 않았을 때를 대비해 개인 타이머 페이지를 별도로 만들었다. 혼자 집중하다가 친구가 오면 &#39;콕 찌르기&#39; 알림을 통해 자연스럽게 그룹으로 넘어가도록 설계했다.</li>
<li><strong>할 일 및 목표 시간 설정</strong><ul>
<li>&#39;타인으로부터 오는 부담&#39;을 줄이는 것이 주 목표였지만, 몰입을 위해서는 &#39;스스로의 목표 설정&#39;은 부담이 있더라도 필요하다고 판단했다.</li>
<li>그래서 타이머 실행 전 할 일과 목표 시간을 반드시 설정하게 했다. 
<em>이것이 사용자에게 불필요한 장벽이 될지, 아니면 꼭 필요한 장치일지는 아직도 검증이 더 필요하다!</em></li>
</ul>
</li>
</ul>
</li>
<li><p><strong>공개여부 설정</strong></p>
<ul>
<li>&#39;할 일(현재 유저가 타이머에서 하고 있는 일)&#39;과 &#39;누적 몰입 시간&#39;의 공개 여부를 사용자가 직접 설정할 수 있게 했다. 이는 타인의 시선은 즐기되 감시는 피하고 싶은 유저의 심리를 반영한 <strong>핵심 가설을 반영한</strong> 것으로, 실제 리서치에서 만족도가 가장 높았던 기능이다.</li>
</ul>
</li>
<li><p><strong>부담 없는 간접 소통</strong></p>
<ul>
<li>채팅이나 캠, 음성대화 같은 &#39;적극적인 소통&#39;은 몰입을 방해한다고 보았다. 대신 &#39;공동 목표 설정&#39; 및 &#39;상태 메시지&#39; 같은 간접적인 상호작용만 허용하여, 방해받지 않으면서도 &#39;함께함&#39;을 느끼도록 설계했다.</li>
</ul>
</li>
<li><p><strong>그 외 기능</strong>
 Todo (할 일 관리), 대시보드 (타이머 사용 통계), 마이페이지 (캐릭터 수집/메이트 관리)</p>
</li>
</ul>
<h1 id="1️⃣-34주차-시험-기간을-활용한-리서치-가설-검증">1️⃣ 3~4주차, 시험 기간을 활용한 리서치 (가설 검증)</h1>
<p>3주차는 시험 기간으로 인한 공식 휴회 기간이었다. 하지만 밋업은 휴회와 상관없이 계속되는 법..
우리는 이 시기가 타겟 유저(대학생)의 니즈가 가장 극대화되는 시점이라 판단하여, 동기 3명을 대상으로 In-depth 리서치를 진행했다.</p>
<p><em>(인터뷰 하는 사진이라도 찍어둘걸..)</em>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/5f26c864-0b86-48b6-be29-2491d35cf461/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/253d9adf-158c-494e-86c1-1c6b18c56da7/image.png" alt=""></p>
<h2 id="🧐-핵심-가설-및-검증-목표">🧐 핵심 가설 및 검증 목표</h2>
<p>기존 생산성 서비스들(열품타, Forest 등)이 제공하는 <strong>&#39;경쟁(랭킹)&#39;</strong>이나 <strong>&#39;벌칙(나무가 시듦)&#39;</strong>이 오히려 사용자에게 방해나 부담이 될 것이라는 가설을 세웠다.
이를 검증하기 위해 동기들한테 유사 서비스를 사용해서 시험 공부를 하게 한 뒤 심층 인터뷰를 진행했다.</p>
<h2 id="🚨-주요-인사이트">🚨 주요 인사이트</h2>
<p><strong>1. 랭킹/벌칙보다는 &#39;성장 보상&#39; 선호</strong></p>
<ul>
<li>사용자들은 랭킹에 대한 부담감을 호소했으며, 특히 Forest의 공동 벌칙에 대해 부정적이었다.</li>
<li>반면 모각작 프로토타입의 <strong>&#39;캐릭터 성장과 수집&#39;</strong>에 대해서는 &quot;실패 부담 없이 내 기록이 남는 게 좋다&quot;며 긍정적인 반응을 보였다. 이는 부담스러운 벌칙보다 긍정적인 성취감이 더 강력한 동기부여 요소임을 확인시켜 주었다.</li>
</ul>
<p><strong>2. 공개 여부 설정에 대한 높은 만족도</strong></p>
<ul>
<li>할 일 (현재 유저가 하고 있는 일),누적 몰입 시간 에 대한 공개 여부 설정에 대한 만족도가 가장 높았다.&quot;같이 하고 싶지만 감시는 싫다&quot;는 유저의 니즈를 정확히 타격하며 가설이 검증되었다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/db838bf3-dba0-4b6c-a9a3-b1ea3010f13d/image.png" alt=""></li>
</ul>
<p><strong>3. 낮은 인지도</strong></p>
<ul>
<li>&#39;모각작&#39;이라는 이름만으로는 서비스의 기능을 직관적으로 인지하지 못한다는 문제가 발견되었다. 
나도 큐시즘에서 모각작을 처음 알게된 것처럼, 우리 동기들을 비롯해 대다수가 모각작 문화를 잘 몰랐기 때문에, 우리 서비스가 어떤 서비스일지 감 잡기가 어렵다고 했다.
이를 보완하기 위해 텍스트 설명보다 직관적인 캐릭터와 UI가 필수적임을 깨달았다.</li>
</ul>
<h2 id="💡-리서치-반영">💡 리서치 반영</h2>
<p>이 문제를 해결하고자 아래와 같이 개선했다.</p>
<h3 id="✅-action-1">✅ Action 1.</h3>
<ul>
<li>1번과 2번과 같이 기존 핵심 기능에 대한 가설이 검증된 거는
이후 UT리서치를 통해 MVP 기능을 더 견고히 강화했다.<h3 id="✅-action-2">✅ Action 2.</h3>
<ul>
<li>낮은 인지도에 대한 문제는 아래와 같이 개선했다.</li>
</ul>
</li>
</ul>
<ol>
<li><p>(기존 일반적으로 통용되던 용어) ‘모여서 각자 작업’ 에→ ‘모여서 각자 작업하는 시간’으로 변경하여 서비스의 본질(시간/작업)을 강조함. &amp; 홈 화면에 명시함.</p>
</li>
<li><p>초대링크 수신 시, 썸네일 및 초대 문구로 바로 인지할 수 있게 수정함.</p>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/db545e7f-5e2c-4e0e-a953-8aa691470b54/image.png" width="70%">

</li>
</ol>
<p><strong>Special Thanks to...</strong> 
바쁜 시험 기간에도 기꺼이 리서치에 참여해준 성윤, 차미, 대한아 넘 고마워~~! 그리고 매번 설문조사 참여해주신 모든 분들께도 감사를 전합니다. 🙇‍</p>
<p>이후 4주차 OB 초청 데이에서는 현업 선배들의 팁을 얻었다.
<br></p>
<h1 id="2️⃣-56주차-ut-데이터가-가리킨-개선사항-사용성-개선">2️⃣ 5~6주차, UT 데이터가 가리킨 개선사항 (사용성 개선)</h1>
<p>리서치 결과를 반영해 5주차에 MVP를 개발했고, 다듬어진 GUI를 바탕으로 실제 기능 구현과 UT 준비에 돌입했다.</p>
<p>6주차에는 16명의 유저를 대상으로 <strong>UT(사용자 테스트)</strong>를 진행했다. 
툴은 <strong>MAZE</strong>를 사용했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/2632fe2d-bfe0-4cef-a35d-b936cbb3b03b/image.png" alt=""></p>
<p><em>UT준비하고 있는 몰딥브~</em>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/9c2f8a8d-5d90-4fa8-84e4-b3d361f492f3/image.jpg" alt=""></p>
<h2 id="🚨-주요-인사이트-1">🚨 주요 인사이트</h2>
<p><strong>1. 핵심 가치/기능의 혼동</strong>
가장 치명적인 문제는 [개인 모드]에서 [그룹 모드]로 진입하는 과정이었다.</p>
<ul>
<li><strong>데이터</strong> : 시나리오 B(그룹 합류) 진행 시 50%의 이탈률이 발생했다.</li>
<li><strong>원인</strong> : 초기 기획에서 개인/그룹 페이지를 물리적으로 분리한 탓에, 페이지가 전환되면서 개인 타이머의 위치와 디자인이 달라졌다. 여기에 낯선 &#39;공동 타이머&#39;까지 등장하니, 유저들은 두 타이머에 대한 차이와 용도에 대해 혼란스러워했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/7fa31edb-0b14-4858-8e92-fd386bf358e8/image.png" alt=""></li>
</ul>
<p><strong>2. 정보 과부하와 아이콘 인지 문제</strong></p>
<ul>
<li>초기에 넣었던 &#39;개인 상태메시지&#39;, &#39;그룹메시지&#39;, &#39;그룹공동목표&#39; 등 소셜 기능이 한 화면에 혼재되면서 집중을 방해했다. &quot;정보가 너무 많다&quot;는 피드백과 함께 의도하지 않은 곳을 클릭하거나 헤매는 모습이 다수 관찰되었다.</li>
<li>또한, &#39;공개여부 설정&#39; 기능 및 &#39;응원 이모티콘&#39; 등 발견하기 어려워했다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/435417eb-aa53-4fb0-bf43-f4d8dccc983c/image.png" alt=""></p>
<br>


<h1 id="3️⃣-7주차-리서치-기반의-구조-개선--qa">3️⃣ 7주차, 리서치 기반의 구조 개선 &amp; QA</h1>
<p>전시회를 앞둔 7주차, UT에서 드러난 문제점을 해결하기 위해 서비스의 핵심 구조를 수정하고, QA로 마무리했다.</p>
<h2 id="💡-리서치-반영-1">💡 리서치 반영</h2>
<h3 id="✅-action-1-사이드바로-경험-통합">✅ Action 1. 사이드바로 &#39;경험 통합&#39;</h3>
<ul>
<li>이탈률의 원인이었던 &#39;타이머 인식의 혼란&#39;을 해결하기 위해 &#39;개인 타이머 페이지&#39;를 삭제했다.</li>
<li>대신, 홈화면과 그룹 페이지 화면의 좌측에 <strong>&#39;고정 사이드바&#39;</strong>를 도입하여 어떤 페이지(홈, 그룹)에 있든 내 캐릭터와 타이머가 항상 보이도록 구조를 통일했다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/ae0df5c6-5abc-4fc6-a80f-be72e84d6cf7/image.png" alt=""></p>
<h3 id="✅-action-2-기능-덜어내기">✅ Action 2. 기능 덜어내기</h3>
<ul>
<li>그룹 타이머 페이지의 사용성을 저해하는 요소들을 정리했다. </li>
<li>사용 빈도가 낮고 복잡도를 높이는 메시지 기능들은 삭제하여 &#39;몰입&#39;이라는 본질에 집중하도록 UI를 정돈했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/8d8d9a15-2bfb-49f4-973a-81096ed85db2/image.png" alt=""></li>
</ul>
<h3 id="✅-action-3-아이콘-등-ui-변화">✅ Action 3. 아이콘 등 UI 변화</h3>
<ul>
<li>*<em>공개 여부 설정 *</em>
기능 사용법을 설명했을 때는 만족도가 높았으나, 스스로 사용하기엔 어려웠던 아이콘들을 직관적으로 개선했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/9016245d-b764-4b7d-97ed-04a2121f708f/image.png" alt=""></li>
<li><strong>응원 아이콘</strong>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/a9ac1a2a-0136-4f41-9798-0389278c0140/image.png" alt=""></li>
</ul>
<br>

<h2 id="💡-qa">💡 QA</h2>
<p>QA 리스트업을 하면 개발자들이 후다닥 달려와서 수정해줬다.. 넘 든든했다!!ㅜㅜㅜ
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/65e4c5d7-295c-4aa3-8a00-b41f3c00d13a/image.png" alt=""></p>
<h1 id="4️⃣-outro">4️⃣ Outro..</h1>
<p>3주차의 리서치부터 7주차의 QA까지의 과정은 <strong>&quot;기획자의 의도를 넘어, 사용자의 행동 데이터를 확인하고 반영하는&quot;</strong>과정이었다.</p>
<p>UT의 중요성을 다시금 느낀 시간.. 너무 유익하고 필요한 시간이었다!!
실패 데이터가 있었기에 &#39;고정 사이드바&#39;라는 구조적 해답을 찾을 수 있었고, 확실한 체계를 확립할 수 있었다. 검증을 마친 &#39;모각작&#39;은 이제 전시회를 통해 더 많은 사용자들을 만날 준비를 마쳤다!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[모각작, 모여서 각자 작업하는 시간] 1~2주차 - 협업방식 및 MVP 설정]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-12%EC%A3%BC%EC%B0%A8-%ED%98%91%EC%97%85%EB%B0%A9%EC%8B%9D-%EB%B0%8F-MVP-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-12%EC%A3%BC%EC%B0%A8-%ED%98%91%EC%97%85%EB%B0%A9%EC%8B%9D-%EB%B0%8F-MVP-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Wed, 10 Dec 2025 21:16:56 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="모각작-서비스-바로가기">모각작 서비스 바로가기</h3>
</blockquote>
<h4 id="⏰-httpswwwmogakjakcom">⏰ <a href="https://www.mogakjak.com/">https://www.mogakjak.com/</a></h4>
<blockquote>
<p>런칭까지의 과정 요약은 여기서 ! 👉 <a href="https://velog.io/@ah_yo_ninde_yo/%ED%98%BC%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%A9%B4-%EB%94%B4%EC%A7%93%ED%95%98%EB%8A%94-%EB%82%98%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%A7%81%EC%A0%91-%EB%A7%8C%EB%93%A4%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%9F%B0%EC%B9%AD%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B8%B0%EB%A1%9D">[모각작-런칭까지의-최종-기록]</a></p>
</blockquote>
<p>&lt;목차&gt;
0️⃣ 프롤로그: 두 번째 밋업, 그리고 새로운 도전
1️⃣ 1주차 : 협업 방식 및 MVP 구체화
2️⃣ 2주차 : 와프 작성 및 상세 기능
3️⃣ 초기 &quot;모각작&quot; (초기 MVP)</p>
<p>지난 글에서 &#39;Sparkup&#39; 발제 및 팀빌딩 과정을 다뤘다면, 이번에는 본격적인 프로젝트 진행 과정을 이야기해 보려 한다.</p>
<h1 id="0️⃣-프롤로그-두-번째-밋업-그리고-새로운-도전">0️⃣ 프롤로그: 두 번째 밋업, 그리고 새로운 도전</h1>
<p>&#39;모각작&#39;은 지난 31기 &#39;디어케이&#39;에 이어 큐시즘에서 진행하는 나의 두 번째 밋업 프로젝트다. 지난번엔 기획 팀원으로 참여해 서비스 기획에만 집중했다면, 이번에는 발제자로서 자연스럽게 PM 역할까지 맡게 되었다.</p>
<p>사실 지난 디어케이 때 PM이었던 유정이가 정말 너무 잘해줬다고 생각하고 덕분에 많이 배웠다고 생각해서 나도 유정이의 반 이상이라도 하고 싶다는 목표와 또 걱정이 있었다. 기획, 디자인, 개발 등 모든 파트의 소통을 조율하고 일정을 관리해야 하는 PM의 무게가 결코 가볍지 않은 걸 3번의 프로젝트를 통해 뼈저리게 느끼고 있었기 때문이다..</p>
<p>더구나 나는 전형적인 P성향이라, 개인을 넘어 &#39;팀 전체의 일정&#39;을 핸들링 하는 PM 역할이 나에게 맞는 옷일지 스스로 의구심이 들기도 했다. 하지만 &#39;마지막 큐시즘 활동인 만큼 제대로 도전해보자&#39;는 오기와, 지난 기프(기업 프로젝트) 경험을 통해 일정 관리에 대한 감을 조금씩 익혀왔다는 믿음으로 용기를 냈다.</p>
<p><em>후일담이지만, 프로젝트 하면서 팀원들에게 &quot;J 같다&quot;는 이야기를 들었을 땐 나한텐 최고의 칭찬이었다..!</em></p>
<h1 id="1️⃣-1주차--협업-방식-및-mvp-구체화">1️⃣ 1주차 : 협업 방식 및 MVP 구체화</h1>
<p>첫 단톡방 개설 후 인사하던 그때.. (아련)
<em>부트캠프 종료와 동시에 밋업 시작이라, 최고의 휴학 일정이었던 것 같다</em></p>
<p align="center">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/481d459a-5e8c-448f-898a-b7c6b8c8ad78/image.png" width="50%">
<p/>

<p>팀빌딩이 된 그 주 토요일에 첫 회의를 진행했다.
우리 팀에 지방에 사는 친구가 있기도 하고(고향이 완전 옆이라 대박 반가웠다), 학교랑 병행하는 친구들도 있어 회의는 대부분 비대면으로 진행했다.</p>
<p>팀원들과 처음으로 본격적인 이야기를 나누는 시간이라 얼마나 떨렸는지 모른다. 팀 빌딩 이후부터 회의 날까지, &#39;회의&#39;라는 단어만 떠올려도 숨이 턱턱 막히는 기분이었다. 이 느낌을 해소하기 위해선 회의록을 쓰는 등 회의를 준비하는 게 최선이었다..!</p>
<h2 id="✅-협업-방식">✅ 협업 방식</h2>
<h3 id="1-협업-툴">1) 협업 툴</h3>
<p>가장 먼저 우리 팀의 일하는 방식을 정했다. 효율적인 소통을 위해 툴의 용도를 명확히 구분했다.</p>
<ul>
<li><strong>Notion</strong> : 회의록, 제출물 및 각종 문서 아카이빙, 일정 관리</li>
<li><strong>Discord</strong> : 업무요청, 질의응답, 데일리 스크럼, 회의실 등</li>
<li><strong>Jira</strong> : (기획) &amp; 개발 일정 관리와 이슈 트래킹</li>
<li><strong>Figma</strong> : 와이어프레임, UI 디자인, 디자인 시스템 등</li>
<li><em>카톡은 &#39;사담&#39;이나 &#39;긴급 리마인드&#39; 용도로만 제한하고, 모든 공식 업무 요청은 디스코드로 단일화했다</em></li>
</ul>
<p>(회고) 사실 지금 회고하는 시점에서, Jira는 내가 주도적으로 100% 활용했는지 돌아보면 아쉬움이 남는다. 
Jira는 지난 기프 때 살짝 맛만 본 상태라, 사용법도 아직 익숙하지 않은 것 같고, 기획 일정은 노션이나 피그마에서 일부 관리하다 보니 통합 관리가 쉽지 않았는데, 다음에는 Jira 하나로 일원화하는 시도를 더 해보고 싶다.</p>
<p align="center">
  <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/597e0b09-9fdb-4a24-bbbf-f3fcee41b05e/image.png" width="70%">

<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/a1f8e3ff-571a-4109-82d9-14bed0ae80ca/image.png" width="75%">
</p>

<h3 id="2-루즈해짐을-방지하는-스크럼">2) 루즈해짐을 방지하는 &#39;스크럼&#39;</h3>
<p>매주 토요일 정기 세션 외에 비대면 협업이 길어지면 늘어지기 쉽다. 그렇다고 매일 하는 데일리 스크럼은 학업을 병행하는 팀원들에게 부담이었다.</p>
<p>그래서 &#39;주 2회(화/목) 스크럼 + 토요일 정기 세션&#39;이라는 규칙을 정했다. 화-목-토로 퐁당퐁당 텐션을 유지하는 좋은 주기였던 것 같다. 덕분에 서로의 진척 상황을 놓치지 않고 꾸준히 달릴 수 있었다!</p>
<p align="center">
  <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/7f63ae07-736a-4e5f-a97e-15b40117992c/image.png" width="70%">
</p>

<h2 id="✅-문제-정의와-차별화">✅ 문제 정의와 차별화</h2>
<p>기능 명세에 앞서 <strong>&#39;왜 세상에 모각작 서비스가 필요한가?&#39;</strong>를 다시 점검했다. 
이미 시중에는 &#39;Forest&#39;, &#39;열품타&#39; 같은 강력한 경쟁자들이 존재했기 때문이다.</p>
<p>우리는 총 8개의 유사 서비스(Forest, 열품타, 도트타이머, 투두메이트 등)를 분석했고, 기존 시장에서 충족되지 않은 사용자 니즈를 발견했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/76b2586c-6d43-4af9-8c1a-7a76a5b52829/image.png" alt=""></p>
<p>시장 분석을 통해 우리는 기존 서비스들이 사용자에게 주는 피로감을 해결하고자 했다.
그래서 모각작은 &#39;경쟁과 압박은 덜어내고, <strong>연대</strong>와 <strong>성취/보상</strong>을 위주로 하는&#39; 전략을 세웠다!!</p>
<h2 id="✅-mvp-구체화">✅ MVP 구체화</h2>
<p>위에서 정의한 핵심 가치를 바탕으로, 어떤 기능을 넣고 뺄지 결정했다.
기획팀 내부 회의를 거쳐 정리한 MVP 기능 명세와 우선순위 등을 노션에 공유하고, 각 파트별로 피드백과 리소스 체크를 미리 요청했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/f5b9ef1a-229a-43dd-a0ee-67a3354ac2bc/image.png" alt=""></p>
<br>

<p>주요 의사결정 포인트는 다음과 같다.</p>
<p><strong>Decision 1. 그룹방 운영 방식 : 자유 입장 vs 동시 시작?</strong></p>
<ul>
<li>초기 고민 : 당시 우리는 &#39;모각작&#39;의 핵심 가치를 &#39;함께 몰입하는 느낌&#39;을 극대화하기 위해, 방장이 시작하면 다 같이 시작하는 동기형 방식을 채택하려 했으나, </li>
<li>최종 결론 : 친구를 기다리느라 공부를 시작 못 한다는 치명적인 접근성 문제 때문에 자유 입장으로 선택했다.</li>
</ul>
<p><strong>Decision 2. 목표 시간 입력과 수정 여부</strong></p>
<ul>
<li>목표 시간 입력 : 단순 타이머와 차별화를 위해 &#39;목표 입력&#39;은 필수로 두었다. </li>
<li>목표 시간 수정 : &#39;몰입의 지속&#39;이 중요하므로 도중에 수정하는 것을 허용했다.<br>
<br>

</li>
</ul>
<h1 id="2️⃣-2주차--아이디어를-시각화하다">2️⃣ 2주차 : 아이디어를 시각화하다</h1>
<p>1주차에 논의했던 MVP 정책들을 바탕으로, 2주차에는 본격적인 시각화와 개발 환경 세팅에 돌입했다.</p>
<h2 id="✅-기획-와이어프레임--정책-디테일">✅ 기획: 와이어프레임 &amp; 정책 디테일</h2>
<h3 id="1-wireframe">1. Wireframe</h3>
<p>본격적으로 와이어프레임을 그리며 추상적인 아이디어를 구체화했다.
개인적으로 이 단계가 가장 재미있으면서도 시작이 어렵다. 백지상태에서 첫 선을 긋기가 참 힘든데, 일단 시작하면 아이디어가 쭉쭉 뻗어 나가는 쾌감이 있다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/e8bb3cb2-eca2-4ba7-9433-6a2a7ac79ed0/image.png" width="70%"></p>
<h3 id="2-policy-detail">2. Policy Detail</h3>
<p>또한, UX 라이팅, 그룹/친구/캐릭터 등 기능의 정책을 상세화했다.</p>
<p>이 과정에서 가장 큰 난관은 <strong>&#39;캐릭터 보상 체계&#39;</strong>였다. &#39;꾸준함&#39;을 위해 캐릭터를 도입하긴 했지만, 주객전도가 되어 &#39;캐릭터 꾸미기 앱&#39;이 되는 것은 경계해야 했다. 
또, 보상에서도 &#39;함께함&#39;과 연관지을 방법에 대해 고민에 빠졌다.
<em>아래와 같이 개인 보상만 할지 vs 그룹보상도 할지...</em></p>
<ul>
<li><strong>개인 보상</strong> (채소): 혼자 집중한 시간만큼 내 캐릭터가 성장한다. (예: 토마토 Lv.1 → Lv.5)</li>
<li><strong>그룹 보상</strong> (샐러드): 여러 채소(개인)가 모여 하나의 요리(샐러드)가 된다는 컨셉으로, 그룹원들이 협력했을 때 주어진다.</li>
</ul>
<h4 id="✅-고민사항"><strong>✅ 고민사항</strong></h4>
<p>이러한 보상 구조 하에서, 개인의 몰입을 그룹 보상으로 어떻게 연결할지, 3가지 안을 놓고 고민했다.</p>
<p align="center">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/575f248f-7743-4275-9e96-b8d376a1a838/image.png" width="70%">

<p><strong>[방법 1] 단순 전시형</strong>: 개인이 모은 캐릭터를 단순히 보여주기만 함.
판단: 구현은 쉽지만, 그룹 활동에 대한 동기부여가 너무 약하다.</p>
<p><strong>[방법 2] 조합형</strong>: 개인 유저 A와 B의 캐릭터 조합에 따라 그룹의 결과물이 달라짐.
판단: 재미는 확실하겠지만, 모든 경우의 수를 디자인하고 개발해야 하므로 리소스가 감당 불가능(Over-spec)하다.</p>
<p><strong>[방법 3] 고정 보상형</strong>: 입력값(개인 캐릭터)과 상관없이 정해진 팀 보상 제공.
판단: 리소스는 절약되지만, &quot;내 캐릭터가 반영 안 되네?&quot;라는 사용자의 혼란을 줄 수 있다.</p>
<h4 id="✅-결론"><strong>✅ 결론</strong></h4>
<p>처음엔 절충안으로 <strong>[방법 3 : 고정 보상형]</strong>을 고려했다. </p>
<p>하지만 MVP 일정 내에 그룹 보상 로직까지 완벽히 구현하기엔 리소스가 빠듯했고, *&quot;과연 시스템이 주는 보상이 최선일까?&quot;*라는 의문이 남았다.</p>
<p>따라서, 우리는 과감히 <strong>[방법 1 : 단순 전시형]</strong>으로 최종 결단을 내렸다. 
별도의 그룹 보상(샐러드)을 개발하는 대신, 각자가 열심히 키운 캐릭터를 그룹방에 투명하게 보여주는 것만으로도 충분한 가치가 있다고 판단했기 때문이다.
<em>&quot;와, 쟤 캐릭터 벌써 진화했네? 나도 빨리 갖고 싶다!&quot;</em>
친구의 성장을 보며 느끼는 자연스러운 부러움과 동조 심리가 복잡한 게임 로직보다 훨씬 효율적이고 강력한 동기부여가 될 것이라 확신했다. </p>
<p>덕분에 우리는 개발 리소스를 획기적으로 줄이고, &#39;MVP의 본질&#39;인 핵심 기능 구현에 더 집중할 수 있게 되었다.</p>
<p align="center">
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/57b401bb-41f1-496e-83dd-80e38db1b65b/image.png" width="70%">


<p>수빈이랑 기획을 구체화하는 동안, 다른 파트들도 바쁘게 움직여줬다.</p>
<h2 id="디자인"><strong>디자인</strong></h2>
<p><strong>Thanks to. 지우 &amp; 민주</strong>
서비스의 인상을 결정할 메인 컬러를 선정하고 무드보드를 작성했다. 
로고를 포함한 브랜딩 시안도 이 주차에 확정되었다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/13ee3859-ec6c-40db-af98-2514fb092b49/image.png" width="70%"></p>
<p>넘 이쁘져<del>~</del> 우리 디쟈이너들 체고❤️</p>
<h2 id="프론트"><strong>프론트</strong></h2>
<p><strong>Thanks to. 나은 &amp; 수민</strong>
프로젝트 환경 세팅과 기술 스택을 선정하고, 로그인 UI 구현을 시작했다.</p>
<h2 id="백엔드"><strong>백엔드</strong></h2>
<p><strong>Thanks to. 준혁 &amp; 은진</strong>
소셜 로그인 기능을 구현하고 API 명세서 작성을 위한 준비를 마쳤다.
<br></p>
<h1 id="3️⃣-이렇게-해서-만들어진-초기-모각작-초기-mvp">3️⃣ 이렇게 해서 만들어진 초기 &quot;모각작&quot; (초기 MVP)</h1>
<p>아직 검증이 시작되기 전, 우리가 책상 위에서 설계했던 초기 모델은 다음과 같았다.</p>
<p><em>최종 모델은 이후 검증을 통해 아래에서 많이 바뀌었다.</em>  </p>
<blockquote>
<h3 id="1-홈-화면">1. &#39;홈&#39; 화면</h3>
<p>핵심 기능인 타이머가 바로 보이지 않고, 그룹과 메이트 현황이 대부분을 차지하던 시절...
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/512a284a-8a50-4ff4-a58a-d5bc267e599f/image.png" alt=""> </p>
</blockquote>
<blockquote>
<h3 id="2-개인-타이머-화면">2. &#39;개인 타이머&#39; 화면</h3>
<p>홈에서와 같이 메이트들의 현황을 보고 콕 찌르기를 해서 그룹으로 이동할 수 있게 유도했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/8793a0eb-7a09-4abc-8e61-04bd122da4c9/image.png" alt=""> </p>
</blockquote>
<blockquote>
<h3 id="3-콕-찌르기-수신-화면">3. &#39;콕 찌르기 (수신)&#39; 화면</h3>
<p>개인 타이머 사용 중, 친구가 &quot;같이 하자!&quot;며 콕 찌르면, 뜨는 모달. &#39;콕 찌르기&#39;는 그룹 전환의 핵심 매개체다
  <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/182c17d3-318f-4147-9b6e-c5e710cffcff/image.png" alt=""> </p>
</blockquote>
<blockquote>
<h3 id="4-그룹-타이머-화면">4. &#39;그룹 타이머&#39; 화면</h3>
<p>내 상태메시지, 친구들의 상태 메시지, 그룹 공동 목표 등 소통을 위한 기능들이 많고, 총 열 3개로 구성되어 있어 꽉 차 보인다..
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/9c3d3c18-aefd-4d05-8cb5-e0ee2abe026f/image.png" alt=""></p>
</blockquote>
<blockquote>
<h3 id="5-타이머-실행-전-할-일-및-목표-시간-설정-화면">5. &#39;타이머 실행 전, 할 일 및 목표 시간 설정&#39; 화면</h3>
<p>타이머를 실행하기 전, 반드시 할 일과 목표 달성 시간을 설정하도록 강제했다
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/49ebef27-7b58-4892-992b-d725c9b26f07/image.png" alt=""></p>
</blockquote>
<blockquote>
<h3 id="6-캐릭터-보상-관련-화면">6. &#39;캐릭터 보상&#39; 관련 화면</h3>
<p><em>참고로 캐릭터가 토마토를 비롯한 과일들인 이유는 뽀모도로 타이머(이탈리아어로 토마토)이기 때문이다! 최초 아이디어 제공자 차미에게 박수를!! 👏</em>
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/d3891e3a-c924-4ee4-ab48-bbe79c238ab3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c417aa98-3f06-4957-8510-66e90c6e35df/image.png" alt=""></p>
</blockquote>
<br>

<h1 id="outro">Outro...</h1>
<p>다음 글에서는 와이어프레임 작성 이후, 
각종 리서치를 통해 가설을 검증하고 서비스를 고도화해 나간 과정을 다뤄보려 한다  </p>
<p><em>이어서 계속...</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[모각작, 모여서 각자 작업하는 시간] 아이디어 발제 과정 - "어떻게 집중시키지?" (화면 블러에서 타이머까지)
]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%91%EC%A4%91%EC%8B%9C%ED%82%A4%EC%A7%80-%ED%99%94%EB%A9%B4-%EB%B8%94%EB%9F%AC%EC%97%90%EC%84%9C-%ED%83%80%EC%9D%B4%EB%A8%B8%EA%B9%8C%EC%A7%80-%EA%B8%B0%ED%9A%8D-%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%AA%A8%EC%97%AC%EC%84%9C-%EA%B0%81%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%8A%94-%EC%8B%9C%EA%B0%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%91%EC%A4%91%EC%8B%9C%ED%82%A4%EC%A7%80-%ED%99%94%EB%A9%B4-%EB%B8%94%EB%9F%AC%EC%97%90%EC%84%9C-%ED%83%80%EC%9D%B4%EB%A8%B8%EA%B9%8C%EC%A7%80-%EA%B8%B0%ED%9A%8D-%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Wed, 12 Nov 2025 13:52:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="모각작-서비스-바로가기">모각작 서비스 바로가기</h3>
</blockquote>
<h4 id="⏰-httpswwwmogakjakcom">⏰ <a href="https://www.mogakjak.com/">https://www.mogakjak.com/</a></h4>
<blockquote>
<p>런칭까지의 과정 요약은 여기서 ! 👉 <a href="https://velog.io/@ah_yo_ninde_yo/%ED%98%BC%EC%9E%90-%EC%9E%91%EC%97%85%ED%95%98%EB%A9%B4-%EB%94%B4%EC%A7%93%ED%95%98%EB%8A%94-%EB%82%98%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%A7%81%EC%A0%91-%EB%A7%8C%EB%93%A4%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EB%AA%A8%EA%B0%81%EC%9E%91-%EB%9F%B0%EC%B9%AD%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B8%B0%EB%A1%9D">[모각작-런칭까지의-최종-기록]</a></p>
</blockquote>
<p>지금부터는 본격적으로 &#39;모각작&#39; 프로젝트의 기획 과정을 소개해 보려고 한다!</p>
<p><strong>&lt;목차&gt;</strong>
0. Intro, &#39;모각작&#39;은 어떻게 시작되었나? (밋업 프로젝트의 시작)</p>
<ol>
<li>WARM-UP, 문제 정의와 데이터 기반의 아이디어 도출</li>
<li>CHECK-UP, 현실의 벽과 Pivot 스토리</li>
<li>SPARK-UP, 최종 PT &amp; 실현 가능한 MVP 및 전략</li>
<li>&#39;모각작&#39; 팀 결성 &amp; 전략 수립</li>
<li>Outro, 기획 회고를 마치며...</li>
</ol>
<h1 id="0️⃣-intro-모각작은-어떻게-시작되었나-밋업-프로젝트의-시작">0️⃣ Intro, &#39;모각작&#39;은 어떻게 시작되었나? (밋업 프로젝트의 시작)</h1>
<p>&#39;모각작&#39;은 한국대학생IT경영학회 <strong>큐시즘(KUSITMS)</strong>의 메인 커리큘럼 중 하나인 &#39;밋업 프로젝트&#39;를 통해 기획 및 개발된 서비스이다.</p>
<p>큐시즘의 프로젝트는 크게 두 가지 트랙으로 나뉜다.</p>
<ol>
<li>기업 프로젝트 (3주): 기업 연계 실무 협업</li>
<li>밋업 프로젝트 (7주): 자유 주제 기반의 아이디어 실현 및 서비스 런칭</li>
</ol>
<p>&#39;모각작&#39;은 바로 이 밋업 프로젝트로, 내가 발제한 아이디어의 PM을 맡아 하나의 실제 &#39;프로덕트&#39;로 만들어 나가는 프로젝트였다.</p>
<p>하지만 이 아이디어가 세상의 빛을 보고 함께할 팀원들을 만나기 위해서는, 팀 빌딩 이전에 <strong>&#39;Spark-Up&#39;</strong>이라는 관문을 먼저 통과해야 했다. 아이디어를 검증받고 발제하기까지 거쳐야 했던 큐시즘만의 아이디어 발제 과정, Spark-Up 단계부터 복기해 보고자 한다!</p>
<blockquote>
<p><strong>Spark Up이 모에요?</strong>
사실 &#39;Spark-Up&#39;은 지난 31기에도 존재했지만, 이번 32기에서는 진행 방식에 큰 변화가 있었다. </p>
</blockquote>
<h3 id="🚩-31기-spark-up--발산과-탐색">🚩 31기 Spark-Up : &quot;발산과 탐색&quot;</h3>
<p>지난 기수는 4차 스프린트에 걸쳐 아이디어를 점진적으로 발전시키는 데 초점을 뒀다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/93433700-7eb0-4ad3-81bf-26476f038849/image.png" alt=""></p>
<ul>
<li>하루에 하나씩 페인포인트를 도출하며 최대한 많은 아이디어를 발산</li>
<li>발산한 아이디어를 바탕으로 기획안을 작성하고, 타파파트원의 피드백을 받아 완성</li>
</ul>
<p>비교적 많은 아이디어가 팀 빌딩으로 이어질 수 있는 유연한 구조!</p>
<h3 id="🎯-32기-spark-up--검증과-구체화">🎯 32기 Spark-Up : &quot;검증과 구체화&quot;</h3>
<p>반면 이번 32기는 <strong>&#39;밀도 있는 검증&#39;</strong>에 초점을 뒀다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/3d082236-8ea3-4341-9c88-ee227551ae62/image.png" alt=""></p>
<ul>
<li>각 단계마다 명확한 평가 기준(중간 순위 선정)이 도입되어, 보다 아이디어의 경쟁력이 중요해짐</li>
<li>다량의 아이디어 발산보다는, 처음부터 문제/니즈 정의에 집중한 기획안을 요구</li>
</ul>
<p>특히 중간 평가 및 PT를 통해 아이디어를 선정하고, 선정되지 못할 경우 프로젝트 진행이 어려울 수 있는 시스템이어서, 덕분에 기획 단계부터 &#39;실현 가능성&#39;과 &#39;논리성&#39;등을 더 고민했던 것 같다.</p>
<p>이 변화된 발제 과정에서 &#39;모각작&#39;은 어떻게 나아갔을까??
<br></p>
<h1 id="1️⃣-warm-up-문제-정의와-데이터-기반의-아이디어-도출">1️⃣ WARM-UP, 문제 정의와 데이터 기반의 아이디어 도출</h1>
<p>가장 첫 단계는 문제 정의와 니즈 발굴에 집중하여 Rough한 기획안을 제출하는 기간이었다.</p>
<blockquote>
<ul>
<li><strong>기간</strong> : 8/25 ~ 9/5 (약 10일간) </li>
<li><strong>규정</strong> : 기획자는 최소 1개, 최대 3개의 아이디어를 제출</li>
</ul>
</blockquote>
<ul>
<li><strong>평가</strong>: 교육기획팀(전 파트)의 블라인드 평가 (문제 정의, 논리성, 사업성, 차별성)</li>
<li><strong>보상</strong>: 상위 8개 아이디어 발제자에게 팀원 우선 선택권(PM 권한) 부여</li>
<li>31기와 발제 시스템에서 발제자와 PM이 달라지는 경우가 있는데, 이러한 경우에 좋은 아이디어가 발제자의 PM 의지 부족으로 사장되는 것을 막고, 아이디어의 완성도를 높이기 위해 이러한 방법으로 바뀌었다고 한다!   *<em>From. 큐시즘 교육기획팀</em></li>
</ul>
<p>기업 프로젝트가 한창 막바지에 다다를 때, 병행을 해야 하기 때문에, 굉장히 머리를 쥐어 뜯었던 기억이..!!</p>
<p>고민 끝에 2개의 아이디어 중, &quot;모각작&quot;만 디벨롭하여 제출했다. 갑자기 아이디어가 떠올라서 급하게 설문조사 하고, 와프를 그렸었던..</p>
<h3 id="💡-문제-인식의-시작-왜-혼자선-집중이-안-될까">💡 문제 인식의 시작: &quot;왜 혼자선 집중이 안 될까?&quot;</h3>
<p>기획의 시작은 내 개인적인 경험과 &#39;집중력&#39;에 대한 본질적인 고민이었다.</p>
<p>나는 평소 혼자 집중하는 데 어려움을 느껴 카페나 도서관을 전전했고, 큐시즘을 하면서부터 &#39;모각작&#39; 문화를 알게 된 이후에는 가능할 때마다 참여하며 <strong>&#39;함께하는 환경&#39;의 효과</strong>를 직접 체감했다. 
이 경험을 통해, 집중을 위해서는 <strong>&#39;심리적 소속감&#39;</strong>이 중요하다는 확신을 얻었었다.</p>
<p>하지만 매번 외부 공간을 찾아다니는 것은 물리적, 금전적 제약이 큰 부담이 커 &#39;지속 가능성&#39;에 대한 문제가 있다..</p>
<h4 id="기존-솔루션의-모순">기존 솔루션의 모순</h4>
<p>또, 이후 6개월간 온라인 부트캠프에 참여하며, &quot;혼자 있더라도 캠을 켜면 딴짓을 막아주겠지&quot; 라고 생각했었다. 
혼자이지만 캠으로 계속 함께하는 환경이니깐,,
그러나 기대와 달리, 화상 캠에 비치는 얼굴이 계속 신경 쓰여 집중을 방해했고, 시간이 지날수록 감시당하는 듯한 피로감으로 인해 집중력을 빼앗겼다.</p>
<p>이러한 모순적인 경험을 바탕으로, <strong>&quot;기존의 솔루션(캠스터디)이 사용자의 니즈를 충족시키지 못하고 있다&quot;</strong>는 가설을 세웠고, 이를 검증하기 위해 자체 설문조사를 진행했다.</p>
<ul>
<li><p>집중의 유효기간: 응답자의 44.4%가 &quot;처음엔 효과가 있었지만 시간이 갈수록 효과가 줄어들었다&quot;고 답했다.</p>
</li>
<li><p>실패 원인: 가장 큰 이유는 &quot;내 얼굴/화면 공유에 대한 부담감(33.3%)&quot; 과 &quot;카메라에 익숙해져 감시받는 느낌(27.8%)&quot;</p>
<p> <em>지금  회고하는 시점에서 다시 보니, 설문에서 좀 의도된 부분도 있는 것 같아 아쉬움이 있다..</em></p>
</li>
</ul>
<p>즉, <strong>사람들은 &#39;함께하는 느낌&#39;은 원하지만, &#39;적나라한 감시&#39;는 원하지 않는다</strong>는 모순적인 니즈(Needs)를 가지고 있었다.</p>
<br>

<h3 id="💡-초기-가설-화면-블러blur-공유">💡 초기 가설: &#39;화면 블러(Blur) 공유&#39;</h3>
<p>이 문제를 해결하기 위해 Warm-Up 단계에서 내세운 첫 번째 가설은 <strong>&#39;프라이버시를 지키는 함께함&#39;</strong>이었다.</p>
<p>_&quot;기존 화면 공유는 너무 부담스럽잖아? 
그럼 공유는 하되, 화면을 &#39;블러&#39; 처리를 해서 내용은 안 보이게 하고 &#39;작업 중&#39;이라는 뉘앙스만 풍기면 어떨까?&quot;
_</p>
<p>이 아이디어에는 두 가지 핵심적인 기획 의도가 있다.</p>
<p><strong>1. 함께함의 시각화</strong> : 화면 속 자세한 텍스트 및 작업 내용은 안 보이지만(Privacy), 마우스가 움직이고 화면이 전환되는 <strong>&#39;잔상&#39;</strong>은 남겨둠으로써 &quot;저 사람도 지금 치열하게 무언가를 하고 있구나&quot;라는 현장감을 전달하고자 함.</p>
<p><strong>2. 압박감의 조절</strong> : 사용자가 블러의 강도를 조절할 수 있게 하여, 강한 감시가 필요할 땐 블러를 약하게, 느슨한 연대가 필요할 땐 블러를 강하게 설정하는 &#39;심리적 거리 조절&#39; 기능이 핵심.</p>
<p>나름 획기적인 타협점이라 생각했다. 서로의 화면을 흐릿하게 공유하면 감시의 부담은 줄이고, 함께 있다는 소속감은 줄 수 있을 거라 생각했기 때무네..!
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/634af784-9971-467d-a6ec-4c6846ea2185/image.png" alt=""></p>
<h3 id="💡-중간-평가">💡 중간 평가</h3>
<p>다행히, 이 문제 정의와 초기 가설은 중간 평가에서 상위권 점수를 받았다!</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/032735e2-6d30-4166-b695-fe2b4feaa512/image.png" alt=""></p>
<p>그럼에도 걱정이 너무 많았는데.. 평가 기준에 실현 가능성 같은 항목은 없었기 때문에, 실시간 화면 공유 같은 기능이 2개월 밋업 기간 내에 기술적으로 가능할지에 대한 고민이 계속 있었다..
<br></p>
<h1 id="2️⃣-check-up-현실의-벽과-pivot-스토리">2️⃣ CHECK-UP, 현실의 벽과 Pivot 스토리</h1>
<p>중간 팀 매칭(기획 파트 내 팀빌딩)이 완료된 후, 
아이디어를 고도화하는 &#39;상호 피드백&#39; 기간이 시작되었다!</p>
<blockquote>
<ul>
<li>모든 기획자는 발제된 8개의 아이디어에 대해 각 100자 이상의 구체적인 피드백을 작성해야 함.</li>
<li>또한 발제자들은 타 파트 피드백(디자인/프론트엔드/백엔드) 각 영역에서 최소 2명씩 피드백을 받아야 함.</li>
</ul>
</blockquote>
<p align="center">
  <table>
    <tr>
      <td>
        <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/de6ebffd-4ead-4bb5-a107-f275c2f4570d/image.png" />
      </td>
      <td>
        <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/b144ecdc-6693-4df7-b07e-007d476624ba/image.png" />
      </td>
    </tr>
  </table>
<p/>  


<p>이 과정에서 예상했던 대로 &#39;기술적 리소스의 한계&#39;라는 벽에 부딪혔다...ㅜㅜ</p>
<p>개발 파트원들과의 논의 결과, 
웹 브라우저에서 실시간 화면을 블러 처리하여 송출하는 기술은 난이도가 높고, <strong>약 &quot;2달(7주)이라는 짧은 기간 내에 안정적으로 구현하기엔 리소스가 너무 크다&quot;</strong>는 결론이 나왔다.</p>
<h2 id="🔄-pivot-기술은-버리되-본질은-남기다">🔄 Pivot: 기술은 버리되, &#39;본질&#39;은 남기다</h2>
<p>결국 솔루션의 방향을 완전히 틀어야 했다. 
하지만 초기 기획의 핵심이었던 <strong>&#39;사용자가 느끼는 압박감을 스스로 조절한다&quot;</strong>는 가치는 포기하고 싶지 않았다.</p>
<p>그래서 &#39;화면&#39;이라는 수단 대신 <strong>&#39;시간&#39;</strong>이라는 새로운 수단을 통해 &#39;자발적인 몰입 경험&#39;을 설계하기로 했다.</p>
<ul>
<li>*<em>Before <code>화면</code> *</em>: 화면을 공유해 딴짓을 못 하게 막는다. (블러 강도로 압박감 조절)</li>
<li><strong>After <code>타이머</code></strong>: 목표 시간을 설정하고 달성하며 성취감을 느낀다. (정보 공개 범위로 압박감 조절)</li>
</ul>
<h3 id="💡-why-타이머-시간을-핵심-지표로-선택한-이유">💡 Why 타이머? (시간을 핵심 지표로 선택한 이유)</h3>
<p>따라서 &#39;화면(Content)&#39;을 공유하려던 시도를 멈추고, <strong>&#39;시간(Time)&#39;</strong>이라는 더 객관적이고 효율적인 지표로 상태 공유의 본질을 대체했다.</p>
<p>특히 초기 기획에서 <strong>&#39;블러 강도&#39;</strong>를 조절해 타인의 시선을 제어하려 했던 것처럼, 타이머 시스템에서는 <strong>&#39;정보 공개 범위&#39;</strong>를 통해 이를 구현하고자 했다.</p>
<ol>
<li><strong>부담 없는 상태 공유</strong>: 
&#39;화면 블러&#39;를 통해 내가 더 압박을 느끼고 싶으면 블러 강도를 약하게 하고, 함께하는 느낌만 주고 싶으면 블러 강도를 강하게 하는 것처럼, 
타이머에서도 압박 느끼고 싶으면 <strong>&#39;시간 자체&#39;</strong>를 공유하고, 그게 아니면 타이머 <strong>&#39;상태만(집중 중/휴식 중)&#39;</strong>를 실시간으로 공유하는 것만으로 &quot;나 지금 집중하고 있어&quot;라는 소속감을 효과적으로 전달할 수 있다고 생각했다.</li>
<li><strong>성취감의 극대화</strong>: 강제적인 통제보다, 내가 집중한 &#39;시간&#39;이 쌓이는 것을 동료들과 함께 확인하는 과정이 훨씬 강력한 동기 부여가 될 것이다! 타이머 완수 자체가 성취의 객관적인 증명이 될테니</li>
</ol>
<p>결과적으로 피벗을 통해 &#39;화면 블러&#39;라는 새로운 방식에 몰두하는 대신, 이미 존재하는 <strong>&#39;타이머 기반 생산성 서비스&#39;</strong>의 한계를 정면 돌파하는 전략으로 전환했다.</p>
<p>즉, &#39;몰입&#39;이라는 집중의 본질에만 집중하기 위해, 랭킹 경쟁과 같은 부수적 요소에 치중했던 기존 타이머 서비스의 한계를 극복하고 불필요한 요소를 과감하게 덜어내는 방향으로 프로젝트를 재설계했다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/63a13484-32f5-4255-8544-e509637cb535/image.png" alt=""></p>
<br>

<h1 id="3️⃣-spark-up-최종-pt--실현-가능한-mvp-및-전략">3️⃣ SPARK-UP, 최종 PT &amp; 실현 가능한 MVP 및 전략</h1>
<p>모든 피드백을 반영하여 아이디어를 최종적으로 구체화하고, 발표 장표를 제출하는 마지막 단계이다.</p>
<blockquote>
<ul>
<li><strong>규정</strong>: 최대 10페이지 분량, 공평성을 위해 템플릿 양식 통일.</li>
<li><strong>필수 항목</strong>: 문제 인식, 솔루션 제안, 핵심 MVP (밋업 기간 구현 범위), 비즈니스 모델 등.</li>
</ul>
</blockquote>
<p>기업 프로젝트가 끝나고, 밋업 프로젝트의 첫 시작인 세션 날, 발제자별 <strong>5분 PT 발표</strong>가 진행된 후, 학회원들과 테이블을 이동하며 대화하는 <strong>&#39;커피챗&#39;</strong>이 이어졌다.</p>
<blockquote>
</blockquote>
<p>커피챗은 각자 PT를 들으며 궁금했던 점들을 학회원 전체와 함께 소통하고 물어보고, 아이디어에 관심 있는 팀원 후보들과 직접 소통하고, 아이디어의 매력을 어필할 수 있는 결정적인 기회이다.</p>
<h4 id="😥-이제는-말할-수-있다-솔직한-심정">😥 이제는 말할 수 있다.. 솔직한 심정</h4>
<p>사실 솔직히 고백하자면, 발제자인 나 역시 확신이 없던 상태로 임했었다..</p>
<p>타이머 실시간 연동 역시 2개월 안에 기획부터 개발까지 마무리해야 하는 빠듯한 일정이었고, 무엇보다 솔루션을 급하게 피벗했기에 변경된 모델(타이머)에 대한 유저 리서치 데이터가 부족했기 때문이다...ㅜㅜ
&quot;이게 진짜 먹힐까?&quot; 하는 확신이 100%가 아니었다</p>
<p>그래서인지 커피챗을 할 때 긴장감이 극에 달했었다. 
정곡을 찌르는 질문에는 식은땀이 흘렀고, 반대로 질문이 끊기면 &quot;우리 아이디어에 매력이 없나?&quot; 하는 불안감이 엄습했었다... 같은 기획 파트였던 수빈이와 달달달 호달달 떨었었던 ㅋㅎㅋㅎ</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c0ababcc-640e-4b21-b9ed-1989a94c618e/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/2790b0de-4cf2-4bb1-8ff3-0081d7744797/image.jpg" alt=""></p>
<h3 id="💡-커피챗-핵심-피드백-요약">💡 커피챗 핵심 피드백 요약</h3>
<p>하지만 이 불안감 속에서 오간 대화들은 프로젝트의 방향을 잡는 나침반이 되었다!! </p>
<ul>
<li><strong>기획/디자인</strong> : 
  &quot;기존 &#39;열품타&#39; 서비스와 차별화가 관건이다. &#39;함께하는 현장감(동기부여)&#39;을 시각적 요소(캐릭터, 상태 공유 등)로 어떻게 풀어낼지 구체화해야 한다.&quot;</li>
<li><strong>프론트/백엔드</strong> :<ul>
<li>현실적인 기능 타협: &quot;타임랩스나 상점 기능 같은 고비용 기능은 제외하고, <strong>&#39;실시간 소켓 통신&#39;</strong>을 통한 상태 공유에 집중하자. 단, 1~3초 정도의 오차는 발생할 수 있음을 감안해야 한다.&quot;</li>
<li>이탈 방지 로직: &quot;타이머를 켜두고 자리를 비우는 경우를 어떻게 감지할 것인가? 카메라를 켜서 본인만 보게 하거나, 일정 시간 입력이 없으면 알림을 주는 등의 로직이 필요하다.&quot;</li>
<li>소통의 중요성: &quot;기획이 변경되거나 디테일한 부분이 개발자에게 전달되지 않을 수 있다. 이를 방지하기 위해 기능명세서, WBS 등의 문서화와 명확한 소통 규칙을 정립하자.&quot;</li>
</ul>
</li>
</ul>
<p>그리고 지금 회고하는 시점은 프로젝트가 마무리 되고 릴리즈를 준비하는 시점인데, 
이후 많은 피드백들이 있었지만, 이때는 아직 팀이라는 구체적인 형태가 없는 상태에서 오갔던 피드백인 만큼 가장 솔직하고, &#39;프로젝트의 본질&#39;을 꿰뚫고 있는 것 같다.
덕분에 이 피드백들은 향후 &#39;모각작&#39;이 <strong>타이머 중심</strong>으로 가되, 어떻게 디테일을 채울지 결정하는 중요한 기준이 되었었다.</p>
<p>릴리즈를 위해 다시 도약을 준비하는 지금 이 조언들을 다시 곱씹어야 할 것 같다!!
그래서 커피챗은 정말 유익한 시간이었다. 현시점에서 피드백을 위한 커피챗도 넘나 하고 싶다라랄.. (근데 이미 수료해버림)
<br></p>
<h1 id="4️⃣모각작-팀-결성--전략-수립">4️⃣&#39;모각작&#39; 팀 결성 &amp; 전략 수립</h1>
<p>PT와 커피챗이 끝난 다음 날, 운명의 시간이 다가왔다.</p>
<blockquote>
<ul>
<li><strong>팀 빌딩 일정</strong> : 9/28(일) 12:00pm까지</li>
<li><strong>방식</strong>: 학회원들이 구글 폼을 통해 지망하는 프로젝트에 지원하면, 발제자가 1순위 지원자 중 파트별 1명을 우선 선발 (나머지 인원은 교육기획팀 배정)</li>
</ul>
</blockquote>
<p>나는 발제자였기 때문에, 9개의 프로젝트 중 &#39;모각작&#39;을 1순위로 지망해주신 분들의 지원서를 확인하고 팀원을 직접 선택해야 했다.</p>
<h4 id="행복한-고민-그리고-선택의-무게-">행복한 고민, 그리고 선택의 무게 (?)</h4>
<p>솔직히 &#39;아무도 지원 안 해주시면 어떡하지?&#39;라는 걱정이 앞섰는데, 확인해 보니 정말 감사하게도 지원해주신 분들이 꽤 계셨었다..! 마음 같아선 진짜 지원해주신 모든 분과 함께하고 싶었지만, &#39;파트당 1명 선택&#39;이라는 규칙 때문에 어쩔 수 없이 결정을 내려야 하는 상황이 야속했다..</p>
<p>내가 1차로 결정한 후, 남은 인원은 교육기획팀의 배정으로 팀이 완성되었다. 최종 팀 발표를 기다리던 그 순간의 떨림은 아직도 잊히지 않눈다...</p>
<h4 id="팀-확정-설렘-가득한-첫-만남">팀 확정! 설렘 가득한 첫 만남</h4>
<p>아직도 생생한 9/29 오후 12:00..! 드디어 최종 명단이 발표되었다. 
앞으로 2개월간 동고동락하며 프로젝트에 몰입할 팀원들을 확인했을 때, 기대와 설렘이 아주 컸다. 
팀원 한 분 한 분을 보며 &quot;이 팀이라면 진짜 잘해볼 수 있겠다!&quot;는 확신이 들었고, 프로젝트가 끝난 지금 돌이켜봐도 이 믿음이 틀리지 않았음에 정말 감사한 마음뿐이다 🥹 몰딥브 살앙해</p>
<h4 id="진짜-본격-밋업-시작-전략-수립">진짜 본격 밋업 시작: 전략 수립!!</h4>
<p>팀 빌딩이 완료되고,
&quot;진짜 필요한 서비스를 만들고, 실제 사용자들의 피드백을 받으며 디벨롭하자&quot;는 명확한 목표를 세웠다.</p>
<p>커피챗 피드백을 바탕으로 밋업 2개월 동안 실현 가능한 규모의 <strong>&#39;타이머&#39;</strong>라는 핵심 기능을 중심으로 먼저 개발해 빠르게 시장 반응을 보고자 했다. </p>
<p>이를 위해 개발 주기를 3단계의 스프린트로 나누어 운영했다.</p>
<blockquote>
</blockquote>
<p><strong>🏃 1차 스프린트</strong>: MVP 기능 정의 + 핵심 GUI 설계 + 개발 환경 세팅 및 착수</p>
<blockquote>
</blockquote>
<p><strong>🏃 2차 스프린트</strong>: 1차 개발분 (개인 타이머) 테스트 및 수정 + QA</p>
<blockquote>
</blockquote>
<p><strong>🏃 3차 스프린트</strong>: 2차 개발분 (그룹 타이머 &amp; 상태 공유) 테스트 및 수정 + QA 마무리</p>
<p>앞으로는 이 스프린트 로드맵을 따라, 아이디어가 실제 서비스로 구현되기까지의 과정을 찬찬히 회고해 보겠다!
<br></p>
<h1 id="5️⃣outro-기획-회고를-마치며">5️⃣Outro, 기획 회고를 마치며...</h1>
<p>돌이켜보면 이번 Spark-Up 과정은 &#39;화면 블러&#39;라는 아이디어에서 시작해, 기술적 한계와 냉철한 피드백을 거쳐 &#39;타이머&#39;에 도달하기까지...
&#39;몰입&#39;과 &#39;집중&#39;을 주제로 <strong>&quot;사람들이 진짜 몰입하게 만들려면 무엇이 필요할까?&quot;</strong>를 치열하게 고민했던 시간이었다..!!</p>
<p>아직도 &quot;실제 사용자들이 이 서비스에 반응할까?&quot;에 대한 궁금증과 탐구심은 현재진행형이다. 이 기획이 어떻게 현실화되는지, 앞으로의 여정도 지켜봐 주면 감사하겠다!!! (많관부❤️)</p>
<p><em>이어서 계속...</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DP900 공부 (1) - 데이터 기본]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/DP900-%EA%B3%B5%EB%B6%80-1-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/DP900-%EA%B3%B5%EB%B6%80-1-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Mon, 25 Aug 2025 17:42:51 GMT</pubDate>
            <description><![CDATA[<h3 id="데이터-형식-식별">데이터 형식 식별</h3>
<ul>
<li>정형 데이터<ul>
<li>대부분 표 형식 스키마</li>
</ul>
</li>
<li>반정형 데이터<ul>
<li>일반적 형식 : Json (서로 다른 정보를 유용하게 담기에 좋음)</li>
</ul>
</li>
<li>비정형 데이터<ul>
<li>NLP, ML등 사용<br>

</li>
</ul>
</li>
</ul>
<h3 id="데이터-저장소-data-storage">데이터 저장소 (Data Storage)</h3>
<ul>
<li>관계형 데이터베이스(RDB)<ul>
<li><strong>앤터티를 참조할 수 있음</strong></li>
<li>따라서, <strong>정규화될 수 있음.</strong> (중복된 데이터 제거)</li>
</ul>
</li>
<li>비관계형 데이터베이스(NoSQL)<ul>
<li>스키마가 없거나 느슨하게 적용</li>
<li>반정형/비정형 데이터에 적합</li>
</ul>
<ol>
<li>키-값 데이터베이스 : 각 레코드가 고유한 키</li>
<li>문서 데이터베이스 : (1번)키-값 데이터베이스에서 값이 Json인 형태</li>
<li>열 패밀리 데이터베이스 : 열이 열 패밀리로 구성됨 <ul>
<li>열 패밀리? : 계층이 존재하는 열.</li>
<li>ex) 1depth열 : Customer, 2depth열 : Name, Address</li>
</ul>
</li>
<li>그래프 데이터베이스 : 엔터티를 노드로 저장, 엔터티(노드) 간 관계를 링크로 정의</li>
</ol>
</li>
<li>클라우드</li>
<li>데이터 레이크<br>

</li>
</ul>
<h3 id="파일-스토리지">파일 스토리지</h3>
<ul>
<li>데이터를 파일 단위로 저장하고 관리하는 방식</li>
<li>폴더와 파일의 계층 구조로 저장</li>
<li>계층 구조로 쉽게 접근 및 관리 가능</li>
<li>여러 사용자가 동시에 접근 및 수정할 수 있음</li>
<li>네트워크 연결 스토리지에서 주로 사용<br>

</li>
</ul>
<h3 id="파일-형식">파일 형식</h3>
<ul>
<li>파일 형식에 따라 어떤 프로그램으로 열지 정하게 됨</li>
<li><code>.csv</code> : 대량의 데이터 경우에 유용</li>
<li><code>.json</code> : 경량 데이터 교환 형식<ul>
<li>정형/반정형에 모두 적합</li>
<li>계층 구조 (중괄호 : object, 대괄호 : array)</li>
<li>특정 언어 없는 경우가 많음</li>
</ul>
</li>
<li><code>XML</code> : 확장 가능한 마크업 언어<ul>
<li>사람이 읽을 수 있는 데이터</li>
<li>데이터 표시보다 전달과 저장에 중점</li>
<li>사용자가 직접 태그 걸 수 있음</li>
<li>웹 서비스, API 교환 등에 쓰임</li>
</ul>
</li>
<li><code>BLOB</code> : DB에서 대용량 이진 데이터를 저장하기 위한 데이터 유형<ul>
<li>Binary Large Object</li>
<li>이미지, 비디오, 오디오 등 멀티 미디어 객체 저장 가능</li>
<li>주요 특징 및 크기에 따라 최대 용량 달라짐</li>
<li>MIME 타입을 지정할 수 있어, 데이터 유형을 명확히 함.<ul>
<li>MIME 타입 : 파일의 종류와 형식을 알려주는 역할</li>
</ul>
</li>
<li>무결성에 특화<h3 id="최적화된-파일-형식">최적화된 파일 형식</h3>
</li>
</ul>
</li>
<li>정형/반정형 데이터는 읽기에 편하지만, 스토리지 공간 및 처리에 최적화 되지 않은 경우 많음</li>
<li>따라서 압축, 인덱싱, 효율적인 처리 등을 지원하는 특수 파일 형식 존재</li>
<li>Avro : 웹 기반 형식, Apache에서 만듦<ul>
<li>각 레코드에 데이터 구조 헤더가 있고, JSON으로 저장됨</li>
<li>이진 정보로 저장됨</li>
<li>압축 가능함</li>
</ul>
</li>
<li>ORC : Horton Works가 Apache Hive에서 읽기 및 쓰기를 최적화하기 위해 개발<ul>
<li>데이터를 행이 아닌 열로 구성</li>
<li>데이터의 스트라이크(열(들), 행에 대한 인덱스, 행의 데이터, 열의 통계정보)가 포함됨</li>
</ul>
</li>
<li>Parquet :<ul>
<li>데이터를 행이 아닌 열로 구성</li>
<li>각 행 그룹에 하나 이상의 데이터 청크가 포함됨</li>
<li>메타데이터가 존재하여, 이를 사용해서 올바른 청크를 빠르게 찾고 검색</li>
<li>중첩된 데이터를 효율적으로 저장 및 처리<br>

</li>
</ul>
</li>
</ul>
<h3 id="데이터베이스-검색">데이터베이스 검색</h3>
<ul>
<li><p>관계형/비관계형에 따라 검색 방법 다름</p>
</li>
<li><p>관계형 데이터베이스(RDB) : SQL 언어 사용</p>
<ul>
<li>테이블 형식이어서 열,행을 기준으로 찾음</li>
<li>테이블 간 관계로 복잡한 검색도 가능</li>
</ul>
</li>
<li><p>비관계형 데이터베이스(NoSQL) : 각 DB마다 다른 방식 사용</p>
<ul>
<li>ex) Mongo DB : Json기반 쿼리 사용</li>
<li>복잡한 관계 검색은 어려울 수 있음</li>
</ul>
</li>
<li><p>파일시스템 : 저장소 역할을 하는 (특별한) DB</p>
</li>
<li><p>일반적인 DB : 파일이 아닌 데이터 레코드를 관리하는 DB</p>
</li>
</ul>
<h3 id="트랜잭션-데이터-처리">트랜잭션 데이터 처리</h3>
<ul>
<li>트랜젝션 데이터 처리 시스템 : <strong>OLTP</strong>(Online Transjaction Process)라고 함</li>
<li>특정 이벤트를 기록하는 트랜잭션을 캡슐화<ul>
<li>트랜잭션 : 거래 등, 대규모 데이터 처리</li>
</ul>
</li>
<li><strong>AICD(원자성, 일관성, 격리, 내구성)</strong> 의미체계 지원을 통해 무결성 실현?<ul>
<li>원자성 : 완전히 성공하거나/실패</li>
<li>일관성 : 유효한 상태에서, 다른 유효성 상태로만 데이터 받을 수 있음</li>
<li>격리 : 트랜젝션이 동시에 진행될 경우, 서로 간섭할 수 없음, 일관된 정보 반영</li>
<li>내구성 : 커밋되면, 커밋된 상태로 유지. <br>

</li>
</ul>
</li>
</ul>
<h3 id="분석-데이터-처리">분석 데이터 처리</h3>
<ul>
<li>일반적인 분석 처리 시스템 과정</li>
<li>특정 시점의 데이터 스냅샷 또는 일련의 스내샷을 토대로 진행됨</li>
<li><em>1. 데이터 추출, 변환, 로드 (ETL)*</em> : 소스에서 가져와서 필요 형태로 변환 후, 저장소(데이터 레이크)에 저장. <em>완전히 처리된 상태여야 함</em></li>
<li><em>2. 데이터 스키마 로드*</em> : 테이블 형식으로 정리. <strong>Spark 기반의 데이터 레이크 하우스나 / SQL 데이터 웨어하우스</strong>에 서 이루어짐</li>
<li><em>3. OLAP 모델로 집계*</em> : 데이터 웨어하우스에 저장된 데이터를 분석하기 쉽게 요약함 (e.g. &#39;합계&#39; 같은 요약 정보 만듦)</li>
<li><em>4. 쿼리 및 시각화*</em> : 보고서, 그래프, 대시보드 만듦
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/bc0bb023-38f6-4782-b1b1-915264dcd242/image.png" alt=""><br>

</li>
</ul>
<h1 id="azure-서비스">Azure 서비스</h1>
<h3 id="azure-database">Azure Database</h3>
<ul>
<li>Azure에서 오픈소스 데이터 베이스를 클라우드에서 사용할 수 있도록 하는 서비스</li>
<li>MySQL : 웹사이트나 앱 개발에 쓰이는 DB / LAMP에서 자주 스임</li>
<li>Maria DB : MySQL의 새로운 버전, Oracle DB와 호환성 제공</li>
<li>PostgreSQL : 더 진화된 DB, 관계형 DB 뿐만 아니라 사용자 지정 DB도 저장 가능</li>
</ul>
<h3 id="azure-cosmos-db">Azure Cosmos DB</h3>
<ul>
<li>Azure에서 데이터 베이스를 클라우드에서 사용할 수 있도록 하는 서비스</li>
<li>전세계 어디에서나 사용가능한 것</li>
<li>글로벌 규모의 비정형 DB(NoSQL)
⇒ 다양한 형식의 데이터를 빠르게 저장, 분석할 수 있는 글로벌 DB</li>
</ul>
<h3 id="azure-storage-db">Azure Storage DB</h3>
<ul>
<li>Azure에서 데이터 베이스를 클라우드에서 사용할 수 있도록 하는 서비스</li>
<li>데이터를 안전하게 저장하는 서비스</li>
<li>데이터를 저장하는 공간</li>
<li>Blob 컨테이너/ 파일 공유 / 테이블 / 디스크 등 다양한 크기와 용도로 저장
⇒ 파일, 문서, 설정 값 등을 안전하게 저장하는 DB<br>

</li>
</ul>
<blockquote>
<p>Azure에서 제공하는 데이터 서비스</p>
</blockquote>
<ul>
<li>Azure Data factory</li>
<li>Azure Synapse Analytics</li>
</ul>
<h3 id="azure-data-factory-adf">Azure Data factory (ADF)</h3>
<ul>
<li><strong>데이터 가공</strong>(전송,변환)하는 파이프라인을 정의/예약 가능</li>
<li>엔지니어가 ERL 솔루션을 빌드하여, 분석 데이터 저장소를 채우는데 사용</li>
</ul>
<h3 id="azure-synapse-analytics">Azure Synapse Analytics</h3>
<ul>
<li><strong>데이터 분석</strong>을 위한 기능을 단일 서비스 인터페이스에서 제공하는 <strong>PasS 솔루션</strong></li>
<li>주요 기능<ul>
<li>Pipelines : ADF같은 역할</li>
<li>SQL</li>
<li>Apache Spark : 대용량 처리</li>
<li>Qpace Synapse 데이터 탐색기 : KQL언어를 사용해서 실시간 로그 분석에 최적화<br>

</li>
</ul>
</li>
</ul>
<blockquote>
<p>Azure에서 제공하는 빅데이터 서비스</p>
</blockquote>
<ul>
<li>Azure DataBricks</li>
<li>Azure DataBricks</li>
</ul>
<h3 id="azure-databricks">Azure DataBricks</h3>
<ul>
<li>Apache Spark 기반의 빠른 데이터 분석 및 머신러닝 제공</li>
<li>주요 기능<ul>
<li>SQL 활용 가능</li>
<li>통합 관리 인터페이스</li>
<li>전자 필기장</li>
</ul>
</li>
</ul>
<h3 id="azure-hdinsight">Azure HDInsight</h3>
<ul>
<li>Apache Hadoop 기반의 대규모 데이터 처리 및 분석</li>
<li>주요 기능<ul>
<li>Apache Spark : 여러 언어 지원하는 분산 데이터 처리 시스템</li>
<li>Apache Hadoop : 대량의 데이터를 여러 클러스터 노드에서 저장,처리하는 분산 시스템</li>
<li>Apache Hbase : NoSQL 방식으로 데이터 저장, 쿼리</li>
<li>Apache Kafka : 스트림 처리를 위한 메시지 브로커</li>
</ul>
</li>
</ul>
<blockquote>
<p>Azure에서 제공하는 데이터 관리 도구</p>
</blockquote>
<ul>
<li>Microsoft Purview</li>
<li>Microsoft Fabric
서로 보완적인 역할을 함</li>
</ul>
<h3 id="microsoft-purview">Microsoft Purview</h3>
<ul>
<li>데이터 카탈로그</li>
<li>조직 내 데이터를 쉽게 찾고 관리</li>
<li>데이터 계보 추적 등 가능</li>
</ul>
<h3 id="microsoft-fabric">Microsoft Fabric</h3>
<ul>
<li>데이터 분석 플랫폼</li>
<li>개방형 및 관리형 레이크 하우스를 기반으로 사용하는 <strong>SaaS 분석 플랫폼</strong></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DPO : A Differential and Pointwise Control Approach
to Reinforcement Learning]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/DPO-A-Differential-and-Pointwise-Control-Approachto-Reinforcement-Learning</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/DPO-A-Differential-and-Pointwise-Control-Approachto-Reinforcement-Learning</guid>
            <pubDate>Wed, 13 Aug 2025 10:06:32 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="dpo">DPO</h2>
<p>2023.05
<a href="https://arxiv.org/abs/2305.18290">https://arxiv.org/abs/2305.18290</a>
RM와 RL 없이 LLM policy model만을 학습하여, 사람의 선호도를 반영한 문장을 생성하도록 LLM을 직접적으로 최적화 하는 알고리즘</p>
</blockquote>
<h1 id="abstract">ABSTRACT</h1>
<hr>
<p>본 논문은 대규모 언어 모델(LM)의 동작을 제어하기 어려운 문제를 해결하기 위해 <strong>DPO(Direct Preference Optimization)</strong> 알고리즘을 제안합니다.</p>
<ul>
<li><strong>문제점</strong>: 기존 대규모 비지도 학습 LM은 제어하기 어려우며, RLHF(Reinforcement Learning from Human Feedback)는 복잡하고 불안정한 학습 절차를 가집니다. RLHF는 보상 모델을 학습한 후 강화 학습을 통해 LM을 미세 조정합니다.</li>
<li><strong>DPO 제안</strong>: DPO는 보상 모델을 재해석하여 최적 정책을 직접 도출할 수 있도록 함으로써, 기존 RLHF 문제를 단순한 분류 손실(classification loss)만으로 해결합니다.</li>
<li><strong>DPO의 장점</strong>:<ul>
<li>안정적이고 고성능이며 계산 비용이 적게 듭니다.</li>
<li>미세 조정 시 LM 샘플링이나 광범위한 하이퍼파라미터 튜닝이 필요 없습니다.</li>
</ul>
</li>
<li><strong>실험 결과</strong>: DPO는 기존 RLHF(PPO 기반)와 비교하여 인간 선호도에 맞춰 LM을 미세 조정하는 데 동등하거나 더 나은 성능을 보여주며, 특히 감정 제어에서 우수하고 요약 및 대화 품질을 향상시킵니다. 또한 구현 및 학습이 훨씬 간단합니다.</li>
</ul>
<h1 id="1-introduction">1. INTRODUCTION</h1>
<hr>
<p>기존의 대규모 언어 모델(LM)의 동작을 정밀하게 제어하기 어렵고, 기존 RLHF(Reinforcement Learning from Human Feedback) 방식이 복잡하고 불안정하다는 문제점을 제기하며 DPO를 제안합니다.</p>
<ul>
<li><strong>문제점</strong>:<ul>
<li>대규모 비지도 학습 LM은 뛰어난 능력을 지녔지만, 학습 데이터의 다양성으로 인해 모델의 원하는 동작을 정확하게 제어하기 어렵습니다.</li>
<li>기존 RLHF는 보상 모델 학습과 강화 학습 기반 fine-tuning이라는 복잡한 두 단계를 거쳐야 하며, 이는 높은 계산 비용과 불안정성을 야기합니다.</li>
</ul>
</li>
<li><strong>DPO의 핵심</strong>:<ul>
<li>DPO는 RLHF의 보상 모델을 재매개변수화하여 최적 정책을 닫힌 형식으로 직접 추출할 수 있게 합니다.</li>
<li>이로써 복잡한 강화 학습 루프나 명시적인 보상 모델 학습 없이, 간단한 이진 분류 손실(binary classification loss)만으로 LM을 인간 선호도에 맞춰 직접 최적화할 수 있습니다.</li>
</ul>
</li>
<li><strong>DPO의 장점</strong>:<ul>
<li><strong>안정성 및 성능</strong>: DPO는 PPO 기반 RLHF보다 안정적이고, 감정 제어(Sentiment Modulation) task에서 더 우수한 성능을 보이며, 요약(Summarization) 및 대화(Dialogue) task에서는 비슷하거나 더 나은 품질을 제공합니다.</li>
<li><strong>구현 및 훈련 용이성</strong>: fine-tuning 과정에서 LM 샘플링이 필요 없고, 하이퍼파라미터 튜닝이 거의 필요 없어 구현 및 훈련이 훨씬 간단하고 계산적으로 효율적입니다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/09a0faf7-4518-4145-bd75-60c32384580e/image.png" alt=""></p>
<blockquote>
<p>** ⇒ 결론적으로, DPO는 기존 RLHF의 복잡성을 크게 줄이면서도 동등하거나 더 나은 성능을 제공하여, 인간 선호도에 따른 언어 모델 훈련의 장벽을 낮춥니다.**</p>
</blockquote>
<h1 id="2-related-work">2 Related Work</h1>
<hr>
<ul>
<li><strong>대규모 언어 모델(LM)의 발전</strong>: 초기 LM은 대규모 비지도 학습을 통해 놀라운 능력을 보였지만, 특정 작업에서의 성능 향상과 사용자 의도에 맞추기 위해 fine-tuning의 필요성이 대두되었습니다.</li>
<li><strong>Instruction-tuning의 등장</strong>: 인간이 작성한 고품질 응답 데이터셋을 사용하여 모델을 fine-tuning하는 &#39;instruction-tuning&#39; 방식이 도입되어 LM의 일반화 능력이 향상되었습니다.</li>
<li><strong>RLHF(Reinforcement Learning from Human Feedback)의 부상</strong>: 이후, 인간의 선호도(어떤 응답이 더 좋은지)를 직접 수집하여 LM을 fine-tuning하는 RLHF 방식이 주류가 되었습니다. 이는 보상 모델을 학습하고 이를 기반으로 강화 학습(예: PPO)을 통해 LM을 최적화하는 방식으로 진행됩니다.</li>
<li><strong>기존 RLHF의 한계</strong>: RLHF는 효과적이었지만, 보상 모델 학습 및 강화 학습 과정의 복잡성, 불안정성, 높은 계산 비용 등의 문제가 있었습니다.</li>
<li><strong>DPO(Direct Preference Optimization)의 기여</strong>: 본 논문에서 제안하는 DPO는 이러한 RLHF의 복잡한 과정을 단순화한 알고리즘입니다. DPO는 명시적인 보상 모델 학습이나 강화 학습 없이도, 인간 선호도 데이터를 사용하여 언어 모델의 정책을 직접 최적화합니다. 이는 기존 RLHF와 동일한 목표를 달성하면서도 더 간단하고 효율적입니다.</li>
</ul>
<h2 id="3-preliminaries--파이프라인의-핵심-단계">3. Preliminaries — 파이프라인의 핵심 단계</h2>
<p>RLHF 파이프라인은 일반적으로 다음 세 가지 주요 단계로 구성됩니다.</p>
<hr>
<h3 id="1단계-sft-supervised-fine-tuning--지도-fine-tuning">1단계: SFT (Supervised Fine-Tuning) — 지도 Fine-Tuning</h3>
<p>목표하는 작업(예: 대화, 요약)에 대한 고품질 데이터셋을 사용하여 사전 훈련된 Language Model을 추가로 학습(fine-tune)시킵니다.<br>이 과정을 통해 얻어지는 모델을 $\pi_{\mathrm{SFT}}$ 라고 부르며, 이는 이후 RLHF 과정의 &#39;기본 모델&#39;이 됩니다.</p>
<hr>
<h3 id="2단계-reward-modelling-phase--보상-모델링-단계">2단계: Reward Modelling Phase — 보상 모델링 단계</h3>
<p><strong>① 선호도 데이터 수집</strong><br>SFT 모델 $\pi_{\mathrm{SFT}}$ 가 생성한 답변 쌍 $(y_1, y_2)$을 인간에게 보여주고,<br>인간이 어떤 답변을 더 선호하는지 $(y_w \succ y_l \mid x)$ 선택하도록 하여 선호도 데이터를 수집합니다.<br>여기서 $y_w$는 선호되는 답변, $y_l$은 비선호되는 답변입니다.</p>
<p><strong>② 보상 모델 학습</strong><br>이 선호도 데이터로부터 Reward Model $r_\phi(x, y)$를 학습합니다.<br>이 모델은 주어진 프롬프트와 답변 쌍에 대해 &#39;보상 값&#39;을 예측합니다.</p>
<p><strong>③ Bradley-Terry 모델</strong><br>인간의 선호도가 특정 잠재적 보상 모델 $r^*(y, x)$에 의해 생성된다고 가정하며,<br>이를 Bradley-Terry 모델을 사용하여 확률적으로 모델링합니다.</p>
<p>$$
p^<em>(y_1 \succ y_2 \mid x) = \frac{\exp(r^</em>(x, y_1))}{\exp(r^<em>(x, y_1)) + \exp(r^</em>(x, y_2))}
\tag{1}
$$</p>
<ul>
<li>$p^*(y_1 \succ y_2 \mid x)$ : 질문 $x$에 대해 답변 $y_1$이 $y_2$보다 선호될 확률  </li>
<li>$r^<em>(x, y_1)$, $r^</em>(x, y_2)$ : 인간이 실제로 생각하는 숨겨진 보상 점수  </li>
<li>$\exp(\cdot)$ : 지수 함수. 보상 점수를 양수로 변환하여 확률 계산에 사용  </li>
<li>의미: 보상 점수가 높은 답변이 선택될 확률이 높아짐</li>
</ul>
<hr>
<p><strong>④ 손실 함수</strong><br>수집된 선호도 데이터 $D$를 이용해 보상 모델 $r_\phi$를 학습시키기 위한 손실 함수는 다음과 같습니다.</p>
<p>$$
L_R(r_\phi, D) =</p>
<ul>
<li><p>\mathbb{E}_{(x,y_w,y_l) \sim D}
\log \sigma \big( r_\phi(x, y_w) - r_\phi(x, y_l) \big)
\tag{2}
$$</p>
</li>
<li><p>$L_R(r_\phi, D)$ : 보상 모델 학습 손실 값 (최소화 목표)  </p>
</li>
<li><p>$\mathbb{E}_{(x,y_w,y_l) \sim D}$ : 데이터셋 $D$의 모든 선호도 쌍 평균  </p>
</li>
<li><p>$\log$ : 자연 로그  </p>
</li>
<li><p>$\sigma(z) = \frac{1}{1 + \exp(-z)}$ : 시그모이드 함수  </p>
</li>
<li><p>$r_\phi(x, y_w)$ : 선호된 답변의 보상 점수  </p>
</li>
<li><p>$r_\phi(x, y_l)$ : 비선호된 답변의 보상 점수  </p>
</li>
<li><p>의미: 선호된 답변에는 높은 점수를, 비선호된 답변에는 낮은 점수를 주도록 학습</p>
</li>
</ul>
<hr>
<h3 id="3단계-rl-fine-tuning-phase--강화-학습-fine-tuning-단계">3단계: RL Fine-Tuning Phase — 강화 학습 Fine-Tuning 단계</h3>
<p><strong>① 정책 최적화</strong><br>2단계에서 학습된 Reward Model $r_\phi$를 사용하여 Language Model $\pi_\theta$를 강화 학습 방식으로 fine-tuning 합니다.</p>
<p><strong>② KL-divergence 제약</strong><br>모델 $\pi_\theta$가 참조 모델 $\pi_{\mathrm{ref}}$ (대개 $\pi_{\mathrm{SFT}}$)에서 너무 멀어지지 않도록 KL-divergence 제약을 추가합니다.</p>
<p>$$
\max_{\pi_\theta} ;
\mathbb{E}_{x \sim D, y \sim \pi_\theta(y|x)} ;
r_\phi(x, y)</p>
<ul>
<li><p>\beta , D_{\mathrm{KL}}\big[ \pi_\theta(y|x) ,|, \pi_{\mathrm{ref}}(y|x) \big]
\tag{3}
$$</p>
</li>
<li><p>$\max_{\pi_\theta}$ : 정책 $\pi_\theta$를 최적화  </p>
</li>
<li><p>$\mathbb{E}_{x \sim D, y \sim \pi_\theta(y|x)} r_\phi(x, y)$ : 평균 보상  </p>
</li>
<li><p>$\beta$ : KL 제약 강도 조절 파라미터  </p>
</li>
<li><p>$D_{\mathrm{KL}}[P | Q]$ : 두 확률 분포 차이 측정  </p>
</li>
<li><p>의미: 높은 보상을 주는 답변을 생성하되, 참조 모델과 지나치게 다르지 않도록 균형 유지</p>
</li>
</ul>
<p>📌 <strong>기존 RLHF의 단점</strong><br>이 마지막 단계는 주로 PPO 알고리즘을 사용하며,<br>복잡하고 불안정하며 계산 비용이 많이 듭니다.<br>본 논문에서 제안하는 <strong>DPO</strong>는 이러한 복잡한 RL 단계를 제거하고 더 간단하게 fine-tuning하는 방법을 제시합니다.</p>
<h1 id="4-direct-preference-optimization">4. Direct Preference Optimization</h1>
<hr>
<p>DPO는 인간의 선호도에 맞춰 언어 모델(LM)을 학습시키는 <strong>새롭고 더 간단한 방법</strong>입니다.</p>
<ul>
<li><p><strong>기존 방식 (RLHF)의 문제점</strong>:</p>
<ul>
<li>RLHF(Reinforcement Learning from Human Feedback)는 보상 모델(Reward Model)을 학습한 뒤 강화 학습(RL)으로 LM을 fine-tuning하는 복잡하고 불안정한 과정입니다.</li>
<li>계산 비용이 많이 들고, 하이퍼파라미터(hyperparameter) 튜닝이 어렵습니다.</li>
</ul>
</li>
<li><p><strong>DPO의 핵심 아이디어</strong>:</p>
<ul>
<li>명시적인 보상 모델 학습이나 복잡한 강화 학습 과정 없이, LM을 인간의 선호도에 직접적으로 최적화합니다.</li>
<li>보상 함수(reward function)와 최적 정책(optimal policy) 간의 <strong>분석적 매핑(analytical mapping)</strong>을 활용하여, 간단한 분류 손실(classification loss)만으로 학습이 가능합니다.</li>
<li>이는 정책 네트워크(policy network)가 언어 모델과 <strong>암묵적인(implicit) 보상 모델</strong> 역할을 동시에 수행하게 합니다.</li>
</ul>
</li>
<li><p><strong>DPO의 장점</strong>:</p>
<ul>
<li><strong>안정적이고 효율적</strong>입니다.</li>
<li>Fine-tuning 중 LM에서 샘플링하거나 과도한 하이퍼파라미터 튜닝이 필요 없습니다.</li>
<li>감정 조절(sentiment modulation), 요약(summarization), 대화(dialogue)와 같은 Task에서 기존 PPO 기반 RLHF (Proximal Policy Optimization)와 동등하거나 더 우수한 성능을 보여줍니다.</li>
</ul>
</li>
<li><p><strong>학습 과정 (간략화)</strong>:</p>
<ul>
<li>인간 선호도 데이터셋((y_w) (선호), (y_l) (비선호) 쌍)을 사용합니다.</li>
<li>아래와 같은 간단한 목적 함수((L_{DPO}))를 사용하여 정책((\pi_{\theta}))을 직접 업데이트합니다.
(L_{DPO}(\pi_{\theta} ; \pi_{ref}) = -\mathbb{E}<em>{(x,y_w,y_l)\sim\mathcal{D}} \left[ \log \sigma \left( \beta \log \frac{\pi</em>{\theta}(y_w | x)}{\pi_{ref}(y_w | x)} - \beta \log \frac{\pi_{\theta}(y_l | x)}{\pi_{ref}(y_l | x)} \right) \right])
이때, (\pi_{ref})는 참조 모델이고, (\beta)는 KL-divergence 제어 파라미터입니다.</li>
</ul>
</li>
</ul>
<p>이러한 방식으로 DPO는 RLHF의 복잡성을 크게 줄이면서도 강력한 성능을 제공합니다.</p>
<h1 id="5-theoretical-analysis-of-dpo">5. Theoretical Analysis of DPO</h1>
<hr>
<p>DPO 방법의 추가적인 해석을 제공하고, 이론적 근거를 제시하며, RLHF에 사용되는 액터-크리틱 알고리즘(예: PPO)의 문제점과 관련된 DPO의 장점을 설명합니다.</p>
<h2 id="51-your-language-model-is-secretly-a-reward-mode">5.1 Your Language Model Is Secretly a Reward Mode</h2>
<ul>
<li><p><strong>기존 RLHF의 한계 극복:</strong></p>
<ul>
<li>기존 RLHF(Reinforcement Learning from Human Feedback)는 복잡한 2단계 학습 과정(보상 모델 학습 → 강화 학습을 통한 LM fine-tuning)을 거칩니다.</li>
<li>이 과정은 불안정하고, 계산 비용이 높으며, 하이퍼파라미터 튜닝이 어렵다는 단점이 있었습니다.</li>
</ul>
</li>
<li><p><strong>DPO의 핵심 아이디어:</strong></p>
<ul>
<li>DPO는 보상 모델을 명시적으로 학습하거나 강화 학습을 수행할 필요 없이, 언어 모델 자체를 인간 선호도에 직접 최적화합니다.</li>
<li>이는 RLHF의 목적 함수를 정책(policy) 함수로 재매개변수화(reparameterization)하여 달성합니다. 즉, 정책 자체가 암묵적으로 보상 모델 역할을 하게 됩니다.</li>
<li>이 재매개변수화를 통해 Bradley-Terry 모델과 같은 선호도 모델을 따르는 최적 정책을 간단한 <strong>이진 교차 엔트로피 손실(binary cross-entropy loss)</strong> 로 직접 학습할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>DPO의 장점:</strong></p>
<ul>
<li><strong>간단한 구현:</strong> 복잡한 RL 훈련 루프가 필요 없어 구현이 훨씬 간단합니다.</li>
<li><strong>안정적이고 효율적:</strong> 학습 과정이 더 안정적이며, 샘플링이나 광범위한 하이퍼파라미터 튜닝이 필요 없어 계산 효율성이 높습니다.</li>
<li><strong>우수한 성능:</strong> 감정 조절, 요약, 대화 등 다양한 텍스트 생성 task에서 기존 PPO(Proximal Policy Optimization) 기반 RLHF와 동등하거나 더 나은 성능을 보여줍니다.</li>
</ul>
</li>
<li><p><strong>&quot;언어 모델이 비밀리에 보상 모델이다&quot;의 의미:</strong></p>
<ul>
<li>DPO에서는 언어 모델의 정책((\pi_\theta))이 텍스트를 생성하는 본래의 역할 외에, 인간의 선호도를 암묵적으로 반영하는 보상 함수((r(x,y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}))의 역할까지 동시에 수행한다는 것을 의미합니다.</li>
</ul>
</li>
</ul>
<h2 id="52-instability-of-actor-critic-algorithm">5.2 Instability of Actor-Critic Algorithm</h2>
<ul>
<li><p>기존 RLHF(PPO)의 문제점 :
기존 RLHF는 보상 모델 학습과 강화 학습을 통한 언어 모델 파인튜닝이라는 두 단계로 진행됩니다.
특히 강화 학습 단계에서 파티션 함수(partition function)나 소프트 가치 함수(soft value function)와 같은 복잡한 정규화 항 때문에 정책 기울기(policy gradient)의 분산이 높아져 학습이 불안정해지는 문제가 있었습니다.
이러한 불안정성을 완화하기 위해 여러 복잡한 기법(예: 학습된 가치 함수 사용, 보상 정규화)이 필요했습니다.</p>
</li>
<li><p>DPO의 해결책: &#39;보상 모델 재매개변수화&#39;
DPO는 RLHF의 목적 함수를 수학적 변환을 통해 언어 모델의 정책(policy) 자체에 대한 간단한 손실 함수로 바꿉니다.
핵심 아이디어는 보상 모델을 언어 모델의 정책과 참조 모델의 비율((\beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}))로 재매개변수화하는 것입니다.
이 재매개변수화를 통해 기존 방식의 불안정성을 유발하던 복잡한 정규화 항이 자연스럽게 상쇄되어 사라집니다.</p>
</li>
<li><p>DPO의 장점</p>
<ul>
<li>간단한 구현: 보상 모델을 명시적으로 학습하거나 별도의 강화 학습 루프를 돌릴 필요 없이, 언어 모델을 선호도에 따라 직접 최적화할 수 있습니다.</li>
<li>높은 안정성: 정책 기울기의 분산 문제를 해결하여 학습 과정이 훨씬 안정적입니다.</li>
<li>뛰어난 성능: 실험 결과, DPO는 PPO 기반 RLHF보다 보상과 KL-divergence 간의 효율적인 트레이드오프를 보여주며, 더 나은 성능을 달성하거나 최소한 동등한 성능을 보입니다.</li>
</ul>
</li>
</ul>
<h1 id="6-experiments">6. Experiments</h1>
<hr>
<ul>
<li><p>DPO 평가 목표:</p>
<ul>
<li>효율성: DPO가 보상 최대화와 KL-divergence 제약 유지 사이의 균형을 얼마나 효율적으로 맞추는지 (PPO와 비교)</li>
<li>성능: 대규모 RLHF (Reinforcement Learning from Human Feedback) task (요약, 대화)에서의 DPO 성능</li>
</ul>
</li>
<li><p>주요 실험 내용:</p>
<ul>
<li>Task: 통제된 감정 생성, 요약, 단일 턴 대화</li>
<li>평가 방식:<ul>
<li>감정 task: &#39;reward-KL frontier&#39; 분석 (실제 보상과 KL-divergence).</li>
<li>요약/대화 task: GPT-4를 통한 &#39;승률(win rate)&#39; 평가 (GPT-4의 판단이 인간 평가와 유사함 검증).</li>
</ul>
</li>
</ul>
</li>
<li><p>비교 대상: PPO를 포함한 다양한 기존 방법론</p>
</li>
<li><p>핵심 결과:</p>
<ul>
<li>DPO의 효율성: PPO보다 훨씬 효율적으로 보상과 KL-divergence 사이의 균형을 맞춤. PPO-GT(Ground-Truth PPO)보다도 우수한 성능</li>
<li>우수한 성능: 요약 task에서 PPO를 능가하거나 동등한 성능을 보였으며, 샘플링 온도 변화에 훨씬 강건함. 대화 task에서는 계산적으로 효율적인 방법 중 유일하게 선호되는 답변을 개선</li>
<li>일반화 능력: OOD(Out-of-Distribution) 데이터셋에서도 PPO보다 더 나은 일반화 성능을 보여줌.</li>
<li>간단한 구현: 하이퍼파라미터 튜닝 없이도 좋은 성능을 보여, RLHF 훈련의 장벽을 낮춤.</li>
</ul>
</li>
</ul>
<p>⇒ DPO가 RLHF의 복잡성을 줄이면서도 기존 방법론과 동등하거나 더 나은 성능을 달성할 수 있음을 입증함.</p>
<h2 id="61-how-well-can-dpo-optimize-the-rlhf-objective">6.1 How well can DPO optimize the RLHF objective?</h2>
<p>RLHF 목표: RLHF는 언어 모델이 인간의 선호도를 따르도록 학습시키는 것이 목표입니다. 이 과정에서 모델은 높은 보상을 얻으면서도, 원래 모델(SFT (Supervised Fine-Tuning) 모델)에서 너무 멀리 벗어나지 않도록 KL-divergence 제약을 유지해야 합니다.
DPO의 성능:
DPO는 기존 RLHF 방식인 PPO (Proximal Policy Optimization)와 동일한 목적 함수를 최적화합니다.
하지만 DPO는 PPO보다 <strong>더 효율적인 보상-KL 프론티어(reward-KL frontier)</strong>를 보여줍니다. 이는 DPO가 동일한 KL-divergence에서 더 높은 보상을 달성하거나, 동일한 보상 수준에서 KL-divergence를 더 낮게 유지할 수 있다는 의미입니다.
심지어 PPO가 실제 보상 정보(ground-truth rewards)에 접근할 수 있는 PPO-GT보다도 DPO가 더 나은 성능을 보였습니다.</p>
<p>DPO의 장점: DPO는 보상 모델을 명시적으로 학습하거나 별도의 강화 학습 없이도 직접 정책을 최적화할 수 있어, 구현이 훨씬 간단하고 계산 효율적입니다. 이러한 장점에도 불구하고, Sentiment Modulation, Summarization, Dialogue 등 다양한 Language Model fine-tuning task에서 기존 방법들과 비슷하거나 더 나은 성능을 달성합니다</p>
<h2 id="62-can-dpo-scale-to-real-preference-datasets">6.2 Can DPO scale to real preference datasets?</h2>
<p>실제 데이터셋에서의 성능 입증: DPO는 요약(Summarization)(Reddit TL;DR)과 단일 턴 대화(Single-turn Dialogue)(Anthropic Helpful and Harmless)와 같은 실제 선호도 데이터셋에서 언어 모델을 fine-tuning하는 능력을 평가했습니다.
PPO 대비 우수한 성능:
요약: DPO는 요약 task에서 최적의 샘플링 온도(sampling temperature)에서 약 61%의 승률(win rate)을 달성하여 PPO의 57%를 능가했습니다.
강건성(Robustness): DPO는 PPO보다 샘플링 온도 변화에 훨씬 강건(robust)하여, 성능 저하가 적었습니다.
대화: DPO는 Anthropic HH dataset에서 선호되는 응답보다 성능이 향상된 유일한 계산적으로 효율적인 방법이었으며, 계산 비용이 높은 Best of 128 baseline과 비슷하거나 더 나은 성능을 보였습니다.</p>
<p>간단하고 효율적인 훈련: hyperparameter tuning이 거의 필요 없으며, 빠르게 최상의 성능에 수렴(converges)합니다. 이는 RLHF 파이프라인의 복잡성을 크게 줄여줍니다.
일반화 능력: DPO는 새로운 입력 분포(CNN/DailyMail dataset)에 대해서도 PPO보다 더 나은 일반화(generalization) 성능을 보였습니다.</p>
<h2 id="63-generalization-to-a-new-input-distribution">6.3 Generalization to a new input distribution</h2>
<p>DPO의 일반화 능력: 학습 시 사용되지 않은 새로운 종류의 데이터(예: Reddit TL;DR 요약으로 학습 후 CNN/DailyMail 뉴스 기사 요약)에 대해서도 뛰어난 성능을 보였습니다.
PPO와의 비교: DPO는 PPO(Proximal Policy Optimization) 기반 RLHF(Reinforcement Learning from Human Feedback)보다 새로운 데이터 분포에서 더 높은 &#39;승률(win rate)&#39;을 달성하며 우수성을 입증했습니다.
핵심 이점: DPO는 PPO처럼 추가적인 레이블 없는 프롬프트를 사용하지 않음에도 불구하고, 효율적인 학습 방식과 더불어 경쟁력 있는 일반화 능력을 보여주어 실제 적용 가능성이 높음을 시사합니다.</p>
<h2 id="64-validating-gpt-4-judgments-with-human-judgments">6.4 Validating GPT-4 judgments with human judgments</h2>
<p>연구 목적: GPT-4와 같은 대규모 언어 모델(LLM)이 생성 모델의 품질을 평가하는 데 있어 인간 평가의 신뢰할 수 있는 대리(proxy)가 될 수 있는지 확인합니다.</p>
<p>주요 방법론:</p>
<p>GPT-4 프롬프트 활용: 요약 품질 평가를 위해 두 가지 GPT-4 프롬프트(&#39;단순&#39; 프롬프트와 &#39;간결성 강조&#39; 프롬프트)를 사용했습니다. &#39;간결성 강조&#39; 프롬프트는 GPT-4가 인간보다 길고 반복적인 요약을 선호하는 경향을 보완하기 위해 도입되었습니다.
인간 연구 진행: 다양한 알고리즘(DPO, SFT, PPO)이 생성한 요약문을 대상으로 인간 평가자들을 모집하여 선호도 판단 데이터를 수집했습니다. 인간 평가자 간의 동의율과 GPT-4-인간 간의 동의율을 비교했습니다.</p>
<h1 id="7-discussion">7. Discussion</h1>
<p>DPO 소개: RLHF(인간 피드백 기반 강화 학습)의 복잡성을 줄이고, 보상 모델을 명시적으로 학습하거나 강화 학습 없이도 언어 모델을 인간의 선호도에 맞춰 직접 최적화하는 새로운 알고리즘입니다.
주요 장점: DPO는 기존 RLHF 알고리즘(PPO 기반 포함)과 비슷하거나 더 나은 성능을 보이면서도 구현이 훨씬 간단하며, 하이퍼파라미터 튜닝이 거의 필요 없어 모델 훈련의 진입 장벽을 낮춥니다.
향후 연구 방향:
일반화 능력: DPO 정책이 학습 데이터 분포 밖의 새로운 상황에서 얼마나 잘 작동하는지에 대한 더 깊은 연구가 필요합니다.
보상 과최적화: DPO에서 보상 과최적화 문제가 어떻게 나타나는지, 그리고 이로 인해 성능이 저하될 수 있는지 탐구해야 합니다.
규모 확장: 현재 최대 6B(60억) 매개변수 모델에 적용되었지만, 훨씬 더 큰 최신 모델에 DPO를 적용하는 연구가 필요합니다.
자동 평가 개선: GPT-4와 같은 자동화된 평가 시스템에서 더 신뢰성 높은 판단을 얻기 위한 프롬프트 연구가 요구됩니다.
다양한 분야 적용: 언어 모델 외에 이미지, 오디오 등 다른 양식의 생성 모델 훈련에도 DPO를 적용할 가능성이 있습니다.</p>
<p>주요 결과:</p>
<p>GPT-4의 신뢰성: GPT-4의 판단은 인간 평가자들 간의 동의율과 비슷하거나 더 높은 수준으로 인간과 일치하는 것으로 나타났습니다. 이는 GPT-4가 인간 평가를 대체할 수 있는 합리적인 도구임을 시사합니다.
프롬프트의 중요성: 특히 &#39;간결성 강조&#39; 프롬프트(GPT-4 (C))가 인간의 판단과 더 유사한 결과를 제공하여, GPT-4를 평가에 활용할 때 프롬프트 설계의 중요성을 강조합니다.</p>
<p>의의: 이 연구는 대규모 언어 모델(LLM)을 활용한 자동화된 평가 방식이 인간 피드백 수집의 높은 비용과 복잡성을 줄일 수 있는 잠재력을 보여줍니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[에겐/테토 챗봇 만들기 (feat. SFT, QLoRA, DPO)]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%EC%97%90%EA%B2%90%ED%85%8C%ED%86%A0-%EC%B1%97%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%EC%97%90%EA%B2%90%ED%85%8C%ED%86%A0-%EC%B1%97%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 11 Aug 2025 05:03:07 GMT</pubDate>
            <description><![CDATA[<p>교내 학회에서 방학동안 논문 리뷰와 함께, 간단한 toy project를 한다.
주제를 고민하던 중, 벨로그 상단에 있던 에겐/테토 개발자 유형 테스트를 만드신 내용을 보고 영감 받았다.
<a href="https://velog.io/@wkddudgk4869/%EC%B6%9C%EC%8B%9C-%ED%95%98%EB%A3%A8%EB%A7%8C%EC%97%90-%ED%8A%B8%EB%9E%98%ED%94%BD-16%EB%A7%8C-%EC%82%AC%EC%9A%A9%EC%9E%90-3000%EB%AA%85">https://velog.io/@wkddudgk4869/출시-하루만에-트래픽-16만-사용자-3000명</a></p>
<p>나도 큐시즘이나 붙캠에서 종종 작은 서비스를 만들 때, 빠르게 유저들의 반응을 확인해 보고 싶다는 생각을 자주 했어서, 이런 유형 테스트에 관심이 많았다.</p>
<p>그런데 이번 toy project는 AI 학회에서 진행하는 LLM을 주제로 하는 거라, 나는 좀 다른 방향으로 LLM 모델에 에겐/테토 성향을 부여하는 실험을 하고자 했다. 페르소나 실험은 많이 되고 있지만 좀 트렌디함을 반영해보면 재밌을 것 같았다.
개인적으로 페르소나 실험을 해보고 싶었기도 했고!
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/a977b52a-cbfc-45aa-bcf7-7f84347c4e46/image.png" alt=""></p>
<p>여튼 그래서 간단히 그 과정을 기록해보려고 한다.
내 벨로그의 목표는 비전문가가 보더라도 이해할 수 있도록 쉽게 풀어 작성해 보는 것이다.</p>
<h1 id="프로젝트-개요">프로젝트 개요</h1>
<ul>
<li>프로젝트 과제 : LLM을 활용한 간단한 프로토타입 제작</li>
<li>프로젝트 주제 : 에겐/테토 성향의 챗봇 제작</li>
<li>프로젝트 기간: 2025.07~2025.08 (총 8주)</li>
<li>참여 인원 : 총 5명</li>
</ul>
<h1 id="어떻게-만들-것인가">어떻게 만들 것인가?</h1>
<p>주제가 선정되고, &quot;데이터 수집, 모델 선정, 학습 방법&quot; 등에 대한 고민들을 본격적으로 시작했다.</p>
<h3 id="학습-방법론-개요">학습 방법론 개요</h3>
<p>본격적인 학습 방법론은 그림과 같다. 
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/8ff7c8aa-292c-4c22-8f14-6e3be0ce70b1/image.png" alt="">
입력(instruction) → 출력(output) 형태의 지도학습 데이터로
모델이 원하는 스타일(에겐/테토)에 맞춰 반응하도록 QLoRA를 활용한 파인튜닝을 하고, DPO로 SFT로 만든 모델을 선호도 기반으로 재조정한다.</p>
<h3 id="모델-후보">모델 후보</h3>
<ul>
<li><strong>0 ~ 3B</strong><ul>
<li><a href="https://huggingface.co/google/gemma-2-2b">https://huggingface.co/google/gemma-2-2b</a></li>
<li><a href="https://huggingface.co/kakaocorp/kanana-nano-2.1b-instruct">https://huggingface.co/kakaocorp/kanana-nano-2.1b-instruct</a></li>
<li><a href="https://huggingface.co/maywell/Synatra-42dot-1.3B">https://huggingface.co/maywell/Synatra-42dot-1.3B</a></li>
</ul>
</li>
<li><strong>7 ~ 9B</strong><ul>
<li><a href="https://huggingface.co/rtzr/ko-gemma-2-9b-it">https://huggingface.co/rtzr/ko-gemma-2-9b-it</a></li>
<li><a href="https://huggingface.co/maywell/Llama-3-Ko-8B-Instruct">https://huggingface.co/maywell/Llama-3-Ko-8B-Instruct</a> <br></li>
</ul>
</li>
</ul>
<p>이중에 그래도 규모가 있는 7~9B 모델들, <strong>ko-gemma</strong>와 <strong>ko-Llama</strong>을 주로 학습해보기로 했다!       </p>
<h2 id="학습-방법론-관련-개념">학습 방법론 관련 개념</h2>
<p>요러한 프로젝트에서 모델을 학습시킨다는 것은, 
이미 잘 만들어진 Base 모델에 
우리가 원하는 task—(여기서는 에겐/테토 성향에 따른 대화)—를 잘 수행하도록 추가 학습하는 것이다.</p>
<p>Base 모델은 사전학습(pretraining)을 거친 후, 목적에 맞게 <strong>파인튜닝(Fine-Tuning)</strong> 과정을 거친다.<br>우리 프로젝트에서는 QLoRA 방식으로 진행하며, 이는 SFT(Supervised Fine-Tuning)에 해당한다.</p>
<h2 id="1-sft--dpo">1. SFT &amp; DPO</h2>
<p><strong>SFT</strong>와 <strong>DPO</strong> 모두 Base모델을 추가 학습하는 방법론에 해당한다.<br>둘 다 모델의 가중치를 조정해 성능·스타일을 바꾸지만, <strong>학습 신호와 단계</strong>가 다르다.</p>
<h3 id="①-sftsupervised-fine-tuning-지도학습">① SFT(Supervised Fine-Tuning, 지도학습)</h3>
<blockquote>
<p>정답(label)이 있는 데이터로 학습하는 방식</p>
</blockquote>
<ul>
<li>LLM 분야에서 “파인튜닝”이라고 하면 보통 SFT를 의미한다.<br>정답(label)이 있는 데이터로 학습하는 방식이며, 명령문(instruction) 형태일 수도 있고 아닐 수도 있다.</li>
<li>일반적으로 파인튜닝한다고 했을 때, 이 방법에 해당된다. 
Supervised Fine-Tuning, 말 그대로 지도학습으로 즉, 정답이 있는 데이터로 학습하는 방법이다. </li>
</ul>
<p><strong>①-1 Instruction Fine-Tuning (IFT, 지시문 기반 SFT)</strong></p>
<ul>
<li>정답 데이터가 지시문 구조로 되어있다면 IFT라고 부르기도 한다.<pre><code>{
  &quot;instruction&quot;: &quot;이 문장을 영어로 번역해줘: 오늘 날씨는 맑아&quot;,
  &quot;input&quot;: &quot;&quot;,
  &quot;output&quot;: &quot;The weather is sunny today.&quot;
}</code></pre></li>
</ul>
<p><strong>①-2 기타 SFT (Non-Instruction SFT)</strong></p>
<ul>
<li><p>반드시 명령문일 필요 없음</p>
</li>
<li><p>태스크별 입력/정답 쌍으로 학습</p>
<p><strong>예시 1) 번역 task</strong></p>
<pre><code class="language-json">{
  &quot;source&quot;: &quot;오늘 날씨는 맑아&quot;,
  &quot;target&quot;: &quot;The weather is sunny today.&quot;
}</code></pre>
<p><strong>예시 2) 감성 분류 task</strong></p>
<pre><code class="language-json">{
  &quot;text&quot;: &quot;이 영화 너무 재밌다!&quot;,
  &quot;label&quot;: &quot;positive&quot;
}</code></pre>
</li>
</ul>
<h3 id="②-unsupervised--self-supervised-fine-tuning">② Unsupervised / Self-Supervised Fine-Tuning</h3>
<blockquote>
<p>라벨(정답)이 없고, 문맥 기반 예측하는 방법</p>
</blockquote>
<ul>
<li>Masked LM, causal LM 방식</li>
<li>사실상 fine-tuning개념보단 Pre-training개념에 가깝다고 할 수 있을 것 같다..</li>
</ul>
<h3 id="③-preference-based--rlhf-계열-fine-tuning">③ Preference-Based / RLHF 계열 Fine-Tuning</h3>
<blockquote>
<p>더 나은 응답을 만들기 위한 학습 과정
SFT로 기본 능력을 갖춘 모델을 선호도·보상 기준에 맞춰 조정하는 단계</p>
</blockquote>
<ul>
<li>주로 SFT 단계에서 모델은 지시문을 이해하고 기본적으로 태스크를 수행할 수 있는 능력을 갖춘 이후에, DPO·PPO 같은 Preference-Based Fine-Tuning이 효과를 발휘한다.</li>
<li>모델이 논리적으로 맞더라도 사용자 취향과 맞지 않으면 낮은 점수를 받을 수 있다</li>
</ul>
<p><strong>③-1 DPO (Direct Preference Optimization)</strong></p>
<ul>
<li><p>같은 프롬프트에 대해 선호(chosen) vs 비선호(rejected) 비교 학습</p>
</li>
<li><p>데이터셋에 이미 “이게 좋다/이건 별로”가 기록돼 있음</p>
<p>⇒ 모델이 주어진 선호도를 기반으로 학습</p>
<pre><code class="language-json">{
&quot;prompt&quot;: &quot;여행 가방 추천해줘&quot;,
&quot;chosen&quot;: &quot;가볍고 튼튼한 하드케이스를 추천합니다.&quot;,
&quot;rejected&quot;: &quot;가방은 그냥 사세요.&quot;
}</code></pre>
</li>
</ul>
<p><strong>③-2 PPO (Proximal Policy Optimization, RLHF)</strong></p>
<ul>
<li><p>RM(Reward Model) 점수를 바탕으로 학습됨</p>
</li>
<li><p>때문에 학습 중에도 RM이 매번 새로 점수를 계산하고, 이것이 학습에 반영됨</p>
<p>⇒ 모델이 선호도를 직접 계산하면서 학습</p>
<pre><code class="language-json">{
&quot;prompt&quot;: &quot;고양이에 대해 시를 써줘&quot;,
&quot;response&quot;: &quot;하늘빛 눈동자, 부드러운 발걸음...&quot;
}</code></pre>
</li>
</ul>
<p><strong>⇒</strong> SFT와 Preference-Based Fine-Tuning은 모두 파인튜닝 범주지만, <strong>동일 레벨이 아니라 순차 관계</strong>로 보는 게 더 적합할 듯하다.
즉, <strong>순서</strong>: Pretraining → SFT → DPO/PPO</p>
<h2 id="2-qloralora">2 QLoRA/LoRA</h2>
<p><strong>SFT / DPO</strong> 같은 것은 <strong>학습 유형</strong>(무엇을 어떻게 가르칠지)이고,<br><strong>QLoRA / LoRA</strong>는 <strong>학습 기법</strong>(어떤 방식으로 파라미터를 조정할지)에 해당한다.</p>
<blockquote>
<p><strong>PEFT</strong>
기존의 파인튜닝은 모델의 모든 파라미터를 업데이트하지만,<br>대형 LLM의 경우 <strong>연산량·메모리 사용량이 매우 크고 시간도 오래 걸린다</strong>.
때문에,
일부 모듈/추가 파라미터만 업데이트하는 방식으로 효율을 높이는 방법들을
<em>PEFT</em> 라고 부른다</p>
</blockquote>
<ul>
<li>장점:<ul>
<li>GPU 메모리 절약</li>
<li>학습 속도 향상</li>
<li>저장 용량 감소 (LoRA 어댑터만 저장 가능)</li>
</ul>
</li>
</ul>
<p>LoRA, QLoRA는 이러한 PEFT의 대표 기법들에 속한다.
일반적으로 파인튜닝이 모델의 파라미터 전체를 재학습 시킨다면, 그렇게 할 경우 오래 걸리니까, 일부만 해서 효율적으로 하고자 하는 걸 PEFT 기법이라 부르고, 이에 대표적인 방법들이 QloRA/LoRA이다.</p>
<h3 id="①-lora-low-rank-adaptation">① LoRA (Low-Rank Adaptation)</h3>
<ul>
<li>기존 모델의 <strong>가중치 행렬(W)</strong>에 <strong>저차원(저랭크) 행렬(A, B)</strong>을 추가해 학습</li>
<li>원본 가중치는 그대로 두고, A와 B만 업데이트</li>
<li>수식:  W&#39; = W + (A × B)<ul>
<li>A, B는 학습 중 업데이트</li>
<li>W는 고정(freeze)</li>
</ul>
</li>
<li>장점:<ul>
<li>메모리·연산 효율적</li>
<li>기존 모델 파라미터를 훼손하지 않음</li>
<li>여러 태스크별 LoRA 모듈을 독립적으로 저장·적용 가능</li>
</ul>
</li>
</ul>
<h3 id="②-lora-quantized-lora">② LoRA (Quantized LoRA)</h3>
<ul>
<li>LoRA를 <strong>양자화(Quantization)</strong>된 모델에 적용한 기법</li>
<li>양자화:<ul>
<li>모델 가중치를 16bit/32bit에서 4bit 등으로 압축해 메모리 절약</li>
<li>e.g) <code>nf4</code> = rmal float 4-bit 사용</li>
</ul>
</li>
<li>QLoRA 학습 흐름:<ol>
<li>사전학습 모델을 4bit로 로드 (GPU 메모리 절약)</li>
<li>LoRA 어댑터를 삽입</li>
<li>LoRA 파라미터만 학습</li>
</ol>
</li>
<li>장점:<ul>
<li>대형 모델도 단일 GPU에서 학습 가능</li>
<li>원본 성능을 최대한 유지하면서 비용 절감</li>
</ul>
</li>
<li>단점:<ul>
<li>극단적인 양자화 비트수 선택 시 성능 손실 가능</li>
</ul>
</li>
</ul>
<p>이러한 이해를 바탕으로 프로젝트 수행 과정에 대한 자세한 설명은 다음 포스팅에 해보겠다! 많관부~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[한국대학생IT경영학회 큐시즘] 31기의 첫 시작..OT..!
]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0%EC%9D%98-%EC%B2%AB-%EC%8B%9C%EC%9E%91..OT</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/%ED%95%9C%EA%B5%AD%EB%8C%80%ED%95%99%EC%83%9DIT%EA%B2%BD%EC%98%81%ED%95%99%ED%9A%8C-%ED%81%90%EC%8B%9C%EC%A6%98-31%EA%B8%B0%EC%9D%98-%EC%B2%AB-%EC%8B%9C%EC%9E%91..OT</guid>
            <pubDate>Thu, 07 Aug 2025 06:05:34 GMT</pubDate>
            <description><![CDATA[<p>큐시즘 후기를 벨로그에도 남기면 좋을 것 같아, 블로그 내용을 이동시켰다~~</p>
<blockquote>
<p>블로그 내용
<a href="https://blog.naver.com/sbyeori">https://blog.naver.com/sbyeori</a>
<br></p>
</blockquote>
<h1 id="31기-준비">31기 준비</h1>
<p>큐시즘에 합격 통보가 1월 20일쯤에 나왔던 것 같다</p>
<p>그 이후로, LT, 리쿠르팅, 경총 회식 등등을 거치고 드디어 첫 세션인 OT 준비가 시작되었다..🫨</p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/d5d8bfd4-6e49-4d67-aa24-1ee94ed61273/image.png" alt=""></p>
<p>너무 신기했던 건 OT를 준비하기 이전부터 큐시즘 사람들과 많이 친해졌다는 점..!</p>
<p>지금까지는 학교 활동만 주로 했었기 때문에, 학교에 가야 사람들을 보거나 하지, 학교 밖에서 모였던 건 주로 저녁 잠깐 술 마실 때가 전부였다.</p>
<p>​</p>
<p>그러나 확실히 대외 활동은 서울 경기 곳곳에 사는 사람들과 모이다 보니 이곳저곳에서 모이는 것도 재밌었다. 또 이러한 모임에 자발적으로 참여한 사람들이다 보니, 만남에 적극적인 사람들이 많다는 게 너무 좋았다.</p>
<p>오늘 혼카공 해볼까~ 하고 나가도, 근처에 사람들이 있으면 자연스럽게 합류하고, </p>
<p>몇 명씩 카공하다가도 근처에 있다고 하면 자연스레 전부가 모여있는••• 이런 분위기가 너무 좋다 (e이긴 한가봐)</p>
<p>확실히 사람이 좋다,, 큐시즘이 좋다,,🌸💕</p>
<p>여튼 이런 분위기 속에서 본격적인 경총 팀으로서의 활동이 시작되었다!</p>
<p>2월 15일! OT는 경총 담당의 세션이었고, 경총에서도 기획 파트인 최아규(호+아현+규빈)는 레크레이션을 맡았다.
*경총은 (팀장님 + 기획 + 사무대관 + 회계)로 구성
​</p>
<p>다들 방학 시기이기도 해서 회의하러 정말 많이 모였었는데, 때문에 큐시즘 하면서부터는 강남을 정말 자주 가는 것 같다.. 강남 신사 역삼 강남 신사 역삼,,, 이때부터 최아규가 가족같이 편해졌음.. 알라뷰~</p>
<p>아! 그리고 큐시즘에서 처음 알게 된 개념이 있는데 바로 “모각작”(혹은 모각코)이다. 모여서 각자 작업한다는 준말인데,, 요 워딩이 왤케 기여운지 몰겠다😛😚 (그래서 같은 과 사람들한테 전파하는 중)</p>
<p>회의하면서는 큐밀리들(큐시즘 학회원들)이 모이는 첫 활동인 만큼 어떻게 해야 최대한 많이 대화하고, 즐거울 수 있을지 많이 고민했었다.</p>
<p> <img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/c17f91f4-8090-4070-8d9a-779efc937f74/image.png" alt=""></p>
<p>여튼 요렇게 첫 기획을 준비하고, 드디어 D-day!</p>
<p>​</p>
<h1 id="31기-시작">31기 시작</h1>
<hr>
<p>31기의 시작을 알리는 OT의 날이다..!</p>
<p>이번 31기 OT의 주요 컨셉은 &#39;비행&#39;이었다.</p>
<p>그래서 굿즈도 비행기 티켓처럼 나눠준 후 알맞은 좌석에 앉도록 하는 디테일도 있었다..!</p>
<p>뭔가 첫 시작, 비행, 앞으로의 비전을 위해 도약한다는 느낌이라 너무 느좋이었다.. (대홍+태현 옵 최고)</p>
<p>​</p>
<p>이후엔 크게 운영진 소개, 각 파트 소개가 진행됐다..</p>
<p>특히 파트 소개에서 각자가 소개한 짤들이 진짜 댕웃기다</p>
<p>​</p>
<p>그중에서도 기획의 탑은.. 두둥
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/dced884f-d5ad-49df-b017-b331b06a37d1/image.png" alt=""></p>
<p>기획짱 소민 언니가 기획 파트의 역량으로 소개한 짤,, 진짜 너무 웃김</p>
<p>완전 맞는 말인 것 같음.. 기획이 시도 안 하면 그 안건은 사라진다!!</p>
<p>​</p>
<h2 id="레크레이션">레크레이션</h2>
<p>이후에는 본격 경총 기획이 준비한 레크가 시작됐다.. 우리 호달달 떨었다 진짜</p>
<p>그래서 무엇을 했냐면!!</p>
<p>수많은 카페 투어에서 나온 아이디어들은 아래와 같다!</p>
<p>​</p>
<h3 id="1-첫-번째-세션은-가장-많이-공을-들인-자기소개-빙고">1. 첫 번째 세션은 가장 많이 공을 들인 자기소개 빙고!</h3>
<p>자기소개랑 빙고를 함께 결합한 고!</p>
<p>돌아다니면서 큐-하! 하고 인사한 뒤,, 서로에 대해 알아가며 빙고판을 채우는 간단한 게임이었다!</p>
<p>미리 각자에 대해 알아갈 수 있는 내용들을 구글폼으로 받아서, 이에 대해 얘기하도록 유도했다. 실제로 다들 2n세 혹은 3n세 분들이 뽈뽈 움직이시면서 큐하를 외치는 게 넘 귀엽고 뿌듯했다 😊😝</p>
<p>가장 기대됐던 세션인 만큼, 호응도 좋아서 참 다행이었다.
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/d10c8560-c83c-4858-a2e9-649408202156/image.png" alt="">
<br></p>
<h3 id="2-두-번째-세션은-경총-지원서에-썼었던-타임큐슐">2. 두 번째 세션은 경총 지원서에 썼었던,, 타임큐슐!</h3>
<p>타임캡슐에 의미에 맞게</p>
<p>첫 세션인 ot에서 &#39;도전하는 이들을 위한 시작점&#39;에 맞게 도전하고픈 내용들을 적고, </p>
<p>마지막 세션인 큐밤에서 이를 이뤘는지 확인하는 시간을 가지고자 했다!
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/b64f414a-531e-4903-994b-4180737451b0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/9ed59285-1aa8-411c-ba71-4bc1043a153d/image.png" alt="">
<br></p>
<h3 id="3-세-번째-세션은-경총-지원서에-썼었던-퀴즈">3. 세 번째 세션은 경총 지원서에 썼었던,, 퀴—즈!</h3>
<p>요건 큐시즘에 대한 내용을 비롯해서 사투리, 일반 퀴즈 등등을 통해 몰입하고 팀웤을 다지는 기회가 되길 바랐다!</p>
<p>이렇게 첫 세션인 오티가 끝났다..!</p>
<p>아쉬운 점도 많았지만, 끝까지 잘해주고, 넘 고생했던 경총팀과 옆에서 잘한다며 자신감을 넣어준 운영진 붕들에게 감사인사를 하며 마치겠다~~!!</p>
<p>부디 학회원들에게 설레고 즐거운 기억으로 남았으묜🥹🤩</p>
<p>​</p>
<p>3MC라고 나름 옷도 맞춰입었다! 큐시즘 색깔 맞춰서 남색으로~!!ㅋㅋㅋ
<img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/b8cb3bc7-fb6d-4501-b960-cf0d12f7a633/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LLaMA 논문 리뷰]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/LLaMA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/LLaMA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Wed, 06 Aug 2025 09:47:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="llama">LLaMA</h2>
<p><a href="https://arxiv.org/abs/2302.13971">https://arxiv.org/abs/2302.13971</a></p>
</blockquote>
<h1 id="abstract">ABSTRACT</h1>
<hr>
<ul>
<li>LLaMA는 비교적 가벼운 모델, 오픈 소스 데이터만 사용한 모델</li>
<li>LLaMA-13B는 대부분의 벤치마크에서 GPT-3(175B)보다 뛰어난 성능</li>
<li>LLaMA-65B는 Chinchilla-70B 및 PaLM-540B와 유사한 성능</li>
</ul>
<h1 id="1-introduction">1. INTRODUCTION</h1>
<hr>
<ul>
<li><p>기존 대부분의  LLM</p>
<ul>
<li>적합한 양의 텍스트로 학습한 후, 몇 가지 예시(few-shot)를 통해 task 수행</li>
<li>모델 규모 확장에 중점을 둠</li>
<li>‘더 많은 파라미터 → 더 높은 성능’ 이라는 가정에 기초</li>
</ul>
</li>
<li><p>최근</p>
<ul>
<li><p>규모는 더 작으나, 더 많은 데이터로 학습한 모델이 가장 좋은 성능을 달성함</p>
</li>
<li><p>스케일링 법칙을 바탕으로 함</p>
</li>
<li><p>특정 훈련 계산 예산 내에서 데이터셋과 모델 크기를 최적으로 확장하는 방법을 결정하는 것</p>
</li>
<li><p>그러나, 추론 예산은 고려하지 않음</p>
<p>→ 특정 성능 목표가 주어졌을 때, 훈련이 빠른 모델보다는 추론이 빠른 모델이 더 중요</p>
<p>만약 대규모 언어 모델을 서비스하고자 한다면, 아마 기업에서 선호하는 모델은 (동일 성능일 때) 훈련 시간이 짧은 모델이 아닌, 추론 시간이 짧은 모델일 것</p>
</li>
</ul>
</li>
<li><p>LLaMA</p>
<ul>
<li><p>다양한 추론 예산에서 최고의 성능을 달성할 수 있는 언어 모델</p>
</li>
<li><p>추론 속도를 높이기 위해 학습 시간을 늘리더라도, 추론 시간은 줄이는 방법을 사용</p>
</li>
<li><p>일반적으로 사용되는 것보다 더 많은 토큰으로 학습</p>
</li>
<li><p>70억에서 650억 개의 파라미터로 구성</p>
</li>
<li><p>Transformer 아키텍처 수정하여 사용</p>
<p>⇒ 따라서 이 모델은 규모는 줄이면서도, 일반적으로 사용되는 것보다 더 많은 토큰을 학습함으로써 학습 시간은 고려하지 않고 추론 시간을 줄이고자 함</p>
</li>
</ul>
</li>
<li><p>해당 연구 (LLaMA) 의의</p>
<ul>
<li>성능 측면<ul>
<li>기존의 SOTA 모델들과 경쟁력 있는 성능 보임</li>
<li>GPT-3보다 10배 작음에도 불구하고 더 좋은 성능</li>
<li>단일 GPU에서 실행 가능 → LLM 접근을 더 쉽게 만듦</li>
<li>가장 큰 650억 파라미터 모델의 경우, Chinchilla나 PaLM-540B 등과도 경쟁력 있음</li>
</ul>
</li>
<li>오픈 소싱 측면<ul>
<li>Chinchilla, PaLM, 또는 GPT-3와 달리 공개된 데이터만을 사용</li>
<li>기존 모델들은 비공개, 혹은 공개이더라도 경쟁력 떨어졌음.</li>
<li>그러나 경쟁력과 오픈 소싱 가능하다는 두 이점 모두 가짐</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="2-approach">2. Approach</h1>
<hr>
<ul>
<li>이전 연구들과 유사</li>
<li>Chinchilla 확장 법칙에서 영감을 받았습니다.</li>
<li>우리는 많은 양의 텍스트 데이터를 사용하여 대형 Transformer 모델을 훈련</li>
<li>훈련에는 표준 옵티마이저를 사용</li>
</ul>
<h2 id="21-pre-training-data">2.1 Pre-training Data</h2>
<p>사전 훈련 데이터와 전처리 방법</p>
<ul>
<li>사전 훈련 데이터는 다양한 출처/ 도메인 포괄</li>
<li>다른 대규모 언어 모델 훈련에 사용된 데이터 소스를 주로 재사용</li>
<li>하지만 공개적으로 이용 가능하고 오픈소싱에 호환되는 데이터만 사용</li>
</ul>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/534d29d7-ad6e-48bf-b662-4fbced839f98/image.png" alt="[표 1] 훈련 세트에서 각 데이터가 차지하는 비율"></p>
<p>[표 1] 훈련 세트에서 각 데이터가 차지하는 비율</p>
<ul>
<li><p>English CommonCrawl [67%]</p>
<ul>
<li>English CommonCrawl : Common Crawl 프로젝트에서 수집한 웹 페이지 중에서 영어로 된 텍스트 데이터만을 추출한 부분</li>
<li>CommonCrawl : 비영리단체에서 전 세계의 다양한 언어로 작성된 웹 페이지를 크롤링하여 제공하는 방대한 양의 웹 데이터</li>
<li>dumps:  특정 시점의 전체 데이터를 추출해서 데이터베이스나 파일 시스템으로 추출해내는 것</li>
<li>다섯 개의 CommonCrawl 덤프를 CCNet 파이프라인으로 전처리<ul>
<li>중복된 데이터는 제거,</li>
<li>fastText 선형 분류기를 사용한 비영어 페이지 제거를 위한 언어 식별 작업</li>
<li>n-gram 언어 모델을 사용한 저품질 콘텐츠를 필터링</li>
<li>Wikipedia의 참조 페이지와 무작위 샘플 페이지를 구분하는 선형 모델을 훈련하고, 참조로 분류되지 않은 페이지는 제외</li>
</ul>
</li>
</ul>
</li>
<li><p>C4 [15%]</p>
<ul>
<li>다양한 전처리된 CommonCrawl 데이터셋을 사용하는 것이 성능을 개선시킨다는 것을 실험적으로 확인함</li>
<li>따라서 공개적으로 이용 가능한 C4 데이터셋 (Raffel et al., 2020)을 데이터에 포함시킴</li>
<li>C4의 전처리에도 중복 제거 및 언어 식별 단계가 포함되어 있음</li>
<li>CCNet과의 주요 차이점: 주로 문장부호의 존재 여부나 웹페이지의 단어와 문장 수 등과 같은 휴리스틱을 기반으로 한 품질 필터링</li>
</ul>
</li>
<li><p>Github [4.5%]</p>
<ul>
<li>Google BigQuery에서 제공하는 공개적으로 이용 가능한 GitHub 데이터셋</li>
<li>그중 MIT 라이선스에 따라 배포된 프로젝트만 사용</li>
<li>행 길이나 영숫자 문자의 비율과 같은 휴리스틱을 기반으로 저품질 파일을 필터링하고, 정규 표현식을 사용하여 헤더와 같은 보일러플레이트를 제거</li>
<li>정확한 일치를 통해 결과 데이터셋에서 중복 제거</li>
</ul>
</li>
<li><p>Wikipedia [4.5%]</p>
<ul>
<li>2022년 6월부터 8월까지의 Wikipedia 덤프를 추가합니다. 이는 라틴 문자 또는 키릴 문자 스크립트를 사용하는 20개 언어(bg, ca, cs, da, de, en, es, fr, hr, hu, it, nl, pl, pt, ro, ru, sl, sr, sv, uk)를 포함합니다. 데이터를 처리하여 하이퍼링크, 주석 및 기타 서식 관련 보일러플레이트를 제거합니다.</li>
</ul>
</li>
<li><p>Gutenberg and Books3 [4.5%]</p>
<ul>
<li>두 개의 도서 말뭉치가 포함</li>
<li>퍼블릭 도메인에 속하는 Gutenberg 프로젝트의 도서와 대규모 언어 모델을 훈련하기 위한 공개적으로 이용 가능한 데이터셋인 ThePile의 Books3 섹션(Gao et al., 2020)을 포함</li>
<li>도서 수준에서 중복을 제거하고, 90% 이상의 내용이 겹치는 도서를 제거</li>
</ul>
</li>
<li><p>ArXiv [2.5%]</p>
<ul>
<li>arXiv 라텍스 파일을 처리하여 과학 데이터를 데이터셋에 추가</li>
<li>Lewkowycz et al. (2022)을 따라 첫 번째 섹션 이전의 모든 내용과 레퍼런스 목록 제거</li>
<li>.tex 파일에서 주석을 제거하고, 사용자가 작성한 인라인 정의와 매크로를 확장하여 논문 간의 일관성을 높임</li>
</ul>
</li>
<li><p>Stack Exchange [2%]</p>
<ul>
<li>다양한 도메인을 다루는 고품질 질문과 답변 웹사이트인 Stack Exchange의 덤프포함</li>
<li>28개의 가장 큰 웹사이트의 데이터만 유지하고, 텍스트에서 HTML 태그를 제거하고, 답변을 점수에 따라 (높은 점수부터 낮은 점수 순서로) 정렬</li>
</ul>
</li>
<li><p>Tokenizer</p>
<ul>
<li><p>우리는 bytepair encoding (BPE) 알고리즘(Sennrich et al., 2015)을 사용하여 데이터를 토큰화 함</p>
</li>
<li><p>이때, 모든 숫자를 개별 숫자로 분리하고, 알 수 없는 UTF-8 문자를 분해하기 위해 바이트로 대체</p>
<p>  → 이 과정은 SentencePiece (Kudo and Richardson, 2018)의 구현을 사용</p>
</li>
<li><p>전반적으로, 전체 훈련 데이터셋은 토큰화 후 약 1.4조 개의 토큰 포함</p>
</li>
<li><p>대부분의 훈련 데이터에서는 각 토큰이 훈련 중에 한 번만 사용</p>
</li>
<li><p>Wikipedia와 Books 영역에서는 약 두 번의 epoch 수행</p>
</li>
</ul>
</li>
</ul>
<h2 id="22-architecture">2.2 Architecture</h2>
<ul>
<li><p>Transformer 아키텍처를 기반으로 하고, 이후 제안된 여러 개선 사항을 활용</p>
</li>
<li><p>PaLM과 같은 다른 모델에서 사용된 개선 사항들을 참고</p>
</li>
<li><p>원래 아키텍처와의 주요 차이점과, 변경 사항에 대한 출처(영감)</p>
<ul>
<li><p><strong>Pre-normalization [GPT3].</strong></p>
<ul>
<li>기존: 서브레이어의 출력을 정규화, Layernorm 사용</li>
<li>바뀐점: 서브레이어에 들어가는 입력값을 정규화, RMSNorm 사용</li>
<li>Zhang과 Sennrich(2019)이 도입한 RMSNorm 정규화 함수를 사용</li>
<li>훈련의 안정성을 향상시키기 위해</li>
</ul>
</li>
<li><p><strong>SwiGLU activation function [PaLM].</strong></p>
<ul>
<li>기존: ReLU 활성화 함수</li>
<li>바뀐점: ReLU의 비선형을 SwiGLU로 변경하여 사용</li>
<li>Shazeer(2020)이 도입한 PaLM에서 사용된 방법, 그러나 PaLM에서 사용된 4d 대신 2/3 × 4d의 차원을 사용</li>
<li>성능을 향상시키기 위해</li>
</ul>
</li>
<li><p><strong>Rotary Embeddings [GPTNeo].</strong></p>
<ul>
<li><p>기존: absolute positional embedding</p>
</li>
<li><p>바뀐점:  Rotary positional embeddings (RoPE)를 사용</p>
</li>
<li><p>Su et al. (2021), 이 도입한 GPTNeo에서 사용된 방법</p>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/69c2648d-e966-4a98-86b4-3a4888228ede/image.png" alt="image.png"></p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="23-optimizer">2.3 Optimizer</h2>
<ul>
<li><p>옵티마이저: AdamW</p>
</li>
<li><p>하이퍼파라미터</p>
<ul>
<li><p>beta1 = 0.9, beta2 = 0.95</p>
</li>
<li><p>learning rate이 훈련 과정 동안 변하는 방식은 Cosine learning rate schedule 방법을 채택</p>
<p>  → 이를 사용하여 최종 learning rate는 최대의 10%가 되게끔 조정</p>
</li>
<li><p>가중치 감쇠는 0.1로, gradient clipping은 1.0</p>
</li>
<li><p>2,000번의 워밍업 단계를 사용합니다.</p>
</li>
<li><p>모델 크기에 따라 학습률과 배치 크기를 조정</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/c24f22e5-d931-412d-94bc-c45fc66bf8c1/image.png" alt="image.png"></p>
<h2 id="24-efficient-implementation">2.4 Efficient implementation</h2>
<p>훈련 속도를 향상시키기 위해 다양항 최적화 방법 사용</p>
<ul>
<li><p>메모리와 실행 시간 단축</p>
<ol>
<li>멀티 헤드 어텐션의 효율적인 구현을 사용<ul>
<li>어텐션 가중치를 적용하지 않고, 마스크된 키/쿼리 스코어를 계산하지 않는 방식</li>
<li>xformers 라이브러리에서 사용 가능</li>
</ul>
</li>
<li>또한 역전파 중에 다시 계산되는 활성화량을 체크포인팅 방법을 통해 줄임<ul>
<li>pytorch의 기본 기능에 의존하지 않고, 역전파 함수를 수동으로 구현함으로써 달성</li>
</ul>
</li>
</ol>
</li>
<li><p>메모리 양 단축</p>
<ol>
<li>모델과 시퀀스 병렬성을 사용하여 메모리 사용량을 줄임</li>
<li>활성화 값의 계산과 GPU 간 통신을 가능한 한 겹쳐서 수행</li>
</ol>
</li>
<li><p>효과</p>
<p>  이러한 최적화 방법을 사용하여 65B 파라미터 모델을 훈련시키 경우</p>
<p>  ⇒  80GB의 RAM을 가진 2048개의 A100 GPU에서 약 380 토큰/초의 처리 속도</p>
<p>  ⇒ 1.4조 토큰을 포함한 데이터셋을 대상으로 훈련하는 데 약 21일이 걸린다는 의미</p>
</li>
<li><p>학습 시키는 비용</p>
</li>
</ul>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/78e784b9-f21b-43e7-9c5e-6903baaf1733/image.png" alt="[표5] 모델 훈련에 든 비용"></p>
<p>[표5] 모델 훈련에 든 비용</p>
<h1 id="3--main-results">3.  Main results</h1>
<hr>
<ul>
<li>이전 연구(Brown et al., 2020)를 따라, LLaMA에서는 zero-shot과 few-shot task고려</li>
<li>총 20개의 벤치마크에서 결과를 보고합니다:</li>
<li>zero shot : 태스크에 대한 텍스트 설명과 테스트 예제를 제공합니다. 모델은 답변을 생성하거나 제안된 답변을 순위화합니다.</li>
<li>few shot : 태스크에 대한 (1-64)가지 예제와 테스트 예제를 제공합니다. 모델은 이 텍스트를 입력으로 받아 답변을 생성하거나 순위화합니다.LLaMA의 평가는 free-form generation tasks 와 multiple choice tasks 를 통해 평가했습니다.</li>
<li>주요 비교 모델<ul>
<li>GPT-3, Gopher, Chinchilla, PaLM 같은 비공개 모델들</li>
<li>OPT, GPT-J, GPT-Neo와 같은 공개 소스 모델</li>
</ul>
</li>
<li>평가<ul>
<li>자유 형식 생성 작업</li>
<li>다지선다형 작업<ul>
<li>주어진 문맥을 바탕으로 가장 적절한 완료를 선택하는 것이 목표</li>
<li>Gao et al.(2021) 방법 사용: 
모델이 생성한 각 답변의 <strong>문자 수</strong>에 따라 그 답변의 확률을 조정</li>
<li>그러나 특정 데이터셋(OpenBookQA, BoolQ)에서는,  Brown et al.(2020) 방법 사용 : 답변이 얼마나 &quot;Answer:&quot;라는 단어와 연관이 있는지에 따라 확률을 조정
⇒ P(완료|문맥)/P(완료|“Answer:”)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="31-common-sense-reasoning">3.1 Common Sense Reasoning</h2>
<ul>
<li>8가지 표준 상식 추론 벤치마크 고려<ul>
<li><strong>BoolQ</strong>: yes/no 질문에 대한 응답을 다루는 데이터셋.</li>
<li><strong>PIQA</strong>: 물리적 상식에 대한 질문을 다루는 데이터셋.</li>
<li><strong>SIQA</strong>: 사회적 상식을 평가하는 질문들로 구성된 데이터셋.</li>
<li><strong>HellaSwag</strong>: 문맥에 맞는 가장 자연스러운 문장을 선택하는 문제를 포함한 데이터셋.</li>
<li><strong>WinoGrande</strong>: 문맥에 따라 명확한 의미 해석을 요구하는 문제를 다루는 데이터셋.</li>
<li><strong>ARC</strong>: 과학적 질문에 대한 응답을 요구하는 문제를 포함한 데이터셋으로, &quot;easy&quot;와 &quot;challenge&quot;로 나뉩니다.</li>
<li><strong>OpenBookQA</strong>: 과학적 지식을 기반으로 추론해야 하는 질문들로 구성된 데이터셋.</li>
</ul>
</li>
<li>클로즈(Cloze) 및 위노그라드(Winograd) 스타일의 작업과 다지선다형 질문 포함</li>
<li>평가<ul>
<li>제로샷 방식으로 LLaMA 모델을 평가</li>
</ul>
</li>
</ul>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/7f32689a-697f-4d05-a76c-722b57ba27ed/image.png" alt="image.png"></p>
<ul>
<li>LLaMA-65B vs Chinchilla-70B<ul>
<li>BoolQ를 제외한 모든 벤치마크?에서 Chinchilla-70B 능가</li>
</ul>
</li>
<li>LLaMA-65B vs PaLM-540B<ul>
<li>BoolQ와 WinoGrande를 제외한 대부분의 벤치마크에서 PaLM-540B 능가</li>
</ul>
</li>
<li>제로샷의 성능이 GPT-3과 비교해서 상당히 좋음</li>
<li>약 7B 모델만 써도 GPT-3와 비슷한 수치, 경쟁력 갖춤!</li>
</ul>
<h2 id="32-closed-book-question-answering">3.2 Closed-book Question Answering</h2>
<ul>
<li>두 가지 클로즈드 북 질문 응답 벤치마크 Natural Questions와 TriviaQA 고려<ul>
<li><strong>Natural Questions (NQ)</strong>: 구글 검색을 통해 실제 사용자들이 입력한 질문들로 구성된 데이터셋으로, 질문에 대한 정확한 답변을 요구합니다.</li>
<li><strong>TriviaQA</strong>: 일반적인 상식이나 퀴즈 문제들에 대한 질문 응답을 다루는 데이터셋으로, 정확한 답을 찾는 능력을 평가합니다.</li>
<li>질문에 대한 답을 제공할 때, 참고할 수 있는 문서 없이 정확한 답을 찾아야 함</li>
</ul>
</li>
<li>두 벤치마크 모두에서 LLaMA-65B 모델이 제로샷 및 소수샷 설정에서 최상의 성능을 보였습니다.</li>
<li>특히, LLaMA-13B 모델도 GPT-3와 Chinchilla와 비교할 때 5-10배 더 작음에도 불구하고 좋은 성능</li>
<li>LLaMA-13B 모델은 추론 시 단일 V100 GPU에서 실행 가능</li>
</ul>
<h2 id="33-reading-comprehension">3.3 Reading Comprehension</h2>
<ul>
<li>독해 평가 벤치마크 RACE 고려<ul>
<li><strong>RACE</strong> : 중국 중고등학생들이 치른 영어 독해 시험에서 나온 문제</li>
</ul>
</li>
<li>LLaMA-65B 모델은 PaLM-540B와 비슷한 성능</li>
<li>LLaMA-13B 모델은 GPT-3보다 약간 더 나은 성능</li>
</ul>
<h2 id="34-mathematical-reasoning">3.4 Mathematical reasoning</h2>
<ul>
<li>두 가지 수학적 추론 벤치마크 MATH와 GSM8k 고려<ul>
<li><strong>MATH</strong>: 중고등학교 수학 문제 12,000개로 구성된 데이터셋입니다.</li>
<li><strong>GSM8k</strong>: 중학교 수학 문제로 구성된 데이터셋입니다.</li>
</ul>
</li>
<li>Minerva는 수학 데이터로 미세 조정된 PaLM 모델이지만, PaLM과 LLaMA는 그렇지 않습니다.</li>
<li>LLaMA-65B 모델은 수학 데이터로 미세 조정되지 않았음에도 GSM8k에서 Minerva-62B 능가</li>
</ul>
<h2 id="35-code-generation">3.5 Code generation</h2>
<ul>
<li>HumanEval과 MBPP 벤치마크에서 자연어 설명을 기반으로 코드를 작성하는 능력을 평가<ul>
<li><strong>HumanEval</strong>: 주어진 함수 설명과 테스트 케이스를 기반으로 Python 프로그램을 작성해야 하는 벤치마크.</li>
<li><strong>MBPP</strong>: 자연어로 된 프로그램 설명을 바탕으로 Python 코드를 작성하는 문제들로 구성된 벤치마크.</li>
</ul>
</li>
<li>LLaMA는 코드 관해서 특별히 훈련되지 않은 다른 일반 모델들 능가</li>
<li>LLaMA 13B 및 65B 모델은 각각 LaMDA 137B 및 PaLM 62B 모델 능가</li>
<li>코드를 생성하는 성능은 코드 전용 데이터로 미세 조정할 경우 더욱 향상될 수 있을 것으로 보이나, 본 논문에서는 코드 토큰으로의 미세 조정은 다루지 않음</li>
</ul>
<h2 id="36-massive-multitask-language-understanding">3.6 Massive Multitask Language Understanding</h2>
<ul>
<li>대규모 다중 작업 언어 이해 벤치마크 MMLU 고려<ul>
<li>Hendrycks et al.(2020)이 제안</li>
<li><strong>MMLU</strong>는 인문학, STEM, 사회과학 등 다양한 지식을 다루는 다지선다형 질문들로 구성</li>
</ul>
</li>
<li>5-shot 설정에서 모델 평가</li>
<li>LLaMA-65B 모델은 Chinchilla-70B와 PaLM-540B 모델보다 평균적으로 성능이 몇 퍼센트 낮았습니다.<ul>
<li>이는 우리의 사전 훈련 데이터에서 제한된 양의 책과 학술 논문만 사용한 반면, Chinchilla와 PaLM 같은 모델들은 최대 2TB의 방대한 책 데이터를 사용해 훈련함.</li>
<li>이로 인해 Gopher, Chinchilla, PaLM이 MMLU에서 GPT-3보다 더 좋은 성능을 보였다고 추측하고 있음.</li>
</ul>
</li>
</ul>
<h2 id="37-evolution-of-performance-during-training">3.7 Evolution of performance during training</h2>
<p>여러 질문 응답 및 상식 벤치마크의 성능 추적 결과</p>
<ul>
<li>대부분의 벤치마크에서 성능은 꾸준히 개선되었으며, 모델의 성능과 훈련 복잡도(perplexity)와 상관관계를 보임<ul>
<li>어떤 상관관계? 양/음?</li>
</ul>
</li>
<li>SIQA와 WinoGrande는 예외<ul>
<li>SIQA: 성능이 크게 변동하는 것을 관찰했는데, 이는 이 벤치마크가 신뢰할 만하지 않음을 의미.</li>
<li>WinoGrande: 성능이 훈련 복잡도와 잘 상관관계를 보이지 않았으며, LLaMA-33B와 LLaMA-65B가 훈련 중 유사한 성능을 보임</li>
</ul>
</li>
</ul>
<h1 id="4--instruction-finetuning">4.  Instruction Finetuning</h1>
<hr>
<ul>
<li><p>명령어 데이터로 간단히 미세 조정을 하는 것만으로도 MMLU에서 성능이 급격히 향상됨을 확인</p>
<ul>
<li><p>MMLU: 대규모 다중 작업 언어 이해 벤치마크</p>
<aside>
💡 **Instruction Finetuning (명령어 미세 조정)**이란?
</li>
<li><p>모델이 주어진 지시나 명령을 더 정확하게 이해하고 수행할 수 있도록 훈련하는 과정</p>
</li>
<li><p>특히 MMLU와 같은 복잡한 다중 작업 벤치마크에서 모델의 성능을 향상시키는 데 유용</p>
</aside>
</li>
<li><p>LLaMA-65B의 미세 조정되지 않은 버전도 이미 기본적인 명령을 따를 수 있지만, 아주 적은 양의 미세 조정만으로도 MMLU에서의 성능이 향상되고, 모델의 명령어 이해 능력이 더욱 개선되는 것을 확인</p>
</li>
<li><p>다만, 이 논문의 초점이 명령어 미세 조정에 있는 것은 아니므로, Chung et al.(2022)의 프로토콜을 따라 LLaMA-I라는 명령어 모델을 훈련하는 단일 실험만 수행함</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/ef3b684f-b62c-4b8e-bd62-fa02ca130741/image.png" alt="[표 10] Instruction Finetuning을 수행한 LLaMA-I 모델의 MMLU 성능"></p>
<p>[표 10] Instruction Finetuning을 수행한 LLaMA-I 모델의 MMLU 성능</p>
<ul>
<li>기존 LLaMa-65B보다 성능이 오른 것을 확인할 수 있습니다. 다만 표에는 없지만 가장 최신 기술인 GPT code-davinci-002의 77.4보다는 낮습니다.</li>
</ul>
<h1 id="5-bias-toxicity-and-misinformation">5. Bias, Toxicity and Misinformation</h1>
<hr>
<ul>
<li>대규모 언어 모델은 훈련 데이터에 있는 <strong>편향</strong>을 그대로 재생산하거나, <strong>유해한</strong> 콘텐츠를 생성할 수 있습니다.</li>
<li><strong>LLaMA-65B</strong> 모델도 웹에서 수집된 데이터를 훈련에 사용했기 때문에, 이런 문제를 일으킬 가능성이 있습니다.</li>
<li>우리는 모델이 <strong>유해한 콘텐츠</strong>나 <strong>고정관념</strong>을 생성할 가능성을 평가하기 위해 다양한 벤치마크를 사용했습니다.</li>
<li>이 평가들은 일부 표준 벤치마크를 사용하여 모델의 문제를 나타내지만, 모델과 관련된 모든 위험을 완전히 이해하기에는 <strong>불충분</strong>할 수 있습니다.</li>
</ul>
<h2 id="51-real-toxicity-prompts">5.1 Real Toxicity Prompts</h2>
<ul>
<li>언어 모델은 모욕, 혐오 발언 또는 위협과 같은 유해한 언어를 생성할 가능성 있음</li>
<li>그러나 모델이 생성할 수 있는 유해한 콘텐츠의 범위는 매우 넓어, 이를 철저히 평가하는 것은 어움</li>
<li>이에 따라 최근 몇몇 연구에서 RealToxicityPrompts 벤치마크를 모델의 유해성을 평가하는 지표로 사용<ul>
<li>RealToxicityPrompts: 약 10만 개의 프롬프트로 구성</li>
<li>이 프롬프트를 완성하는 것이 모델의 과제, 그런 다음 생성된 텍스트의 유해성 점수는 PerspectiveAPI 3를 사용해 0(비유해)에서 1(유해) 사이로 자동 측정</li>
</ul>
</li>
<li>해당 논문에서는 평균 유해성 점수를 측정<ul>
<li>결과는 문헌과 비슷하지만 일부 방법론적 차이 존재</li>
<li>모델 크기가 커질수록, 특히 존중적인 프롬프트에서 유해성이 증가하는 경향이 관찰되었습니다.</li>
<li>Hoffmann et al.(2022)은 Gopher와 Chinchilla 사이에서 유해성 차이를 발견하지 못했는데, 이는 모델 성능의 차이 때문일 수 있습니다.</li>
</ul>
</li>
</ul>
<h2 id="52--crows-pairs">5.2  CrowS-Pairs</h2>
<ul>
<li>모델의 편향을 평가하기 위해 CrowS-Pairs 데이터셋 사용<ul>
<li><strong>CrowS-Pairs:</strong> 다양한 카테고리(성별, 종교, 인종/색, 성적 지향, 나이, 국적, 장애, 외모, 사회경제적 지위 등)에서 모델의 편향을 측정하는 데이터셋입니다.</li>
<li>각 예제는 고정관념적인 문장과 반고정관념적인 문장으로 구성되어 있으며, 모델이 어느 쪽을 더 선호하는지를 측정</li>
</ul>
</li>
<li>LLaMA 모델은 평균적으로 GPT-3 및 OPT-175B 모델보다 약간 더 나은 성과</li>
<li>하지만, 종교 카테고리에서 LLaMA 모델의 편향이 특히 더 컸으며, 그 다음으로 나이와 성별 카테고리에서 편향이 나타남</li>
<li>이러한 편향은 CommonCrawl 데이터에서 기인했을 가능성이 있다고 예상</li>
</ul>
<h2 id="53-winogender">5.3 WinoGender</h2>
<ul>
<li>성별 카테고리에 대한 편향을 더 깊이 조사하기 위해 WinoGender 벤치마크 사용</li>
<li>WinoGender: Winograd 스키마로 구성되어 있으며, 모델의 공동 참조 해석 성능이 대명사의 성별에 의해 영향을 받는지 평가<ul>
<li>구체적으로, 각 문장은 세 가지 요소를 포함합니다: &quot;직업&quot;, &quot;참가자&quot;, 그리고 대명사입니다. 대명사는 직업이나 참가자 중 하나를 참조합니다.</li>
<li>따라서, 모델은 직업과 참가자를 참조하는 대명사를 올바르게 연결해야 함.</li>
<li>이 테스트의 목표는 직업과 관련된 사회적 편향이 모델에 의해 얼마나 포착되었는지 밝히는 것!<ul>
<li>예를 들어, WinoGender 데이터셋의 문장 중 하나는 &quot;The nurse notified the patient that his shift would be ending in an hour.&quot;입니다. 이 문장에서는 &quot;His&quot;가 누구를 가리키는지(간호사인지 환자인지)를 모델이 결정해야 합니다. 우리는 모델이 &quot;nurse&quot;와 &quot;patient&quot; 중 어느 것을 선택하는지, 그리고 그 선택에 따른 perplexity를 비교하여 공동 참조 해석을 평가합니다.</li>
</ul>
</li>
</ul>
</li>
<li>LLaMA-65B 모델은 &quot;their/them/someone&quot; 대명사에서는 성능이 좋았지만, &quot;her/her/she&quot;와 &quot;his/him/he&quot; 대명사에서는 성능이 떨어짐.</li>
<li>이는 모델이 직업에 대한 사회적 편향을 반영하여 성별에 따라 잘못된 결정을 내리는 경우가 있음을 보여줌.</li>
<li>&quot;Gotcha&quot; 사례에서는 대명사가 직업의 대다수 성별과 일치하지 않는데, 이때 모델이 더 많은 오류를 범합니다.</li>
<li>이 결과는 모델이 성별과 직업에 대한 편향을 가지고 있음을 명확히 나타냄.</li>
</ul>
<h2 id="54-truthfulqa">5.4 TruthfulQA</h2>
<ul>
<li>모델의 진실성을 측정하기 위해 TruthfulQA 사용<ul>
<li>모델의 주장이 참인지 여부를 식별할 수 있는 능력을 평가하는 것</li>
<li>잘못된 정보나 허위 주장을 생성할 위험성을 평가할 수 있음</li>
<li>질문들은 다양한 스타일로 작성되었으며, 38개의 카테고리를 다루고 있고, 모델을 공격적으로 평가하기 위해 설계됨</li>
</ul>
</li>
<li>GPT-3와 비교했을 때, 우리의 모델은 두 카테고리에서 더 나은 성능</li>
<li>그러나, 여전히 정답률은 낮음 → 모델이 잘못된 답변을 생성(hallucination)할 가능성이 높음을 보여줌</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Alpaca]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/Alpaca</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/Alpaca</guid>
            <pubDate>Wed, 30 Jul 2025 09:10:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="alpaca-a-strong-replicable-instruction-following-model">Alpaca: A Strong, Replicable Instruction-Following Model</h3>
<p>Meta의 LLaMA 7B 기반 모델</p>
</blockquote>
<h1 id="abstract">ABSTRACT</h1>
<hr>
<ul>
<li>instruction-following 능력을 가진 LLM을 학계가 재현할 수 있도록 만든 공개 프로젝트</li>
<li>Meta의 LLaMA 7B 모델을 기반으로, OpenAI text-davinci-003이 생성한 52K instruction 데이터를 이용해 supervised fine-tuning함</li>
<li>예비 평가에서 text-davinci-003과 유사한 품질을 보이며, 생성비용은 약 $600 미만으로 저렴함</li>
<li>학계 연구자들이 접근 가능한 instruction model로서 의미 있음</li>
</ul>
<h1 id="1-introduction">1. INTRODUCTION</h1>
<hr>
<ul>
<li>instruction-following LLM(GPT-3.5, ChatGPT, Claude 등)은 점점 강력해지고 있음</li>
<li>하지만 오류(hallucination), 편향(stereotype), 유해 언어 등 여전히 한계 존재함</li>
<li>학계에서 이에 대한 연구 필요성이 크지만, 강력한 오픈소스 모델이 부족하여 연구 어려움</li>
<li>해결책으로 Stanford는 공개된 LLaMA 7B에 instruction 데이터셋을 활용하여 Alpaca 모델을 구축함</li>
<li>목표는 text-davinci-003과 유사한 성능을 가진 모델을 누구나 재현할 수 있게 만드는 것</li>
</ul>
<h1 id="2-training-recipe">2. TRAINING RECIPE</h1>
<hr>
<p><img src="https://velog.velcdn.com/images/ah_yo_ninde_yo/post/bf3dadf0-2873-43b1-8beb-e40b3de415fc/image.png" alt=""></p>
<ul>
<li><p>학술적 예산 하에 고성능 instruction 모델을 훈련하려면:</p>
<ul>
<li>강력한 사전학습 언어 모델 필요 → Meta의 LLaMA 시리즈 활용</li>
<li>고품질 instruction 데이터 필요 → Self-Instruct 방식을 기반으로 text-davinci-003이 생성한 데이터 사용</li>
</ul>
</li>
</ul>
<h3 id="데이터-생성-방식">데이터 생성 방식</h3>
<ul>
<li>self-instruct seed로 제공된 175개 human-written instruction-output 쌍 활용</li>
<li>이를 기반으로 text-davinci-003에 in-context prompting으로 instruction 예시 생성</li>
<li>프롬프트 구조 단순화로 비용을 절감하며, 총 52K 쌍 생성 (OpenAI API 비용 약 $500)</li>
</ul>
<h3 id="모델-튜닝">모델 튜닝</h3>
<ul>
<li>Hugging Face Transformers로 LLaMA 7B 모델을 fine-tuning</li>
<li>Fully Sharded Data Parallel + mixed precision 훈련 적용</li>
<li>80GB A100 GPU 8개로 약 3시간 소요, 비용 약 $100</li>
</ul>
<blockquote>
<h3 id="병렬-학습fully-sharded-data-parallel-및-혼합-정밀도-학습mixed-precision-training">병렬 학습(Fully Sharded Data Parallel) 및 혼합 정밀도 학습(Mixed Precision Training)</h3>
</blockquote>
<h1 id="3-preliminary-evaluation">3. PRELIMINARY EVALUATION</h1>
<hr>
<h3 id="평가-방법">평가 방법</h3>
<ul>
<li>self-instruct 벤치마크 세트에 대해 human 평가 수행</li>
<li>5명의 공동 저자가 blind pairwise 비교 (Alpaca vs text-davinci-003)</li>
<li>90 vs 89로 유사한 성능 결과 확인</li>
</ul>
<h3 id="분석-결과">분석 결과</h3>
<ul>
<li>작은 데이터와 모델 크기에도 text-davinci-003 수준의 성능을 보인 점이 인상적</li>
<li>상호작용 테스트에서도 다수의 입력에 대해 유사한 품질의 응답 생성 확인</li>
<li>다만, 평가 범위의 한계 존재하므로 대중과의 상호작용을 통해 피드백 수집이 중요하다고 판단함</li>
</ul>
<h1 id="4-known-limitations">4. KNOWN LIMITATIONS</h1>
<hr>
<ul>
<li>hallucination: 예) 탄자니아의 수도를 Dar es Salaam으로 잘못 응답함</li>
<li>misinformation: 말은 그럴듯하나 잘못된 정보 생성 가능</li>
<li>기존 대형 언어 모델과 유사한 한계 포함됨</li>
<li>instruction data 자체가 text-davinci-003 기반이므로 편향 전이 가능성 존재</li>
</ul>
<h1 id="5-assets-released">5. ASSETS RELEASED</h1>
<hr>
<h3 id="이미-공개됨">이미 공개됨</h3>
<ul>
<li>Alpaca 7B 데모 (현재는 비활성화됨)</li>
<li>학습 데이터(52K instruction-output 쌍)</li>
<li>데이터 생성 코드</li>
<li>학습 코드 (Hugging Face 기반)</li>
</ul>
<h3 id="향후-공개-예정">향후 공개 예정</h3>
<ul>
<li>모델 가중치 (Meta 측과 협의 중)</li>
</ul>
<h3 id="사용-조건">사용 조건</h3>
<ul>
<li>LLaMA의 비상업 라이선스를 따르므로 상업적 이용 금지</li>
<li>OpenAI text-davinci-003 기반 데이터 사용 → OpenAI 경쟁 모델 개발 금지</li>
<li>Alpaca는 연구 목적에 한해 사용 가능</li>
</ul>
<h1 id="6-release-decision">6. RELEASE DECISION</h1>
<hr>
<ul>
<li><p>공개의 위험성도 고려함 (악용, 스팸, 허위정보 등)</p>
</li>
<li><p>하지만 학술적 연구의 재현성, 투명성, 안전성 향상이 더 큰 이점이라 판단</p>
</li>
<li><p>완전한 오픈 전에도 다음과 같은 위험 최소화 장치 마련함:</p>
<ul>
<li>OpenAI content moderation API 활용한 필터 적용</li>
<li>Kirchenbauer et al. (2023) 방식의 워터마크 삽입</li>
<li>명시적 이용 조건 설정</li>
</ul>
</li>
</ul>
<h1 id="7-future-directions">7. FUTURE DIRECTIONS</h1>
<hr>
<ul>
<li>HELM 등의 벤치마크로 더욱 정량적 평가 수행 예정</li>
<li>red-teaming, auditing, adaptive testing 통한 안전성 향상 목표</li>
<li>instruction 데이터 구성 요소의 중요성, base model 특성 등 체계적으로 분석할 예정</li>
<li>Alpaca를 시작으로 다양한 open instruction LLM 연구를 촉진하고자 함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Chain-of-Thought Prompting]]></title>
            <link>https://velog.io/@ah_yo_ninde_yo/Chain-of-Thought-Prompting</link>
            <guid>https://velog.io/@ah_yo_ninde_yo/Chain-of-Thought-Prompting</guid>
            <pubDate>Wed, 23 Jul 2025 10:05:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="chain-of-thought-prompting">Chain-of-Thought Prompting</h3>
<p><a href="https://arxiv.org/abs/2201.11903">https://arxiv.org/abs/2201.11903</a></p>
</blockquote>
<h1 id="abstract">ABSTRACT</h1>
<hr>
<ul>
<li><em>사고의 사슬(chain of thought)은</em> 사고의 <em>사슬 프롬프팅(chain-of-thought prompting)을</em> 통해 구현한다</li>
<li>세 가지 대규모 언어 모델에 대한 실험을 통해 사고의 사슬 프롬프트가 다양한 산술, 상식 및 기호 추론 작업에서 성능을 향상시킨다는 것을 보여준다<ul>
<li>사고의 사슬 예시 8개만으로 PaLM 540B를 프롬프트 → 수학 단어 문제의 GSM8K 벤치마크에서 SOTA 달성, 미세 조정된 GPT-3를 능가</li>
</ul>
</li>
</ul>
<h1 id="1-introduction">1. INTRODUCTION</h1>
<hr>
<ul>
<li><p>NLP의 최근 경향과 한계</p>
<ul>
<li>모델의 크기를 확장 → 성능과 샘플 효율성 향상</li>
<li>그러나 모델 크기를 확장하는 것만으로는 산술, 상식, 기호 추론과 같은 어려운 과제에서는 높은 성능을 달성하기에 충분하지 않음.</li>
</ul>
</li>
<li><p>기존에 LLM의 추론 능력을 활성화하는 방법과 그 한계</p>
<ol>
<li><p><strong>근거를 추가한 학습 및 미세 조정 방법</strong></p>
<ul>
<li><p>산수 문제를 풀 때, 중간 과정을 자연어로 설명</p>
</li>
<li><p>모델이 중간 추론 단계를 생성하도록 처음부터 훈련하거나, 기존 모델을 미세 조정</p>
</li>
<li><p>자연어 대신 수학적 또는 형식적 언어를 사용</p>
<p>⇒ But, 고품질 자료를 많이 필요로 하기 때문에 비용이 많이 들고 복잡</p>
</li>
</ul>
</li>
<li><p><strong>few-shot learning 프롬프트</strong></p>
<ul>
<li><p>미세 조정하는 대신 작업을 보여주는 몇 가지 입력-출력 예시로 모델을 간단히 &quot;프롬프팅&quot; 가능</p>
</li>
<li><p>특히, 간단한 질의응답 작업에서  좋은 성능 보임</p>
<p>⇒ But,  복잡한 추론이 필요한 작업에서는 효과적이지 않으며, 모델의 크기가 커지는 경우에도 성능 개선이 제한적</p>
</li>
</ul>
</li>
</ol>
</li>
<li><p>따라서 이 논문에서 제안하는 방식 -  “<strong><em>chain-of-thought prompting”</em></strong></p>
<ul>
<li><p>앞선 두 방법의 장점을 결합하면서 단점은 피하는 방안</p>
</li>
<li><p>트리플로 구성된 프롬프트⟨입력, <em>생각의 사슬</em> , 출력⟩가 주어졌을 때 추론 작업에 대한 few-shot 프롬프트</p>
</li>
<li><p><em>생각의 사슬은</em> 최종 출력으로 이어지는 일련의 중간 자연어 추론 단계</p>
<p>⇒ 이 접근 방식을 <em>생각의 사슬 프롬프트</em> 라고 함</p>
<p>예시)
[그림 1 : Chain-of-thought prompting의 예시. LLM이 복잡한 산술, 상식, 기호 추론 작업을 처리할 수 있도록 함. 하이라이트 된 부분이 Chain-of-thought 추론 프로세스에 해당됨.]</p>
</li>
</ul>
</li>
<li><p>의의</p>
<ul>
<li><p>산술(arithmetic), 상식(commonsense), 기호 추론 벤치마크(symbolic reasoning)에 대한 경험적 평가를 제시하여 표준 프롬프트(standard prompt)보다 성능이 뛰어남</p>
</li>
<li><p>수학 단어 문제의 GSM8K 벤치마크 - PaLM 540B를 사용한 생각의 사슬 프롬프팅이 표준 프롬프팅보다 훨씬 뛰어난 성능을 보이며, SOTA 달성</p>
<p>[그림 2: PaLM 540B는 사고의 사슬을 사용하여 수학 단어 문제의 GSM8K 벤치마크에서 새로운 최첨단 성능을 달성합니다.]</p>
</li>
<li><p>프롬프트만을 사용하는 접근법이기 때문에, 큰 훈련 데이터셋이 필요하지 않음</p>
</li>
<li><p>하나의 모델이 다양한 작업을 수행 가능</p>
</li>
<li><p>몇 가지 예시와 함께 자연어 데이터를 통해 작업에 대해 학습할 수 있는 방법</p>
<p>  ⇒ 즉, 큰 훈련 데이터셋을 통해 입출력의 패턴을 자동으로 학습하는 것과 대비</p>
</li>
</ul>
</li>
</ul>
<h1 id="2-chain-of-thought-prompting">2. Chain-of-Thought Prompting</h1>
<hr>
<ul>
<li><p>복잡한 문제</p>
<ul>
<li>수학 단어 문제와 같은 복잡한 추론 과제</li>
<li>이러한 복잡한 문제를 풀 때 나타나는 사고 과정을 고려</li>
<li>문제를 중간 단계로 분해하고 최종 답을 제시하기 전에 각 단계를 푸는 것이 일반적</li>
<li>이 논문의 목적은 언어 모델에도 이러한 단계적 사고와 유사한, <em>사고의 사슬을</em> 생성할 수 있는 능력을 부여하는 것</li>
<li>사고의 사슬은 문제에 대한 최종 답으로 이어지는 일관된 일련의 중간 추론 단계</li>
<li>큰 언어 모델은 적절한 예시를 제공하면 생각의 사슬을 생성할 수 있음을 증명할 것</li>
<li>생각의 사슬은 단계별 사고 과정을 모방하는 것을 강조한다는 의미에서 생각의 사슬로 정의</li>
</ul>
</li>
<li><p>언어 모델 추론에 유용한 여러 특징</p>
<ol>
<li><p>생각의 사슬은 복잡한 문제를 단계별로 분해 가능, 따라서 복잡한 문제의 각 단계마다 충분한 시간과 자원을 사용할 수 있음</p>
</li>
<li><p>모델의 사고 과정을 설명하므로, 오류를 찾는 데(디버깅) 유용 (그러나 모델의 계산을 완벽하게 이해하는 것은 아직 해결되지 않음)</p>
</li>
<li><p>수학 문제, 상식적 추론, 기호 조작과 같은 다양한 작업에 사용될 수 있으며, 인간이 언어를 통해 해결할 수 있는 모든 작업에 잠재적으로 적용될 수 있습니다(적어도 이론적으로는).</p>
</li>
<li><p>큰 언어 모델에서 쉽게 구현 가능</p>
<p> 몇 가지 짧은 프롬프트의 예시에 사고의 연쇄 시퀀스의 예를 포함시키는 것만으로도 사고의 연쇄적 추론을 이끌어내는 것이 가능</p>
</li>
</ol>
</li>
</ul>
<p>⇒ 경험적 실험을 통해 “산술적 추론, 상식적 추론, 기호적 추론” 을 위한 사고의 사슬 프롬프트의 유용성을 관찰할 것입니다 .</p>
<h1 id="3-arithmetic-reasoning">3. Arithmetic Reasoning</h1>
<hr>
<ul>
<li>언어모델의 산술 추론 능력</li>
<li>산술 추론은 인간에게는 간단하지만 언어 모델에겐 까다로운 task</li>
<li>540B 매개변수 언어 모델과 함께 사용할 때 생각의 사슬 프롬프트는 여러 작업에서 작업별 미세 조정 모델과 비슷한 성능</li>
<li>까다로운 GSM8K 벤치마크에서도 SOTA 달성</li>
</ul>
<h2 id="31-experimental-setup">3.1 Experimental Setup</h2>
<p>[그림 3: ⟨입력, 생각의 사슬, 출력⟩의 예. 산술, 상식, 기호 추론 벤치마크를 위한 트리플. 사고의 사슬이 강조 표시]</p>
<p>여러 벤치마크를 통해 다양한 언어 모델에 대한 사고의 사슬 프롬프트를 탐구함</p>
<h3 id="benchmarks"><strong>Benchmarks.</strong></h3>
<p>5가지 수학 단어 문제 벤치마크를 고려</p>
<p><strong>(1)</strong> 수학 단어 문제의 GSM8K 벤치마크 ( <strong>Cobbe</strong> et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib16">2021</a>) </p>
<p><strong>(2)</strong> 다양한 구조를 갖는 수학 단어 문제의 SVAMP 데이터 세트 ( <strong>Patel</strong> et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib46">2021</a>)</p>
<p><strong>(3)</strong> 다양한 수학 단어 문제의 ASDiv 데이터 세트 ( <strong>Miao</strong> et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib41">2020</a>)</p>
<p><strong>(4)</strong> 대수 단어 문제의 <strong>AQuA</strong> 데이터 세트</p>
<p><strong>(5)</strong> MAWPS 벤치마크 <strong>(</strong> Koncel-Kedziorski et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib28">2016</a>) . </p>
<ul>
<li>예제 문제는 부록 <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#A4.T12">표  12</a></li>
</ul>
<pre><code>| 데이터 세트 | N | 예제 문제 |
| --- | --- | --- |
| GSM8K | 1,319 | 조쉬는 집을 뒤집기로 결심합니다. 그는 8만 달러에 집을 사고 5만 달러를 수리에 투자합니다. 이로 인해 집의 가치가 150% 상승했습니다. 그는 얼마나 많은 이익을 냈습니까? |
| **슈밤프** | 1,000 | DVD 한 팩은 76달러입니다. 각 팩에 25달러 할인이 적용된다면, 각 팩을 사려면 얼마를 지불해야 합니까? |
| ASDiv | 2,096 | 엘렌은 마린보다 공이 6개 더 많습니다. 마린은 공이 9개입니다. 엘렌은 공이 몇 개나 있습니까? |
| **아쿠아** | 254 | 자동차가 직선으로 일정한 속도로 수직 타워 바닥을 향해 운전되고 있습니다. 자동차에서 타워 꼭대기를 관찰하고, 이 과정에서 고도 각도가 45 *∘* 에서 60 *∘* 로 바뀌는 데 10분이 걸립니다 . 이 자동차가 타워 바닥에 도착하는 데 얼마나 더 걸리겠습니까? 답 선택지: (a) 53+ 1 (나) 63+2(다) 73- 1(d) 83- 2(e) 이 중 어느 것도 아님 |
| MAWPS: 싱글옵 | 562 | 상자에 병뚜껑이 7개 있고 린다가 병뚜껑을 7개 더 넣었다면, 상자에는 몇 개의 병뚜껑이 있을까요? |
| MAWPS: SingleEq | 508 | 베니는 2달러에 청량음료와 사탕 5개를 샀습니다. 그는 총 27달러를 썼습니다. 사탕 한 개당 얼마였습니까? |
| MAWPS: AddSub | 395 | 꽃병에는 장미가 6송이 있었습니다. 메리는 꽃밭에서 장미를 몇 송이 꺾었습니다. 이제 꽃병에는 장미가 16송이 있습니다. 그녀는 장미를 몇 송이 꺾었습니까? |
| MAWPS: 멀티아리스 | 600 | 학교 식당은 학생들의 점심으로 붉은 사과 42개와 녹색 사과 7개를 주문했습니다. 하지만 과일을 원하는 학생이 9명뿐이라면, 식당은 얼마나 더 많은 과일을 얻었을까요? |</code></pre><h3 id="standard-prompting"><strong>Standard prompting.</strong></h3>
<ul>
<li>비교 기준선:  Brown et al.에 의해 대중화된 표준 few-shot 프롬프팅</li>
<li>언어 모델은 테스트 시간 예제에 대한 예측을 출력하기 전에 입력-출력 쌍의 컨텍스트 내 예시를 제공합니다. 예시는 질문과 답변으로 형식화</li>
<li><a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S0.F1">그림  1</a> (왼쪽)</li>
</ul>
<h3 id="chain-of-thought-prompting-1">Chain-of-thought prompting.</h3>
<ul>
<li>몇 가지 샷 예시(few-shot exemplar)마다 연결된 사고 과정(chain of thought)을 추가하는 것</li>
<li><a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S0.F1">그림  1</a> (오른쪽)</li>
<li>연관된 답변에 대한 생각의 사슬로 few-shot 프롬프트의 각 예시를 증강</li>
<li>대부분의 데이터 세트에는 평가 분할만 있으므로 프롬프트를 위한 생각의 사슬이 있는 8개의 few-shot 예시 세트를 수동으로 구성</li>
<li><a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S0.F1">그림  1</a> (오른쪽)의 특정 예시는 프롬프트 엔지니어링을 거치지 않았습니다.</li>
<li>다양한 수학 단어 문제에서 성공적인 추론 유도 실험<ul>
<li>AQuA를 제외한 모든 벤치마크에 대해 8개의 연쇄 사고 과정 예시 세트 사용</li>
<li>AQuA는 다지선다형 문제이기 때문에, 부록 표 21에 나와 있는 대로 훈련 세트에서 4개의 예시와 해답을 사용
[그림 1 : Chain-of-thought prompting의 예시. LLM이 복잡한 산술, 상식, 기호 추론 작업을 처리할 수 있도록 함. 하이라이트 된 부분이 Chain-of-thought 추론 프로세스에 해당됨.]</li>
</ul>
</li>
</ul>
<h3 id="language-models">Language models.</h3>
<ul>
<li><p>다섯 가지 대규모 언어 모델을 평가</p>
<ol>
<li><p><strong>GPT-3</strong> (Brown et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib8">2020</a>) </p>
<p> ⇒ text-ada-001, text-babbage-001, text-curie-001 및 text-davinci-002를 사용하는데, 
 이는 아마도 350M, 1.3B, 6.7B 및 175B 매개변수의 InstructGPT 모델에 해당하는 것으로 보임</p>
</li>
<li><p><strong>LaMDA</strong> (Thoppilan et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib68">2022</a>) </p>
<p> ⇒ 422M, 2B, 8B, 68B, 137B 파라미터 모델</p>
<ul>
<li>시드 간 큰 변동을 보이지 않았기 때문에, 계산 자원을 절약하기 위해 다른 모든 모델에 대해서는 단일 예시 순서의 결과만 보고</li>
</ul>
</li>
<li><p><strong>PaLM</strong></p>
<p> ⇒ 8B, 62B, 540B 파라미터 모델</p>
</li>
<li><p><strong>UL2 20B</strong></p>
</li>
<li><p><strong>Codex</strong></p>
</li>
</ol>
</li>
<li><p>5개의 랜덤 시드에 대한 평균 결과를 보고</p>
</li>
<li><p>우리는 탐욕적 디코딩(greedy decoding)을 통해 모델에서 샘플링</p>
<ul>
<li>하지만 후속 작업에서는 여러 샘플링 세대에 걸쳐 최종 답변을 다수로 취함으로써 사고의 사슬 프롬프트를 개선할 수 있음을 보여줍니다 (Wang et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib69">2022년</a>)</li>
</ul>
</li>
</ul>
<h2 id="32-results">3.2 Results</h2>
<p>그림 4 : 연쇄 사고 유도의 효과</p>
<ol>
<li><p><strong>작은 모델에서는 큰 효과 X</strong></p>
<ul>
<li>작은 규모의 모델이 유창하지만 비논리적인 사고 과정을 생성하여 표준 프롬프트보다 낮은 성능</li>
<li>약 100B 파라미터의 모델에서 사용될 때만 성능 향상
[그림 4: 사고의 사슬을 촉구하는 것은 대규모 언어 모델이 어려운 수학 문제를 풀 수 있게 해줍니다. 특히 사고의 사슬 추론은 모델 규모를 늘리는 새로운 능력입니다. 이전의 최고 수치는 Cobbe et al.에서 나왔습니다. ]</li>
</ul>
</li>
<li><p><strong>더 복잡한 문제에 대해 더 큰 성능 향상</strong></p>
<ul>
<li>GSM8K(기준 성능이 가장 낮은 데이터 세트)의 경우 가장 큰 GPT 및 PaLM 모델에서 성능이 두 배 이상 향상</li>
<li>MAWPS의 가장 쉬운 하위 집합인 SingleOp의 경우, 해결하는 데 단계가 하나뿐이어서 성능 향상이 부정적이거나 매우 미미</li>
</ul>
</li>
<li><p><strong>큰 모델들이 연쇄 사고 유도로 최고 성능에 도달하거나 근접</strong></p>
<ul>
<li><p>GPT-3 175B와 PaLM 540B에 COT 한 것은 fine-tuning 한 성능과 유사</p>
</li>
<li><p>PaLM 540B 모델이 여러 데이터셋(GSM8K, SVAMP 및 MAWPS)에서 새로운 최고 성능 기록</p>
<p>   다른 두 데이터 세트인 AQuA와 ASDiv에서 사고의 사슬 프롬핑을 사용한 PaLM은 최신 상태의 2% 이내에 도달합니다(부록 <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#A2.T2">표  2</a> ).</p>
</li>
</ul>
</li>
</ol>
<p>⇒ 해결해야 하는 단계가 여러 개인 경우 효과적, 따라서 큰 모델인 경우에 성능 확실</p>
<ul>
<li><p><strong>COT 효과 분석</strong></p>
<ul>
<li><p>GSM8K에 대해 LaMDA 137B로 모델에서 생성된 chains of thought를 수동으로 검사</p>
</li>
<li><p>모델이 최종 정답을 반환한 50개의 무작위 예시 분석</p>
<p>  → 대부분의 사고 과정이 논리적이었으며, 두 개의 예시만 우연히 정답에 도달했습니다.</p>
</li>
<li><p>틀린 답을 제공한 50개의 무작위 샘플을 무작위로 검사</p>
<p>  → 46%의 사고 과정은 사소한 실수(계산기 오류, 기호 매핑 오류 또는 추론 단계 하나 누락)를 제외하고 거의 정확</p>
<p>  → 나머지 54%는 의미적 이해 또는 일관성에 중대한 오류</p>
</li>
</ul>
</li>
<li><p><strong>스케일링이 COT 성능을 개선 시키는 이유 분석</strong></p>
<ul>
<li>모델의 크기를 키우면 오류가 줄어듦</li>
<li>PaLM 62B에서 발생한 오류와 PaLM 540B로 스케일링하여 해당 오류가 수정되었는지 실험</li>
<li>요약하면, PaLM을 540B로 스케일링하면 62B 모델에서 한 단계 누락 및 의미 이해 오류의 상당 부분이 수정됩니다( <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#A1.SS1">섹션  A.1</a> 참조 ).</li>
</ul>
</li>
</ul>
<h2 id="33-ablation-study">3.3 Ablation Study</h2>
<p>사슬 사고 프롬핑을 사용하는 관찰된 이점이 효과를 다른 프롬프트 유형에서도 얻을 수 있는지 조사</p>
<p>그림 5에서 세 가지 다른 방법으로 실험한 결과</p>
<h3 id="equation-only"><strong>Equation only.</strong></h3>
<ul>
<li><p>모델이 답을 제시하기 전에 방정식만 출력하도록 한 것</p>
</li>
<li><p>GSM8K에서는 방정식만 사용한 프롬프트가 큰 효과가 없었음</p>
</li>
<li><p>즉, GSM8K의 질문 의미론은 생각의 사슬에서 자연어 추론 단계 없이 방정식으로 바로 변환할 수 없음을 의미</p>
<p>  → 문제의 의미를 이해하고 해석하는 과정이 필요</p>
</li>
<li><p>그러나 단계가 적은 문제의 경우 &#39;오직 방정식만&#39;이 성능을 향상 시킴</p>
<ul>
<li>한두 단계로 해결할 수 있는 간단한 문제에서는 방정식만으로도 성능이 좋아짐</li>
<li>왜냐하면 방정식을 질문에서 쉽게 파생할 수 있기 때문</li>
</ul>
</li>
</ul>
<p>그림 5:[LaMDA 137B 및 PaLM 540B를 사용한 다양한 프롬프팅 변형에 대한 절제 연구. 다른 데이터 세트에 대한 결과는 부록 표  6]</p>
<h3 id="variable-compute-only">Variable compute only.</h3>
<ul>
<li>더 어려운 문제에 더 많은 계산(즉, 중간 토큰)을 사용할 수 있게 하는 것</li>
<li>COT의 효과와 분리하기 위해, 필요한 문자 수만큼 점(...)을 출력하도록 모델을 설정</li>
<li>(…)은 문제를 해결하는 데 필요한 방정식의 문자 수와 동일</li>
<li>이 변형은 기준선과 거의 같은 성능</li>
</ul>
<p>⇒ 이는 변수 계산 자체가 사고의 사슬 프롬프트의 성공 이유가 아님을 알 수 있음</p>
<p>⇒ 또한,  자연어로 중간 단계를 표현하는 것이 더 유용함</p>
<h3 id="chain-of-thought-after-answer">Chain of thought after answer.</h3>
<ul>
<li><p>기존에는 연쇄 사고를 사용하여 문제를 푼 후 → 답을 제시하기 때문에,</p>
<p>  답을 내기 전에 연쇄 사고가 필요하지 않은지 확인</p>
</li>
<li><p>모델에게 답을 먼저 내고 나서 → 사고 과정을 설명하게 하는 방법을 사용</p>
</li>
<li><p>COT 프롬프트는 모델이 사전 학습에서 배운 지식을 더 잘 활용할 수 있게 함</p>
</li>
<li><p>단순히 이러한 프롬프트를 통해 모델이 사전 훈련 중에 습득한 관련 지식에 더 잘 접근할 수 있다</p>
</li>
<li><p>우리는 사고의 사슬 프롬프트가 답변 이후에만 주어지고, 모델이 실제로 최종 답변을 제공하기 위해 생성된 사고의 사슬에 의존하는지 여부를 분리하는 대체 구성을 테스트</p>
</li>
<li><p>이 변형은 기준선과 거의 같은 성능</p>
</li>
</ul>
<p>⇒ COT는 학습된 것을 떠올리는 것만이 아니라, 논리적으로 문제를 해결하는 과정에서도 유용</p>
<h2 id="34-robustness-of-chain-of-thought">3.4 Robustness of Chain of Thought</h2>
<ul>
<li>프롬프트 방법의 중요한 고려사항 중 하나는 예시(exemplar)에 대한 민감도<ul>
<li>예시의 순서를 바꾸는 것만으로도 모델의 성능이 크게 달라짐</li>
<li>예를 들어, 소수 샷 예시의 순열을 변경하면 SST-2에서 GPT-3의 정확도가 거의 우연(54.3%)에서 거의 최신 기술(93.4%)까지 변동 가능</li>
</ul>
</li>
<li>따라서 서로 다른 사람들이 작성한 연쇄 사고가 얼마나 강건한지(일관된 성능을 보이는지) 평가<ul>
<li>위의 결과 외에도, Annotator A가 작성한 연쇄 사고를 사용하여, 이 논문의 두 명의 다른 공동 저자(Annotators B와 C)가 같은 몇 개의 샷 예시를 위해 독립적으로 연쇄 사고를 작성했습니다(부록 H에 나와 있음).</li>
<li>또한, Annotator A는 기존보다 더 간결한 스타일로 연쇄 사고를 작성</li>
</ul>
</li>
<li>GSM8K 및 MAWPS에서 LaMDA 137B에 대한 결과 : <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S3.F6">그림  6</a></li>
<li>다른 사람들이 작성한 연쇄 사고는 조금씩 차이가 있었지만, 그 어떤 방식이든 간에 모두 기본적인 방식(연쇄 사고를 사용하지 않은 경우)보다 훨씬 좋은 성능</li>
</ul>
<p>⇒ 생각의 사슬을 성공적으로 사용하는 것이 특정 언어 스타일에 의존하지 않는다</p>
<p>[그림 6: 생각의 사슬을 촉구하는 방식은 예상대로 다양한 촉구 사례에 따라 차이가 있지만, 다양한 주석자 및 다양한 예시에 대해서는 표준 촉구 방식보다 더 나은 성과를 보입니다.]</p>
<ul>
<li><p>다른 표본 세트에서도 효과적인지 확인</p>
<ul>
<li><p>독립적인 소스인 GSM8K 훈련 세트에서 
무작위로 샘플링한 8개의 표본 세트 3개로 실험을 수행</p>
</li>
<li><p>그림 6에서 무작위 예시도 수동으로 작성한 예시들처럼 좋은 성능을 보임</p>
</li>
<li><p>다양한 변수들에도 불구하고 연쇄 사고 유도가 일관된 성능을 보인다는 것을 확인했습니다.</p>
</li>
<li><p>다양한 변수들에도 불구하고 연쇄 사고 유도가 일관된 성능을 보인다는 것을 확인했습니다.</p>
<p>  → 주석자에 대한 강건성 외에도, 독립적으로 작성된 연쇄 사고, 다른 예시, 다양한 언어 모델에 대해, 산술 추론을 위한 연쇄 사고 유도가 다양한 예시 순서와 예시 수에도 강건함</p>
</li>
</ul>
</li>
</ul>
<h1 id="4--commonsense-reasoning">4.  Commonsense Reasoning</h1>
<hr>
<ul>
<li>사고의 사슬은 수학 단어 문제에 특히 적합</li>
<li>그러나 일반적인 배경 지식을 전제로 물리적 및 인간 상호 작용에 대한 추론 등 상식적 추론 문제에도 적용 가능</li>
<li>상식 추론은 세상과 상호 작용하기 위한 중요한 요소이지만, 자연어 이해 시스템이 아직 완벽히 해결하지 못한 영역</li>
</ul>
<h3 id="benchmarks-1"><strong>Benchmarks.</strong></h3>
<ul>
<li><p>상식적 추론 유형을 포괄하는 5가지 데이터 세트를 고려</p>
<ol>
<li><p><strong>CSQA</strong> (Talmor et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib64">2019</a>)</p>
<p> 세상에 대한 상식적인 질문을 던지며, 이를 답하려면 복잡한 이해와 사전 지식이 필요</p>
</li>
<li><p><strong>StrategyQA</strong> (Geva et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib20">2021</a>) 여러 단계로 나뉜 전략을 생각해서 답을 찾아야 하는 문제들</p>
</li>
<li><p>BIG-bench 프로젝트에서 두 가지 평가 세트를 선택</p>
<ol>
<li><strong>Date Understanding</strong> : 문맥에서 날짜를 유추하는 문제</li>
<li><strong>Sports Understanding</strong> : 스포츠 관련 문장의 타당성을 판단하는 문제</li>
</ol>
</li>
<li><p><strong>SayCan</strong> : 자연어 명령을 로봇이 실행할 수 있는 행동으로 변환하는 문제</p>
</li>
</ol>
</li>
</ul>
<h3 id="prompts">Prompts.</h3>
<ul>
<li>이전 섹션과 동일한 실험 설정</li>
</ul>
<ol>
<li><p>CSQA와 StrategyQA의 경우</p>
<p> → 훈련 세트에서 무작위로 예를 선택</p>
<p> → 수동으로 사고의 사슬을 구성하여 몇 가지 샷 예시로 사용</p>
</li>
<li><p>두 개의 BIG-bench 작업에는 훈련 세트가 없음</p>
<p> → 처음 10개를 예로 삼고 나머지 데이터를 평가에 사용</p>
</li>
<li><p>SayCan</p>
<p> → Ahn et al.에서 사용한 훈련 세트에서 6개의 예를 사용\</p>
<p> → 또한 수동으로도 구성</p>
</li>
</ol>
<h3 id="results">Results.</h3>
<ul>
<li><p>PaLM 모델에 대한 (상식 추론) 결과:  <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S4.F7">그림  7</a></p>
</li>
<li><p>(LaMDA, GPT-3 및 다양한 모델 척도에 대한 전체 결과는 <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#A2.T4">표  4</a> 에 표시됨 ).</p>
</li>
<li><p>모델 크기를 키우면 성능이 좋아지고, 연쇄 사고 프롬프트를 사용하면 추가로 성능이 향상</p>
</li>
<li><p>특히, PaLM 540B 모델에서 가장 큰 성능 향상</p>
<ul>
<li><p>PaLM 540B 모델은 연쇄 사고 프롬프트로 StrategyQA에서 이전 최고 성능보다 더 좋은 결과를 냈습니다.</p>
</li>
<li><p>스포츠 관련 문제에서도 PaLM 540B 모델이 인간보다 더 나은 성과를 보였습니다.</p>
<p>⇒  연쇄 사고 유도가 상식 추론 문제에서도 유용하다는 것을 보여주지만, </p>
<p>⇒ But, CSQA에서는 그 효과가 크지 않았음</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/1939d5a1-afa1-4c9b-9b75-be781863ad35/image.png" alt="그림 7: 생각의 사슬을 촉구하는 것은 또한 언어 모델의 상식적 추론 능력을 향상시킵니다. 여기에 표시된 언어 모델은 PaLM입니다. 이전의 최고 숫자는 CSQA (Talmor et al.,[2019](https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib64)) 및 StrategyQA (Geva et al.,[2021](https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib20)) (단일 모델만 해당, 2022년 5월 5일 기준). 다양한 크기의 LaMDA, GPT-3 및 PaLM을 사용한 추가 결과는 [표  4](https://ar5iv.labs.arxiv.org/html/2201.11903#A2.T4) 에 나와 있습니다 ."></p>
<p>그림 7: 생각의 사슬을 촉구하는 것은 또한 언어 모델의 상식적 추론 능력을 향상시킵니다. 여기에 표시된 언어 모델은 PaLM입니다. 이전의 최고 숫자는 CSQA (Talmor et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib64">2019</a>) 및 StrategyQA (Geva et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib20">2021</a>) (단일 모델만 해당, 2022년 5월 5일 기준). 다양한 크기의 LaMDA, GPT-3 및 PaLM을 사용한 추가 결과는 <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#A2.T4">표  4</a> 에 나와 있습니다 .</p>
<h1 id="5-symbolic-reasoning">5. Symbolic Reasoning</h1>
<hr>
<ul>
<li>인간에게는 간단하지만 언어 모델에게는 도전적인 상징적 추론(symbolic reasoning)을 다룸</li>
<li>논리적인 규칙을 따르는 문제</li>
<li>chain-of-thought prompting를 사용하면 AI 모델이 더 잘 사고하고, 훈련 중에 보지 못한 새로운 문제도 잘 풀 수 있다</li>
<li>훈련 중에 보지 못한 더 긴 문제를 풀 때, 표준 프롬프트(단순히 답만 찾게 하는 방법)로는 잘 못 풀었지만, 연쇄 사고 유도를 사용하면 더 잘 풀 수 있음</li>
</ul>
<h3 id="tasks">Tasks.</h3>
<p>두 가지 간단한 과제를 사용</p>
<ol>
<li><p><strong>마지막 글자 연결(Last letter concatenation).</strong></p>
<p> 이 작업은 모델에 이름의 단어의 마지막 글자를 연결하도록 요청
 (예: *&quot;Amy Brown&quot;).* → <em>“yn”</em> ).</p>
<ul>
<li>첫 글자 연결은 언어 모델이 생각의 연쇄 없이도 수행 가능함</li>
<li>그러나 마지막 글자 연결은 이보다 더 어려움</li>
<li><a href="https://namecensus.com/">우리는 이름 인구 조사 데이터( https://namecensus.com/</a> ) 에서 상위 1,000개의 이름과 성에서 이름을 무작위로 연결하여 전체 이름을 생성</li>
</ul>
</li>
<li><p><strong>동전 던지기(Coin flip).</strong> </p>
<p> 이 과제는 사람들이 동전을 던지거나/ 던지지 않은 후에도 동전이 여전히 앞면인지 모델에 답하도록 요구
 (예: *&quot;동전이 앞면입니다. 피비가 동전을 던졌습니다. 오스발도는 동전을 던지지 않았습니다. 동전이 여전히 앞면인가요?&quot;* → *&quot;아니요&quot;* ).</p>
</li>
</ol>
<ul>
<li><p>이러한 상징적 추론  과제들은 명확히 정의되어 있음</p>
</li>
<li><p>(in-domain) 테스트 세트와 (out-of-domain) 테스트 세트 고려</p>
<ul>
<li><strong>(in-domain)</strong> 각 과제에 대해 훈련/소수 샷 표본과 동일한 단계 수를 갖는 예제가 있는 도메인 내 테스트 세트</li>
<li><strong>(out-of-domain)  (OOD)</strong> 평가 예제가 표본의 단계보다 많은 단계가 있는 도메인 외 테스트 세트</li>
<li><strong>OOD 예시:</strong><ul>
<li>모델은 처음에는 두 단어로 된 이름만 보고 학습하고, 그 후에는 세 단어, 네 단어 이름의 마지막 글자 연결을 시도</li>
<li>동전 던지기 문제도 뒤집는 횟수를 늘려가며 실험</li>
</ul>
</li>
</ul>
</li>
<li><p>실험 설정은 이전 두 섹션과 동일한 방법과 모델을 사용</p>
</li>
<li><p><a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S3.F3">그림  3</a> 에 나와 있는 각 작업에 대한 소수 샷 표본에 대한 사고의 사슬을 다시 수동으로 구성</p>
<p>  <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/cdfc1565-0303-4935-b99e-ac670459b448/image.png" alt="image.png"></p>
</li>
</ul>
<h3 id="results-1">Results.</h3>
<ul>
<li>in-domain 및 OOD 평가의 결과는 PaLM에 대한 결과: <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#S4.F8">그림  8</a></li>
<li>LaMDA에 대한 결과: 부록 <a href="https://ar5iv.labs.arxiv.org/html/2201.11903#A2.T5">표  5</a><ul>
<li>PaLM 540B를 사용하면 사고의 사슬 프롬프트로 거의 100%의 해결률</li>
<li>표준 프롬프트로도 PaLM 540을 사용하여 동전 던지기를 이미 풀 수 있지만,
LaMDA 137B의 경우는 그렇지 않음.</li>
</ul>
</li>
<li>동일 도메인 문제 평가 (in-domain)<ul>
<li>이미 해결 방법이 주어져 있어서, 모델이 해야 할 일은 새 문제에서 같은 방법을 사용하는 것</li>
<li>모든 모델은 테스트 시간 예제에서 새 기호로 동일한 단계를 반복하기만 하면 됨</li>
<li>그러나 작은 모델은 여전히 실패 
→ 이 문제들을 해결하려면 모델이 매우 커야 함. (100B 모델 매개변수의 규모)</li>
</ul>
</li>
<li>도메인 외 평가 (OOD)<ul>
<li>OOD 평가에서는 표준 프롬프트가 두 작업 모두(마지막 이름, 동전 던지기)에서 실패</li>
<li>연쇄 사고 프롬프트가 더 나은 결과</li>
<li>모델의 크기가 커질수록 성능이 더 좋아진다</li>
<li>그러나, in-domain 성능 보다는 낮음.</li>
</ul>
</li>
</ul>
<p>⇒ 따라서 사고의 사슬 프롬프트는 충분한 규모의 언어 모델에 대해, <strong>훈련 중에 보지 못한 새로운 문제도 잘 풀 수 있다</strong> (일반화에 용이하다)</p>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/f71b219d-0f91-4412-a236-3d8f7ca2589a/b97df48a-9038-4e2d-bd78-8be839a5a04e/image.png" alt="그림 8: 사고의 연쇄를 사용하면 두 가지 상징적 추론 과제에서 더 긴 순서로 일반화하는 것이 용이해집니다."></p>
<p>그림 8: 사고의 연쇄를 사용하면 두 가지 상징적 추론 과제에서 더 긴 순서로 일반화하는 것이 용이해집니다.</p>
<h1 id="6--discussion">6.  Discussion</h1>
<hr>
<ul>
<li><p>chain-of-thought prompting : 큰 언어 모델이 여러 단계로 생각하게 만드는 간단한 방법</p>
</li>
<li><p><strong>산술 추론 실험 (arithmetic reasoning)</strong> - 섹션3</p>
<ul>
<li>숫자 계산 문제에서 성능이 크게 향상됩니다.</li>
<li>다양한 조건(다른 사람의 설명, 예시, 언어 모델)에서도 안정적인 성능</li>
</ul>
</li>
<li><p><strong>상식 추론(commonsense reasoning)</strong> - 섹션4</p>
<ul>
<li>언어 기반의 특성 때문에 상식적인 문제를 푸는 데도 효과적입니다.</li>
</ul>
</li>
<li><p><strong>기호적 추론(symbolic reasoning)</strong> - 섹션5</p>
<ul>
<li>훈련되지 않은 더 긴 문제(즉, 훈련 데이터에서 보지 못한 복잡한 문제) 푸는 데도 효과적</li>
</ul>
</li>
<li><p>모든 실험에서 사용된 언어 모델은 추가 학습 없이, 단순히 프롬프트만 제공하여 성능을 발휘</p>
<p>  표준 프롬프트가 평평한 스케일링 곡선을 갖는 많은 추론 작업의 경우, 사고의 사슬 프롬프트는 스케일링 곡선을 극적으로 증가시킵니다. </p>
</li>
<li><p>모델의 크기가 커질수록 연쇄 사고 유도가 더 잘 작동</p>
<ul>
<li>작은 모델에서는 효과가 미미</li>
</ul>
</li>
<li><p>chain-of-thought 없이 기본 프롬프트만으로는 큰 언어 모델의 진짜 능력을 모두 보여주지 못함</p>
</li>
<li><p>모델 규모의 결과로 사고의 사슬 추론이 나타나는 것은 지배적인 주제였습니다 (Wei et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib72">2022년 (b)</a>) .</p>
<p>  사고의 사슬 프롬프트는 대규모 언어 모델이 성공적으로 수행할 수 있는 작업 집합을 확장하는 것으로 보입니다. </p>
<p>  다시 말해, 우리의 작업은 표준 프롬프트가 대규모 언어 모델의 기능에 대한 하한만 제공한다는 것을 강조합니다. 이 관찰은 답보다 더 많은 질문을 제기할 가능성이 높습니다. </p>
</li>
<li><p>제한사항</p>
<ul>
<li>우리는 먼저 사고의 사슬이 인간 추론자의 사고 과정을 모방하지만, 이것이 신경망이 실제로 &quot;추론&quot;하고 있는지에 대한 답은 아니라는 점을 인정합니다. 이는 우리가 열린 질문으로 남겨둡니다.</li>
<li>둘째, 사고의 사슬로 예시를 수동으로 증강하는 비용은 few-shot 설정에서 최소이지만, 이러한 주석 비용은 미세 조정에 금지될 수 있습니다(하지만 이는 잠재적으로 합성 데이터 생성 또는 제로샷 일반화로 극복할 수 있음).</li>
<li>셋째, 올바른 추론 경로가 보장되지 않아 정답과 오답이 모두 나올 수 있습니다. 언어 모델의 사실적 생성을 개선하는 것은 향후 작업의 열린 방향입니다 (Rashkin et al.,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib55">2021</a>; Ye와 Durrett,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib80">2022</a>; Wiegreffe 등,<a href="https://ar5iv.labs.arxiv.org/html/2201.11903#bib.bib73">2022</a>, 그 외 ) .</li>
<li>마지막으로, 대규모 모델 규모에서만 생각의 사슬 추론이 등장하면서 실제 세계 애플리케이션에서 서비스하는 데 비용이 많이 듭니다. 추가 연구를 통해 더 작은 모델에서 추론을 유도하는 방법을 탐색할 수 있습니다.</li>
</ul>
</li>
</ul>
<h1 id="7-conclusions">7. Conclusions</h1>
<hr>
<ul>
<li>COT prompting: 언어 모델에서 추론을 강화하기 위한 간단하고 광범위한 방법</li>
<li>산술적, 상징적, 상식적 추론에 대한 실험을 통해 COT가 모델 규모의 새로운 속성이며, 이를 통해 충분히 큰 언어 모델이 그렇지 않으면 평평한 스케일링 곡선을 갖는 추론 작업을 수행할 수 있다는 것을 발견</li>
<li>언어 모델이 수행할 수 있는 추론 작업의 범위를 넓히면 언어 기반 추론 접근 방식에 대한 추가 작업에 영감을 줄 수 있기를 바랍니다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>