<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>데이터 과학 노트</title>
    <link>https://data-science-notes.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 19 May 2026 16:20:05 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Data Scientist Note</managingEditor>
    <image>
      <title>데이터 과학 노트</title>
      <url>https://tistory1.daumcdn.net/tistory/5145868/attach/8bf6217685ee4d3893686214a24d39cd</url>
      <link>https://data-science-notes.tistory.com</link>
    </image>
    <item>
      <title>Python async 정리: 사용법부터 스레드와의 차이까지</title>
      <link>https://data-science-notes.tistory.com/40</link>
      <description>&lt;h1&gt;Python async 완벽 정리: 사용법부터 스레드와의 차이까지&lt;/h1&gt;
&lt;p&gt;Python의 &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt;는 비동기 프로그래밍(asynchronous programming)을 위한 문법이다.&lt;br&gt;하지만 많은 사람들이 오해하듯, 이것은 &lt;strong&gt;스레드(thread)로 구현된 구조가 아니다.&lt;/strong&gt;&lt;br&gt;&lt;code&gt;async&lt;/code&gt;는 &lt;strong&gt;코루틴(coroutine)&lt;/strong&gt; 기반으로, &lt;strong&gt;단일 스레드 내에서 동시성(concurrency)&lt;/strong&gt;을 구현한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1. async 기본 개념&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;async def&lt;/code&gt;: 비동기 함수를 정의할 때 사용한다.  &lt;/li&gt;
&lt;li&gt;&lt;code&gt;await&lt;/code&gt;: 비동기 함수 실행 중 일시 정지(양보) 후, 다른 코루틴이 실행되도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 두 키워드로 Python은 하나의 스레드에서 여러 작업을 &lt;strong&gt;비동기적으로 전환&lt;/strong&gt;할 수 있다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. 기본 사용 예시&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import asyncio

async def say_hello():
    print(&amp;quot;안녕!&amp;quot;)
    await asyncio.sleep(1)  # 1초 대기 (비동기)
    print(&amp;quot;다시 안녕!&amp;quot;)

async def main():
    await say_hello()

asyncio.run(main())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;출력:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;안녕!
(1초 대기)
다시 안녕!&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;await asyncio.sleep(1)&lt;/code&gt;은 프로그램 전체를 멈추지 않고,&lt;br&gt;다른 코루틴이 그 시간 동안 실행될 수 있도록 이벤트 루프에 제어를 넘긴다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. 여러 작업 동시에 실행하기&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import asyncio

async def work(name, delay):
    print(f&amp;quot;{name} 시작&amp;quot;)
    await asyncio.sleep(delay)
    print(f&amp;quot;{name} 완료&amp;quot;)

async def main():
    await asyncio.gather(
        work(&amp;quot;A&amp;quot;, 2),
        work(&amp;quot;B&amp;quot;, 1),
        work(&amp;quot;C&amp;quot;, 3),
    )

asyncio.run(main())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;출력 예시:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;A 시작
B 시작
C 시작
B 완료
A 완료
C 완료&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;asyncio.gather()&lt;/code&gt;를 사용하면 여러 비동기 작업을 &lt;strong&gt;동시에 실행&lt;/strong&gt;할 수 있다.&lt;br&gt;실제로는 병렬이 아니라, &lt;strong&gt;이벤트 루프가 번갈아가며 실행&lt;/strong&gt;한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. async와 스레드의 차이&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;구분&lt;/th&gt;
&lt;th&gt;&lt;code&gt;asyncio&lt;/code&gt; (코루틴)&lt;/th&gt;
&lt;th&gt;&lt;code&gt;threading&lt;/code&gt; (스레드)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;실행 방식&lt;/td&gt;
&lt;td&gt;단일 스레드 내 협력적 실행&lt;/td&gt;
&lt;td&gt;여러 스레드 병렬 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;전환 방식&lt;/td&gt;
&lt;td&gt;&lt;code&gt;await&lt;/code&gt;로 명시적 양보&lt;/td&gt;
&lt;td&gt;OS가 자동 스케줄링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;메모리 사용&lt;/td&gt;
&lt;td&gt;가벼움&lt;/td&gt;
&lt;td&gt;스레드마다 스택 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I/O 효율&lt;/td&gt;
&lt;td&gt;매우 높음&lt;/td&gt;
&lt;td&gt;보통&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU 효율&lt;/td&gt;
&lt;td&gt;낮음 (GIL 영향)&lt;/td&gt;
&lt;td&gt;조금 더 낫지만 여전히 GIL 영향&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;code&gt;async&lt;/code&gt;는 &lt;strong&gt;논리적 동시성(concurrency)&lt;/strong&gt;을 제공하지만,&lt;br&gt;&lt;strong&gt;물리적 병렬성(parallelism)&lt;/strong&gt;은 제공하지 않는다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. CPU 연산 작업과 함께 사용하기&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;async&lt;/code&gt;는 I/O 중심의 작업에 최적화되어 있다.&lt;br&gt;CPU를 많이 사용하는 함수는 이벤트 루프를 막을 수 있으므로&lt;br&gt;&lt;strong&gt;스레드나 프로세스 풀&lt;/strong&gt;을 함께 사용하는 것이 좋다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import asyncio
from concurrent.futures import ThreadPoolExecutor
import time

def blocking_task():
    time.sleep(2)
    return &amp;quot;완료&amp;quot;

async def main():
    loop = asyncio.get_running_loop()
    result = await loop.run_in_executor(ThreadPoolExecutor(), blocking_task)
    print(result)

asyncio.run(main())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 코드는 블로킹 함수(&lt;code&gt;time.sleep&lt;/code&gt;)를 별도 스레드에서 실행해&lt;br&gt;비동기 루프가 멈추지 않게 한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. 결론&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;async&lt;/code&gt;는 &lt;strong&gt;스레드가 아닌 코루틴 기반의 비동기 구조&lt;/strong&gt;다.  &lt;/li&gt;
&lt;li&gt;이벤트 루프가 여러 작업을 &lt;strong&gt;번갈아 실행&lt;/strong&gt;한다.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I/O 중심 작업&lt;/strong&gt;에 매우 효율적이다.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CPU 중심 작업&lt;/strong&gt;에는 스레드나 프로세스 풀을 병행하는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;async def&lt;/code&gt;로 코루틴 정의  &lt;/li&gt;
&lt;li&gt;&lt;code&gt;await&lt;/code&gt;로 비동기 작업 일시 정지  &lt;/li&gt;
&lt;li&gt;&lt;code&gt;asyncio.gather()&lt;/code&gt;로 여러 작업 동시 실행  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;스레드가 아니라 이벤트 루프 기반&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;CPU 연산은 &lt;code&gt;run_in_executor()&lt;/code&gt;로 분리 실행&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Development</category>
      <category>Async</category>
      <category>python</category>
      <category>비동기</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/40</guid>
      <comments>https://data-science-notes.tistory.com/40#entry40comment</comments>
      <pubDate>Mon, 27 Oct 2025 01:09:45 +0900</pubDate>
    </item>
    <item>
      <title>PyTorch 구현 시 꼭 알아야 할 필수 함수 정리</title>
      <link>https://data-science-notes.tistory.com/39</link>
      <description>&lt;h1&gt;PyTorch 구현 시 꼭 알아야 할 필수 함수 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PyTorch는 딥러닝 모델 구현에 강력하고 유연한 기능을 제공합니다.&lt;br /&gt;이 문서는 &lt;b&gt;모델 구현 시 자주 사용하는 핵심 함수들&lt;/b&gt;을 주제별로 정리한 참고용 자료입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 텐서(Tensor) 생성 및 변형&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 생성&lt;/h3&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;torch.tensor(data)          # 파이썬 리스트나 넘파이 배열로부터 텐서 생성
torch.zeros(size)           # 0으로 채운 텐서
torch.ones(size)            # 1로 채운 텐서
torch.randn(size)           # 정규분포로 초기화된 텐서
torch.arange(start, end)    # 일정 간격으로 생성된 텐서
torch.linspace(start, end, steps)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변형 및 차원 조작&lt;/h3&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;x.view(shape)               # 텐서 형태 변경 (메모리 공유)
x.reshape(shape)            # 형태 변경 (복사될 수도 있음)
x.unsqueeze(dim)            # 차원 추가 ([N] &amp;rarr; [N, 1])
x.squeeze(dim)              # 크기 1인 차원 제거
x.permute(dims)             # 차원 순서 변경
x.transpose(dim0, dim1)     # 두 차원 교환
torch.cat([a, b], dim)      # 텐서 연결
torch.stack([a, b], dim)    # 새로운 차원으로 스택&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 인덱싱 및 선택 함수&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 인덱싱&lt;/h3&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;x[index]                    # 일반 인덱싱
x[:, 0]                     # 특정 열 선택
x[mask]                     # 불리언 마스크 인덱싱

torch.gather(input, dim, index)
# 특정 인덱스 위치의 값을 모으기. 예: 어텐션 연산에서 사용

torch.index_select(input, dim, index)
# 특정 차원의 인덱스들만 추출

torch.take(input, index)
# 전체를 1차원으로 펼친 후 인덱스로 선택

torch.scatter(input, dim, index, src)
# gather의 반대. 지정된 위치에 값 배치

torch.masked_select(input, mask)
# 마스크된 요소만 선택

# gather_and_expand
def gather_and_expand(x, index, dim):
    out = torch.gather(x, dim, index)
    return out.expand_as(x)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 연산 및 통계&lt;/h2&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;torch.sum(x, dim)
torch.mean(x, dim)
torch.std(x)
torch.var(x)
torch.max(x, dim)
torch.min(x, dim)
torch.argmax(x, dim)
torch.argmin(x, dim)
torch.clamp(x, min, max)
torch.norm(x)
torch.exp(x)
torch.log(x)
torch.softmax(x, dim)
torch.log_softmax(x, dim)
torch.sigmoid(x)
torch.relu(x)
torch.tanh(x)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 자동미분 (Autograd)&lt;/h3&gt;
&lt;pre class=&quot;gml&quot;&gt;&lt;code&gt;x = torch.tensor([1.0, 2.0], requires_grad=True)
y = x ** 2
y.backward(torch.ones_like(x))  # dy/dx 계산
x.grad                           # 기울기 확인
x.detach()                       # 그래프 분리&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 모델 구성 (nn 모듈)&lt;/h3&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(128, 10)
    def forward(self, x):
        return self.fc(x)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;# 자주 쓰는 레이어
nn.Linear(in_features, out_features)
nn.Conv2d(in_ch, out_ch, kernel_size)
nn.ReLU()
nn.Sigmoid()
nn.Tanh()
nn.BatchNorm1d(num_features)
nn.Dropout(p)
nn.Embedding(num_embeddings, embedding_dim)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 손실 함수 (Loss)&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;nn.MSELoss()
nn.CrossEntropyLoss()
nn.BCELoss()
nn.L1Loss()&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 최적화 (Optimizer)&lt;/h3&gt;
&lt;pre class=&quot;gams&quot;&gt;&lt;code&gt;optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
optimizer.zero_grad()    # 기울기 초기화
loss.backward()          # 역전파
optimizer.step()         # 파라미터 업데이트
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. GPU 및 장치 설정&lt;/h3&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;device = torch.device(&quot;cuda&quot; if torch.cuda.is_available() else &quot;cpu&quot;)
x = x.to(device)
model.to(device)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. 유용한 헬퍼 함수&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;torch.no_grad()                         # 평가 시 gradient 비활성화
torch.nn.utils.clip_grad_norm_(params, max_norm)  # gradient 클리핑
torch.save(model.state_dict(), &quot;model.pt&quot;)        # 모델 저장
model.load_state_dict(torch.load(&quot;model.pt&quot;))     # 모델 로드&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Development/Python</category>
      <category>PyTorch</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/39</guid>
      <comments>https://data-science-notes.tistory.com/39#entry39comment</comments>
      <pubDate>Thu, 9 Oct 2025 21:47:29 +0900</pubDate>
    </item>
    <item>
      <title>Zachary&amp;rsquo;s Karate Club - 사회 네트워크 분석의 고전</title>
      <link>https://data-science-notes.tistory.com/38</link>
      <description>&lt;h1&gt;Zachary’s Karate Club - 사회 네트워크 분석의 고전&lt;/h1&gt;
&lt;p&gt;1970년대 초 미국의 한 대학 가라테 동아리에서 벌어진 작은 갈등이 오늘날 &lt;strong&gt;사회 네트워크 분석(Social Network Analysis)&lt;/strong&gt; 의 대표적인 데이터셋이 되었다&lt;br&gt;이 사건은 인류학자 &lt;strong&gt;Wayne W. Zachary&lt;/strong&gt; 가 기록한 “Zachary’s Karate Club” 으로 불린다&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1. 연구의 배경&lt;/h2&gt;
&lt;p&gt;Zachary는 1970년부터 1972년까지 약 2년 동안 한 대학의 가라테 동아리를 관찰했다&lt;br&gt;그는 구성원들 간의 &lt;strong&gt;개인적 상호작용(우정 관계, 동아리 외 만남 등)&lt;/strong&gt; 을 체계적으로 기록하여 하나의 &lt;strong&gt;사회 네트워크 그래프&lt;/strong&gt; 로 모델링했다  &lt;/p&gt;
&lt;p&gt;이 네트워크는 &lt;strong&gt;사람(노드)&lt;/strong&gt; 과 &lt;strong&gt;관계(엣지)&lt;/strong&gt; 로 구성되어 있으며&lt;br&gt;누가 누구와 자주 어울렸는지를 시각적으로 표현한다&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. 데이터 구조&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;노드(Node):&lt;/strong&gt; 총 34명의 동아리 구성원  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;엣지(Edge):&lt;/strong&gt; 78개 (상호작용이 관찰된 관계)  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;그래프 특성:&lt;/strong&gt; 무향 그래프 (A↔B 관계가 동일하게 취급됨)  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;일부 데이터 버전에서는 77개의 엣지만 포함되기도 한다&lt;br&gt;이는 Zachary의 원 논문에서 특정 두 사람(노드 23과 34)의 관계 여부가 불확실하게 기록되었기 때문이다  &lt;/p&gt;
&lt;p&gt;이 데이터셋은 현재까지도 네트워크 분석, 커뮤니티 탐지, 군집화 알고리즘 성능 평가 등에 널리 사용된다  &lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. 갈등과 분열&lt;/h2&gt;
&lt;p&gt;관찰 기간 중, 동아리 내에서 두 인물 간의 갈등이 발생한다  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;강사 “Mr. Hi”&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;동아리 회장 “John A”&lt;/strong&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;두 사람은 수업료 조정 문제로 대립하게 되었고&lt;br&gt;그 결과 구성원들은 점차 두 진영으로 나뉘었다  &lt;/p&gt;
&lt;p&gt;Zachary는 이 네트워크 구조를 바탕으로&lt;br&gt;&lt;strong&gt;어떤 구성원이 어느 진영으로 갈지 예측하는 모델&lt;/strong&gt; 을 제시했다&lt;br&gt;그의 예측은 실제 결과와 거의 일치했으며 단 &lt;strong&gt;한 명만이 다른 선택을 했다&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;그 한 사람은 이미 검은띠 승급 직전이었고&lt;br&gt;소속을 바꾸면 자격을 잃을 위험이 있었기 때문에 현실적인 이유로 다른 편을 택했다고 한다  &lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. 학문적 의의&lt;/h2&gt;
&lt;p&gt;Zachary의 Karate Club 데이터는 이후 네트워크 과학에서 다음과 같은 용도로 활용된다&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;커뮤니티 탐지(Community Detection)&lt;/strong&gt; 알고리즘 검증  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;모듈러리티(Modularity)&lt;/strong&gt; 기반 군집화 실험  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;네트워크 흐름(flow)&lt;/strong&gt; 및 &lt;strong&gt;최소 컷(min-cut)&lt;/strong&gt; 모델 설명  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사회적 영향력 및 확산 모델&lt;/strong&gt; 시뮬레이션  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Girvan–Newman 알고리즘, Louvain 방법, Spectral Clustering 등&lt;br&gt;수많은 알고리즘이 이 데이터로 성능을 테스트했다  &lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. 네트워크 시각화 예시&lt;/h2&gt;
&lt;p&gt;아래 그림은 Zachary’s Karate Club 네트워크의 대표적인 시각화다&lt;br&gt;각 노드는 구성원을 나타내며 색상은 실제로 분열된 두 그룹을 의미한다  &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://tse2.mm.bing.net/th/id/OIP.q_Prn2BmxMy7tCKbzhqFUQHaHa?cb=12&amp;pid=Api&quot; alt=&quot;Zachary&amp;#39;s Karate Club Network&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. 결론&lt;/h2&gt;
&lt;p&gt;Zachary’s Karate Club은 단순한 사회적 갈등 사례를 넘어&lt;br&gt;&lt;strong&gt;네트워크 구조가 인간 행동을 어떻게 예측할 수 있는가&lt;/strong&gt; 를 보여준 상징적인 연구다  &lt;/p&gt;
&lt;p&gt;이 데이터는 50년이 지난 지금도 여전히&lt;br&gt;그래프 이론, 데이터 과학, 머신러닝, 사회학 등 다양한 분야에서&lt;br&gt;연구와 교육의 기본 예제로 사용되고 있다  &lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;참고 자료&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zachary%27s_karate_club&quot;&gt;Zachary’s Karate Club (Wikipedia)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://networkdata.ics.uci.edu/netdata/html/zacharyKarate.html&quot;&gt;UCI Network Data Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.futilitycloset.com/2021/04/23/choosing-sides/&quot;&gt;Futility Closet: Choosing Sides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Graph Neural Networks</category>
      <category>GNN</category>
      <category>zachary&amp;rsquo;s karate club</category>
      <category>사회 네트워크 분석</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/38</guid>
      <comments>https://data-science-notes.tistory.com/38#entry38comment</comments>
      <pubDate>Thu, 9 Oct 2025 17:35:20 +0900</pubDate>
    </item>
    <item>
      <title>GNN에서 Spectral과 Spatial의 차이</title>
      <link>https://data-science-notes.tistory.com/37</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;GNN에서 Spectral과 Spatial의 차이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 신경망(Graph Neural Network, GNN)은 그래프 구조 데이터를 처리하기 위한 모델이다.&lt;br /&gt;크게 두 가지 접근 방식이 있다. &lt;b&gt;Spectral 기반&lt;/b&gt;과 &lt;b&gt;Spatial 기반&lt;/b&gt;이다.&lt;br /&gt;두 방식은 그래프의 정보를 다루는 관점이 다르다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Spectral GNN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;핵심 아이디어&lt;/b&gt;&lt;br /&gt;그래프를 &lt;b&gt;주파수(스펙트럼) 영역&lt;/b&gt;에서 바라본다.&lt;br /&gt;그래프의 구조를 표현하기 위해 &lt;b&gt;그래프 라플라시안(Laplacian Matrix)&lt;/b&gt; 을 이용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라플라시안은 대략 다음과 같이 정의된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L = D - A&lt;br /&gt;(D: 차수 행렬, A: 인접 행렬)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spectral GNN은 이 라플라시안을 고유분해하여 그래프 신호를 &lt;b&gt;푸리에 변환(Fourier Transform)&lt;/b&gt; 하고&lt;br /&gt;그 위에서 &lt;b&gt;필터링(Convolution)&lt;/b&gt; 을 수행한 뒤 다시 원래 공간으로 되돌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래프의 전역적 구조를 잘 반영할 수 있다.&lt;/li&gt;
&lt;li&gt;수학적으로 이론이 명확하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;라플라시안 고유분해로 인해 계산 복잡도가 높다.&lt;/li&gt;
&lt;li&gt;학습한 모델을 다른 그래프에 일반화하기 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대표 모델&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Spectral CNN (Bruna et al., 2013)&lt;/li&gt;
&lt;li&gt;ChebNet (Defferrard et al., 2016)&lt;/li&gt;
&lt;li&gt;GCN (Kipf &amp;amp; Welling, 2017)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Spatial GNN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;핵심 아이디어&lt;/b&gt;&lt;br /&gt;노드의 &lt;b&gt;이웃(Neighborhood)&lt;/b&gt; 에서 직접 정보를 주고받는 &lt;b&gt;메시지 패싱(Message Passing)&lt;/b&gt; 방식이다.&lt;br /&gt;즉, 각 노드는 자신의 이웃 노드들의 임베딩을 모아(Aggregate) 새로운 표현을 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 노드 v의 새 임베딩은&lt;br /&gt;이웃 노드들의 임베딩을 평균 혹은 합산한 값으로 계산된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계산이 간단하고 다양한 그래프 구조에 잘 일반화된다.&lt;/li&gt;
&lt;li&gt;구현이 직관적이고 효율적이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지역적 정보에 치우치기 쉬워 전역 구조를 반영하기 어렵다.&lt;/li&gt;
&lt;li&gt;스펙트럼 기반의 이론적 해석은 상대적으로 약하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대표 모델&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GraphSAGE (Hamilton et al., 2017)&lt;/li&gt;
&lt;li&gt;GAT (Velickovic et al., 2018)&lt;/li&gt;
&lt;li&gt;GIN (Xu et al., 2019)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 두 접근 방식 비교&lt;/h3&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;구분&lt;/th&gt;
&lt;th&gt;Spectral GNN&lt;/th&gt;
&lt;th&gt;Spatial GNN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관점&lt;/td&gt;
&lt;td&gt;주파수 영역&lt;/td&gt;
&lt;td&gt;이웃(공간) 영역&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;핵심 수학 도구&lt;/td&gt;
&lt;td&gt;그래프 라플라시안&lt;/td&gt;
&lt;td&gt;인접 노드 집합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;학습 단위&lt;/td&gt;
&lt;td&gt;전역적 구조&lt;/td&gt;
&lt;td&gt;지역적 관계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;일반화&lt;/td&gt;
&lt;td&gt;약함 (고정된 그래프)&lt;/td&gt;
&lt;td&gt;강함 (다양한 그래프에 적용 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;계산 복잡도&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;대표 모델&lt;/td&gt;
&lt;td&gt;GCN, ChebNet&lt;/td&gt;
&lt;td&gt;GraphSAGE, GAT, GIN&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Spectral GNN&lt;/b&gt;은 그래프를 주파수 공간에서 해석하는 이론적 접근이다.&lt;br /&gt;하지만 계산이 복잡하고 특정 그래프에 종속된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Spatial GNN&lt;/b&gt;은 이웃 노드 간의 관계를 직접 학습하는 실용적 접근이다.&lt;br /&gt;일반화가 잘 되고 실제 응용에서 널리 쓰인다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Graph Neural Networks</category>
      <category>GNN</category>
      <category>Spatial GNN</category>
      <category>Spectral GNN</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/37</guid>
      <comments>https://data-science-notes.tistory.com/37#entry37comment</comments>
      <pubDate>Thu, 9 Oct 2025 17:30:16 +0900</pubDate>
    </item>
    <item>
      <title>KL Divergence와 Cross-Entropy의 관계</title>
      <link>https://data-science-notes.tistory.com/36</link>
      <description>&lt;h2&gt;1. KL Divergence란?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;KL Divergence (Kullback–Leibler Divergence)&lt;/strong&gt;는 두 확률분포 &lt;strong&gt;P&lt;/strong&gt;와 &lt;strong&gt;Q&lt;/strong&gt; 사이의 차이를 측정하는 지표입니다.&lt;/p&gt;
&lt;pre&gt;
D&lt;sub&gt;KL&lt;/sub&gt;(P‖Q) = Σ P(x) · log(P(x) / Q(x))
&lt;/pre&gt;

&lt;p&gt;이 값은 항상 0 이상이며, &lt;strong&gt;P = Q&lt;/strong&gt;일 때만 0이 됩니다.&lt;br&gt;즉, 모델 Q가 실제 분포 P를 얼마나 잘 근사하는지를 나타냅니다.&lt;/p&gt;
&lt;p&gt;KL Divergence는 &lt;strong&gt;대칭적이지 않기 때문에&lt;/strong&gt; 거리(distance)가 아닌 &lt;strong&gt;발산(divergence)&lt;/strong&gt;이라고 부릅니다.&lt;/p&gt;
&lt;pre&gt;
D&lt;sub&gt;KL&lt;/sub&gt;(P‖Q) ≠ D&lt;sub&gt;KL&lt;/sub&gt;(Q‖P)
&lt;/pre&gt;

&lt;hr&gt;
&lt;h2&gt;2. Entropy와 Cross-Entropy&lt;/h2&gt;
&lt;p&gt;두 확률분포 P, Q가 있을 때 다음을 정의합니다.&lt;/p&gt;
&lt;h3&gt;Entropy&lt;/h3&gt;
&lt;pre&gt;
H(P) = - Σ P(x) · log P(x)
&lt;/pre&gt;

&lt;p&gt;→ 분포 P가 가진 &lt;strong&gt;내재적 불확실성&lt;/strong&gt;을 의미합니다.&lt;/p&gt;
&lt;h3&gt;Cross-Entropy&lt;/h3&gt;
&lt;pre&gt;
H(P, Q) = - Σ P(x) · log Q(x)
&lt;/pre&gt;

&lt;p&gt;→ 실제 분포 P를 모델 Q로 설명할 때 필요한 &lt;strong&gt;평균 정보량&lt;/strong&gt;을 의미합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. 세 개의 관계&lt;/h2&gt;
&lt;p&gt;세 개의 개념은 다음 관계로 연결됩니다.&lt;/p&gt;
&lt;pre&gt;
D&lt;sub&gt;KL&lt;/sub&gt;(P‖Q) = H(P, Q) - H(P)
&lt;/pre&gt;

&lt;p&gt;즉,&lt;br&gt;&lt;strong&gt;KL Divergence = Cross-Entropy − Entropy&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;개념&lt;/th&gt;
&lt;th&gt;의미&lt;/th&gt;
&lt;th&gt;해석&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;H(P)&lt;/td&gt;
&lt;td&gt;실제 데이터의 불확실성&lt;/td&gt;
&lt;td&gt;세상의 본질적 복잡도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H(P, Q)&lt;/td&gt;
&lt;td&gt;모델이 세상을 설명하는 복잡도&lt;/td&gt;
&lt;td&gt;모델이 세상을 인코딩할 때 필요한 정보량&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;sub&gt;KL&lt;/sub&gt;(P‖Q)&lt;/td&gt;
&lt;td&gt;두 복잡도의 차이&lt;/td&gt;
&lt;td&gt;모델이 실제를 얼마나 비효율적으로 표현하는가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;4. 머신러닝에서의 의미&lt;/h2&gt;
&lt;p&gt;머신러닝에서는 실제 분포 P를 알 수 없고 &lt;strong&gt;데이터 표본&lt;/strong&gt;만 관찰할 수 있습니다.&lt;br&gt;따라서 H(P)는 상수로 간주됩니다.&lt;/p&gt;
&lt;p&gt;결과적으로, &lt;strong&gt;KL Divergence를 최소화하는 것&lt;/strong&gt;은&lt;br&gt;곧 &lt;strong&gt;Cross-Entropy를 최소화하는 것&lt;/strong&gt;과 같습니다.&lt;/p&gt;
&lt;pre&gt;
minimize D&lt;sub&gt;KL&lt;/sub&gt;(P‖Q)
≡
minimize H(P, Q)
&lt;/pre&gt;

&lt;p&gt;그래서 딥러닝의 분류 문제에서 &lt;strong&gt;Cross-Entropy Loss&lt;/strong&gt;가 가장 널리 사용됩니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. 요약&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;수식&lt;/th&gt;
&lt;th&gt;의미&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Entropy&lt;/td&gt;
&lt;td&gt;H(P) = -Σ P(x) log P(x)&lt;/td&gt;
&lt;td&gt;실제 분포의 불확실성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Entropy&lt;/td&gt;
&lt;td&gt;H(P, Q) = -Σ P(x) log Q(x)&lt;/td&gt;
&lt;td&gt;모델이 실제를 설명하는 정보량&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KL Divergence&lt;/td&gt;
&lt;td&gt;D&lt;sub&gt;KL&lt;/sub&gt;(P‖Q) = H(P, Q) - H(P)&lt;/td&gt;
&lt;td&gt;모델과 실제의 차이&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;p&gt;&lt;strong&gt;정리하자면:&lt;/strong&gt;&lt;br&gt;Cross-Entropy는 모델이 실제 분포를 얼마나 잘 설명하는지를 나타내고&lt;br&gt;KL Divergence는 그 오차(비효율성)를 수치로 측정한 값입니다.&lt;br&gt;결국 머신러닝의 학습은 이 발산을 최소화하는 과정이라고 볼 수 있습니다.&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
      <category>Data Science/Machine Learning</category>
      <category>cross-entropy</category>
      <category>kl divergence</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/36</guid>
      <comments>https://data-science-notes.tistory.com/36#entry36comment</comments>
      <pubDate>Thu, 9 Oct 2025 17:21:32 +0900</pubDate>
    </item>
    <item>
      <title>DeepSeek-R1: 강화학습을 통한 대형 언어 모델(LLM)의 추론 능력 향상</title>
      <link>https://data-science-notes.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;d007c9b7-5d82-45ad-bb3f-d350290a1951&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;DeepSeek-R1: 강화학습을 통한 대형 언어 모델(LLM)의 추론 능력 향상&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 개요&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepSeek-AI 연구팀은 &lt;b&gt;DeepSeek-R1-Zero&lt;/b&gt;와 &lt;b&gt;DeepSeek-R1&lt;/b&gt;이라는 두 가지 세대의 추론 특화 모델을 개발하였습니다.&lt;br /&gt;특히, &lt;b&gt;DeepSeek-R1-Zero&lt;/b&gt;는 &lt;b&gt;지도 학습 없이 순수 강화학습(RL)&lt;/b&gt; 만을 이용해 훈련되었으며, 스스로 강력한 추론 능력을 학습하는 모습을 보였습니다.&lt;br /&gt;그러나 읽기 어려운 출력과 다국어 혼합 등의 문제가 발생하여, 이를 개선하기 위해 &lt;b&gt;DeepSeek-R1&lt;/b&gt; 모델을 도입하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepSeek-R1은 &lt;b&gt;사전 데이터 학습(Cold Start)과 다단계 학습 파이프라인&lt;/b&gt;을 추가하여 성능을 향상시켰고,&lt;br /&gt;그 결과 OpenAI의 &lt;b&gt;o1-1217&lt;/b&gt; 모델과 &lt;b&gt;동등한 수준의 성능&lt;/b&gt;을 달성하였습니다.&lt;br /&gt;또한, 연구 커뮤니티를 지원하기 위해 &lt;b&gt;DeepSeek-R1-Zero, DeepSeek-R1 및 1.5B~70B 크기의 distill된 모델들을 오픈소스로 공개&lt;/b&gt;하였습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 접근 방법&lt;/b&gt;&lt;/h4&gt;
&lt;b&gt;2.1 DeepSeek-R1-Zero: 순수 강화학습(RL) 기반 모델&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기존 LLM들은 지도 학습(SFT)을 활용했지만&lt;/b&gt;, DeepSeek-R1-Zero는 오직 강화학습만으로 훈련됨.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GRPO(Group Relative Policy Optimization)&lt;/b&gt; 알고리즘을 사용하여 RL 비용을 절감하고 효율적으로 학습.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보상 모델(Reward Model)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정확성 보상&lt;/b&gt;: 정답 여부를 평가하여 강화학습에 반영.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식 보상&lt;/b&gt;: 추론 과정과 답변을 &amp;lt;think&amp;gt; ... &amp;lt;/think&amp;gt;과 &amp;lt;answer&amp;gt; ... &amp;lt;/answer&amp;gt; 태그로 구분하여 가독성을 개선.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;훈련 결과&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AIME 2024에서 pass@1 성능 &lt;b&gt;15.6% &amp;rarr; 71.0%&lt;/b&gt; 향상, 다수결(majority voting) 적용 시 &lt;b&gt;86.7%&lt;/b&gt; 도달.&lt;/li&gt;
&lt;li&gt;OpenAI &lt;b&gt;o1-0912&lt;/b&gt; 모델과 동급의 성능을 보임.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;가독성 부족&lt;/b&gt;: 답변이 난해하거나 여러 언어가 혼합되는 문제 발생.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모델의 이해도 부족&lt;/b&gt;: 인간 친화적인 답변이 부족함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;2.2 DeepSeek-R1: Cold Start를 통한 강화학습 개선&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DeepSeek-R1-Zero의 한계를 보완하기 위해 사전 학습 데이터(Cold Start)를 도입&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;4단계 학습 파이프라인 적용&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Cold Start 단계&lt;/b&gt;: 긴 Chain-of-Thought(CoT) 데이터를 활용해 초기 학습.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추론 중심 강화학습&lt;/b&gt;: 수학, 코딩, 논리 추론 등 명확한 정답이 있는 문제에 집중하여 학습.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;거부 샘플링(Rejection Sampling) 및 지도 학습(SFT)&lt;/b&gt;: 학습된 모델의 출력을 필터링하여 품질 높은 학습 데이터를 생성.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모든 시나리오를 위한 RL&lt;/b&gt;: 일반적인 질문응답(QA), 창작, 편집 등의 작업까지 지원하는 모델로 발전.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OpenAI &lt;b&gt;o1-1217&lt;/b&gt; 모델과 동급 성능 도달.&lt;/li&gt;
&lt;li&gt;코딩(Codeforces), 수학(MATH-500), 일반 QA(MMLU) 등의 벤치마크에서 강력한 성능을 보임.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;2.3 작은 모델을 위한 Distillation 기법&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DeepSeek-R1의 추론 능력을 작은 모델(1.5B~70B)에 전이&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지도학습(SFT)만을 활용한 distillation 방식&lt;/b&gt;을 적용하여 효율적으로 성능을 계승.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DeepSeek-R1-Distill-Qwen-7B&lt;/b&gt; 모델이 &lt;b&gt;GPT-4o-0513&lt;/b&gt;을 능가하는 성능을 보임.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DeepSeek-R1-Distill-Qwen-32B, 70B&lt;/b&gt; 모델은 &lt;b&gt;OpenAI o1-mini&lt;/b&gt;와 비슷한 성능을 기록.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 실험 결과&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;추론 성능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AIME 2024: 79.8% (Pass@1, OpenAI o1-1217과 유사)&lt;/li&gt;
&lt;li&gt;MATH-500: 97.3% (최고 성능)&lt;/li&gt;
&lt;li&gt;Codeforces(코딩 대회): 상위 &lt;b&gt;96.3%&lt;/b&gt; 참가자보다 높은 점수 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지식 성능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MMLU: 90.8% (교육 관련 지식 평가)&lt;/li&gt;
&lt;li&gt;GPQA Diamond: 71.5% (상식 기반 QA)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코딩 성능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LiveCodeBench: 65.9% (Pass@1, 코딩 과제 해결율)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기타&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AlpacaEval 2.0(창작 및 문서 작성): 87.6% 승률&lt;/li&gt;
&lt;li&gt;ArenaHard(LLM 비교 평가): GPT-4-Turbo와 유사한 성능 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 결론 및 향후 과제&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;강화학습만으로도 LLM의 추론 능력을 크게 향상&lt;/b&gt;할 수 있음을 입증.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cold Start와 다단계 학습을 활용하여 가독성을 높이고 성능을 개선&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Distillation을 통해 소형 모델에서도 우수한 추론 성능을 구현&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;향후 개선 방향&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;일반 작업 기능 강화&lt;/b&gt;: 다중 턴 대화, 함수 호출, JSON 출력 등 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;언어 혼합 문제 해결&lt;/b&gt;: 중국어 및 영어 외 다양한 언어에서 일관된 출력 제공.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프롬프트 최적화&lt;/b&gt;: Few-shot보다 Zero-shot에서 성능이 뛰어남 &amp;rarr; 최적화된 프롬프트 개발 필요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;소프트웨어 엔지니어링 강화&lt;/b&gt;: 코드 생성 및 버그 수정 분야에서 RL 데이터 확대 예정.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문은 강화학습을 활용하여 LLM의 추론 능력을 극대화하는 방법을 연구하였으며,&lt;br /&gt;특히 &lt;b&gt;DeepSeek-R1-Zero&lt;/b&gt;는 &lt;b&gt;순수 강화학습&lt;/b&gt;만으로 강력한 추론 성능을 보였고,&lt;br /&gt;&lt;b&gt;DeepSeek-R1&lt;/b&gt;은 &lt;b&gt;Cold Start 및 다단계 학습&lt;/b&gt;을 도입하여 &lt;b&gt;OpenAI o1-1217 수준의 성능을 달성&lt;/b&gt;하였습니다.&lt;br /&gt;또한, &lt;b&gt;Distillation 기법을 활용하여 소형 모델에서도 강력한 추론 성능을 구현&lt;/b&gt;하였으며,&lt;br /&gt;향후 &lt;b&gt;일반적인 AI 작업 및 언어 일관성 문제 개선, 소프트웨어 엔지니어링 성능 강화&lt;/b&gt; 등의 추가 연구가 계획되고 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LLM</category>
      <category>deepseek</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/35</guid>
      <comments>https://data-science-notes.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 4 Feb 2025 01:53:58 +0900</pubDate>
    </item>
    <item>
      <title>생성 모델 평가 지표 PSNR, SSIM</title>
      <link>https://data-science-notes.tistory.com/34</link>
      <description>&lt;h1&gt;생성 모델 평가 지표 PSNR, SSIM&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비교 예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;압축 복원 이미지 vs 원본 이미지&lt;/li&gt;
&lt;li&gt;생성 이미지 vs 원본 이미지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;최대 신호 대 잡음비 - PSNR (Peak Signal-to-Noise Ratio)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 이미지 사이에 MSE (mean squre error)&lt;/li&gt;
&lt;li&gt;손실이 적을 수록 높은 값&lt;/li&gt;
&lt;li&gt;생성이 잘되었을 경우 높은 값&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;구조적 유사도 - SSIM (Structural Similarity Index Measure)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 이미지 사이 상관계수를 휘도, 대비, 구조 측면에서 평가
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;luminance (l), contrast (c), structure (S)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;계산
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;휘도, 대비, 구조 측면에서 평가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Computer Vision/생성 모델</category>
      <category>PSNR</category>
      <category>SSIM</category>
      <category>생성 모델 평가</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/34</guid>
      <comments>https://data-science-notes.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 9 Apr 2024 11:51:56 +0900</pubDate>
    </item>
    <item>
      <title>tmux (terminal multiplexer)</title>
      <link>https://data-science-notes.tistory.com/33</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;tmux&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tmux 는 terminal multiplexer 이다.&lt;br /&gt;ssh 연결 (session) 이 끊겨도 서버의 작업이 계속 실행될 수 있도록 사용을 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;tmux의 계층적 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;session, window, pane 로 이루어져 있다.&lt;/p&gt;
&lt;h5&gt;session&lt;/h5&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 명령어&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;tmux                        # new session (0, 1, 2, ...)
tmus new -s [SESSION_NAME]  # 특정 이름으로 새 세션 만들기
(ctrl) + b -&amp;gt; d             # 세션 분리 / 나오기 (detach)
tmux a                      # 마지막 세션 연결
tmux a -t [SESSION_NAME]    # 특정 세션 연결 (attach)&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;window&lt;/h5&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(미사용)&lt;/p&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;(ctrl) + b -&amp;gt; c  # 새 윈도우 생성
(ctrl) + d       # 윈도우 끄기
(ctrl) + b -&amp;gt; n  # 이전 윈도우로 이동 (next)
(ctrl) + b -&amp;gt; p  # 이전 윈도우로 이동 (previous)
(ctrl) + b -&amp;gt; w  # 윈도우 리스트&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;pane&lt;/h5&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(미사용)&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;(ctrl) + b -&amp;gt; &quot;  # 가로 나누기
(ctrl) + b -&amp;gt; %  # 세로 나누기
(ctrl) + b -&amp;gt; [방향키]  # 네비게이션&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;(ctrl) + b -&amp;gt; [  # 스크롤 사용&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Development</category>
      <category>session 미종료</category>
      <category>tmux</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/33</guid>
      <comments>https://data-science-notes.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 27 Mar 2024 11:52:05 +0900</pubDate>
    </item>
    <item>
      <title>mode collapse 와 posterior collapse</title>
      <link>https://data-science-notes.tistory.com/32</link>
      <description>&lt;p&gt;Mode collapse와 posterior collapse는 모두 딥러닝 모델이 학습 과정에서 특정 모드에만 집중하는 현상을 말한다.&lt;/p&gt;
&lt;p&gt;그러나 두 현상은 발생 원인과 결과가 다르다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Mode collapse&lt;/code&gt;는 주로 생성적 적대 신경망(Generative Adversarial Network, GAN)에서 발생하는 문제로, 생성자가 다양한 출력을 생성하는 대신 제한된 수의 특정한 출력만을 생성하는 현상이다.&lt;/p&gt;
&lt;p&gt;생성자가 다양성을 표현하지 못하고 특정 패턴에 고정되는 문제다.&lt;/p&gt;
&lt;p&gt;Mode collapse의 발생 원인에는 데이터 분포의 불균형, 가중치 초기화 등의 원인이 있다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Posterior collapse&lt;/code&gt; 는 Variational Autoencoder (VAE) 에서 발생하는 문제다.&lt;/p&gt;
&lt;p&gt;잠재 변수가 입력 데이터와 관계없이 정보를 무시하고 일정한 값을 가지는 현상을 말한다.&lt;/p&gt;
&lt;p&gt;즉, 잠재 변수가 실제 데이터와 관련된 정보를 제대로 포착하지 못하고 입력에 대해 유사한 값을 갖게 되는 문제다.&lt;/p&gt;
&lt;p&gt;Mode collapse 를 해결하기 위해서는 데이터 분포의 균형을 맞추거나 가중치 초기화를 조절하는 등의 방법을 사용할 수 있고, Posterior collapse 를 해결하기 위해서는 올바른 잠재 변수의 학습을 위해 모델의 가중치 초기화를 조절하는 방법 등을 적용할 수 있다.&lt;/p&gt;</description>
      <category>Data Science/Deep Learning</category>
      <category>mode collapse</category>
      <category>posterior collapse</category>
      <category>생성 모델</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/32</guid>
      <comments>https://data-science-notes.tistory.com/32#entry32comment</comments>
      <pubDate>Fri, 29 Dec 2023 01:27:48 +0900</pubDate>
    </item>
    <item>
      <title>Bonferroni&amp;rsquo;s Principle (본페르니 원리)</title>
      <link>https://data-science-notes.tistory.com/31</link>
      <description>&lt;h1&gt;본페로니 원리&lt;/h1&gt;
&lt;h2&gt;원리 소개&lt;/h2&gt;
&lt;p&gt;본페로니 원리는 여러 개의 통계적 검정을 동시에 수행할 때 발생할 수 있는 거짓 양성(false positive, 제1종 오류)을 제어하는 기본적인 통계 원리입니다. 가설 검정 횟수가 많아지면 우연히 나오는 결과가 늘어나서 실제로 유의미한 결과가 아니더라도 잘못된 양성 결과가 나타나기 쉽습니다. 예를 들어 0.05 유의수준으로 20개의 검정을 동시에 수행하면 아무런 보정 없이도 약 64% 확률로 적어도 하나의 거짓 양성이 발생할 수 있습니다. 본페로니 원리는 이런 문제를 해결하기 위해 설계되었습니다.&lt;/p&gt;
&lt;p&gt;본페로니 원리의 직관적 개념은 “탐색 방법이 예상보다 훨씬 많은 결과를 반환한다면 그중 대부분은 통계적 착시일 것이다”라는 경고로 요약할 수 있습니다. 통계적 관점에서는 데이터가 완전히 무작위일 때 특정 이벤트가 나타날 기대 횟수를 계산하고 이를 실제 찾고자 하는 사례 수와 비교합니다. 만약 무작위에서 발생할 것으로 기대되는 이벤트 수가 우리가 찾으려는 실제 사례 수보다 훨씬 크면 우리가 발견하는 거의 모든 결과는 우연히 나타난 것이라고 판단해야 합니다.&lt;/p&gt;
&lt;p&gt;Bonferroni 보정은 이러한 개념을 실제 검정에 적용하는 대표적인 방법입니다. 전체 유의수준(α)을 검정 횟수(m)로 나누어 각 검정의 기준으로 삼습니다. 예를 들어 20개의 검정을 실시하고 전체 α=0.05를 설정하면 보정된 개별 검정 기준은 0.0025(=0.05/20)가 됩니다. 이렇게 각 검정의 임계값을 엄격하게 만들면 통계적 우연에 의해 발생한 결과를 유의하다고 잘못 판단할 가능성을 줄일 수 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;결과 신뢰성 유지&lt;/strong&gt;: 여러 가설을 동시에 검정할 때 생길 수 있는 거짓 양성을 줄여 결과의 신뢰도를 높입니다.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;간단한 계산&lt;/strong&gt;: 원하는 전체 유의수준 α를 검정 횟수로 나누기만 하면 임계값이 정해지므로 적용이 쉽습니다.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;보수적 특성&lt;/strong&gt;: 임계값이 매우 엄격해져 거짓 양성은 줄지만 실제 효과를 놓칠 위험(제2종 오류)이 커집니다.  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;실제 사례&lt;/h2&gt;
&lt;p&gt;데이터 분석과 엔지니어링에서도 본페로니 원리는 중요하게 작용합니다. 특히 한꺼번에 여러 개의 가설 검정이나 이상 탐지를 할 때 유용합니다. 예를 들어 생명과학 연구나 A/B 테스트에서는 수십에서 수백 개의 가설을 동시에 검정하는 경우가 흔합니다. 이 경우 Bonferroni 보정을 적용하지 않으면 우연히 유의하게 보이는 결과가 많아져 실제로 유의미하지 않은 가설까지 채택할 위험이 커집니다. 따라서 Bonferroni 보정을 통해 전체 α를 검정 횟수(예: 20)로 나눈(α=0.05일 때 0.0025) 기준을 사용하면 작은 변동이 우연히 통계적 유의성을 만족하는 상황을 예방할 수 있습니다. &lt;/p&gt;
&lt;p&gt;또한 데이터마이닝 분야에서도 본페로니 원리는 자주 언급됩니다. 예를 들어 &lt;strong&gt;데이터마이닝 교재 “Mining of Massive Datasets”&lt;/strong&gt; 에서는 “테러리스트 탐지” 예시를 통해 이를 설명합니다.&lt;br&gt;국가 안보 기관이 수억 명의 사람 중에서 테러리스트를 찾는다고 가정합시다. 실제 테러리스트의 수는 극히 적지만, 탐지 알고리즘은 다양한 패턴(여행 기록, 이메일 단어, 금융 거래 등)을 분석해 수많은 ‘의심 사례’를 생성합니다.&lt;br&gt;이때 본페로니 원리에 따르면 “탐지 규칙이 너무 많아지면 대부분의 경고는 우연히 발생한 잘못된 양성 신호”일 가능성이 높습니다. 즉, 실제 테러리스트보다 ‘무고한 사람’을 오탐지할 확률이 훨씬 커진다는 뜻입니다.&lt;br&gt;따라서 현실적인 탐지 시스템은 &lt;strong&gt;무작위 상황에서도 거의 발생하지 않을 정도로 강한 신호만을 고려&lt;/strong&gt;해야 합니다. 이를 통해 거짓 경보(false alarm)를 줄이고, 진짜 위험 징후에 집중할 수 있습니다.&lt;/p&gt;
&lt;h2&gt;결론&lt;/h2&gt;
&lt;p&gt;본페로니 원리는 다중 검정에서 거짓 양성의 개수를 통제하려는 상황에서 기본적으로 고려해야 할 기법입니다. 전체 유의수준을 검정 횟수로 나눈 엄격한 기준을 적용하면 거짓 양성 확률을 효과적으로 낮출 수 있습니다. 그러나 너무 보수적이어서 실제 의미 있는 신호를 놓칠 위험(제2종 오류)이 커질 수 있습니다. 따라서 실무에서는 거짓 양성을 거의 허용할 수 없는 경우 본페로니 보정을 사용하되, 필요에 따라 False Discovery Rate(FDR) 제어 등 다른 방법도 함께 검토하여 분석 목적에 맞는 절차를 선택하는 것이 좋습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;참고문헌&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Rajaraman, A., Ullman, J. D., &amp;amp; Leskovec, J. (2022). &lt;em&gt;Mining of Massive Datasets&lt;/em&gt; (3rd ed.). Cambridge University Press.  &lt;/li&gt;
&lt;li&gt;Miller, R. G. (1981). &lt;em&gt;Simultaneous Statistical Inference&lt;/em&gt;. Springer.  &lt;/li&gt;
&lt;li&gt;Abdi, H. (2007). &lt;em&gt;The Bonferroni and Šidák Corrections for Multiple Comparisons&lt;/em&gt;. In &lt;em&gt;Encyclopedia of Measurement and Statistics&lt;/em&gt; (SAGE Publications).  &lt;/li&gt;
&lt;li&gt;Efron, B. (2010). &lt;em&gt;Large-Scale Inference: Empirical Bayes Methods for Estimation, Testing, and Prediction&lt;/em&gt;. Cambridge University Press.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Data Science/Probability &amp;amp; Statistics</category>
      <category>본페로니</category>
      <category>이상 탐지</category>
      <author>Data Scientist Note</author>
      <guid isPermaLink="true">https://data-science-notes.tistory.com/31</guid>
      <comments>https://data-science-notes.tistory.com/31#entry31comment</comments>
      <pubDate>Tue, 29 Aug 2023 14:12:54 +0900</pubDate>
    </item>
  </channel>
</rss>