<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>withs-study.log</title>
        <link>https://velog.io/</link>
        <description>공부하는 사람</description>
        <lastBuildDate>Sun, 09 Nov 2025 13:45:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>withs-study.log</title>
            <url>https://velog.velcdn.com/images/withs-study/profile/7f0da23d-3a5a-45d1-9446-ab7cf3a005ae/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. withs-study.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/withs-study" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[금융안정지수(FSI) 방법론]]></title>
            <link>https://velog.io/@withs-study/%EA%B8%88%EC%9C%B5%EC%95%88%EC%A0%95%EC%A7%80%EC%88%98FSI</link>
            <guid>https://velog.io/@withs-study/%EA%B8%88%EC%9C%B5%EC%95%88%EC%A0%95%EC%A7%80%EC%88%98FSI</guid>
            <pubDate>Sun, 09 Nov 2025 13:45:55 GMT</pubDate>
            <description><![CDATA[<p><strong>금융안정</strong>은 기준금리를 결정하는 데에 있어서 중요한 판단 기준이나, 환율이나 부동산 등 다양한 부분에 걸쳐 있어 한눈에 현 상황을 살펴보는 데에 어려움이 있다. </p>
<p>이에 중앙은행인 한국은행에서는 <strong>금융안정지수(Financial Stability Index; FSI)</strong>를 개발하여 금융안정을 나타내는 다양한 지표들을 하나의 지수로 변환하였다.</p>
<p>이를 통해 우리나라의 전체적인 금융변동을 한 눈에 파악할 수 있게 되었으며,
거시건전성 상황을 진단하는 지표 중 하나로 활용함으로써 금융불균형 누증으로 기인하여 발생할 수 있는 <strong>시스템리스크(systemic risk)</strong> 조기 포착에 활용하고 있다. </p>
<h1 id="fsi-산출-절차-및-방법">[FSI 산출 절차 및 방법]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/004547ff-b0ff-4071-b5c8-7655db4218f7/image.png" alt=""></p>
<p>FSI 산출에 필요한 지표 선정을 위해 주요국 사례를 참고하여 금융안정을 잘 나타내고 속보성이 뛰어난 20개 지표를 선정하였다. </p>
<p>해당 지표는 은행(연체율 등), 주식·외환·채권시장(주가 및 환율 변동성, 금리스프레드 등), 대외거래 및 대외지급(경상수지, CDS프리미엄 등), 실물경제(성장률, 물가상승률 등), 가계·기업의 경제상황(소비자동향지수, 기업경기지수 등)을 나타내는 지표로 구성되어 있다</p>
<p>그리고 우리나라의 실제 금융안정 정도를 파악하기 위해 금융·경제 전문가를 대상으로 설문조사를 실시하였으며 그 결과를 FSI의 현실적합성 판단기준으로 삼았다.</p>
<p>다음으로는 <strong>선정된 지표를 비교·평가할 수 있도록 표준화한 후 가중평균하여 FSI를 산출</strong>하였다. 
이때「상대적 크기비교 방식」을 이용하여 FSI가 0(최소) ~ 100(최대) 사이의 값을 갖게 함으로써 100에 가까울수록 불안정성 정도가 높아지게 하였다</p>
<ul>
<li>상대적 크기비교 방식:  (측정값-시계열상의 최소값)/(시계열상의 최대값-시계열상의 최소값)으로 계산</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/08fae5a4-e814-4c47-b157-b67727b3e329/image.png" alt=""></p>
<p>가중평균 방법은 등분산가중평균(equalvariance weighted average)과 주성분분석(principal component analysis) 방법 중 현실적 합성이 높은 등분산가중평균 방법을 선택하였다.</p>
<p>두 방법을 이용하여 FSI를 산출해본 결과 <strong>등분산가중평균 방법이 1종 오류가 낮게 나타났다.</strong></p>
<h1 id="위기진단을-위한-최적-임계치-산출">[위기진단을 위한 최적 임계치 산출]</h1>
<p>FSI를 이용하여 위기여부를 진단하기 위해 <strong>&#39;최적 임계치&#39;</strong> 개념을 도입하여 거시건전성 상황을 「안정」, 「주의」, 「위기」단계로 구분하였다. </p>
<p>각 단계를 구분하는 최적 임계치는<strong>「noise-to-signal ratio(이하 NTSR) 접근법」(Borio &amp; Drehmann, 2009)</strong>을 이용하여 산출하였다.</p>
<h2 id="ntsr-접근법">[NTSR 접근법]</h2>
<p> NTSR 접근법은 <strong>위기에 대한 참 예측력(signal power, 1-T1) 대비 거짓 예측력(noise power, T2)의 비율</strong>을 최소화하는 방법이다.</p>
<p>$$
Min[\frac{T_2}{1-T_1} | (1-T_1) \geq X]$$</p>
<p>$T_1$: 1종 오류(Type 1 error)
$T_2$: 2종 오류(Type 2 error)
$\frac{T_2}{1-T_1}$: Noise-to-Signal Ratio
$X$: 최소 위기예측력(1종 오류의 최대허용 한도)</p>
<ul>
<li>Borio &amp; Drehmann은 지표의 위기 예측이 최소 60% 이상일 것을 조건으로 제시</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/4995c33c-4206-48ca-b0cc-8861661bbe95/image.png" alt=""></p>
<p>NTSR 접근법으로 최적 임계치를 산출한 결과(FSI가 개발된 2012년 4월 기준), FSI가 8보다 클 경우 &quot;주의&quot;, 22보다 클 경우 &quot;위기&quot;단계로 구분하였으며, 각각의 임계치에서 NTSR이 최소가 되는 것으로 나타났다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a318d7b2-52f8-4e01-a5b9-c75f09c85cf1/image.png" alt=""></p>
<h2 id="현황">[현황]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/062f3a5c-f9ef-4f90-8e66-285950650745/image.png" alt=""></p>
<p>최신 업데이트인 2025년 9월 현재 임계치는 12, 24로 변경된 것을 확인할 수 있으며, 현재는 위험단계에서 주의 단계로 하락 중인 것을 확인할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/17fbe481-95c0-43cb-b06c-10f250566abf/image.png" alt=""></p>
<p>반면, 중장기적인 금융 건전성을 나타내는 금융취약성 지수 FVI는 장기평균에 근접하며 상승을 이어오고 있는 것을 확인할 수 있다.(FVI에 대해서는 추후 게시)</p>
<p>이는 한국은행이 금리인하 기조를 지속적으로 유지함에 따라 단기적인 금융안정을 나타내는 FSI의 지표들은 안정적인 추세로 되고 있지만, 중장기적인 금융불균형 누증을 나타내는 지표인 FVI는 금리인하로 인해 금융불균형이 누증되면서 상승하는 흐름을 보이는 것으로 이해할 수 있다. </p>
<p>추가적인 내용은 FVI의 방법론에 대해 다루면서 FSI, FVI의 관계에 대해서도 추후 다뤄보겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Less is More: Recursive Reasoning with Tiny Networks]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Less-is-More-Recursive-Reasoning-with-Tiny-Networks</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Less-is-More-Recursive-Reasoning-with-Tiny-Networks</guid>
            <pubDate>Sun, 12 Oct 2025 14:28:23 GMT</pubDate>
            <description><![CDATA[<p>최근 몇 년간 대형 언어모델(LLM)이 인간 수준의 언어 이해와 추론을 보여주며 AI 연구를 주도하고 있습니다. </p>
<p>하지만 LLM을 개발 및 발전 시키기 위해선 수많은  비용, 데이터, 메모리가 필요하기에 이로 인한 <strong>효율성 문제가 발생</strong>하고 있습니다.  </p>
<p>대표적인 예로 ARC-AGI(Abstraction and Reasoning Corpus) 같은 고차원 추론 벤치마크에서는, 수백억~수조 개의 파라미터를 가진 모델조차 여전히 인간 수준의 일반화 능력에 도달하지 못했습니다.</p>
<p>이에 따라 <strong>“작지만 똑똑한 모델(small but smart)”*</strong>을 만들기 위한 시도가 늘어나고 있습니다. 그 대표적 연구가 바로 이번 논문, <strong>『Less is More: Recursive Reasoning with Tiny Networks』</strong> 입니다.</p>
<p>해당 연구는 25년 10월 6일에 나온 최신 연구로, 삼성전자 북미 AI 연구소에서 연구를 진행하였기에 이번 기회에 한번 살펴보았습니다.  </p>
<h1 id="introduction">[Introduction]</h1>
<p>LLM을 중심으로 AI 발전이 이어지고 있지만, 복잡한 문제 해결이나 고난도의 질의응답 문제에서는 여전히 한계를 보입니다. </p>
<p>이들은 <strong>자동회귀(auto-regressive) 방식으로 출력을 생성</strong>하기 때문에,
하나의 잘못된 토큰(token)이라도 생성되면 <strong>전체 답변이 무효화될 위험</strong>이 있습니다.</p>
<p>이러한 <strong>신뢰성 문제를 개선</strong>하기 위해,</p>
<p>LLM들은 보통 <strong>Chain-of-Thought (CoT)와 Test-Time Compute (TTC)을 활용</strong>합니다.</p>
<ul>
<li><p>CoT는 LLM이 최종 답변을 생성하기 전에 사고의 단계별 추론 과정을 먼저 출력하도록 하여, 인간의 사고 방식을 모방
$\to$ 이는 정확도를 향상시키지만, 고품질의 추론 데이터를 요구하며,
생성된 “사고 과정”이 잘못되면 오답을 강화할 수도 있음</p>
</li>
<li><p>TTC는 모델이 여러 번의 답변을 생성하고, 그 중 가장 많이 등장한 답 또는 가장 높은 보상을 가진 답을 선택하는 방식
$\to$ 이는 신뢰성을 높이지만, 계산량이 커집니다.</p>
</li>
</ul>
<p>그러나 이런 방법만으로는 CoT와 TTC를 결합하더라도 <strong>LLM은 모든 문제를 완벽히 해결하지 못합니다.</strong></p>
<p>이러한 배경 속에서, Wang et al.(2025)은 Hierarchical Reasoning Model (HRM)을 제안하며, LLM이 고전하는 퍼즐형 문제(Sudoku, Maze, ARC-AGI 등)에서 획기적인 성능 향상을 보였습니다.</p>
<p>HRM은 두 가지 방법을 통해 성능을 향상시켰습니다. </p>
<p> <strong>1. Recursive Hierarchical Reasoning (계층적 재귀 추론)</strong></p>
<p>두 개의 작은 네트워크를 서로 다른 주기로 반복 실행하여, 각 네트워크가 서로 다른 형태의 잠재 특징(latent feature)을 생성합니다.</p>
<ul>
<li><p>저주파 네트워크 $f_L$: 빠른 주기로 작동하며, 잠재 상태 $z_H$를 생성</p>
</li>
<li><p>고주파 네트워크 $f_H$: 느린 주기로 작동하며, 잠재 상태 $z_L$를 생성</p>
</li>
</ul>
<p>이때 이러한 두 특징은 상호 입력으로 사용됩니다.</p>
<p>저자들은 이러한 구조를 뇌의 서로 다른 시간 주파수 활동 및 감각 정보의 계층적 처리에서 생물학적 영감을 받았다고 설명했습니다.</p>
<p> *<em>2. Deep Supervision (심층 감독) *</em></p>
<p>모델이 여러 단계의 감독(supervision step)을 거치며 점진적으로 답을 개선하도록 학습합니다.</p>
<p>각 단계에서는 이전 단계의 잠재 특징 $(z_L, z_H)$를 초기값으로 재사용하고, 이를 역전파에서 분리하여 residual connection을 만듭니다.</p>
<p>이렇게 하면 매우 깊은 네트워크를 한 번의 forward pass로 처리하지 않아도 “깊이 있는 추론”을 흉내낼 수 있습니다.</p>
<p>이때, 두 작동원리가 HRM의 성능 향상에 기여한 바를 연구를 통해 살펴보면, <strong>재귀적 계층 구조보다는 deep supervision의 영향이 더 컸습니다.</strong></p>
<ul>
<li><p>deep supervision은 단일 단계 감독 대비, 정확도가 19% → 39%로 2배 향상</p>
</li>
<li><p>재귀 계층 구조 자체는 단일 패스 모델 대비 35.7% → 39.0%로 소폭 향상</p>
</li>
</ul>
<p>즉, 여러 단계의 감독을 통해 점진적으로 답을 개선하는 과정은 효과적이지만,
<strong>각 단계 내의 복잡한 재귀 구조는 성능 향상에 크게 기여하지 않았다</strong>는 것입니다.
<img src="https://velog.velcdn.com/images/withs-study/post/c3b3824d-df5f-4c72-8288-054507f792e9/image.png" alt=""></p>
<p>따라서 본 연구에서는 이러한 한계를 개선하기 위해,
재귀 추론의 진정한 효과를 극대화할 수 있는 새로운 접근법인 <strong>Tiny Recursive Model (TRM)을 제안</strong>합니다.</p>
<p><strong>TRM의 기본 구조</strong>는 다음과 같습니다.</p>
<p>(1) 입력된 문제(x)와 현재의 예측 답(y), 내부 상태(z)를 함께 처리
(2) z를 n번 반복해 업데이트 (내적 추론 단계)
(3) 업데이트된 z를 이용해 y를 개선 (출력 갱신 단계)
(4) 이 과정을 여러 번(supervision step) 반복하며 점진적으로 답을 정교화</p>
<p>이 단순한 구조지만, <strong>&#39;답을 스스로 고쳐 나가는 작은 네트워크&#39;라는 점에서 기존의 심층신경망보다 훨씬 효율적</strong>입니다.</p>
<h1 id="hrm-한계">[HRM 한계]</h1>
<p>HRM(Hierarchical Reasoning Model)은 강력한 추론 능력을 보여줬지만, 
다음 세 가지 근본적인 한계가 있습니다.</p>
<p><strong>1. 수학적 근거 부족</strong></p>
<p>HRM은 “고정점(fixed-point)” 수렴을 가정하고 1-step gradient 근사를 사용하지만, 실제로는 수렴하지 않음
$\to$ 암묵함수정리(IFT) 적용 부적절</p>
<p><strong>2. 학습 비효율성</strong></p>
<p>Adaptive Computational Time(ACT) 적용 시 매 학습마다 2회 forward pass 필요 → 계산량 2배 
$\to$ Q-learning 기반 halting 손실 구조</p>
<p><strong>3. 불필요한 복잡성</strong></p>
<p>두 네트워크 $(f_L, f_H)$가 서로 다른 주기로 작동하며, 생물학적 비유에 지나치게 의존<br>$\to$ 실험적으로 핵심 효과가 검증되지 않음</p>
<p>이러한 HRM의 한계를 해결하기 위해 TRM이 등장하였습니다.</p>
<h1 id="trm-개선점">[TRM 개선점]</h1>
<p><strong>주요 개선점은 크게 6가지</strong>가 있습니다.</p>
<p><strong>1) 고정점(fixed-point) 이론 제거</strong></p>
<p>HRM은 ‘고정점에 수렴한다’는 가정하에 계산량을 줄였지만, 실제로는 그 조건이 성립하지 않음 </p>
<p>TRM은 복잡한 수학적 가정을 버리고, 단순히 전체 반복 과정을 역전파하도록 설계해 더 안정적 학습을 수행
 
<strong>2) 단일 네트워크 구조</strong></p>
<p>TRM은 HRM의 두 개 네트워크$(fL, fH)$를 하나로 합쳐 파라미터를 절반으로 줄였습니다. 이는 오히려 일반화 성능을 높힘.
 
<strong>3) 작은 모델이 더 잘 일반화된다</strong></p>
<p>층을 늘리면 오히려 과적합(overfitting)이 심해짐</p>
<p>데이터가 적을 때는 작은 모델이 더 잘 작동했으며, <strong>TRM은 2개의 층이 최적 구조 확인</strong>
 
<strong>4) 자기회귀(Self-Attention) 제거 가능</strong></p>
<p>입력 크기가 작을 때(예: 9x9 Sudoku), 복잡한 Attention 구조 대신 <strong>단순한 MLP가 더 효과적</strong>
 
<strong>5) 학습 효율 향상 (ACT 단순화)</strong></p>
<p>HRM은 학습 중 “언제 멈출지”를 Q-learning으로 결정해 2배의 연산을 씀</p>
<p>이때, TRM은 단순히 <strong>‘현재 답이 맞는가’</strong>만 판단하도록 바꿔, 계산량을 절반으로 감소시킴
 
<strong>6) EMA(지수이동평균)</strong></p>
<p>모델의 가중치를 부드럽게 업데이트해, 작은 데이터셋에서도 안정적 학습과 높은 정확도를 달성함</p>
<h1 id="result">[Result]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/9dfa2d8d-1a0f-4103-9bad-f75357e77033/image.png" alt=""></p>
<p>이러한 방법을 통해 TRM은 인간 수준의 추론 능력을 테스트하는 ARC-AGI 벤치마크에서 <strong>TRM은 10분의 1 수준의 데이터와 0.01% 미만의 매개변수 크기로 훨씬 거대한 LLM의 추론능력을 뛰어넘었습니다.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[거시건전성정책의 파급영향 분석 및 통화정책과의 효과적인 조합]]></title>
            <link>https://velog.io/@withs-study/%EA%B1%B0%EC%8B%9C%EA%B1%B4%EC%A0%84%EC%84%B1%EC%A0%95%EC%B1%85%EC%9D%98-%ED%8C%8C%EA%B8%89%EC%98%81%ED%96%A5-%EB%B6%84%EC%84%9D-%EB%B0%8F-%ED%86%B5%ED%99%94%EC%A0%95%EC%B1%85%EA%B3%BC%EC%9D%98-%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-%EC%A1%B0%ED%95%A9</link>
            <guid>https://velog.io/@withs-study/%EA%B1%B0%EC%8B%9C%EA%B1%B4%EC%A0%84%EC%84%B1%EC%A0%95%EC%B1%85%EC%9D%98-%ED%8C%8C%EA%B8%89%EC%98%81%ED%96%A5-%EB%B6%84%EC%84%9D-%EB%B0%8F-%ED%86%B5%ED%99%94%EC%A0%95%EC%B1%85%EA%B3%BC%EC%9D%98-%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-%EC%A1%B0%ED%95%A9</guid>
            <pubDate>Mon, 22 Sep 2025 16:13:17 GMT</pubDate>
            <description><![CDATA[<p>최근 서울 주택가격 상승이 기준금리 결정에 있어, 큰 화두로 떠오른 만큼 적절한 정책 조합을 통해 서울 주택가격을 안정화시킬 필요가 있다고 생각했습니다.</p>
<p>그런데 9월 21일, 한국은행에서 <strong>&quot;[BOK이슈노트 제2025-26호] 거시건전성정책의 파급영향 분석 및 통화정책과의 효과적인 조합&quot;</strong>이라는 좋은 보고서가 공개되어서 리뷰를 남겨보고자 합니다.</p>
<h1 id="요약">[요약]</h1>
<h2 id="현-상황">[현 상황]</h2>
<ol>
<li><p>금년 및 내년 성장률이 잠재 성장률 수준을 밑돌 것으로 전망되는 등 경기가 부진</p>
</li>
<li><p>와중에 작년 하반기 이후 서울 주택가격은 아파트를 중심으로 상승세가 지속되고 가계부채 증가세가 이어지면서 금융안정 측면의 리스크는 확대</p>
</li>
<li><p>이러한 상황에서는 경기 부진에 대응하는 금리인하가 금융안정 측면의 리스크를 증대시킬 수 있어 통화정책만으로 경기안정과 금융안정을 함께 달성하기 어려움</p>
</li>
</ol>
<p>$\to$ 통화정책과 거시건전성 정책 간 긴밀한 <strong>정책공조(policy coordination) 필요</strong></p>
<h2 id="분석-결과">[분석 결과]</h2>
<ol>
<li><p>서울 아파트가격 변동의 주요 동인을 분석해본 결과, 경기, 수급·심리 및 금리 요인이 복합적으로 영향을 미침</p>
</li>
<li><p>특히 작년 6월 이후 <strong>경기 요인이 하방압력으로 작용</strong>하고 있음에도 <strong>수급·심리 및 금리 요인이 상방압력으로 작용</strong>하면서 서울 아파트가격 상승세를 견인</p>
</li>
<li><p><strong>거시건전성정책 강화</strong>는 주택가격 상승세와 주택담보대출 증가세를 억제하는 데 유의한 효과가 있지만 <strong>성장을 제약하는 효과는 유의하지 않은 것</strong>으로 분석</p>
</li>
<li><p>거시건전성정책 강화 시점에 따른 금융안정 제고 효과를 분석해본 결과, <strong>거시건전성정책 강화가 완화적 통화정책에 선행하는 경우</strong>가 후행하는 경우에 비해 <strong>주택가격 상승세 및 가계대출 증가세 억제에 효과적</strong></p>
</li>
<li><p>주택가격 상승세와 가계부채 증가세가 이어지는 상황에서 거시건전성정책 강화 없이 금리인하가 먼저 이루어질 경우, <strong>금융안정에 대한 정책당국의 소극적 대응 의지로 인식</strong></p>
</li>
</ol>
<p>$\to$ <strong>주택가격 상승 기대가 확산</strong>되면서 금리인하의 금융안정 리스크 증대 효과는 더욱 커지고 <strong>성장 제고 효과는 일반적인 경우에 비해 약화</strong>될 가능성</p>
<h1 id="분석-배경">[분석 배경]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/75a47902-e5b6-4c35-b6b0-825b5723d831/image.png" alt=""></p>
<p>최근 서울 아파트가격 움직임을 보면,</p>
<ol>
<li><p><strong>2025년 3월 서울시의 토지거래 허가구역 재지정</strong> (강남‧서초‧송파‧용산) 이후 둔화하던 오름세</p>
</li>
<li><p><strong>5월 들어 금리인하 효과, 2월 토지거래허가구역 해제, 주택가격 기대심리 상승 등</strong>으로 다시 가팔라져 6월 넷째 주에는 전주 대비 0.43% 상승하며 2018년 9월 첫째 주(0.47%) 이후 가장 높은 주간 상승률을 기록</p>
</li>
<li><p>정부가 6월 말경 <strong>｢가계부채 관리 강화방안｣(이하 ‘6.27 대책’)을 시행</strong>한 이후로는 오름세가 둔화되어 8월 이후 주간 상승률은 0.1% 내외 수준을 나타내고 있다.</p>
</li>
</ol>
<ul>
<li>서울 아파트가격 상승률(전주 대비): [6월] 다섯째 주 0.40% → [7월] 첫째 주 0.29% → 셋째 주 0.16% → [8월] 첫째 주 0.14% → 셋째 주 0.09% → [9월] 첫째 주 0.08% → 셋째 주 0.12%</li>
</ul>
<p>서울 아파트가격 상승세가 지속될 경우 여타 수도권으로 확산되고 가계부채 증가로 이어지면서 금융불균형이 확대될 수 있다.</p>
<p>이에 한국은행법 제1조 제2항에 따라 <strong>“한국은행은 통화신용정책을 수행할 때에는 금융안정에 유의하여야 한다”.</strong></p>
<p>따라서, 한국은행은 통화정책 수행 시 금융안정에 더욱 유의할 필요가 있다. </p>
<p>현재와 같이 잠재성장률 보다 경제성장률이 밑도는 <strong>경기가 부진한 상황</strong>에서 경기 부양을 위한 <strong>완화적 통화정책은 금융안정 측면의 리스크를 증대</strong>시킬 수 있어 통화정책만으로 경기안정과 금융안정을 함께 달성하기 어렵다.</p>
<p>이처럼 <strong>성장과 금융안정 간 상충관계(trade-off)가 큰 상황에서는 거시건전성정책과의 긴밀한 정책공조(policy coordination)가 필요</strong>하다.</p>
<p>$\to$ 본고에서 성장과 금융안정 간 상충관계가 큰 상황에서 통화정책과 거시건전성정책 간 <strong>효과적인 정책조합(policy mix)을 제시</strong></p>
<h1 id="서울-아파트-가격-변동요인-분석">[서울 아파트 가격 변동요인 분석]</h1>
<p>벡터자기회귀(VAR) 모형을 활용하여 2017년 하반기 이후 서울 아파트가격 상승기별로 주요 변동요인을 분석하였다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/249f0364-06f9-441d-8324-5ab73ab4dbe4/image.png" alt=""></p>
<p>벡터자기회귀(VAR) 모형을 통한 역사적 분해 결과를 보면(&lt;그림 2-2&gt;),
서울 아파트가격의 변동은 경기, 수급･심리 및 금리 요인에 의해 복합적으로 영향을 받는 것으로 나타났다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/3d4164ec-a76e-4fed-acf8-88f2fcad5344/image.png" alt=""></p>
<p>특히, <strong>작년 6월 이후</strong> 지속되고 있는 최근 상승기(Ⅲ-②)에는 경기 요인이 하방압력으로 작용하고 있음에도, <strong>수급･심리 및 금리 요인이 상방압력으로 작용하면서 서울 아파트가격 상승을 견인</strong>하고 있는 것으로 분석된다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/4125f4b2-2bbf-4b45-b66e-6bac4975a4c5/image.png" alt=""></p>
<h1 id="거시건전성-정책-효과-분석">[거시건전성 정책 효과 분석]</h1>
<h2 id="거시건전성-정책-지수">[거시건전성 정책 지수]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a8fca000-fff6-44fa-9c3c-da38d0c504e5/image.png" alt=""></p>
<p>거시건전성정책지수와 관련한 최근 연구(Meuleman and Vander (2020), FernandezGallardo (2023) 등)를 바탕으로 <strong>정책강도를 반영하는 가중치를 부여</strong>하여 보다 정교하게 <strong>거시건전성정책지수를 작성</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/25ad5685-2e5b-45e3-8aaa-2a2a141fef0a/image.png" alt=""></p>
<p>산출한 거시건전성정책지수와 서울 아파트가격의 추이를 보면(&lt;그림 3-2&gt;), 두 시계열은 대체로 함께 움직이는 것처럼 보인다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a925a7e8-492f-472c-af65-c5b48ac7312d/image.png" alt=""></p>
<p>그러나 시차상관분석(&lt;그림 3-3&gt;) 및 그랜저 인과관계검정 결과에 따르면, <strong>서울 아파트가격이 거시건전성정책지수에 선행</strong>하는 것으로 나타난다. </p>
<p>$\to$ <strong>거시건전성정책이 서울 주택가격 상승세에 대응하여 강화되어 왔음을 시사</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7c26ca5c-4cc8-45f6-817c-fbc0a2654ade/image.png" alt=""></p>
<h2 id="거시건전성-정책-효과-분석-1">[거시건전성 정책 효과 분석]</h2>
<p>이후 구조 VAR 모형을 활용하여 거시건전성정책 강화가 서울 아파트가격, 주택담보대출 및 성장에 미치는 영향을 추정해 보았다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/11de20ad-69da-4142-ab54-c46406ab158a/image.png" alt=""></p>
<p>충격반응 분석 결과, 거시건전성정책 강화는 서울 아파트가격 상승세 및 가계부채 증가세 완화에 유의한 효과가 있는 것으로 나타났다(&lt;그림 4&gt;). </p>
<p><strong>거시건전성정책 1단위 강화는 향후 1년간 평균적으로 서울 아파트가격을 1.6% 하락시키고 주택담보대출을 1.7% 감소시키는 효과</strong>가 있는 것으로 추정되었다.</p>
<p>한편, <strong>거시건전성정책 강화 조치가 성장을 제약하는 효과는 유의하지 않은 것으로 분석</strong>되었다. </p>
<p>이는 거시건전성정책의 주요 목표변수인 <strong>주택가격과 건설투자의 연계성이 낮고 주택가격 상승의 소비 증대 효과(wealth effect)도 크지 않아, 주택가격이 성장에 미치는 직접적인 영향이 제한적인 데 기인</strong>한 것으로 보인다.</p>
<p>위 분석 결과는 <strong>거시건전성정책이 경기 부진에 대응한 완화적 통화정책의 성장 제고효과는 제약하지 않으면서 금리인하가 금융안정에 미치는 부정적 영향을 어느 정도 상쇄시킬 수 있음을 의미</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/07a8bbd8-51f8-4ae5-b6e7-4b2c8f401b96/image.png" alt=""></p>
<p>분석 결과를 활용하여 <strong>금번 6.27 대책의 금융안정 제고 효과를 추정</strong>해 보면, 동 대책은 서울 아파트가격 상승세 및 주택담보대출 증가세를 억제하는 데 어느 정도 기여할 수 있을 것으로 보인다. </p>
<p>모형 시뮬레이션(counterfactual simulation) 결과(&lt;표 4&gt;), <strong>6.27 대책이 도입되지 않았을 경우 금년 하반기중 서울 아파트가격이 약 6% 상승하고 주택담보대출은 약 5% 증가할 것으로 전망</strong>되는데, 동 대책은 이를 <strong>각각 1.6<del>2.1%p, 1.2</del>1.6%p 정도 상쇄하는 효과가 있을 것으로 추정</strong></p>
<h1 id="효과적인-정책조합">[효과적인 정책조합]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/84db79de-c4be-4d21-ab93-a15060a0fdcf/image.png" alt=""></p>
<p><strong>거시건전성정책 강화의 금융안정 제고 효과</strong>는 강화 시점이 완화적 통화 정책에 <strong>선행하는 경우가 후행하는 경우에 비해 크게 나타났다.</strong> </p>
<p><strong>금리인하에 선행하는 거시건전성정책 강화 조치</strong>는 기준금리 25bp 인하에 따른 <strong>서울 아파트가격 상승압력(1년 평균, 1.4%)을 약 0.4%p 축소시키는 효과가 있는 것으로 추정</strong>된다.</p>
<p>반면, 거시건전성정책 강화 조치가 금리인하에 후행하여 지연될수록 주택가격 상승세 억제 효과는 줄어드는 것으로 나타났다.</p>
<p>주택가격 상승세와 가계대출 증가세가 이어지는 상황에서 거시건전성정책 강화 없이 <strong>기준금리 인하가 먼저 이루어질 경우, 금융안정에 대한 정책당국의 소극적 대응 의지로 인식되어 주택가격 상승 기대가 확산될 우려</strong>가 있다.</p>
<p>이 경우 <strong>통화정책 완화에 따른 금융안정 리스크 증대 효과는 더욱 커질 수 있으며, 늘어난 시중 유동성이 소비‧투자 대신 생산성이 낮은 부동산 부문으로 유입되면서 금리인하의 성장 제고 효과는 일반적인 경우에 비해 약화될 가능성</strong>이 있다.</p>
<p>위 분석결과는 <strong>거시건전성정책 강화 조치가 금리인하 이후에 이루어지는 것보다 금리인하에 앞서 시행되는 것이 효과적인 정책조합임을 시사</strong>한다.</p>
<h1 id="remarks">[Remarks]</h1>
<p>사실 이번 연구도 이전부터 한국은행이 연구했던 결과인 <strong>&quot;선제적인 거시건전성 정책의 필요성&quot;</strong> 등과 같은 내용이 반복되는 내용이다.</p>
<p>물론, 중요한 내용이지만 이번 연구에서의 차별점을 다루는 것이 더 좋다고 생각하여 기존 한국은행의 연구와 해당 연구의 차이점에 대해서 다루겠다.</p>
<p>본 연구에서 주목할 점은 크게 3가지다.</p>
<ol>
<li><p><strong>거시건전성 정책의 강도</strong>를 반영한 거시건전성 지수를 연구</p>
</li>
<li><p>경기가 부진한 상황에서 금리인하와 같은 완화적인 정책을 실시할 때는 <strong>심리</strong> 요인이 크게 작용하여 자산가격의 상승을 유발할 수 있다.</p>
</li>
</ol>
<p>$\to$ 거시건전성 정책은 이러한 상황 속 금융안정에 대한 정책당국의 의지를 보여줌으로써 <strong>심리</strong> 요인의 영향력을 크게 제어할 수 있다.</p>
<p>$\to$ 주택가격은 주택가격 기대심리에 자기실현적 성격에 따라 움직이는데, 해당 요인을 거시건전성 정책을 통해 금융안정에 대한 정책당국의 의지를  국민과 커뮤니케이션함으로써 이를 제어할 수 있다.</p>
<ol start="3">
<li>거시건전성 정책 강화 조치가 경제 성장을 제약하지 않는다.</li>
</ol>
<p>$\to$ 실제로 <strong>금융위기 이후 주택가격과 건설투자(주거용 건물투자)의 상관관계(상관계수 –0.1)는 통계적으로 유의하지 않았다.</strong> 이는 거시건전성정책의 주요 목표변수인 주택가격과 건설투자의 연계성이 낮음을 보여준다.</p>
<p>$\to$ 또한, 주택가격의 민간소비에 대한 부의 효과(wealth effect)를 추정한 이승윤‧최영우(2018), Kim (2019) 등은 <strong>고령층의 주택 보유비중 증가, 주택가격 상승시 무주택자의 소비 위축 등으로 부의 효과가 제약되어 주택가격 상승의 부의 효과도 크지 않을 수 있음을 분석</strong>하였다.</p>
<p>해당 연구에서는 특히, 거시건전성 정책의 강도를 반영한 거시건전성지수 방법론에 대해 다룸으로써 이를 응용한 추가 연구가 이뤄질 수 있다는 점과 6.27 대책에 대한 실증적인 분석 결과가 담겨져 있다는 내용이 흥미롭게 다가왔다. </p>
<p>추가적으로 최근 정부는 <strong>9월 7일 추가 대책(｢주택공급 확대방안｣)</strong>을 마련하여 부동산 시장의 수도권 주택공급 부족 우려를 해소하고자 하고 있다.</p>
<p>해당 방안이 실제 공급으로 이어지는 데에는 시간이 필요할 수 있다.</p>
<p>하지만, 경기가 부진한 상황에서 금리를 인하하는 <strong>지금과 같은 시기에는 심리 요인이 주택가격의 상승을 유발한다는 본 연구 결과를 참고</strong>할 때 주택 가격 상승률을 규제하려는 <strong>정부의 의지를 보여줌으로써 주택가격 기대심리를 제어할 수 있을 지 향후 부동산 시장의 움직임에 주목할 필요</strong>가 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Causal Inference] Week 2 - Randomized Controlled Trial]]></title>
            <link>https://velog.io/@withs-study/Causal-Inference-Week-2-Randomized-Controlled-Trial</link>
            <guid>https://velog.io/@withs-study/Causal-Inference-Week-2-Randomized-Controlled-Trial</guid>
            <pubDate>Sun, 20 Jul 2025 14:52:02 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 <strong>박지용 교수님의 인과추론의 데이터 과학</strong>이라 유튜브 채널을 참고하여 작성하였습니다. 많은 좋은 영상 중 <strong>Korea Summer Workshop on Causal Inference 2023</strong> 시리즈를 참고하여 작성하였습니다. 공부하는 과정이기에 부족한 점이 있다면 알려주시기를 간절히 바랍니다.</p>
<p>출처: <a href="https://www.youtube.com/watch?v=F-oPi3Zp2ak&amp;list=PLKKkeayRo4PUyqxgszL-biEZOOA9j61HT">참고 유튜브 채널 링크</a></p>
<p>빅데이터 시대에 접어들면서 AI가 개발되고 많은 분들이 머신러닝을 배우고 있습니다. 그러면서 함께 떠오른 것이 <strong>상관관계</strong>의 중요성입니다. Prediction 중심 모델과 빅데이터라는 대수의 법칙은 인과관계보다 상관관계만 있어도 충분히 좋은 모델링을 할 수 있다는 생각이 퍼지게 만들었습니다. </p>
<p>물론 이는 부정할 수 없는 사실입니다. 하지만 모든 연구 주제에서 그렇다고 할 수 있을까요?</p>
<p><strong>만약 어떠한 일에서 원인을 찾아야 한다면 상관관계에 있는 요인을 수정한다고 해서 해결할 수 있을까요?</strong> 당연히 아닙니다. </p>
<p>그래서 이번 시리즈는 인과관계를 다루는 분야이자 제가 생각하기에 현재 통계학이라는 분야에서 가장 트렌디한 분야, <strong>Causal Inference</strong>를 가지고 왔습니다. 재밌게 글을 읽어주셨으면 좋겠습니다.</p>
<h1 id="randomized-controlled-trial">[Randomized Controlled Trial]</h1>
<p>일반적으로 최적의 표준을 Gold standard라고 하는데, 
<strong>인과추론 분야에서 Gold standard는 Randomized Controlled Trial(RCT)</strong>라고 할수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/09bb92c6-8268-40a7-831c-6c292bceeee8/image.png" alt=""></p>
<p>위 그림에서 위 단계로 갈수록 인과추론을 위한 가정을 효과적으로 충족할 수 있고, 그렇기 때문에 인과추론 결과에 대한 신뢰성이 높은 방법론입니다. </p>
<p>이때 가장 위에 위치한 Meta-Analysis는 여러 연구들을 종합하는 방법론이기 때문에 단위의 개념에서 인과추론 수준이 가장 높은 방법론은 Randomized Controlled Trial라고 할 수 있습니다.</p>
<p>그럼 왜 Randomized Controlled Trial가 Gold Standard일까요?</p>
<p>현실에서 인과추론 분석을 하기에 적합하지 않는 경우가 많을 수 있는데, <strong>RCT는 실험이 불가능한 상황에서도 기준점</strong>이 되어줄 수 있기 때문에 활용할 수 있기 때문에 중요합니다. </p>
<p>또한, 실험이 불가능한 상황에서 실험의 세팅을 모방하고자 하는 RCT 밑의 방법론들이 사실 인과추론에서 더 중요하지만 이러한 방법들을 이해하는 그런 첫 걸음으로써 기준점이 되어주는 것이 RCT이기 때문에 이번 글에서는 RCT에 대해서 다루도록 하겠습니다.</p>
<p><strong>RCT는 무작위 실험 기법을 활용하여 처리(Treatment) 여부가 무작위로 배정되는 실험</strong>을 의미합니다.</p>
<p>기본적으로 Random assignment는 동전 던지기라고 비유할 수 있습니다. </p>
<p>이론적으로 동전을 던지면 앞/뒤가 반반 나오겠지만 실제로는 항상 반반이 아닙니다. 
하지만 결국 동전 던지기 횟수를 계속해서 늘리다 보면 결국에는 반반의 비율에 가까워질겁니다.  </p>
<p>그리고 이게 우리가 통계에서 말하는 큰 수의 법칙입니다.</p>
<p>즉, <strong>무작위 실험은 큰 수의 법칙에 기초하여 처리 여부를 배정</strong>하는 것입니다. </p>
<p>만약 무작위로 처리 여부를 부여한다면, 그리고 각 그룹의 수가 크다면 대조군과 처리군에서 Treatment를 제외한 다른 모든 변수들의 값들이 그룹 측면에서는 비슷해질겁니다.</p>
<p>따라서 두 그룹의 차이를 Treatment 때문이라고 생각할 수 있게 되는 것입니다.</p>
<p>다시 말해서 무작위 실험이 인과추론의 Gold standard라고 여겨지는 이유는 Treatment에 대한 Random assignment는 _ <strong>Ceteris Paribus</strong> _를 달성할 수 있는 Counterfactual를 만들 수 있는 가장 효과적인 방법이기 때문입니다. </p>
<p>그래서 비교 가능한 대조군을 통해서 우리가 Counterfactual를 대신함으로써 결과적으로 Selection bias를 가장 효과적으로 제거할 수 있는 방법이기 때문입니다.  </p>
<p>그렇기 때문에 이런 이유가 무작위 실험에 기초한 Randomized Controlled Trial가 Gold Standard라고 불리는 이유입니다.</p>
<h2 id="rct-체크-사항---quality-of-randomization">[RCT 체크 사항 - Quality of Randomization]</h2>
<p>무작위 실험에서 가장 중요하고, 먼저 체크해야할 부분은 바로 <strong>무작위 배정이 얼마나 잘 되었는지</strong> 확인하는 것입니다.</p>
<p>예시로, </p>
<p>대학교 교실에서 노트북이나 태블릿을 허용하는 게 실제 학생들의 성적에 어떤 인과적인 효과가 있는지 분석하는 무작위 실험 연구가 있다고 해봅시다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/902dead6-8901-4d01-b7a4-cdfb946137d8/image.png" alt=""></p>
<p>경제학 수업에는 50개의 Class가 있고 그 수업을 수강하는 726명의 학생을 대상으로 각 클래스를 3개의 그룹으로 배정합니다. </p>
<p>첫번째 그룹은 자유롭게 노트북과 태블릿을 허용한 그룹, 두번째 그룹은 일부 제약을 두고 노트북과 태블릿을 허용한 그룹, 마지막 그룹은 교실 내에서의 컴퓨터나 태블릿 사용을 전면 금지한 그룹입니다.</p>
<p>여기서 목표로 삼고 있는 Treatment는 노트북, 태블릿 사용 여부고, 메인 결과는 학기말 성적으로 디자인한 전형적인 현장 실험 연구입니다. </p>
<p>이때 Treatment를 제외한 나머지 변수를 모두 평균적으로 같게 해야합니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/96826113-4e4d-4407-a164-5d5bcd98a7cd/image.png" alt=""></p>
<p>이를 표로 각 변수들을 확인해보았을 때 그룹별로 큰 차이가 없음을 알 수 있으며,</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/08d57e59-5b35-4f96-ab9c-431e9644ad0d/image.png" alt=""></p>
<p>Treatment 변수는 각 그룹별 차이가 잘 드러남을 확인할 수 있습니다.</p>
<p>그 결과는 다음과 같이 나타났습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/3dc34a2f-1c5b-47f2-a099-73f457c2a5d9/image.png" alt=""></p>
<p>이때 <strong>Treatment 이외의 변수들은 메인 결과에 영향을 줄 수 있지만, Treatment 효과 자체에는 거의 영향이 없어야 한다.</strong></p>
<p>다시 말해 <strong>random assignment가 제대로 됐다면, 이렇게 통제 변수를 추가했을 때도 Treatment 효과가 큰 변화가 없어야 합니다.</strong></p>
<h2 id="rct-체크-사항---stuva">[RCT 체크 사항 - STUVA]</h2>
<p>예를 들어 <strong>대조군에서의 결과가 처리군에 의해 어떤 방식으로든 간접적으로 영향을 받으면 안됩니다.</strong></p>
<p>만약 재택근무 자원자를 받은 후 자원자에서 무작위 배정을 통해 재택근무할 직원을 뽑는다면, 뽑히지 않은 직원들은 해당 실망감에 업무 생산성이 낮아졌을 수도 있습니다. </p>
<p>그러니깐 이런 가능성에 대해 배제하기 위해 여러가지 간접적인 테스트들을 수행해야하고 실제로 해당 연구에서도 그런 것들을 보여줬습니다.</p>
<p>또 다른 사례를 살펴보면 <strong>우버에서 이제 현금 결제에 관한 현상 실험</strong>을 했을 때,</p>
<p>무작위로 배정된 기사들에게 현금결제인지 아닌지에 대해 미리 표시해줄 때 이게 기사님들에게 어떤 영향을 미치는지 확인해보고자 했습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/920ff3cb-18e1-4c56-87a7-77f5c77152d9/image.png" alt=""></p>
<p>하지만 왼쪽 그림을 봤을 때 실험군에서 7월 이후 세금을 더 아낄 수 있는 현금 결제를 더 선호하기 때문에 카드결제 고객을 거부하는 비율이 늘어났고, 이에 따라 카드 결제와 현금 결제를 구분하지 못하는 대조군에 카드 결제 고객들이 늘어나게 되었다는 것을 파악할 수 있습니다.</p>
<p>그러니깐 <strong>두 그룹은 무작위로 배정이 되어서 한 그룹에만 Treatment가 배정이 되었다고 하더라도 대조군에서의 결과가 지금 실험군에 영향을 간접적으로 받고 있음을 확인</strong>할 수 있습니다. </p>
<p>그러므로 이게 전형적으로 <strong>STUVA에 위배되는 상황</strong>입니다.
따라서 이 상황에서는 대조군과 실험군에서 인과적인 효과를 제대로 추정할 수 없게 되는 것입니다.</p>
<p>그러므로 이런 경우에는 실험 디자인에 대해 새롭게 생각해봐야할 필요가 있습니다.</p>
<h2 id="rct-체크-사항---imperfect-compliance">[RCT 체크 사항 - Imperfect Compliance]</h2>
<p>마지막으로 Imperfect Compliance입니다.</p>
<p>아무리 연구자가 실험 수행해서 Treatment를 결정하고 배정한다고 해서 무조건 실험 참가자들이 연구지침에 잘 따르고 Treatment를 제대로 받았는지 여부까지 연구자가 직접 관여하기 어렵습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7582d434-40ce-4d89-bb87-4fee6f17ff77/image.png" alt=""></p>
<p>따라서 만약 Treatment만 신경써서 연구한다면 실제 Treatment를 받았을 때의 효과와는 다를 수도 있습니다.</p>
<p>이런 상황을 이제 Imperfect Compliance라고 합니다. </p>
<p>이 경우에는 이제 <strong>도구변수를 활용해서 assignment를 잘 따르는 집단, Compliance라는 이 Subsample에서 인과적인 효과를 구하는 Local Average Treatment Effect(LATE) 구함으로써 이 문제를 해결</strong>할 수 있습니다. </p>
<p>그리고 이렇게 <strong>도구변수를 활용해서 LATE를 계산한 대표적인 연구가 2021년 노벨 경제학상을 받은 연구의 대표적인 성과</strong>이기도 합니다. </p>
<h1 id="rct의-한계">[RCT의 한계]</h1>
<p>지금까지 RCT를 살펴보았는데, 그럼 한계점은 무엇이 있을까요?</p>
<h2 id="specifically-defined-treatment">[Specifically Defined Treatment]</h2>
<p>첫번째는 RCT가 특정 유형의 Treatment에 대한 인과적인 효과만을 추정한다는 것이 중요하면서도 하나의 단점으로 작용합니다.</p>
<p>인과추론을 할 때는 연구자가 관심있는 Treatment가 무엇인지, 그것의 Potential Outcom이 어떻게 정의될 수 있는지 구체적으로 정의하는 것이 굉장히 중요합니다. </p>
<p>예를 들어 &quot;물이 건강에 해로운가?&quot;와 같은 질문은 사실 인과추론에 적합한 질문이 아닙니다.</p>
<p>왜냐하면 물이 어떤 물인지, 어디서 나온 물인지, 어느 정도의 양의 물인지에 따라서 사실 이 <strong>물이라고 하는 원인은 너무나도 많은 다양한 버전일수도 있고, 이에 따라 너무 다양한 버전의 Treatment가 있을 수 있기 때문에</strong> 이들의 결과도 다를 수 밖에 없기 때문입니다.</p>
<p>그러니깐 물의 인과적인 효과라고 했을 때 Treatment가 너무 다양하고 결과도 다르기 때문에 인과효과를 구하기가 어렵고 그게 무슨 의미인지도 말하기가 어렵습니다.</p>
<p>따라서 <strong>인과추론을 할 때는 구체적이어야 하고, Potential Outcome가 의미있게 해석될 수 있는 잘 정리된 Treatment를 디자인</strong>하는 것이 굉장히 중요합니다.</p>
<h2 id="external-validity">[External Validity]</h2>
<p>이어서, 더 중요한 부분은 External Validity에 관한 부분입니다. </p>
<p>사실 <strong>동일하게 정의된 어떤 Treatment를 활용한다고 하더라도 RCT를 통해서 구한 인과적인 효과를 다른 상황에 일반적으로 하는 것은 쉽지 않을 수 있습니다.</strong></p>
<p>연구결과를 일반화하기 위해서는 우리는 Randomization의 두가지 측면을 살펴볼 필요가 있습니다. </p>
<p>우선, RCT가 Treatment를 제외하고 나머지 요인들이 모두 유사한 대조군을 구성할 수 있었던 가장 큰 무기가 바로 Random assignment인데 여기서 이 결과가 Selection bias를 효과적으로 제거함으로써 인과관계를 잘 추론할 수 있다는 사실은 결국 <strong>현재 Sample에 국한된 이야기</strong>입니다. </p>
<p>이 Sample의 효과가 그러면 다른 Sample로 확장이 될 수 있다거나 혹은 전체 집단으로 확장될 수 있게 하기위해선 이 sample이 전체 집단을 대표해야합니다. </p>
<p>그렇기 때문에 이런 Representive Sample을 도출하기 위해서는 또 다른 Randomization이 필요한데, 바로 이 전체 모집단에서의 Random Sampling이 바로 그겁니다.</p>
<p>이렇게 전체 모집단에서 Random Sampling을 하고 나면 우리가 분석하는 이 Sample은 전체 모집단을 대표하고 또 평균적인 특성이 유사할 것이기 때문에 이 Sample에서 구한 인과 효과가 전체 모집단으로 확장될 수 있고 또 모집단 내에 다른 Sample에서 그대로 적용될 수 있다고 우리가 합리적인 가정을 할 수 있습니다. </p>
<p>하지만 일반적으로 이런 Random Sampling은 쉽지 않은 경우가 굉장히 많기 때문에 Random Sampling이 되지 않은 Representive Sample 아니라면 항상 RCT의 결과를 일반화하는 것은 항상 주의를 기울여야 합니다.  </p>
<h1 id="conclusion">[Conclusion]</h1>
<p>인과추론 방법론은 상관관계에서 인과관계를 보다 잘 발라내기 위해서 사실 Internal Validity에 굉장히 초점이 맞춰져 있는 방법이기 때문에 그 반대급부로써, External Validity는 어느 정도 희생이 따를 수 밖에 없고 그것이 가장 큰 한계라고 볼 수 있습니다. </p>
<p>그래서 이러한 한계점을 분명히 인식하고 그래서 본인의 어떤 연구 결과와 인과추론 결과를 과대포장하지 않고 현재 Context에서의 분석결과가 적용될 수 있는 Boundary Condition에 대해서 이야기 하는 게 일반적인 접근 방법입니다. </p>
<p>또 경우에 따라서는 전체 집단으로 일반화에 대한 요구가 많지 않을 수도 있습니다.</p>
<p>아무튼 결론적으로 강조하고 싶은 부분은</p>
<p><strong>Causal Inferenve approach 전반에 대한 위 한계점을 우리는 분명히 인식할 필요가 있는 점</strong>이고, 세상에 완벽한 방법론은 없다는 생각을 해봤으면 좋겠습니다. </p>
<p>인과추론의 가장 치명적인 한계라고 생각하는 부분은 바로 인과추론 방법론으로 다루지 못하는 연구 문제들이 여전히 굉장히 많다는 점입니다. </p>
<p>따라서 <strong>인과추론 방법론에만 너무 맹신하게 되면 인과추론으로 연구될 수 없는 수많은 중요한 문제를 아예 무시</strong>해버릴 수 있고, 또 <strong>모든 연구 문제들을 이런 인과추론의 잣대로만 평가하면서 세상을 이해한다면 어떤 틀에 스스로 제한해버리는 꼴</strong>이 일어날 수 있습니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f0ed2c0e-7743-44ed-8945-6a8587783355/image.png" alt=""></p>
<p>실제로 2021년 노벨 경제학상 수상자 중 한 분이자 어쩌면 현 시점에서 인과추론 분야 연구의 가장 최전선에 있으신 Guido W. Imbens 교수님도 이런 우려에 대해서 깊이 공감을 하고 있고, </p>
<p>그렇기 때문에 <strong>이런 우를 범하지 않기 위해서는 인과추론이 언제 필요한지, 그리고 각 방법론들의 장단점이 무엇인지에 대한 이해와 큰 그림에서 그걸 평가할 수 있는 안목이 필요</strong>하다고 생각합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[UBS Global Real Estate Bubble Index (2023)]]></title>
            <link>https://velog.io/@withs-study/UBS-Global-Real-Estate-Bubble-Index-2023</link>
            <guid>https://velog.io/@withs-study/UBS-Global-Real-Estate-Bubble-Index-2023</guid>
            <pubDate>Sun, 29 Jun 2025 14:58:03 GMT</pubDate>
            <description><![CDATA[<p>저는 여러 경제 보고서들을 틈틈히 읽어보는 편입니다. 
그런데 통계학과를 전공함에도 불구하고, 간혹 처음 들어보는 방법론들이 있습니다. </p>
<p>그래서 하나하나 관심이 가는 방법론을 살펴보다보면 무언가 깨우치는 것이 있을 것 같아서 무작정 이번 시리즈를 기획하게 되었습니다. </p>
<p>그래서 처음 소개할 방법론 시리즈의 주제는 <strong>UBS의 Global Real Estate Bubble Index</strong> 입니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/d22f2379-f15a-4abc-a221-e7882f8a3412/image.png" alt=""></p>
<p>한국은행 2025년 6월 금융안정보고서를 읽어보면서 <strong>&quot;주택시장 위험지수&quot;</strong>가 있다는 것을 알게 되어 2024년 9월 통화신용정책보고서를 살펴보니, 다음과 같이 소개가 되어있었습니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/3b2cf86c-c0d6-4dab-af9f-6eeef18e528b/image.png" alt=""></p>
<p>IMF 방법론을 인용한 서울 아파트 가격 갭 산출도 흥미로워보였지만, 다음에 시리즈에서 다루기로 하고 UBS 방법론을 살펴보기로 하였습니다. 그래서 가져온 것이 바로 <strong>UBS Global Real Estate Bubble Index (2023)</strong>입니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/3dbb7422-3876-4536-9335-fa9945ba89ff/image.png" alt=""></p>
<h1 id="methodology">[Methodology]</h1>
<p><strong>&quot;UBS Global Real Estate Bubble Index&quot;</strong>는 주택 시장의 Fundamental Valuation과 해당 국가나, 경제적 왜곡(대출 or 건설 붐)과 관련지어 도시의 가치를 추적하는 지수입니다. </p>
<p>지수는 값에 따라 다음과 같이 구분됩니다.</p>
<ol>
<li>Depressed(Score Below -1.5)</li>
<li>undervalued(-1.5 to -0.5)</li>
<li>fair-valued(-0.5 to 0.5)</li>
<li>overvalued(0.5 to 1.5)</li>
<li>bubble risk(above 1.5)</li>
</ol>
<p>가격 조정이 언제 일어날지, 일어나기는 할 지 예측할 수는 없기 때문에 여기서 &#39;Bubble Risk&#39;는 큰 가격 조정에 대한 높은 위험이 존재한다는 의미입니다.</p>
<p>지수 산출을 위해 활용되는 지표는 5가지로 정규화되어 가중평균을 통해 지수를 도출하는데 사용되며, 다음과 같습니다.</p>
<ol>
<li>Price-to-Income Ratio
: 주택의 가격이 해당 도시의 평균 소득 대비 얼마나 비싼가를 측정합니다.
UBS는 주로 60m² 아파트를 구입하기 위해 몇 년치 소득이 필요한가로 표현합니다.</li>
</ol>
<ol start="2">
<li><p>Price-to-Rent Ratio
: 주택을 구입할 경우와 임차할 경우를 비교하여, 자가보유의 경제적 타당성을 측정합니다.
비율이 높을수록 임대보다 매입이 비경제적이며, 이는 주택가격이 과대평가되었음을 의미할 수 있습니다.</p>
</li>
<li><p>Mortgage-to-GDP Ratio Change
: 가계가 주택을 구입하기 위해 얼마나 많은 부채(모기지)를 지고 있는지, 그리고 그 비율이 GDP 대비 얼마나 빨리 증가하고 있는지를 봅니다.
급격한 상승은 신용버블 가능성을 시사합니다.</p>
</li>
<li><p>Construction-to-GDP Ratio Change
: 경제에서 주택 건설에 얼마나 많은 자원이 투입되고 있는가를 측정합니다.
지나친 건설 투자 증가도 공급 과잉과 가격 왜곡의 위험을 나타냅니다.</p>
</li>
<li><p>City-to-Country Price Ratio 
: 특정 도시의 평균 주택가격이 해당 국가 전체 평균 가격 대비 얼마나 높은가를 측정합니다.
지역 간 불균형과 특정 도시의 과열 정도를 파악하는 데 유용합니다.</p>
</li>
</ol>
<p>위 1, 2 지표는 도시 수준의 데이터로 이를 통해 Fundamental Valuation을 평가하며 3, 4 지표는 국가 수준의 데이터로 이를 통해 해당 국가의 경제 왜곡(Economic distortion)을 평가합니다. 다만 이 접근법은 버블 현상의 복잡성에 대해서 완벽하게 설명하지는 못합니다. </p>
<p>가중 평균에 사용되는 가중치 산정 방식은 OECD의 <strong>&quot;Handbook on Constructing Composite Indicators(2008)&quot;</strong>에 따라 요인 분석을 사용하여 결정합니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/28a5443d-5a3a-4670-882c-64e30788928b/image.png" alt=""></p>
<p>요인분석(Factor analysis)는 하위 지표들이 공유하는 버블 위험에 대한 공통된 정보를 최대한 포착할 수 있도록 가중치를 부여합니다. </p>
<p>이때, 버블을 유발하는 요인은 도시마다 다르기 땨문에, 도시별로 서로 다른 하위 지표들의 가중치가 도출됩니다. 따라서 국가 단위 변수에 과도하게 가중치가 부여되는 것을 방지하고 도시 간 비교 가능성을 높이기 위해, 각 도시의 가중치는 전체 도시 평균 가중치에서 크게 벗어나지 않도록 제한됩니다.</p>
<p>이렇게 조정된 가중치는 전체 도시들에서의 평균 요인분석 가중치에 근접하게 되며, 최종 지수 산정 과정에 보완적인 역할을 합니다.</p>
<p>도심 인근의 부동산 가격과 임대료는 지역별로 큰 차이를 보이므로, UBS는 추정치를 여러 출처로 교차 검증하고, 매년 갱신하며 재평가합니다. 하지만 데이터 출처의 품질이 다르기 때문에 UBS는 항상 일정 수준의 불확실성 범위(uncertainty range)를 함께 명시합니다.</p>
<h1 id="objective-uncertainty">[objective uncertainty]</h1>
<p>위 단원에서 UBS Global Real Estate Bubble Index를 알아보았습니다. </p>
<p>조사하다보니 생각보다 단순해서 다음번엔 위에서 언급된 OECD(2008)를 한번 읽어봐야겠습니다.
또한, 글이 짧아진 관계로 <strong>objective uncertainty</strong>의 개념과 UBS Global Real Estate Bubble Index와 같은 위험지수 방법론에 대해서도 살펴보겠습니다.</p>
<p><strong>위험(Risk)</strong>이란 미래 경제상황에 대한 불확실성으로 발생하는 결과치의 변동성을 의미하며, 발생확률을 객관적으로 추정할 수 있다는 측면에서 <strong>객관적 불확실성(objective uncertainty)</strong>이라고 합니다.</p>
<p>위험과 유사한 개념으로 <strong>불확실성(Uncertainty)</strong>이 있으며, 불확실성은 과거 경험에 의존한 주관적 확률만을 고려한 것으로 <strong>객관적인 확률분포를 나타낼 수 없다는 점에서 위험과 구별</strong>됩니다.</p>
<p>위험과 불확실성은 이론적 개념에서 차이가 있으나, 측정 시에는 확률분포의 분산(표준편차)을 활용하는 것이 일반적이며, 위험과 불확실성을 측정하는 방법은 설문조사, 키워드 분석, 경제모형 기반 분석 등으로 매우 다양하나 확률분포의 분산(표준편차)을 활용하는 경우가 대다수입니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/da2f9560-94cd-4dd1-9555-c6eaf8cc5a50/image.png" alt=""></p>
<p>불확실성을 <strong>계량화</strong>하는 지수 방법론 내지 연구에서는 가장 일반적으로 <strong>Baker et al(2016)</strong>의 방법론을 많이 사용하며 이를 기초로 하는 EPU, HPU 지수를 위 표에서 확인할 수 있습니다. </p>
<p>다만, 제가 EPU와 HPU를 직접 실증 분석해본 결과 부족한 부분이 있을 수도 있었겠지만 키워드 선정에 지수가 큰 영향을 받으며 이전에 비해 뉴스 기사의 수가 많아진 국가에서는 초반 지수의 움직임이 최근에 비해서 변동폭이 작았던 것을 확인하였습니다. </p>
<p>그래서 사실 요인 분석을 통한 지수 방법론인 UBS 부동산 버블 지수를 알아보고자 했던 것입니다. </p>
<p>그럼 국토연구원이 2023년 발표한 <strong>국토정책 Brief 한국형 부동산 시장 위험지수 개발과 활용 방안</strong>에 대해 살펴보며 UBS의 방법론을 한국에서는 어떻게 적용했는지 확인해봅시다. </p>
<h1 id="국토정책-brief2023">[국토정책 Brief(2023)]</h1>
<h2 id="필요성">[필요성]</h2>
<p>경제·금융분야에서의 국제연계성이 강화되고 있는 상황에서 <strong>부동산분야에서도 국제비교가 가능한 위험측정 수단으로 지수개발이 필요한 실정</strong>이다. 2021년 기준 <strong>한국 가계자산의 73.7%가 부동산자산으로 구성되어 있어 경제구조 내 부동산시장의 영향력은 매우 큰 편</strong>이며, 세계경제라는 큰 틀에서 서로 영향을 주고받기 때문에 국제비교를 통해 한국 주택시장의 상대적 수준을 파악하는 것이 중요하기 때문이다. </p>
<p>부동산을 비롯한 자산버블의 붕괴는 글로벌 금융위기와 같이 대외경제 상황에 영향을 받는 경우가 많고, 개인뿐 아니라 국가경제에도 부정적 영향을 미치므로 정부 차원의 신속한 위험감지 및 정책대응이 필요하다.</p>
<p>따라서, 다양한 위험지수의 측정방법론을 검토하여 국제비교가 가능한 핵심지수를 개발하고, 국내 여건과 정책·심리적 요인들을 반영한 보완적 지수도 함께 개발하여 국내외 주택시장 분석, 시장대응방안 마련,제도개선 등에 활용할 필요가 있다.</p>
<p>이에 국토연구원은 <strong>정량적 분석 기반의 핵심지수인 K-UBS 지수(가칭: 주택시장 위험지수)와 정성적 분석 기반의 보조지수인 K-HPU 지수(가칭: 주택시장 불확실성 지수)를 개발</strong>하고자 한다. </p>
<p>핵심지수는 위험의 이론적 개념과 원인진단 가능성이 뛰어나며, 분석자료의 확보가 용이하고 국제비교가 가능한 UBS의 부동산 버블지수를 벤치마크로 설정하였다. </p>
<p>또한 보조지수는 위험의 이론적 정의, 원인진단 가능성, 정보의 적시성 측면에서 우수한 주택가격 불확실성(HPU)지수를 벤치마크로 설정하여 핵심지수를 보완하고자 했다. </p>
<p><strong>핵심지수는 주택의 시장가치가 역사적으로 관찰가능한 범위를 벗어났는지를 계량적으로 측정</strong>하며, <strong>보조지수는 정책·심리와 같이 정성적인 요인을 바탕으로 주택시장의 불확실성을 측정</strong>한다. </p>
<h2 id="방법론">[방법론]</h2>
<p>하위변수 데이터 선정기준은 <strong>표본대표성, 통계적 측정가능성, 데이터의 신뢰성 및 안정성, 시도단위 자료 획득 가능성, 속보성으로 설정</strong>했다.</p>
<p>이러한 데이터 선정기준을 고려하여 가계금융복지조사(소득)와 KB 주택가격동향조사 (주택매매·임차가격)를 활용하여 <strong>① GDP 대비 건설투자 비중의 변화율, ② GDP 대비 주택담보대출 비중의 변화율, ③ 소득대비 주택가격 비율, ④ 주택수익 비율, ⑤ 전국 대비 해당 도시의 주택가격 비율</strong> 등 총 5개 변수를 적용하여 지수 도출에 활용하였다.</p>
<p>표준화는 UBS 부동산 버블지수와 동일한** Z-score 방법**을 활용하며, 가중치는 표준화된 하위변수 자료를 바탕으로 요인분석을 통해 분기마다 산출하였다.</p>
<p>또한 UBS 방법론에 따라 위기 단계는 과열위험의 경우 1.5 초과, 침체위험의 경우 –1.5 미만으로 설정하였다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a2a7361f-5e33-4230-bb13-0ab73819077c/image.png" alt=""></p>
<h2 id="결과">[결과]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/e1c92614-dadb-4c74-b598-1607fa5fea80/image.png" alt=""></p>
<p>위 그래프는 해당 방법론을 통해 도출된 서울의 K-UBS 지수이다.</p>
<p>이를 통해 다음과 같이 정책에 활용할 수 있다.</p>
<p><strong>국가 간 위험전이 및 원인파악에 활용</strong> 이 연구의 주요 연구목적이라 할 수 있는 주택시장 위험의 국제비교를 위한 지수활용방안을 제시</p>
<ul>
<li>K-UBS 지수와 UBS 부동산 버블지수의 최근 5년 상관관계를 분석하여 모니터링 도시를 선정하고, 전이효과 모형을 바탕으로 세계 주요 도시 간 주택시장 위험의 유입·유출효과를 분석</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/79b27d7d-dfe8-4a23-be00-defd5b877ffc/image.png" alt=""></p>
<p><strong>국내 주택시장 위험경보 포착에 활용</strong> K-UBS 지수와 K-HPU 지수를 이용한 국내 주택시장 분석 및 제도적 기반 강화방안을 제안</p>
<ul>
<li>K-UBS 지수 산출에 적용되는 5개 하위변수와 변수별 가중치를 활용하여지수 상승 및 하락의 원인을 파악하고, 시장상황별 맞춤형 정책수립에 활용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/c800d992-af6e-42df-9da0-f5aca41c29f5/image.png" alt=""></p>
<p><strong>시스템화 방안</strong> 연구에서 개발된 지수를 정책적으로 상시 활용하기 위한 위험지수의 시스템화 방안을 제시</p>
<ul>
<li>지수 산출에 적용되는 정형·비정형 데이터를 수집·분석하여 시각화하고, 관계부처 등과의 실시간 피드백을 통해 정보를 공유하도록 시스템 구축</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/1b96f721-bdc1-47c5-bf73-476b4e17c5ba/image.png" alt=""></p>
<p>또한 국내 주택시장 위험경보 포착을 위해 K-UBS와 K-HPU는 다음과 같이 보완적인 관계로 활용될 수 있다.</p>
<p><strong>주택시장 위험경보 포착방안으로 주택시장 경착륙 위험탐지방안 및 주택가격 변동성 전망 개선방안 등을 제안</strong></p>
<ul>
<li>(주택시장 경착륙 위험탐지방안) K-HPU 지수의 CMAX 값이 0.97을 초과하는 시점을 포함하여 K-UBS 지수가 일정 기간 이상 과열위험 단계를 유지할 경우를 경착륙 위험탐지 가이드라인으로 제안</li>
<li>(주택가격 변동성 전망 개선방안) 주택가격 변화에 대한 당기 예측력 향상을 위해 주택시장 전망 시 K-HPU 지수를 모형에 반영할 것을 제안</li>
</ul>
<p><strong>제도적 기반 강화방안으로 규제지역 해제 시 정량기준 마련, 조기경보시스템 위기 단계 심의근거 및 주택금융정책 조정시점 판단 근거로 K-UBS 지수를 활용</strong></p>
<ul>
<li>(규제지역 해제 시 정량기준 마련) K-UBS 지수가 지속 하락하여 과열위험 단계에서 하향 조정된 경우를 정량기준으로 설정하고, 관련 법령을 개정</li>
<li>(조기경보시스템 위기 단계 심의근거) 위기 단계 심의 시 K-UBS 지수를 활용하도록 부동산시장 조기경보 시스템 운영위원회 규정을 개정</li>
<li>(주택금융정책 조정시점 판단 근거) 안정적이고 장기적인 주택금융정책 운영을 위해 K-UBS 지수를 활용해 주택금융정책 조정시점을 판단</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Causal Inference] DMQA Review]]></title>
            <link>https://velog.io/@withs-study/Causal-Inference-DMQA-Review</link>
            <guid>https://velog.io/@withs-study/Causal-Inference-DMQA-Review</guid>
            <pubDate>Sun, 08 Jun 2025 08:24:11 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 박지용 교수님의 인과추론의 데이터 과학이라 유튜브 채널을 참고하여 작성하였습니다. 많은 좋은 영상 중 Korea Summer Workshop on Causal Inference 2023 시리즈를 참고하여 작성하였습니다. </p>
<p>시리즈를 본격적으로 들어가기에 앞서 김성범 교수님 연구실의 김창현님의 영상에서 인과추론이라는 분야를 전체적으로 잘 정리해주셔서, 이를 참고하여 이번 게시물을 작성하였습니다.</p>
<p>출처: <a href="https://www.youtube.com/watch?v=mxRhFYrQROU&amp;list=WL&amp;index=8&amp;t=617s">참고 유튜브 채널 링크</a></p>
<h1 id="인과추론이란">[인과추론이란?]</h1>
<p>인과추론은 어떤 사건이 다른 사건의 원인이 되었다고 추론하는 것을 의미합니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/d3d329de-a354-4d0a-8d95-3b827c35f721/image.png" alt=""></p>
<p>이때 본 시리즈의 이전 게시물에서 다뤘듯이 상관관계는 인과관계를 의미하지 않습니다.</p>
<p>상관관계는 <strong>통계적 변수와 다른 통계적 변수들이 공변하는 관계</strong>를 의미하며 예측 목적의 연구에서 많이 활용됩니다. </p>
<p>반면 인과관계는 <strong>선행하는 한 변수가 후행하는 다른 변수의 원인이 되고 있다고 믿어지는 관계</strong>를 의미하면 원인 설명 목적으로 많이 활용됩니다. </p>
<p>예를 들어 위 그림에서도 왼쪽 그래프는 모짜렐라 치즈 소비량이고, 토목공학 박사를 취득한 사람의 수인데 상식적으로 아무런 관계가 없지만 상관관계 수치는 매우 높은 것을 확인할 수 있습니다. </p>
<p>이때 우리는 AI가 일반적으로 데이터의 상관관계 패턴을 학습한다는 것에 관심을 가져야합니다. 
AI는 INPUT(X)과 OUTPUT(Y)간 상관관계를 학습하고 이에 기반하여 예측 및 분류 등 task를 수행합니다. 따라서 외부 환경에 따른 데이터의 변화나 패턴 변화가 적은 분야에서는 성능이 뛰어납니다.</p>
<p><strong>그러나 왜? 분류, 예측, 추천의 결과가 나왔는지에 대해서는 궁극적으로 설명하지 못합니다.</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/ad264dde-c05e-4a76-9c29-c2ad29c3bc32/image.png" alt=""></p>
<p>XAI로도 인과관계는 알 수 없습니다. SHAP 기반 변수 중요도는 예측에 중요한 변수로 높은 상관관계를 가지는 변수가 높은 점수를 가집니다.</p>
<p>인과관계를 분석하는 유명한 모델인 마이크로소프트의 EconML로 분석을 하면 예측에 중요한 상관관계여도 인과관계가 없는 경우가 있고, 방향이 반대인 경우도 있음을 확인할 수 있습니다. 반면 Sales Call처럼 상관관계는 없지만 인과관계를 나타내는 경우도 있습니다. </p>
<p>이러한 예시를 통해 <strong>상관관계와 인과관계는 같지 않다</strong>는 사실을 파악할 수 있습니다.</p>
<h1 id="인과관계의-종류">[인과관계의 종류]</h1>
<p>인과관계의 종류는 크게 3가지로 나뉘며 다음과 같은 종류가 있습니다.</p>
<ol>
<li>Randomization (랜덤화추출)</li>
<li>Causal Graphical Models (인과 그래프 모형)</li>
<li>Potential Outcome (잠재적 결과)</li>
</ol>
<p><img src="https://velog.velcdn.com/images/withs-study/post/bf031ee3-8efe-4b7b-978e-17bfb73868e5/image.png" alt=""></p>
<p>그럼 3가지 종류의 분석 방법에 대해 간략하게 알아보겠습니다.</p>
<h2 id="randomization">[Randomization]</h2>
<h3 id="randomized-clinical-test">[Randomized Clinical Test]</h3>
<p><img src="https://velog.velcdn.com/images/withs-study/post/80370c52-be43-4edf-841f-c4903dd945f7/image.png" alt=""></p>
<p>랜덤화 추출 기법은 매우 직관적인 기법으로, 이번 게시물에서는 랜덤화 추출 기법의 Randomized Clinical Test(무작위 임상 시험)에 대해 알아보겠습니다. </p>
<p>Randomized Clinical Test은 현실에서 A/B Test라고 불립니다. 측정하고자 하는 변수 이외에는 모든 것들을 최대한으로 고정하고 확인하고 싶은 변수만 변경하면서 실험하는 방법입니다. 이 기법을 통해 무작위 배정으로 평균적인 효과를 측정할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/065b6ce0-cd6d-41a3-8a60-6daec78931f6/image.png" alt=""></p>
<p>이때 주의할 점을 Netflix의 클릭으로 예시를 들어 설명하자면, 단순히 Product A/B에 대해 클릭률로 판단하는 것이 아니라 통계적 방법을 통해 클릭률을 판단해야한다는 것입니다. </p>
<p>두 집단의 분포는 클릭을 했냐 vs 안했냐의 문제이기 때문에 이항분포를 따른다고 가정할 수 있습니다. 또한 두 집단을 무작위로 추출했기 때문에 같은 분포를 따른다고 할 수 있고, 데이터의 양이 충분하기에 이를 중심극한 정리를 통해 Z 검정통계량을 도출할 수 있습니다.</p>
<p>최종적으로 도출한 Z 검정통계량을 통해 P-value를 구하여 가설검정을 통해 두 집단의 차이가 있는지 확인할 수 있습니다.</p>
<p>따라서 <strong>A/B test를 할 때는 표면적인 결과만 해석하는 것이 아니라 어떠한 가설 검정을 통해서 유효성을 파악해야 한다는 것을 유념</strong>해야 합니다.</p>
<h3 id="multi-armed-banditmab">[Multi-Armed Bandit(MAB)]</h3>
<p>Multi-Armed Bandit에서 Bandit는 카지노의 슬롯머신을 의미합니다. 
<img src="https://velog.velcdn.com/images/withs-study/post/a0d802a8-d998-45a5-9914-aca5b3b5bd03/image.png" alt=""></p>
<p>기본적으로 카지노의 슬롯머신은 모두 당첨 확률이 다릅니다. 이때 이 MAB는 여럿 Bandit를 사용해서 어떤 수익률을 극대화하는 방법입니다. </p>
<p>A/B test는 탐색-수확 tradeoff가 존재하는데, <strong>MAB는 이를 강화학습 기반으로 해결</strong>하고자 하는 방법론입니다.</p>
<p><strong>탐색-수확 tradeoff</strong>는 두 가지 관점에서 살펴볼 수 있습니다.</p>
<p>첫번째는 <strong>탐색 관점</strong>입니다. 
모든 Bandit(A가 만약 더 좋아보이는데 혹시 몰라서 B도 테스트) $\to$ 예상대로 A가 더 좋았다. $\to$ 비용 발생!</p>
<p>두번째는 <strong>활용 관점</strong>입니다.
모든 Bandit를 한두번만 당겨보고 가장 수익률 높은 머신을 선택 $\to$ 신뢰성 문제 $\to$ 만약 테스트를 더 오래한다면??</p>
<p>이 MAB 알고리즘은 다시 세 가지 종류로 나뉩니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/d8e3f8aa-fd1c-4699-84a8-6abd2adac6c3/image.png" alt=""></p>
<p><strong>행동(Action) = MAB에서 선택된 제품 (ex. A안, B안) = 시점 $t$의 행동 = $A_t$
보상(Reward) = 한번의 행동에 따른 수치화된 결과 (ex. 클릭, 구매) = $R_t$
가치(Value) = 행동으로 인한 기대보상 = 시점 $t$에 추정된 가치 = $Q_t(a)$</strong></p>
<p>위와 같이 Notation이 적용될 때 세 가지 알고리즘을 아래와 같이 설명할 수 있다.</p>
<p><strong>1. Greedy 알고리즘</strong></p>
<p>한번씩 해보고 Reward가 가장 좋은 알고리즘을 선택 $A_t = argmax_a Q_t(a)$
: 현재 시점 $t$까지 기대보상 $Q_t(a)$를 최대화하는 Action a 선택</p>
<p><strong>2. Epsilon Greedy 알고리즘</strong></p>
<p>$1-\epsilon$의 확률로 Greedy 알고리즘 $A_t = argmax_aQ_t(a), \epsilon$의 확률로 랜덤하게 선택</p>
<p><strong>3. Upper Confidence Bound(UCB) 알고리즘</strong></p>
<p> Epsilon Greedy는 최적값과 멀어지게 탐색을 과도하게 하는 문제
 따라서, 일종의 신뢰구간인 $N_t(a)$ = 현재 시점까지 행동 a를 한 횟수, $c = Hyperparameter$일 때 </p>
<p>$$
A_t = argmax_a[Q_t(a)+c\sqrt{\frac{ln t}{N_t(a)}}]$$</p>
<p>를 통해 Action을 취함
: 분모에 $N_t(a)$를 넣어서 탐험하지 않은 행동에 가중치 부여</p>
<p>즉, <strong>A/B test는 각각 독립적인 실험을 진행하고 결과가 나타나면 좋은 버전으로 쭉 진행하는 방법이지만, MAB 알고리즘은 시점마다 Action의 비중을 다양하게 조절해가면서 최적의 결과를 추출한다는 차이를 확인할 수 있습니다.</strong></p>
<h2 id="causal-graphical-models">[Causal Graphical Models]</h2>
<p>Randomization은 평균적인 인과 효과만 확인할 수 있을 뿐, 어떤 사람들에게 더 효과적인지 세부적인 정보 확인은 어렵다.</p>
<p>이때 <strong>인과 그래프 모형(Causal Graphical Models)</strong>은 인과 관계를 <strong>Directed Acyclic Grapg(DAG)라는 그래프로 표현하는 방식으로 명확한 인과관계를 파악 가능</strong>하게 해줘 Randomization의 문제를 해결할 수 있는 방법론이다. </p>
<p>Causal Graphical Models은 Bayesian Network라고도 불리며 <strong>변수들의 결합확률 분포를 DAG로 나타낸 모형</strong>으로 딥러닝과 달리 <strong>조건부 확률이 투명하게 공개되므로 &quot;White-Box Model&quot;</strong>라고도 한다.</p>
<p><strong>Bayesian Network B</strong>는 아래 두 가지 요소로 구성됩니다.</p>
<p>$$
G = Directed \ Acyclic \ Graphs (DAG) \</p>
<p>\theta = 조건부 \ 확률\ (Conditional \ probability)의  \ 집합$$</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/50ee4ab7-14b2-4681-b6d5-4b909f091298/image.png" alt=""></p>
<p><strong>$G$는 방향성은 있고, 순환성은 없는 그래프</strong>를 의미한다.
위 그림에서 A~G를 각각 Node라고 하며 화살표를 Edge라고 합니다. </p>
<p>이때 A를 B의 부모라고 하며, B를 자식이라고 합니다. </p>
<p>또한, <strong>A가 B의 원인</strong>이라고 합니다.</p>
<p>이어서, $\theta$는 조건부 확률의 집합으로 조건부 확률의 식(Y가 y로 주어졌을 때 X의 확률)은 다음과 같습니다.</p>
<p>$$
P(X|Y = y) = \frac{P(X,Y = y)}{P(Y=y)} = \frac{P(Y|X)P(X)}{\sum_{x\in X}P(Y|X=x)P(X=x)}$$</p>
<p>이때 $\theta$는 변수 $X_i$의 모든 가능한 값 $x_i$에 대해 
$\theta_{x_i|\prod_{x_i}} = P_B(x_i|\prod_{x_i})$의 확률들 집합을 의미하며, $\prod_{x_i}$는 DAG에서 표현된 $X_i$의 직계 부모의 집합을 의미합니다. </p>
<p>그러므로 <strong>Beyesian Network B는 다음의 결합 확률 분포로 표현 가능</strong>합니다.</p>
<p>$$
P_B(X_1, ..., X_n) = \prod^n_{i=1}P_B(X_i|\prod{X_i}) = \prod^n_{i=1}({\theta_{X_i}|\prod X_i})$$</p>
<p><strong>위 식만으로 이해하기는 어렵기에 예시</strong>를 들자면</p>
<p>만약 $X_1 \to X_2 \to X_3$라는 DAG가 있다고 하면 $X_1$의 직계 부모는 없고, $X_2$의 직계 부모는 $X_1$, $X_3$의 직계 부모는 $X_2$입니다. </p>
<p>그러면 각 $\theta_{x_i}|\prod_{x_i}$는 다음과 같이 나타낼 수 있습니다.</p>
<p>첫번째 확률: $\theta_{x_1}|\prod_{x_1}=P_B(X_1)$</p>
<p>두번째 확률: $\theta_{x_2}|\prod_{x_2}=P_B(X_2|X_1)$</p>
<p>세번째 확률: $\theta_{x_3}|\prod_{x_3}=P_B(X_3|X_2)$</p>
<p>따라서 Beyesian Network B의 결합 확률 분포 식을 이용하면 다음과 같이 DAG의 결합 확률 분포가 계산됩니다. </p>
<p>$$
P_B(X_1, X_2, X_3) \ = P_B(X_1)P_B(X_2|X_1)P_B(X_3|X_1, X_2) \ =
P_B(X_1)P_B(X_2|X_1)P_B(X_3|X_2)$$</p>
<h2 id="potential-outcome">[Potential Outcome]</h2>
<p>마지막 인과관계 분석 방법은 <strong>Potential Outcome(잠재적 결과)</strong>입니다.</p>
<p>인과관계는 <strong>모든 결과를 관측할 수 없는 근본적인 한계</strong>가 존재합니다. </p>
<p>이때 잠재적 결과 방법론은 <strong>관측되지 않은 &quot;가상의 결과&quot;</strong>를 고려해서 <strong>처리 효과</strong>를 계산하는 방식으로 &quot;이렇게 했다면 어땠을까?&quot;를 계산하는 방법론입니다. </p>
<p>그리고 그 처리 효과를 다음 식으로 나타냅니다.</p>
<p>*<em>Treatment Effect(처리 효과): $\tau = Y(1) - Y(0)$ *</em></p>
<p>즉, 이처럼 <strong>인과추론은 Counterfactual(반사실)을 추정하여 인과효과를 추정하는 기술</strong>입니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/90ddb2ed-e0fd-4c14-8c1e-f6dde8452c98/image.png" alt=""></p>
<p>만약 그림의 왼쪽 표와 같은 데이터가 주어진다면, &quot;?&quot;라는 빈칸을 그냥 머신러닝을 이용해서 예측해서 채워넣으면 위의 오른쪽 표와 같이 데이터가 채워지게 됩니다. </p>
<p>그러면 $\tau = Y(1) - Y(0)$을 이용해서 처리효과를 계산할 수 있고 각 처리효과의 평균을 구할 수 있습니다. </p>
<p>그 <strong>평균 값을 Average Treatment Effect(ATE)라고 하며 이는 평균적인 처리 효과를 측정</strong>할 수 있도록 해줍니다.</p>
<p>하지만, <strong>ATE를 바로 사용하는 것엔 문제가 존재</strong>한다. </p>
<p>이는 <strong>Simpson&#39;s Paradox</strong> 때문이다.</p>
<p>Simpson&#39;s Paradox는 각 변수를 고려하지 않고 전체 통계 결과를 유추하다 발생하는 오류다.</p>
<p>예를 들어 처리(Treatment)와 결과(Y)에 모두 영향을 주는 Confounder(교란변수)가 존재한다면 결과가 달라질수도 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/174a9ee5-e7f4-4302-9816-71fad329b83e/image.png" alt=""></p>
<p>위 경우라면 문제가 없을 수 있다. 하지만 교란변수가 존재한다면 아래와 같이 결과가 달라질 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/352d75a5-5bbf-4353-8335-f689ac36f463/image.png" alt=""></p>
<p>그렇다면 <strong>교란변수를 고려해줄 수는 없을까??</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/920019f7-5688-40b7-9c93-30b471b88b73/image.png" alt=""></p>
<p>그 방법이 바로 <strong>Conditional Average Treatment Effect(CATE)</strong>입니다.</p>
<h3 id="meta-learner">[Meta learner]</h3>
<p>&quot;Meta-learners for Estimating Heterogeneous Treatment Effects using Machine Learning(2019)&quot;를 보면 머신러닝을 통해 CATE를 추정할 수 있습니다.</p>
<p>Meta learner는 크게 T-learner, S-learner, X-learner가 있습니다.</p>
<p><strong>T-learner</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/edc16446-d885-4c3a-98ab-ae55283f313d/image.png" alt=""></p>
<p>T-learner는 Two Model이기 때문에 T-learner라고 불리며 처리를 받지 않은 개체와 처리를 받은 개체를 각각 다른 모형 M을 사용해서 학습하고 이들의 차이로 CATE를 추정합니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/528e6409-4139-4594-87ad-834b402626ed/image.png" alt=""></p>
<p><strong>S-learner</strong></p>
<p>이어서 S-learner입니다. S-learner는 Single Model이기 때문에 S-learner라고 불립니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/17af673d-c3f2-4db0-8e5c-9ed2ce6c7cbb/image.png" alt=""></p>
<p>Y를 반응변수로 두고 처리여부를 같이 설명변수로 설정하여 모형 M을 학습시킨 후, W=1일 때의 추정값에서 W=0일 때의 추정값의 차이로 CATE를 추정합니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7e59f442-11cd-4dc4-9324-59fe3fbb020a/image.png" alt=""></p>
<p><strong>X-learner</strong></p>
<p>마지막으로 X-learner입니다. X-learner는 Cross라는 의미에서 X-learner라고 불립니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/c716ba52-14c8-4e68-936f-32fa346d9c89/image.png" alt=""></p>
<p>방법론은 다음 4가지 과정을 통해 구성됩니다.</p>
<ol>
<li><p>T-learner 처럼 처리를 받은 개체와 받지 않은 개체를 나누어 $\hat{u_0}$, $\hat{u_1}$을 계산 $\to$ first stage</p>
</li>
<li><p>이 모델의 예측값을 다시 반사실로 사용하여 X와 차이를 학습 $\to$ CATE 0, CATE 1</p>
</li>
<li><p>마지막으로 CATE에 가중평균 g(x)을 곱하여 CATE Final 계산</p>
</li>
<li><p>T-learner이 가지고 있는 대상군, 대조군 사이의 데이터 양의 차이를 해결</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/withs-study/post/5eb2fd87-68ca-4627-83b7-7d69b3dede94/image.png" alt=""></p>
<h1 id="conclusion">[Conclusion]</h1>
<p>AI 모델은 데이터의 패턴을 파악하여 상관관계를 학습하는 task에는 뛰어난 성능을 보여주지만 왜 그런 결과가 나왔는지 원인을 밝히는 데에는 아직 많은 한계가 존재한다. </p>
<p>이를 위해서는 상관관계가 아닌 인과관계를 추론할 주 알아야 하며, 최근에는 ML/DL을 활용하여 인과를 추론하는 연구가 활발하게 진행되고 있다. </p>
<p>그 외에도 DID(이중차분법)이나 SCM(통제집단합성법)과 같은 통계적인 기법들도 많이 사용한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Causal Inference] Week 2 - Potential Outcome Framework]]></title>
            <link>https://velog.io/@withs-study/Causal-Inference-Week-2-Potential-Outcome-Framework</link>
            <guid>https://velog.io/@withs-study/Causal-Inference-Week-2-Potential-Outcome-Framework</guid>
            <pubDate>Sun, 01 Jun 2025 09:39:11 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 <strong>박지용 교수님의 인과추론의 데이터 과학</strong>이라 유튜브 채널을 참고하여 작성하였습니다. 많은 좋은 영상 중 <strong>Korea Summer Workshop on Causal Inference 2023</strong> 시리즈를 참고하여 작성하였습니다. 공부하는 과정이기에 부족한 점이 있다면 알려주시기를 간절히 바랍니다.</p>
<p>출처: <a href="https://www.youtube.com/watch?v=F-oPi3Zp2ak&amp;list=PLKKkeayRo4PUyqxgszL-biEZOOA9j61HT">참고 유튜브 채널 링크</a></p>
<p>빅데이터 시대에 접어들면서 AI가 개발되고 많은 분들이 머신러닝을 배우고 있습니다. 그러면서 함께 떠오른 것이 <strong>상관관계</strong>의 중요성입니다. Prediction 중심 모델과 빅데이터라는 대수의 법칙은 인과관계보다 상관관계만 있어도 충분히 좋은 모델링을 할 수 있다는 생각이 퍼지게 만들었습니다. </p>
<p>물론 이는 부정할 수 없는 사실입니다. 하지만 모든 연구 주제에서 그렇다고 할 수 있을까요?</p>
<p><strong>만약 어떠한 일에서 원인을 찾아야 한다면 상관관계에 있는 요인을 수정한다고 해서 해결할 수 있을까요?</strong> 당연히 아닙니다. </p>
<p>그래서 이번 시리즈는 인과관계를 다루는 분야이자 제가 생각하기에 현재 통계학이라는 분야에서 가장 트렌디한 분야, <strong>Causal Inference</strong>를 가지고 왔습니다. 재밌게 글을 읽어주셨으면 좋겠습니다.</p>
<h1 id="potential-outcome-framework">[Potential Outcome Framework]</h1>
<p>우리는 다음 게시물에서 <strong>무작위 실험(Randomized Controlled Trual)</strong>에 대해 다루고자 한다. </p>
<p>이때 무작위 실험과 같은 실험적 사고방식이 사실 Design-based approach의 가장 핵심이라고 볼 수 있다. </p>
<p>하지만 <strong>무작위 실험이 왜 인과추론에서 기준점이 될 수 있을까???</strong></p>
<p>이 질문에 대답하기 위해서는 이번 게시물에서 다룰 Potential Outcome Framework(잠재적 결과 프레임워크)에 대한 이해가 필수적이다. </p>
<p>우리가 어떤 효과를 검증할 때 가장 많이 하는 것이 바로 비교다. 
이때 문제는 &quot;<strong>무엇</strong>과 비교하는냐&quot;이다.</p>
<p>이런 관점에서 <strong>Potential outcome Framework는 우리가 인과관계를 정의하고 측정할 때 어떤 대상과 비교를 해야 하는지에 대한 명확한 가이드를 제시하는 역할</strong>을 한다고 이해할 수 있다. </p>
<p>여기서 가장 핵심이 되느 개념이 바로 <strong>반사실, Counterfactual(&quot;What if the treatment was not applied?&quot;)</strong>이다.</p>
<p>말그대로 반사실이란 개념은 Potential Framework, 잠재적 결과에 관한 것이다. </p>
<p>예를 들어 어떤 특정 Treatment, 특정 원인이 있다고 생각을 해보면 만약 &quot;해당 Treatment가 없었다면? 있었다면?&quot;과 같은 <strong>특정 Treatment의 인과적인 효과에 대해 잠재적인 결과의 차이로서 정의하고 측정할 수 있다고 보는 관점이 바로 이 Potential Outcome Framework</strong>다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/035d9fe3-1f46-4594-a761-605bd65d4bbf/image.png" alt=""></p>
<p>그러므로 만약 <strong>운동의 효과를 측정하고자 한다면</strong> 현재의 몸 상태나 내 친구도 아니고 내 과거도 아니고 바로 <strong>내가 만약 운동을 하지 않았더라면 있었을 잠재적인 나의 몸 상태와 비교</strong>를 해야만 우리가 제대로 된 비교를 할 수 있는 거고 운동의 인과적인 효과를 측정할 수 있다고 주장하는 것이다.</p>
<p>그리고 이때 이 <strong>잠재적인 결과를 우리는 &quot;Counterfactual&quot;이라고 하고 이 &quot;Counterfactual&quot; 개념이 바로 Potential Outcome Framework가 인과관계를 정의하는 방식</strong>이라고 볼 수 있다.</p>
<h2 id="fundamental-problem-of-causal-inference">[Fundamental Problem of Causal Inference]</h2>
<p>이때 다음과 같은 질문이 따라올 수 있다. </p>
<p>잠재적 결과와 비교하는 것도 이해되고, 직관적이며 인과적인 효과를 분석하는데에서도 굉장히 합리적인 것은 알겠는데, <strong>문제는 현실에서는 그런 비교가 불가능하지 않나?</strong></p>
<p>자, 어떤 Treatment에 대해서도 두 가지의 Potential Outcome Framework이 있을 것이다.</p>
<p>하지만 현실에서는 두 가지의 잠재적인 결과 중에 하나만 현실에서 나타나고, 한가지의 결과만 우리는 관찰가능하다. </p>
<p>이를 <strong>&quot;Fundamental Problem of Causal Inference</strong>라고 부른다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/4079f772-1e1b-4939-81bb-ae3b55942b99/image.png" alt=""></p>
<p>만약 Causal Inference 시리즈의 이전 게시물인 반려동물과 우울증의 관계 사례에서도 우리가 반려동물을 키우는 사람들과 키우지 않는 사람을 직접 비교할 때 만약 우울 성향이 높은 사람들이 반려동물을 키우는 경향성이 높다고 한다면 애초에 이 비교가 공정하지 않을 수 있다.</p>
<p>다시, Potential outcome 관점에서 생각해보면 반려동물 입양 후에 우울증 성향과 반려동물을 입양하지 않았을 경우의 Counterfactual을 비교를 할 때만 비로소 반려동물이 우울증 감소에 미치는 영향을 제대로 분석할 수 있다는 것을 이해할 수 있다.</p>
<p>왜냐하면 특정 사람에 대한 Counterfactual를 구하는 것은 굉장히 어렵기 때문이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f5408e80-c83a-4905-b665-f0f53ffd9716/image.png" alt=""></p>
<p>하지만! </p>
<p>만약 어떤 Treatment 그룹(처치군: Subject 1, 2) 전체를 놓고 본다면 전체의 어떤 평균적인 특성을 생각할 수 있고 한 개개인의 Counterfactual를 구하는 것은 어렵겠지만 어떤 한 집단의 평균적인 특성에 유사한 Counterfactual은 상대적으로 용이하게 유추할 수 있다고 생각할 수 있다.</p>
<p>그렇기 때문에 우리는 이 평균적인 인과관계의 효과는 상대적으로 수월하게 추정해볼 수가 있다.</p>
<p>이런 관점에서 인과추론 분야에서 가장 기본이 되는 추정이 바로 <strong>Average Treatment Effect(ATE)</strong>다.</p>
<p>ATE는 처치군이 Treatment를 받지 않았다면 있었을 Counterfactual과 Controlled Group(대조군)에서 만약 Treatment를 받았다면 있었을 Counterfactual, 이것들을 모두 고려해서 이 <strong>처치군과 대조군 모두의 평균적인 효과를 ATE</strong>라고 한다. (즉 위 표의 모든 빈칸을 채웠을 때 비교)</p>
<p>그리고 이때 <strong>처치군의 효과만(처치군의 빈칸만) 구하면 ATT(ATE on the Treated), 대조군의 효과만 구하면 ATU(ATE on the Untreated)</strong>라고 한다.</p>
<p>이렇듯이 ATE로 평균적인 효과를 구할 수 있겠지만 사실 진짜 궁금하고 현실에서 더 유용할 수 있는 것은 개개인에 대한 인과적인 효과인 <strong>Individual Treatment effect(ITE)</strong>이다. </p>
<p>그래서 자연스럽게 인과추론의 최종 목표는 ATE에서 ITE로 가는 데에 있고 그래서 완벽하게 개인화된 건 아니더라도 몇 가지 특성에 따라서 인과적인 효과가 다른 거를 측정할 수 있는 방향으로 인과추론 분야가 발전해나가고 있다.</p>
<p>이때 이런 성별, 나이와 같은 <strong>특성에 따른 인과적인 효과를 Conditional ATE(CATE) 또는 Heterogeneous Treatment effect(HTE)</strong>라고 한다. 이 부분은 나중에 다룰 게시물에서 자세하게 설명하겠다.</p>
<p>정리하면 Potential Outcome Framework는 인과관계를 어떻게 정의할 지 명확한 틀을 제시함으로써 그것의 문제가 무엇인지 그리고 그걸 해결하기 위한 전략이 무엇인지를 명확하게 보여준다. </p>
<h2 id="selection-bias">[Selection bias]</h2>
<p>위 설명을 통해 개념적으로는 인과추론이 이해가 되었을 겁니다. </p>
<p>하지만 아직 몇가지 생각할 점이 더 있습니다</p>
<p>우리가 인과적인 효과를 추정하기 위해 필요로 하는 것은 Treatment에 따른 잠재적인 결과, Counterfactual이다. 하지만 현실에서 우리가 관찰가능한 건 실제 Treatment를 받지 않은 대조군 뿐이라는 것이다. </p>
<p>즉, <strong>인과추론의 여러 고려사항 중 하나는 처치군과 대조군이 같지 않다는 것이다.</strong></p>
<p>따라서 우리는 Counterfactual에 가장 가까운 대조군을 찾아야만 한다. 그리고 이렇게 처치군과 대조군이 다르다는 문제를 Selection bias(선택편향)라고 한다. </p>
<p>왜 선택편향이라는 이름으로 부르냐면 우리가 실험을 진행할 때 임의대로 배정을 하지 않는다면 개개인들은 각자의 이유로 Treatment를 받을지 말지를 선택한다. 이때 연구자 입장에서는 그 이유를 알 수가 없다.</p>
<p>즉,<strong>Treatment 여부 말고도 그 결정을 내리는 데에 있어서 여러 방면에서 특성이 다를 수 밖에 없고 그렇기에 이를 선택편향</strong>이라고 한다.</p>
<p>또한 이렇게 Treatment를 선택할지 말지 이런 선택이 다양한 요인에 얽혀서 내생적으로 결정된다는 측면에서 이를 <em>endogeneity</em> 라고 한다.</p>
<p>그러므로 선택편향이나 endogeneity에 따라서 처치군과 대조군에 있는 두 그룹에 있는 사람들의 특성이 다를 수 밖에 없다는 걸 선택편향이라고 하며 이런 <strong>선택편향 때문에 서로 차이가 크다면 단순 치환으로는 제대로 설명되지 않으며 비교가 불가능하다.</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f3283d16-59b7-4f0e-ab0c-c1aee88c7ee8/image.png" alt=""></p>
<p>그래서 <strong>인과추론 문제를 위해서는 처치군과 대조군의 특성을 비슷하게 만들어서 결과적으로 이 선택편향을 없애야 한다.</strong> 이런 <strong>조건을 라틴어로 <em>Ceteris Paribus</em> 라고 한다.</strong></p>
<p>다시 말해 <strong>대조군이 Treatment를 받지 않았다는 조건을 제외하고 나머지 특성에서 처치군과 모두 평균적으로 비교가능한 상태, 이를 <em>Ceteris Paribus</em> 라고 한다</strong>는 것이다.</p>
<p>이는 인과추론에서 매우 중요한 대원칙이라고 할 수 있다.</p>
<p>이 <em>Ceteris Paribus</em> 를 만족할 때만 비로소 우리는 이 Counterfactual로 대신할 수 있는 거고 그렇게 해야만 처치군과 대조군의 차이를 통해서 ATT를 구할 수 있게 되는 것이다.</p>
<h1 id="stuva">[STUVA]</h1>
<p>인과추론에서 <strong>Potential Outcome Framework가 성립하기 위한 기본 가정이지만 가장 많이 간과되는 것 중 하나가 바로 Stable Unit Treatment Value Assumption(SUTVA)이다.</strong></p>
<p>이는 두 개의 가정을 하나로 합쳐놓은 가정으로 첫번째 가정은 <strong>Counterfactual Consistency</strong>이다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7f7ea4bb-1137-4252-8c9e-5cdd38d4fa58/image.png" alt=""></p>
<p>Potential Outcome Framework에서 엄밀히 Causal effect는 이 Potential Outcome들의 차이로 정의된다. 다시 말해 <strong>Treatment가 있을 때 Potential Outcome하고 없을 때 Potential Outcome의 차이가 바로 Causal effect라고 정의된다는 의미</strong>입니다. </p>
<p>그런데 우리가 사실 Causal effect를 추정할 때는 다시 돌이켜보면 Treatment를 받은 실제 Outcome가 있고, 그리고 만약 Treatment를 받지 않았을 경우의 잠재적 결과가 있고 그 차이를 이용하여 우리가 인과적인 효과를 구할 수 있는 건데 우린 이 Counterfactual을 지금 구할 수가 없다.</p>
<p>그렇기 때문에 우리는 <em>Ceteris Paribus</em>를 만족하는 이 대조군을 통해서 대신 추정함으로써 인과적인 효과를 실질적으로 이제 추정을 할 수 있었다. </p>
<p>근데 이게 성립하려면 한 가지 조건이 더 필요하다. </p>
<p>그건 바로 <strong>Treatment가 있을 때의 잠재적 결과가 관찰된 Observed Outcome과 같아야 한다는 가정이고 이것을 이제 Consistency라고 한다.</strong></p>
<p>앞에서 인과추론은 결국 원인에 대해 개입함으로써 결과를 내려고 하는 분야이기에 원인 변수가 manipulability 해야한다는 것이 중요하다고 언급했는데, <strong>manipulability가 없는 변수(ex. 비만 - 정도의 차이지, 1 or 0 상태로 명확하게 나눌 수 없음)를 원인변수로 고려한다면 특히 이 Counterfactual Consistency에서 문제가 발생할 수 있다.</strong></p>
<p>예를 들어 비만의 경우 비만일 때의 건강 상태와 비만이지 않을 때 잠재적인 건강 상태를 비교해야 하는데, 사람들이 비만이 될 때는 다양한 원인이 존재할 수 있습니다. 야식을 먹는다거나 칼로리가 높은 식단을 먹는다거나 운동을 전혀 하지 않는다거나 그런 다양한 이유가 있을 수 있겠죠.</p>
<p>그렇게 서로 다른 이유로 비만이 된 사람들에게서 관찰되는 이런 Observed outcome, 그들의 건강 상태는 각각 다를 겁니다. </p>
<p>상식적으로도 야식을 먹어서 비만이 된 사람과 운동 부족으로 비만이 된 사람들의 건강 상태는 다르다는 것은 쉽게 예상이 가는 부분입니다.</p>
<p>다시말해 각자 다른 원인에 의해서 비만이 된 사람들이 있을 수 있기 때문에 그 원인에 따라서 그 사람들의 관찰되는 결과는 다를 수 밖에 없습니다. </p>
<p>그러므로 <strong>Counterfactual Consistency</strong>에 위배된다는 것이다. 따라서 manipulable하고 그에 따른 Counterfactual과 그리고 잠재적 결과를 명확하게 정의할 수 있는 이런 Treatment를 디자인을 하는 게 이 <strong>Counterfactual Consistency</strong> 측면에서 굉장이 중요하다.</p>
<p>두번째 가정은 <strong>No Interference</strong>이다. </p>
<p>이는 각자의 잠재적 결과가 서로 간섭과 영향이 없어야 한다는 것이다. 쉽게 말해 Treatment를 받은 사람의 결과와 Treatment를 받지 않은 사람의 결과는 전혀 관련이 없고 그들에게서 영향도 받지 않아야 된다는 거고 그 반대도 마찬가지라는 것이다. </p>
<p>그리고 <strong>Counterfactual Consistency</strong>와 <strong>No Interference</strong>를 합쳐서 <strong>Stable Unit Treatment Value Assumption(SUTVA)</strong>라고 한다. </p>
<p>이는 Potential Outcome Framework의 기본 가정이지만 간과하기 쉽기 때문에 주의할 필요가 있다. </p>
<h1 id="att-atu-and-ate">[ATT, ATU and ATE]</h1>
<p>앞에서 ATE, ATU, ATT의 차이를 개념적으로 한번 짚어봤습니다. </p>
<p>그러면 앞으로 인과추론을 배우면서 구하게 될 Causal effect, 인과적인 효과는 과연 ATE일까? ATT일까?</p>
<p>이 부분도 상당히 간과하는 부분이지만 굉장히 중요한 부분이다. </p>
<p>우리가 관찰 가능한 결과를 causal effect와 selection bias로 분리하면 이런 차이를 이해하는 게 훨씬 더 수월하다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/34fc3e28-5362-422d-a2ad-a5b167e45de2/image.png" alt=""></p>
<p>사실 우리는 이론적으로 필요한 것은 Counterfactual이다. 하지만 실제로 관측 가능한 건 처치받은 처치군과 처치 받지 않은 대조군의 결과이다. 하지만 해당 식을 정리하면 <strong>관찰되는 처치 효과는 Causal effect와 Selection bias의 합</strong>이라는 사실이 도출된다.</p>
<p>그런데 만약에 대조군과 처치군이 비슷하다면 선택편향 값이 무시할 수 있을 정도로 작아지고 그럼 우리가 관찰한 효과가 Causal effect와 같아지게 되는 것이다. </p>
<p>그럼 이제 우리가 여기서 구한 <strong>Causal effect</strong>란 무엇일까? 이게 ATE일까?</p>
<p>그 해답은 역시 위의 식에 있다.</p>
<p>위 식을 보면 그룹에서 Treatment를 받았을 때 결과와 Counterfactual의 차이를 지금 구할 수 있다. 그러니깐 여기서 사실 말하는 Causal effect는 처치군에서의 효과를 의미한다. </p>
<p>그러니깐 사실 <strong>우리가 구한 Causal effect는 사실상 ATE가 아니라 ATT라는 것</strong>이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/bae243ac-0652-45b4-bdbb-9fbdb91a5327/image.png" alt=""></p>
<p>결국 <strong>이 Potential Outcome Framework 하에서 우리의 어떤 추정 전략은 대조군의 결과를 가지고 처치군의 Counterfactual를 추론함으로써 이 처치군 내의 인과적인 효과를 추정하는 데에 국한 되어 있었다는 것을 의미한다.</strong> </p>
<p>그렇기 때문에 만약 <strong>반대 상황 즉, 대조군이 Treatment를 받았다면 어땠을지에 대해서 우리가 이 처치군에서의 결과를 활용할 수 있을지에 대해서는 사실 확신할 수 없다</strong>는 것이다.</p>
<p>그러면 우리가 구한 ATT는 언제 ATE와 같아질까요??</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a59ea0ac-227a-46c0-93ac-5bc35aa4cf6c/image.png" alt=""></p>
<p>예를 들어 처치군 샘플이 $\pi$, 대조군이 $1-\pi$만큼 있다고 할 때 ATE는 다음과 같고 이를 ATT를 중심으로 정리하면 위의 두번째 식과 같이 결과가 나오게 된다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/20b13274-4243-4e19-a530-78f11792a48e/image.png" alt=""></p>
<p>여기서 보면 우리가 데이터에서 관측할 수 있는 효과는 ATE와 Selection bias 말고 추가로 하나의 항이 추가된 것을 확인할 수 있다. 즉 그래서 해당 텀은 ATT와 ATU의 차이에 따른 bias이고 해당 bias를 <strong>Differential treatment effect bias</strong>라고 한다.</p>
<p>그러니깐 우리가 비교가능한 대조군을 만들고 선택편향을 없애도 실제로 우리가 추정한 결과가 ATE가 되기 위해서는 Differential treatment effect bias에 대한 항까지 없앨 수 있어야 한다.</p>
<p>그러기 위해서 고려해야하는 건 우선 $\pi \neq 1$이라는 것이다. 이는 두 그룹이 존재해야 하기에 당연한 거고 그러므로 Differential treatment effect bias에 대한 항을 없애기 위해서는 $ATT = ATU$를 만족시켜야 한다.</p>
<p>그래서 결국 <strong>처치군과 대조군의 특성이 매우 유사해서 각 그룹에서 인과적인 결과가 같을 때에만 우리가 비로소 $ATT = ATU$를 만족시킬 수 있고 그럼 우리가 데이터에서 관찰한 처치효과가 ATE가 되는 것</strong>이다. </p>
<p>그러니깐 예를 들어 우리가 실험을 하다가 처치군과 대조군을 반대로 배정하는 경우에도 결과가 동일하게 나와야 한다는 의미이다. 그리고 이는 앞에서 다뤘던 <em>Ceteris Paribus</em> 를 의미하는 것이기도 하다.</p>
<p>그런데 사실 경우에 따라서는 ATT와 ATU가 같지 않을 수 있고 그러면 우리는 ATE를 구할 수가 없게 된다. 그럼 ATT 그 자체로는 의미가 없을까? 그건 사실이 아니다. </p>
<p><strong>ATT만으로 의미가 있는 경우도 많다.</strong></p>
<p>왜냐면 실무적으로 회사에서는 굳이 ATE를 구할 필요가 없을 수도 있다. </p>
<p>예를 들어 회사 입장에서는 모든 고객들에게 동일하게 쿠폰을 제공할 이유는 없다. 그리고 수익성을 극대화하기 위해서는 쿠폰을 활용해서 쇼핑할 의지가 있는 고객들에 대한 쿠폰을 뿌리면 사실 그걸로 충분하다고 할 수 있다. 그러니깐 이런 경우에는 회사의 목적을 생각했을 때 ATE가 아니라 ATT만 알아도 충분하다고 할 수 있다.</p>
<p>따라서 <strong>우리가 인과추론을 통해서 구할 수 있는 효과는 ATT이고, 또 경우에 따라서는 ATT면 충분하기에 하고자 하는 연구나 데이터 분석 목적에 따라서 필요한 게 ATT인지 ATE인지 분명히 하는 것이 굉장히 중요</strong>하다.</p>
<p>그리고 <strong>만약 ATE를 구해야하는 상황이라면 처치군과 대조군 사이 Exchange에 대한 추가적인 검증이 필요</strong>하다. 그리고 이는 Potential Outcome Framework 하에서 가장 중요하다고 강조했던 <em>Ceteris Paribus</em> 가 중요한 이유이기도 하다. </p>
<p>결론적으로 <strong>인과추론을 진행할 때 우리가 실제로 구한 효과가 무엇이고 그 효과가 어느 집단에 적용될 수 있고 또 우리의 분석 목적이 어떤 효과를 구하고 싶은 건지 이런 점들에 대해 목적과 데이터의 특성을 신중하게 고려하는 것이 중요하다는 것을 유의해야 한다.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Causal Inference] Week 1]]></title>
            <link>https://velog.io/@withs-study/Causal-Inference-Week-1</link>
            <guid>https://velog.io/@withs-study/Causal-Inference-Week-1</guid>
            <pubDate>Sun, 04 May 2025 16:04:37 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 <strong>박지용 교수님의 인과추론의 데이터 과학</strong>이라 유튜브 채널을 참고하여 작성하였습니다. 많은 좋은 영상 중 <strong>Korea Summer Workshop on Causal Inference 2023</strong> 시리즈를 참고하여 작성하였습니다. 공부하는 과정이기에 부족한 점이 있다면 알려주시기를 간절히 바랍니다.</p>
<p>출처: <a href="https://www.youtube.com/watch?v=F-oPi3Zp2ak&amp;list=PLKKkeayRo4PUyqxgszL-biEZOOA9j61HT">참고 유튜브 채널 링크</a></p>
<p>빅데이터 시대에 접어들면서 AI가 개발되고 많은 분들이 머신러닝을 배우고 있습니다. 그러면서 함께 떠오른 것이 <strong>상관관계</strong>의 중요성입니다. Prediction 중심 모델과 빅데이터라는 대수의 법칙은 인과관계보다 상관관계만 있어도 충분히 좋은 모델링을 할 수 있다는 생각이 퍼지게 만들었습니다. </p>
<p>물론 이는 부정할 수 없는 사실입니다. 하지만 모든 연구 주제에서 그렇다고 할 수 있을까요?</p>
<p><strong>만약 어떠한 일에서 원인을 찾아야 한다면 상관관계에 있는 요인을 수정한다고 해서 해결할 수 있을까요?</strong> 당연히 아닙니다. </p>
<p>그래서 이번 시리즈는 인과관계를 다루는 분야이자 제가 생각하기에 현재 통계학이라는 분야에서 가장 트렌디한 분야, <strong>Causal Inference</strong>를 가지고 왔습니다. 재밌게 글을 읽어주셨으면 좋겠습니다.</p>
<h1 id="correlation-vs-causation">[Correlation vs Causation]</h1>
<p>본격적인 인과추론에 대해 배우기 전에 상관관계(Correlation)과 인과관계(Causation)에 대해서 알아보겠습니다. </p>
<p><strong>인과관계란?</strong></p>
<p>원인과 결과의 관계로, <strong>어떠한 일에 대해 한 방향으로 작용하며 원인이 결과를 직접적으로 유발하는 관계</strong>를 의미합니다.</p>
<p><strong>상관관계란?</strong></p>
<p><strong>두 변수가 함께 변하는 정도를 나타내는 개념으로 양방향의 의미를 가지며 단순히 함께 증가하거나 감소한다는 의미</strong>만 있을 뿐 A가 B를 유발한다고는 할 수 없는 관계입니다.</p>
<p>인과관계와 상관관계는 현실에서는 파악하기 쉬울 수 있으나 데이터로 살펴볼 때는 구분하기 상당히 어렵습니다. </p>
<p>구분하기 어려운 이유는 크게 3가지가 있습니다. </p>
<p><strong>1. 교란변수(confounder)</strong>
<img src="https://velog.velcdn.com/images/withs-study/post/27933545-8b39-4541-86c6-a351ac666107/image.png" alt=""></p>
<p>교란변수란 독립 변수와 종속 변수에 모두 영향을 미치는 변수로 통제할 수 있으면 문제가 되지 않으나 통제하기 힘든 변수(ex. 개인의 타고난 능력, 부모의 학구열) 등은 인과관계를 밝히는 데에 방해가 될 수 있다.</p>
<p><strong>2. 매개변수</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/92646bbc-5e89-4536-a7a3-2f640d4270e9/image.png" alt=""></p>
<p>매개변수란 독립변수와 종속변수 사이의 관계를 더욱 잘 설명해주는 중간 변수이다. 예를 들어 대학교육과 소득의 관계를 파악하는 분석에서 자녀 수, 직업군 등이 있다.</p>
<p><strong>3. 조절변수</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2b76f7ae-a80a-417f-9cc3-6121094def5f/image.png" alt=""></p>
<p>조절변수란 두 변인간의 관계를 결정하는 제 3의 변인을 말하며 독립변수가 종속변수에 미치는 영향을 강화하거나 완화한다. 예를 들어 대학교육과 소득 간의 관계를 연구할 때 성별이나 생년월일 등이 영향을 미칠 수 있다. </p>
<p>이러한 요인들로 인해 데이터 상에서 인과관계와 상관관계를 구분하기는 매우 어렵다. </p>
<p>그럼 이제 상관관계와 인과관계의 차이와 구분이 어렵다는 점에 유의하며 인과추론에 대해 살펴보자</p>
<h1 id="인과추론의-역사-신뢰성-혁명">[인과추론의 역사: 신뢰성 혁명]</h1>
<p>인과추론의 역사는 1983년 계량경제학 내지 통계학을 비판하는 논문인 
<strong>E. LEAMER의 &quot;Let&#39;s Take the con out of Econometrics&quot;</strong>에서 시작한다. </p>
<p>*&quot;One or several that the researcher finds pleasing are selected for reporting purposes&quot;* (p.36)</p>
<p>위 논문에서는 <strong>통계학적 분석은 여러 가정을 수반하며, 어떤 모델을 사용하는지, 어떤 데이터를 사용하는지에 따라 결과가 달라진다고</strong> 주장하며 통계 모델의 현실 적용 가능성에 대한 <strong>신뢰성</strong>을 의심한다. 그러면서 통계 모델에 대한 민감도 분석을 대안으로 제시한다. </p>
<p>이에 대해 약 30년 후 <em>Joshua D. Angrist et al.</em>는 <strong>The Credibility Revolution in Empirical Economics: How Better Research Design is Taking the con out of Econometrics</strong>에서 반박했다.</p>
<p>LEAMER의 통계 모형 중심의 비판에는 동의하면서도 해결 방법이 통계 모형에 대한 민감도 분석이 아니라 <strong>잘 설계된 리서치 디자인</strong>에 있다는 것이다. </p>
<p>이를 <strong>Credibility Revolution</strong>이라고 하며 이 주장을 통해 연구가 통계 모델 중심에서 리서치 디자인 중심의 분석으로 패러다임 변화가 가속화되었다.</p>
<p>RCT(Randomized Controlled Trial)을 시작으로 Quasi-Experiments(준실험 방법론)가 발전하면서 실험 불가했던 상황을 실험할 수 있도록 하는 방법이 고안되었고 특히 준실험 방법론은 인과추론이라는 분야가 발전하는데 크게 기여했다.</p>
<p><em>David A. Freedman</em>은 전염병 역학의 아버지인 존 스노의 콜레라 원인을 밝혀낸 사례를 이야기 하며 존 스노는 통계 모형이 아닌 기발한 논리로 고안한 자연 실험과 그에 적합한 데이터를 수집한 것이 그의 업적이라고 주장했다. </p>
<p>이를 비유적으로 <em>Shoe Leather</em>이라고 하며 <strong>인과 추론이 가능하게 한 건 리서치 디자인에 기반한 연구와 좋은 데이터를 수집하려는 노력</strong>이라고 주장했다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/de485ce7-e23d-4c92-8d01-e0a4136f8d30/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/21c67d9b-ff14-4b64-820d-5484196658d7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2b164b2d-71ad-40d7-8a59-ca0cfe4b3aeb/image.png" alt=""></p>
<p>이러한 과정으로 발전한 인과추론은 위와 같은 세 분야에서 적용되는 연구가 2010년대에 접어들며 급격히 증가 중이며, 이외에도 다양한 분야에서 현재 인과추론 기법들이 사용되기 시작하고 있다.</p>
<p>특히 2020년대부터 Synthetic control이라는 일명 SCM 방법론이 등장하며 이를 이용한 다양한 연구들이 진행되고 있다.</p>
<h1 id="challenges-in-causal-inference">[Challenges in Causal Inference]</h1>
<p><strong>&quot;Correlation does not imply causation&quot;</strong></p>
<p>상관관계는 인과관계를 암시하는 건 아니다. </p>
<p>이 한 문장이 인과추론 분야에서 어려움을 한 마디로 요약한다.</p>
<p>다시 말해, <strong>데이터에 내재된 Correlation과 Causation을 구별하는 것은 어렵다는 것</strong>이다.</p>
<p>예를 들어 추천시스템이 있다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/34ca1d4d-360b-4b98-99ef-413070c6d1c4/image.png" alt=""></p>
<p>만약 추천시스템이 없더라도 구매할 상품이었다면 이는 Correlation이라고 할 수 있다. 반면 원래 구매할 의향이 없었지만 인플루언서의 추천, 추천 시스템의 추천으로 구매하는 경우는 명확한 인과관계가 있는 Causation의 경우이다. </p>
<p>만약 <strong>추천시스템을 평가하는 데에 있어서 Causation 뿐만 아니라 Correlation까지 포함한다면 추천시스템의 성능이 과대평가될 수 있다.</strong> 하지만 Correlation과 Causation을 데이터에서 구별하는 것은 매우 어렵다.</p>
<p>또 다른 예시로는 반려동물과 우울증과 관련된 연구가 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/63b414be-fe5b-45db-9cee-0378062edd7c/image.png" alt=""></p>
<p>전체적으로 보면 왼쪽 그림과 같이 반려동물을 기르지 않는 집단은 78%의 우울 가능성을 보이지만 반려동물을 기르는 집단은 83%의 우울 가능성을 보인다. </p>
<p>하지만 우울증을 가지고 있는 집단과 그렇지 않은 집단으로 나눠서 반려동물을 기르기 전과 후의 우울 가능성을 조사하면 두 집단에서 모두 우울 가능성이 하락한 것을 볼 수 있다. </p>
<p>다음과 같은 연구는 사실 우울증에 걸린 사람들이 일반적으로 반려동물을 기르는 경우가 많기 때문에 전체적으로 볼 때 반려동물 기르는 사람들의 우울 가능성이 높게 나오는 것이라는 사실을 알려준다.</p>
<p>이를 <strong>심슨의 역설(Simpson&#39;s paradox)</strong>이라고 하며 이러한 현상은 <strong>같은 데이터임에도 리서치 디자인에 따라 다른 결과가 나온다는 것을 의미</strong>한다.</p>
<p>이어서 다른 예시도 살펴보자
<img src="https://velog.velcdn.com/images/withs-study/post/90415ed3-5539-4cf5-8de0-268a86586566/image.png" alt=""></p>
<p>다음과 같은 표가 있다고 하자 Total로 보면 A가 좋지만 경미한 집단과 중증인 집단으로 구분해서 보면 B가 좋다. 이를 심슨의 역설이라고 하는데, 이 경우 Causual Structure에 따라 어떤 treatment가 좋을 지가 달라진다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/12e4b285-ee39-486d-a7b5-92669b4b94d4/image.png" alt=""></p>
<p>만약 S(증상의 정도)가 Treatment와 사망률 사이의 교란변수라면 Treatment B가 더 좋은 결과를 가진다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f79eee56-2f14-43b1-be1d-52fe4e1558b5/image.png" alt=""></p>
<p>반면 S가 매개변수라면 Treatment A가 더 좋은 결과일 수 있다.</p>
<p>이러한 결과는 결국 <strong>Causal structure를 결정하기 위해선 주어진 데이터 이상의 도메인 지식이 필요하다는 것을 의미</strong>한다.</p>
<p>또한 도메인 지식이 인과적 의사결정으로 연결될 수 있도록 하는 체계적인 분석 툴이 필요하다고 볼 수 있다. </p>
<p>즉 정리하자면 데이터 내에서 상관관계와 인과관계를 구분하는 것은 매우 어려우며 이를 구분하기 위한 Causal structure를 결정하기 위해서는 주어진 데이터 이상의 도메인 지식과  도메인 지식이 인과적 의사결정으로 연결될 수 있도록 하는 체계적인 분석 툴이 필요하다는 것이다. </p>
<p>그리고 그 분석 툴이 바로 이번 시리즈에서 배울 <strong>Causal Inference</strong>이다.</p>
<h1 id="can-big-data-and-ai-be-a-remedy-for-causal-inference">[Can Big Data and AI be a Remedy for Causal Inference?]</h1>
<p>Big data와 AI의 발전은 인과추론의 해결책이 될 수 있을까?</p>
<p>Big data 시대에서는 인과분석이 점점 어려워진다. Big data 시대일수록 도메인 지식이 더 많이 필요하고 이를 리서치 디자인으로 반영해야하기 때문이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/3d6cfe62-fa9d-4dee-9902-e3f72503ade7/image.png" alt=""></p>
<p>위 슬라이드의 왼쪽 책에서는 Big Data의 등장으로 대수의 법칙과 같은 효과로 인해 Causation의 중요성이 점점 줄어들고 Correlation의 중요성이 점점 증가하고 있다고 주장한다. 하지만 <em>Naumi and Westreich (2014)</em>는 상관관계와 인과관계가 같지 않다고 비판한다.</p>
<p>또한 결국 ML/AI는 특정 패턴 예측에 특화된 Prediction 모델이기 때문에 Causal Machine의 중요성이 증가한다고 주장한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/53f2c848-e08d-4334-a4c5-c23094d549e1/image.png" alt=""></p>
<p>따라서 염두에 둬야할 것은 <strong>일반적인 ML/AI는 상관관계 기반의 Prediction 방법론이기 때문에 인과관계를 알기 위해서 필요한건 Big Data, ML 방법론, GPU 같은 게 아니라 Causal Model과 Causal Framework가 필요</strong>하다.</p>
<ul>
<li>다만 머신러닝의 필요가 아예 없는 것은 아니며 인과추론 방법이 추가된 머신러닝 모델이 개발 중이다.</li>
</ul>
<p><em>Causal inference tells us what we should estimate and whether we can (identification), whereas statistical models and machine learning models tell us how to estimate it with data (estimation).</em></p>
<p>기본적으로 인과추론이라는 분야는 통계에 뿌리를 두고 있으나, 통계는 데이터로 통계 모형을 추정하는 게 관심사라는 것에서 인과추론과 차이가 있다.</p>
<p>인과추론은 관심있는 인과적 효과를 명확히 정의하고 추정가능한지, 가능하다면 어떤 가정과 조건이 필요한 지를 정의한 후 이런 가정을 충족키시기 위하여 어떤 통계 모델이나 ML을 사용할 것인지를 결정해야 한다. </p>
<p>즉 인과추론의 핵심은 
<strong>&quot;인과추론이 어떤 조건에서 가능한지 여부를 결정하는 Identification과 실제 데이터로 이를 추정하는 Estimation 과정을 분리해서 생각하는 데에 있고 이런 인과추론의 조건을 이해하는 체계적 틀을 제공해주는 것이 바로 Causal Model이나 Causal Framework이다.&quot;</strong></p>
<p>그래서 많은 경우 인과추론의 가능 여부는 데이터를 보기 전에 상당 부분 결정이 되고 이게 우리가 배울 Design based approach의 핵심이다.</p>
<h1 id="when-is-causal-inference-necessary">[When is Causal Inference Necessary]</h1>
<p>인과추론은 언제 필요할까?</p>
<p>인과추론에서 가장 중요한 점은 <strong>원인변수(Treatment)를 조작 가능해야 한다는 것</strong>이다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/ac844779-7c7d-4cb1-850f-df7381bae99c/image.png" alt=""></p>
<p>예를 들어 위 그림에서 Gender와 같은 요소는 조절이 불가하다. 따라서 인과추론 관점에서 적절한 연구 디자인은 아닐 수 있다. (but 연구문제라고 하면 맞다.)</p>
<p>즉, 이럴 때에는 <em>Picture Put in Resume</em>나 <em>Public Policies</em>가 인과추론 관점에서 연구 디자인에 사용될 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/b15bed3e-6ff5-4e24-a0af-2f4038bec775/image.png" alt=""></p>
<p><strong>동일한 현상, 동일한 데이터를 분석하더라고 분석 목적에 따라서 연구가 달라진다는 것에 유의</strong>해야한다. 예를 들어 위 그림에서 Input에 집중하면 인과추론 중심의 연구가 되는 것이고 Output에 집중하면 예측 중심의 연구가 된다. 예측 중심의 연구에서는 굳이 원인을 알 필요가 없으며 예측에만 도움이 되면 되기 때문이다. </p>
<p>또한 <strong>분석의 목적에 따라서 필요한 데이터가 바뀌어야만 하는것도 아니다. 그저 방법론만 바뀔 뿐</strong>이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/8c2ce544-fc53-4817-a1da-16d096f0b462/image.png" alt=""></p>
<p>인과추론이 필요한 예시는 위와 같은 세 가지 주제가 있는데 이들의 공통점은 잠재적인 가정들에 답하기 위한 연구 주제로 Intervention의 여지가 될 수 있는 문제들이라는 것이다. </p>
<p>모든 연구 과제가 인과추론을 필요로 하는 것은 아니기에 예측 중심의 과제면 머신러닝이 더 좋을 수 있다. 그러므로 알맞은 주제에 적합한 방법론을 선택하는 것이 중요하다. 또한 여러가지 방법론을 알고 있어야 다양한 문제에 대응 가능하다는 점을 알아두어야 한다.</p>
<p>좋은 방법론은 좋은 연구에 있어 필요조건이지, 충분조건이  아니다. 좋은 연구, 데이터에 적합한 방법론이 있을 때 좋은 결과가 나오며 오히려 방법론에 너무 경도되면 해당 연구에 (-) 요소가 될 수 있다. </p>
<p>그러므로 인과추론은 원인변수를 조작 가능한 연구에서 분석 목적이 INPUT에 있는 <strong>Intervention-Oriented research</strong>에서 사용될 때 적합한 방법론이며 이 경우 인과추론을 사용한다면 연구에 대해 정확한 결과를 도출할 수 있다는 것이다. </p>
<p>그럼 여기까지 인과추론의 개괄적인 소개에 대해서 알아보았고, 2주차에서 다음 내용을 이어서 다뤄보도록 하겠습니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Generative Adversarial Nets]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Generative-Adversarial-Nets</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Generative-Adversarial-Nets</guid>
            <pubDate>Mon, 17 Mar 2025 15:53:05 GMT</pubDate>
            <description><![CDATA[<p>이번 글에서는 <strong>&quot;Deep learning(2017, MIT)&quot;</strong>를 저술한 딥러닝 창시자 중 한명인 <strong>Ian J. Goodfellow</strong>가 2014년에 발표한 <strong>Generative Adversarial Nets(GAN)</strong>의 첫 논문을 읽고 리뷰하는 시간을 가져보겠습니다.  </p>
<p>관련 링크: <a href="https://paperswithcode.com/method/gan">https://paperswithcode.com/method/gan</a></p>
<h1 id="초록">[초록]</h1>
<p>우리는 &quot;데이터 분포를 따라잡는 <strong>생성 모델(Generative model) G</strong>&quot;와 &quot;어떤 샘플이 <strong>G</strong> 모델이 생성한 데이터보다 실제 훈련 데이터에 속할 확률을 추정하는 <strong>판별 모델(Discriminative model) D</strong>&quot;라는 두 가지 모델을 동시에 훈련시키는 적대적 과정을 통한 generative model을 추정하는 새 프레임워크를 제안한다.   </p>
<p>G를 위한 훈련 절차는 D가 실수할 확률을 극대화하는 것이다. 이 프레임 워크는 <strong>minimax two-player game</strong>과 같다. </p>
<p>훈련 데이터의 분포를 밝혀내는 G가 있고 어디서든 $\frac{1}{2}$의 값을 가지는 D가 있는 G와 D의 임의의 공간에서, 유일한 해가 존재한다.   </p>
<p>G와 D가 다층 퍼셉트론으로 정의되는 전체 시스템에서 역전파를 통해 학습된다. 이때는 Markov chain이나 unrolled approximate inference networks 와 같은 거는 필요없다. </p>
<p><strong>최대최소 게임(minimax game)</strong></p>
<ol>
<li>가짜와 진짜를 구별할 수 없게 만들기 vs 가짜와 진짜를 구별하기</li>
<li>상대방이 자신의 이익을 최대화 하는 결정을 내릴 것이라고 행동을 예측하고 그 결과를 바탕으로 나의 이익을 최대화 하는 결정을 찾아야 함</li>
</ol>
<h1 id="introduction">[Introduction]</h1>
<p>지금까지 딥러닝 분야에서 눈부신 발전은 Piecewise linear units을 활용한 역전파와 dropout 알고리즘에 기반하여 발전했다.</p>
<p>반면 <strong>Deep <em>general</em> models</strong>은 MLE(Maximum likelihood estimation) 과정에서 많은 상호작용의 확률적 계산에 대한 근사의 어려움과 Piecewise linear unit 활용의 어려움으로 인해 임팩트가 적었다.</p>
<p>이에 우리는 이러한 어려움을 회피할 수 있는 새로운 generative model 추정 절차를 제안한다.</p>
<p>제안된 <strong>adversarial nets</strong> 프레임워크에서 생성모델은 적으로 경쟁하게 한다. 판별 모델은 샘플이 생성모델에서 왔는지 실제 데이터에서 왔는지 결정하도록 배우게 한다.</p>
<p>예를 들면, 생성모델은 위조지폐를 생산하고 이를 걸리지 않고 사용하는 위조지폐범이다. 반면 판별모델은 위조지폐를 탐지해야하는 경찰이다. </p>
<p>이 게임에서 경쟁은 위조물건이 걸리지 않을 때까지 두 팀이 그들의 방법을 향상시키도록 이끌어준다. </p>
<p>이러한 프레임워크는 특정한 훈련 알고리즘을 보여준다. </p>
<p>생성 모델이 다층 퍼셉트론을 통해 랜덤 노이즈를 전달받아서 샘플을 생성하고 판별 모델도 다층 퍼셉트론을 이용하여 샘플이 진짜 데이터인지 생성 데이터인지 판별한다. 우리는 이러한 Special case를 <strong>adversarial nets</strong>라고 한다. </p>
<p>이 case에서 우리는 역전파와 드롭아웃 알고리즘을 활용하여 두 가지 모델을 훈련시킬 수 있다. 또한 오직 순전파만을 활용하여 생성모델에서 샘플을 생산하도록 할 수도 있다. </p>
<p><strong>piecewise Linear Unit(PLU)</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/792c0118-f63b-476c-9066-d1a302f83781/image.png" alt=""></p>
<p>다음과 같은 ReLU 함수와 같은 활성화함수들이 모두 PLU에 해당한다. </p>
<h1 id="adversarial-nets">[Adversarial nets]</h1>
<p>adversarial modeling framework는 모델들이 이중 레이어 퍼셉트론일 때 똑바로 적용할 수 있다. 데이터 $x$의 생성자의 분포 $p_g$을 배우기 위해 우리는 입력 노이즈 변수 $p_z(Z)$를 정의할 수 있으며, $G(z;\theta_g)$라고 Data Space에 Mapping 하여 나타낼 수 있다. 이때, $G(z;\theta_g)$는 파라미터 $\theta_g$인 다중 퍼셉트론으로써 표현되는 미분가능한 함수 이다. </p>
<p>이어서, single scalar를 결과로 나타내는 $D(x;\theta_d)$라고 정의되는 다중 퍼셉트론도 정의할 수 있다. 이때 $D(x)$는 입력 데이터 $x$가 $p_g$가 아니고 실제 데이터일 확률을 표현한다.  </p>
<p>이를 통해 모델을 정의했다면 다음은 모델을 훈련시키는 과정으로 넘어갑니다. 모델은 동시에 훈련시키며 각 모델의 학습 목표는 다음과 같습니다.</p>
<ul>
<li><p>D : 학습 데이터셋과 G에서 만든 데이터에 correct label을 할당할 확률을 <strong>최대값</strong>으로 만드는 것</p>
</li>
<li><p>G : D가 correct label을 제대로 할당할 수 없을 정도로 학습 데이터셋과 유사한 데이터를 만드는 것. 논문에서는 이를 &quot;$log(1-D(G(z)))$를 <strong>최소값</strong>으로 만들려는 것$(log 1 = 0)$&quot;이라 말했습니다.</p>
</li>
</ul>
<p>In other words, </p>
<p>$D$와 $G$는 <strong>two-player minimax game</strong>을 진행합니다. 이때 목적함수는 $V(G,D)$로 다음과 같이 정의합니다.</p>
<p>$$
\min_G\max_D V(G,D) = E_{x \sim p_{data}(x)}[log D(x)]+E_{z \sim p_z(z)}[log(1-D(G(z)))]$$</p>
<p>이어서, 이러한 training criterion이 non-parametic limit 등등에서 $G$와 $D$가 데이터 생성 분포를 밝혀내는데 충분한 능력이 있다는 이론적 분석(theoretical analysis)을 보여주겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/03bf7c22-7620-4427-a1ad-b740626fdfda/image.png" alt=""></p>
<p>위 그래프를 보면 이 방법에 대한 formal하진 않지만 교육적인 설명을 제공한다. 실질적으로 우리는 반복적이고 수학적인 접근으로써 이 게임을 구현해야한다. 훈련 과정 중 내부 loop에서 완료하는 것은 D를 최적화하는 것은 산술적으로도 불가하고 제한된 데이터셋에서는 과적합이 발생할 수도 있다. 그 대신에 우리는 $D$를 $k$ step 최적화하고, $G$를 one step 최적화하는 걸 번갈아 할 수 있다.</p>
<p>이러한 알고리즘은 $G$가 충분히 천천히 바뀌는 한 $D$를 최적해 주변에서 유지시켜준다.  </p>
<p>In practice,</p>
<p>$V(G,D)$는 $G$가 잘 학습하도록 충분한 gradient를 제공하지 않을지도 모른다. $G$가 만약 잘 학습되지 않았다면 $D$는 높은 신뢰도(Confidence)를 가지고 샘플을 reject할 수 있다. 왜냐하면 그렇게 생성된 샘플들은 명백하게 훈련셋이랑 다르기 때문이다. </p>
<p>이러한 case에서 <strong>$log(1-D(G(z))$는 포화될 수 있다.</strong> 따라서 이럴 때는 $G$를 훈련시켜 $log(1-D(G(z))$를 최소화하는 게 아니라 $log(D(G(z))$를 최대화하도록 $G$를 훈련시킬 수 있다.</p>
<ul>
<li><strong>&quot;$log(1-D(G(z))$는 포화될 수 있다.&quot; 의미</strong>: $G$에서 생성되는 Sample들이 명백하게 기존 데이터와 다르기 때문에 $D$에서는 이를 틀렸다고 판정하여 0에 가깝게 $D(G(z))$를 반환합니다. </li>
<li>하지만 D(G(z))가 0에 가까워지면, log(1−D(G(z)))는 0 근처에서 <strong>포화(saturate)</strong>되어 변화량이 작아지게 됩니다. 이 경우 기울기가 매우 작아지기 때문에 G는 효과적으로 학습되지 않습니다. 따라서, 대안 목적함수로 $log(D(G(z))$을 사용하여 학습을 진행합니다. </li>
</ul>
<h2 id="figure-설명">[figure 설명]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2664884b-3bc1-456d-9699-527b4f9ad539/image.png" alt=""></p>
<p>Generative adversarial nets는 Discriminative distribution($D$, blue, dashed line)를 업데이트 시킴과 동시에 훈련된다. 이는 $D$가 데이터 분포(black, dotted line, $p_x$)의 sample과 생성된 분포인 $p_g$(green, solid line)의 sample를 구별할 수 있도록 하면서 학습이 진행되기 때문이다.</p>
<p>figure에서 아래쪽 수평선은 $z$가 뽑히는 영역이고, 위 수평선은 $x$의 영역이다. 또한 화살표는 $x=G(z)$로 어떻게 매핑되는지를 보여준다. </p>
<p>$G$는 $p_g$의 고밀도 지역에서 수축하고, 저밀도 지역에서 확장된다. 그럼 단계별로 figure를 이해해보자.</p>
<p>(a): $p_g$와 $p_{data}$는 분포 자체는 비슷하고, $D$는 부분적으로 정확한 분류기이다. </p>
<p>(b) $D$의 내부 loop를 통해 $D$는 생성된 sample과 원본 data를 구별하고 $D$는 $D^*(x) = \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}$에 수렴한다. </p>
<p>(c) $G$를 업데이트한 후, $D$의 gradient는 $G(z)$가 더 기존 data로 분류되어지는 방향으로 바뀌게 해준다. </p>
<p>(d) 많은 훈련 step 후, 만약 $G$와 $D$가 충분한 효과를 가진다면 그들은 더이상 향상될 수 없는 지점($p_g=p_{data}$)에 이른다. 이때 판별모델(discriminator)는 두 분포를 다르게 판별할 수 없다. (이때, $D(x)=\frac{1}{2}$)</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/5d30a88f-1684-436d-9d66-9e8f82308422/image.png" alt="">
추가적으로 너무 잘 정리된 그림이 있어서 가지고 왔다.
출처: <a href="https://juniboy97.tistory.com/8">https://juniboy97.tistory.com/8</a></p>
<h1 id="theoretical-results">[Theoretical Results]</h1>
<p>이 파트에선 위에서 제시된 GAN의 minmax game이 제대로 작동한다면, minmax game이 global minimum에서 unique solution 을 가지고 어떠한 조건에 만족하면 그 solution으로 수렴한다는 사실이 증명되어야 한다는 것을 수학적으로 입증하고 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/bc6a7cc3-1d9b-4da0-9a80-fbaae6de3f72/image.png" alt=""></p>
<p>생성모델 $G$는 $G(z)$의 샘플 분포가 $z \sim p_z$일때 얻어지는 확률분포 $p_g$를 정의한다. 그러므로, $p_{data}$의 좋은 추정량으로 모이는 <strong>Algorithm 1</strong>은 충분한 훈련시간과 용량이 있다면 좋은 아이디어이다. 우리는 확률밀도함수 공간에서 수렴을 학습하는 모델의 무한한 능력을 제시한다. </p>
<h2 id="global-optimality-of-p_g--p_data">[Global optimality of $p_g$ = $p_{data}$]</h2>
<p>우리는 어떤 주어진 생성모델 $G$가 있을 때 최적 판별모델 $D$가 있다고 생각해보자</p>
<h3 id="proposition-1"><strong>Proposition 1</strong></h3>
<p>$G$가 고정되었을 때, 최적 판별 모델 $D$은 다음과 같다. 
$$
D^*<em>G(x) = \frac{p</em>{data}(x)}{p_{data}(x)+p_g(x)}$$</p>
<p><em>proof)</em></p>
<p>어떤 $G$가 주어졌을 때, 판별모델 $D$의 목적함수는 $V(G,D)$를 극대화하는 것이다. </p>
<p>$$
V(G,D) = \int_x p_{data}(x)log(D(x))dx + \int_z p_z(z)log(1-D(G(z)))dz$$</p>
<p>$$ 
= \int_x p_{data}(x)log(D(x)) + p_g(x) log(1-D(x))dx$$</p>
<p>이때 적분 속 식을, (a, b)가 (0,0)이 아닌 실수 순서쌍일 때 $alog(y)+blog(1-y)$라고 나타낼 수 있다. (즉, $p_{data}(x)$와 $p_g(x)$를 $a, b$로 상수 취급)</p>
<p>$alog(y)+blog(1-y)$을 미분하여 최댓값을 구하면 다음과 같다.</p>
<p>$$
(alog(y)+blog(1-y))&#39; \to \frac{a}{y} - \frac{b}{1-y} = 0$$</p>
<p>$$
a - ay - by = 0 \to (a+b)y = a$$
$$
y^* = \frac{a}{a+b}$$</p>
<p>따라서, $y$가 $\frac{a}{a+b}$일 때 최대이므로 다음과 같이 나타낼 수 있다.</p>
<p>$$
D^*<em>G(x) = \frac{p</em>{data}(x)}{p_{data}(x)+p_g(x)}$$</p>
<p>이를 다시 $V(G,D)$에 대입하면 다음과 같이 식이 전개된다.</p>
<p>$$
C(G) = E_{x \sim p_{data}}[log D^<em><em>G(x)] + E</em>{x \sim p_g}[log(1-D^</em>_G(x))]$$</p>
<p>$$
= E_{x \sim p_{data}}[log \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}] + E_{x \sim p_g}[log\frac{p_g(x)}{p_{data}(x)+p_g(x)}]$$</p>
<h3 id="theorem-1"><strong>Theorem 1</strong></h3>
<p><em>The global minimum of the virtual training criterion C(G) is achieved if and only if p_g = p_{data}. At that point, C(G) achieves the value $-log4$</em></p>
<p><em>proof)</em></p>
<p>For $p_g = p_{data}$, $D^*_G(x) = \frac{1}{2}$</p>
<p>그러므로, $D^*_G(x) = \frac{1}{2}$라면 위 식을 통해 다음과 같음을 파악할 수 있다.</p>
<p>$$
C(G) = -log2 + (-log2) = -log4$$</p>
<p>그러므로 $C(G)$의 가장 좋은 가능한 값을 보기 위해 우리는 다음과 같음을 관찰해야한다.</p>
<p>$$ 
C(G) = E_{x \sim p_{data}}[-log2] + E_{x \sim p_g}[-log2] = -log 4$$</p>
<p>이때 해당 식을 다음과 같이 바꿀 수 있다. </p>
<p>$$
C(G) = E_{x \sim p_{data}}[log \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}] + E_{x \sim p_g}[log\frac{p_g(x)}{p_{data}(x)+p_g(x)}] + log4 - log4$$</p>
<p>$log4$를 반으로 나누어 각 항에 다음과 같이 더해준다. </p>
<p>$$
C(G) = (E_{x \sim p_{data}}[log \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}] + log2) \+ (E_{x \sim p_g}[log\frac{p_g(x)}{p_{data}(x)+p_g(x)}] + log2) - log4$$</p>
<p>$$
= E_{x \sim p_{data}}[log \frac{p_{data}(x)\times2}{p_{data}(x)+p_g(x)}] + E_{x \sim p_g}[log\frac{p_g(x) \times2}{p_{data}(x)+p_g(x)}] - log4$$</p>
<p>이때 <strong>KL Divergence</strong>는 다음과 같은 식으로 구성되는데, 
<img src="https://velog.velcdn.com/images/withs-study/post/ea0a7b26-2e66-49e0-ad07-42ded404735b/image.png" alt=""></p>
<p>이를 위 식에 적용하면 $p(i) = p_{data}(x),  Q(i) = \frac{p_{data}(x) + p_g(x)}{2}$과 같은 방식으로  첫 항과 두번째 항에 적용할 수 있다. </p>
<p>그럼 다음과 같은 식이 도출된다. </p>
<p>$$
C(G) = -log4 + KL(p_{data} ||\frac{p_{data}+p_g}{2})+KL(p_{g} ||\frac{p_{data}+p_g}{2})$$</p>
<p>이때 KL은 Kullback-Leibler divergence(쿨백 라이블러 발산)이다.</p>
<p>위 식에 다음 Jensen-Shannon divergence(JSD)을 적용할 수 있다.
<img src="https://velog.velcdn.com/images/withs-study/post/176edb58-7e29-4a1a-aea7-2955d0a056cd/image.png" alt=""></p>
<p>따라서 최종적으로 다음과 같은 식으로 도출된다.</p>
<p>$$
C(G) = -log4 + 2 \times JSD(p_{data} || p_g)$$</p>
<p>이때 JSD는 두 distribution이 일치할 때 0이 된다. 
따라서 $C(G) = -log4$가 $C(G)$의 Global minimum이고, unique Solution은 $p_g = p_{data}$일 때이다. </p>
<p>즉, two-player minimax game의 global optimality는 $p_g = p_{data}$뿐이다.</p>
<p>그러므로, <strong>data generating process를 완벽하게 복제하는 모델이 완성된다!</strong></p>
<h3 id="정보이론-정리">[정보이론 정리]</h3>
<p><strong>Kullback-Leibler divergence</strong>를 이해하기 위해선 부연 설명이 필요할 것 같아서 중간 단원을 나눴다.</p>
<p><strong>정보량</strong></p>
<p>통계학에서 정보량이란 &quot;깜놀도&quot;이라고 쉽게 이해할 수 있다. 많이 등장하는 변수의 경우 해당 정보의 희소성이 적다. 즉 정보량이 적다. </p>
<p>확률이 낮은 사건일수록 거의 일어나지 않을 일이기 때문에 정보량은 높다.</p>
<p>예를 들어 (1,1) 주변 점들이 많고, (10, 13)이라는 점이 하나 있는 산점도가 있을 때 (1,1) 주변 점들 각각의 정보량은 (10, 13)에 있는 점보다 적다는 의미이다. 이를 수학적으로 다음과 같이 나타낸다. </p>
<p>따라서, 정보량은 다음과 같이 나타낼 수 있다. 
<img src="https://velog.velcdn.com/images/withs-study/post/70d765c7-82f9-43e5-9f44-6291ab13f32a/image.png" alt=""></p>
<p>조금 더 구체적으로, 통계학에서 정보량은 다음과 같이 정의한다.
이산 랜덤변수 $X$에 대해,
$$
I(x) = -log_b(P(X))$$
이때, 로그의 밑 b는 응용 분야에 따라 다르게 쓸 수 있는데, 대게 b는 2, e, 10 중 하나를 사용할 수 있다. (각각을 사용했을 때의 정보량의 단위는 bit, nit, dit이다).</p>
<p>왜 로그를 통해 정보량을 정의하냐면 정보에 대한 아래의 개념들을 만족시킬 수 있는 수식이어야 하기 때문이다.</p>
<p>1) 확률값(혹은 확률밀도 값)에 반비례 해야 하기 때문.</p>
<p>2) 두 사건의 정보량을 합치면 각 사건의 정보량을 합친 것과 같아야 함.</p>
<p>그리고 음수인 것은 로그함수를 사용했기 때문에 반비례로 만들어주기 위해 사용하였다.</p>
<p>출처: <a href="https://angeloyeo.github.io/2020/10/26/information_entropy.html">https://angeloyeo.github.io/2020/10/26/information_entropy.html</a></p>
<p><strong>Entropy</strong></p>
<p>통계학에서 엔트로피란 평균 정보량을 얘기한다. 엔트로피는  &quot;정보량이 생산되는 과정에서, 이를 표현하는데 필요한 최소 자원량의 기댓값&quot;이다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/e02fc5b5-ec1b-46b3-b074-18c23b3adfbe/image.png" alt=""></p>
<p>다음과 같은 수식으로 표현되는데, </p>
<p>이는 특정 정보량을 표현하는데, 특정 확률변수의 확률이 높으면 ($p_i$가 높으면), 해당 확률변수를 표현할 자원량($log (1/p_i)$) 이 줄어들게 된다는 것을 의미한다.</p>
<p><strong>Cross Entropy</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/bfa5e350-fbf8-4acd-ae01-99a46fe7a6c7/image.png" alt=""></p>
<p>엔트로피에서 두 확률분포의 차이를 구하기 위해 사용되는 게 크로스 엔트로피다. </p>
<p>엔트로피 식과 비교했을 때 확률과 정보량이 서로 다른 분포라는 차이가 있다.</p>
<p>즉 entropy는 확률분포 P를 따르는 환경에서 정보량이 생산될 때, 이를 표현하는데 필요한 최소 자원량의 기댓값이며,</p>
<p>corss entropy는 확률분포 P를 각각 따르는 환경에서 정보량이 생산될 때, 확률분포 Q를 따르는 환경이라 생각하고 정보량을 표현하는데 필요한 자원량의 기댓값인 것이다.</p>
<p><strong>Kullback-Leibler divergence</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f67e6d65-4742-4203-96ee-f5d24a3bb1f9/image.png" alt=""></p>
<p>위키백과에서 Kullback-Leibler divergence은 어떠한 확률분포 P가 있을 때, 샘플링 과정에서 그 분포를 근사적으로 표현하는 확률분포 Q를 P 대신 사용할 경우 엔트로피 변화를 의미한다.</p>
<p>그렇다. 엔트로피 변화이므로, <strong>엔트로피에서 크로스 엔트로피를 뺀 값이 바로 KL Divergence</strong>이다. 즉, 현재 분포에서 다른 분포로 바꾸기 위한 비용이 바로 KL Divergence다. </p>
<p>이렇게 KL divergence의 의미를 이해하고 나면, KL divergence의 두가지 대표적인 특징도 쉽게 이해할 수 있다.</p>
<p> 1) KL divergence의 값은 0이상이다.</p>
<p> 2) KL divergence의 값은 asymetric 하다.</p>
<p>우선, H(p) 값이 최소 자원량의 기댓값이므로, H(p)는 무조건 H(p, q)보다 작을 수 밖에 없다. 따라서 H(p, q) - H(p) 인 KL divergence 의 값이 항상 0 이상인 것이다.</p>
<p>또한, p와 q의 위치가 바뀌면 KL divergence의 값 또한 바뀌게 된다. 따라서 KL divergence의 값은 symetric 하지 않고, asymetric 하다는 것을 확인할 수 있다.</p>
<p>출처: <a href="https://ddongwon.tistory.com/118">https://ddongwon.tistory.com/118</a></p>
<p><strong>Jensen-Shannon divergence</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/44df3826-20d2-4320-9c45-42fb49f115b7/image.png" alt=""></p>
<p>KL Divergence는 asymetric하다는 특징이 있기 때문에 &quot;거리&quot;의 개념으로 사용하기에는 부적절하다. 따라서 $p, q$의 평균을 사용하여 Symmetric한 JSD를 사용한다면 &quot;거리&quot;의 개념으로 사용할 수 있다.  </p>
<p>최종적으로 도출된 
$$
C(G) = -log4 + 2 \times JSD(p_{data} || p_g)$$</p>
<p>이때 JSD는 두 distribution이 일치할 때 0이 되므로, $p_g = p_{data}$일 때 
따라서 $C(G) = -log4$가 $C(G)$의 Global minimum이 된다.</p>
<h3 id="proposition2"><strong>Proposition2</strong></h3>
<p><em>if $G$ and $D$ have enough capacity, and at each step of Algorithm 1, the discriminator is allowed to reach its optimum given G, and $p_g$ is updated so as to improve the criterion</em></p>
<p>$$
C(G) = E_{x \sim p_{data}}[log D^<em><em>G(x)] + E</em>{x \sim p_g}[log(1-D^</em>_G(x))]$$</p>
<p><em>then $p_g$ converges to $p_{data}$</em></p>
<p>이는 Algorithm 1을 통해 생성자의 분포 $p_g$가 점차 실제 데이터 분포 $p_{data}$에 수렴하는지를 보장하는지에 대한 증명이다. </p>
<p>즉, GAN이 적절히 학습된다면 G(생성자)가 만들어낸 데이터 분포가 실제 데이터 분포와 같아질 수 있음을 증명하는 부분이다.</p>
<p><em>proof)</em>
$V(G,D) = U(p_g, D)$를 $p_g$의 함수로 생각해보자</p>
<p>$U(p_g, D)$는 $p_g$에서 <em>convex</em>,     convex function의 편미분 값은 최댓값을 얻을 수 있는 지역을 포함한다.</p>
<p>만약 다음 식과 같고, 
<img src="https://velog.velcdn.com/images/withs-study/post/9a394326-34ee-4c32-a817-64fda59f1f20/image.png" alt="">
$f_{\alpha}(x)$가 모든 $\alpha$에 대해 $x$에서 convex할 때 다음과 같다면, 
<img src="https://velog.velcdn.com/images/withs-study/post/db22fc88-2e14-4fb5-8e9f-44df09084ed7/image.png" alt=""></p>
<p>다음 식이 성립한다. 
<img src="https://velog.velcdn.com/images/withs-study/post/e76a1528-2b7b-4801-b163-5a1db032a86b/image.png" alt=""></p>
<p>이는 최적 판별모델 $D$가 $p_g$에 대해 경사하강법을 수행하는 것과 같다. 그러므로 Theorem 1에서 보았듯이 $\sup_D U(p_g, D)$는 $p_g$에 대해 convex하며, 유일한 global optimum을 가진다. 그러므로 $p_g$가 조금씩 충분하게 업데이트가 된다면 $p_g$는 $p_x$로 수렴한다. </p>
<p>In practice,</p>
<p>GAN은 $p_g$의 전체적인 분포를 학습하기 보다는 $p_g$의 limited family를 학습할 뿐이다. 즉 $p_g$보다는 $\theta_g$를 조정하여 최적화한다. </p>
<p>따라서 $G$를 정의하는 다층 퍼셉트론을 사용하는 것은 parameter space에서 여러 개의 임계점(critical point)를 발생시킬 수 있다. 즉, 학습이 제대로 안될 수 있다.  </p>
<p>하지만, 실용적으로 다층 퍼셉트론은 뛰어난 성능을 보이고 있으므로 이론적으로 완벽한 보장이 없더라도 충분히 실용적인 모델임을 확인할 수 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] Goal-Driven Explainable Clustering via Language Descriptions]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Goal-Driven-Explainable-Clustering-via-Language-Descriptions</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Goal-Driven-Explainable-Clustering-via-Language-Descriptions</guid>
            <pubDate>Wed, 08 Jan 2025 10:27:53 GMT</pubDate>
            <description><![CDATA[<p>이번 글은 Text Clustering에서 사용자의 목표를 고려하여 설명을 포함하는 Clustering을 진행하는 방법론에 관한 연구를 가지고 왔습니다. </p>
<p>Clustering은 알지만 Text Clustering이면 단어의 뜻도 고려해야 할 필요가 있을 것이라고 생각했습니다. 그런데 이 논문은 사용자의 목표까지 고려하는 Text clustering 방법론이라길래 어떻게 단어의 뜻을 고려하여 사용자의 목표에 맞게 군집화를 하는지 그 방법이 궁금해서 공부해봤습니다. </p>
<p>서울대학교 산업경영공학과 DSBA 연구실의 이상민님의 영상을 참고하였으며 참고한 링크는 아래에 있습니다.
<a href="https://www.youtube.com/watch?v=u0qADF52w60">DSBA 논문 리뷰 영상</a></p>
<p>해당 연구 논문 링크는 아래에 있습니다.
<a href="https://arxiv.org/abs/2305.13749">논문 링크</a></p>
<h1 id="introduction">[Introduction]</h1>
<p>기존 Text Clustering 방법론들은 text Sample을 Vector로 Encoding한 후 Clustering 알고리즘을 진행합니다. 하지만 이런 방법론들은 해석가능한 Cluster를 구축하지 못하며 사용자의 목표를 반영하지 못한다는 문제가 있습니다. </p>
<p>그래서 이를 해결하기 위해 설명을 포함하는 연구가 줄곧 있어왔습니다. </p>
<p>해당 논문의 저자인 Ruiqi Zhong이 참여한 논문들을 살펴보면 다음과 같은 관련 연구가 있습니다. </p>
<p><strong>Explaning Text Clusters</strong></p>
<ul>
<li>저자: 전체 Cluster를 완전히 포괄하지 못함.</li>
<li>두 분포 간 차이점을 생성하는 방법론을 제안하였으나 사용자의 목표(Goal)를 반영하지 않음.</li>
</ul>
<p><strong>Explaining Patterns via Language</strong></p>
<ul>
<li>저자: 제안 방법론과 가장 비슷한 논문</li>
<li>사용자의 목표(Goal)를 반영하나, 두 분포(Corpus)간 차이점만을 생성</li>
</ul>
<p><strong>GoalEX(본 논문)</strong></p>
<ul>
<li>사용자의 목표(Goal)를 반영하고 차이점이 아닌 전체 Corpus에서 Clustering 진행 시 Clustering에 적합한 설명(Explanation)을 생성하는 방법론</li>
</ul>
<h1 id="method">[Method]</h1>
<h2 id="paspropose-assign-select">[PAS(Propose-Assign-Select)]</h2>
<p>최종 Input-Output</p>
<ul>
<li>Input: 텍스트 집합(Corpus) + 목표(Goal)</li>
<li>output: Corpus 하위 집합(Cluster) + Cluster에 대한 설명(Explanations)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/fd4a722e-2bcb-4e6c-bb40-3109ffd087c7/image.png" alt=""></p>
<p>Notation을 먼저 짚고 넘어가면 다음과 같습니다.</p>
<p><strong>Input</strong>
X: Corpus (Text 집합)
g: Goal(문자열)
K: Cluster 수 (정수)</p>
<p><strong>Output</strong>
$C_k$ : $k$번째 Cluster
$e_k$ : $k$번째 Cluster에 대한 Explanation (텍스트)</p>
<p>이때 Output은 3가지 조건을 가져야 합니다.</p>
<p>** 1) Goal-Related: Explanations이 Goal과 관련이 있어야 한다는 것 **</p>
<p>사용자의 Goal이 Sentiment를 기반으로 Clustering 하는 것이라면 *&quot;긍정적인 Sentiment를 가지고 있음&quot;* 이라는 Explanation은 Goal과 관련이 있지만 *&quot;스포츠에 관한 것&quot;* 이라는 Explanation은 Goal과 관련이 없음 </p>
<p>** 2) Accurate Explanation: 각 Cluster가 Explanations에 의해 정확하게 기술되어야 한다는 것 **</p>
<p>각 Explanations은 서술어이므로 해당 Cluster의 모든 Sample에 대해 Correct하고 다른 Cluster의 Sample에 대해 Incorrect 해야함.</p>
<p>** 3) Minimal Overlap and Maximal Coverage: Cluster 간 최소한으로 겹쳐야 하고, Cluster들이 전체 Corpus를 Cover할 수 있어야 한다는 것**</p>
<p>이상적으로는 모든 Sample이 각각 하나의 Cluster에 속하는 것이 좋음.</p>
<p>그래서 이러한 Output의 3가지 조건을 해결하기 위한 설계가 바로 <strong>PAS</strong>이다.</p>
<p>1) Goal-Related -&gt; <strong>Propose</strong>
2) Accurate Explanation -&gt; <strong>Assign</strong>
3) Minimal Overlap and Maximal Coverage -&gt; <strong>Select</strong></p>
<p>그럼 각 단계에서 어떠한 과정이 이뤄지길래 3가지 조건을 성립시킬 수 있는지 살펴보겠습니다.</p>
<h3 id="propose">[Propose]</h3>
<p><img src="https://velog.velcdn.com/images/withs-study/post/36c69966-c913-4eae-ad6d-5ac515c4990e/image.png" alt=""></p>
<p>목표: Proposer(LM)에 Corpus를 부여하여 Goal에 관련된 Explanations를 생성</p>
<p>Input: Corpus + Goal
Output: Candidate Explanations</p>
<p>과정: LM에게 &#39;In-context Clustering&#39; 형태의 Prompt를 부여</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/1566c4fa-bb23-43e8-b972-a1642d236206/image.png" alt=""></p>
<p>Goal에 따라 Text를 Clusterinf 하기 위한 Category를 만들라는 Instruction + Category Example, Goal과 Explanation 예시, Corpus 부여 + Goal 설명 + 생성할 Explanation 개수 지정, 출력문 제어 등이 해당 과정이다. </p>
<p>이때 Prompt의 길이 제한으로 전체 Corpus를 반영할 수 없기에 다수의 Prompt를 구성해서 $J$개의 Explanations을 얻을 때까지 반복해야한다.</p>
<h3 id="assign">[Assign]</h3>
<p><img src="https://velog.velcdn.com/images/withs-study/post/33c5f594-857d-43db-996d-29742bdf2771/image.png" alt=""></p>
<p>목표: 각 Sample에 적합한 Explanation 할당</p>
<p>Input: Explanation + Sample
Output: Assignment Matrix (Sample[행]에 따라 Explanation[열]이 지정)</p>
<p>과정: 각 Sample이 각 Explanation에 적합한지 여부를 결정하기 위해 언어 모델에게 Text를주고 Explanation에 적합한지 Prompt를 구성</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/4280f20c-3dab-40db-bada-58a9b2b48db4/image.png" alt=""></p>
<h3 id="select">[Select]</h3>
<p><img src="https://velog.velcdn.com/images/withs-study/post/48d74ce6-ee80-4743-81a2-7795fc9eb63f/image.png" alt=""></p>
<p>목표: Cluster 간 중복 최소화, 전체 Corpus Coverage 최대화</p>
<p>과정: 각 Sample이 대략 하나의 Cluster에 속하도록 $J$개의 candidate clusters에서 K개의 Clusters를 선택하는 것</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/cc25b5b4-6faf-46e3-9a8e-671f3d64e729/image.png" alt=""></p>
<p>Assignment Matrix를 각 Sample이 대략 하나의 Cluster에 속하도록 근사화시키는 Selection Vector를 찾고자 함.</p>
<p>이때 목표 군집 개수인 $K$개를 맞추기 위해 $J$개의 군집을 줄이기 위해 단위행렬 1의 길이를 조절해준다.</p>
<p>또한 모든 $x$에 대해 $m_x$가 1이 되는게 이상적이므로 $f_{\lambda}$라는 loss function을 구성해준다.</p>
<p>이때 $\lambda$는 Penalty를 부여하는 하이퍼파라미터</p>
<p>$$
f_{\lambda}(m_x) = \begin{cases}
(1-m_x),;if;m_x &lt; 1, ; miss\
0,;if;m_x = 1,; ideal\ \lambda(m_x - 1), ; if ; m_X &gt; 1,; overlap
\end{cases}$$</p>
<p>따라서 이 loss function으로 Selection Vector를 업데이트해나가는 것이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f8492bea-641d-478e-b985-51676eede216/image.png" alt=""></p>
<p>$m_x$가 1보다 작으면 Sample이 Cluster에 속하지 않는다는 것을 의미하며 1일 때는 이상적인 상황 1보다 클 때는 여러개의 cluster에 속함을 의미한다. 그러므로 miss이면 $m_x$를 높이기 위해서, overlap이면 $m_x$를 낮추기위해 loss function을 사용한다.</p>
<p>이때 Loss인 $f_{\lambda}(m)$이 열벡터니까 Scalar로 변환해주기 위해 $L(s) = f_{\lambda}(m) \cdot 1$을 적용한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/505e0e2f-e509-4079-b5c5-e908d5ed1dc9/image.png" alt=""></p>
<p>하지만 실수 $\lambda$가 곱해지게 되면 loss가 실수가 되는데 Cluster에 속한 여부는 1 or 0으로 판단하기에 loss update를 적용하는 것이 어렵기에 정수 값만을 가지도록 loss function $f_{\lambda}(m)$를 a로 치환하여 계산한다.</p>
<p>그래서 $f_{\lambda}$를 a로 치환한 후에 최종적으로 Loss function을 구성한다.</p>
<p>최종적으로 찾은 Selection vector를 통해 J개의 Candidate Clusters에서 K개의 clusters를 선택하게 된다.</p>
<h2 id="pas-이후-단계">[PAS 이후 단계]</h2>
<p>Multiple Iteration: 전체 Corpus를 커버하기 위해 5번의 반복을 진행하고,
Commit to a Single Cluster: 필요할 때 각 Sample을 단일 Cluster에 Commit하는 보조 절차를 진행한다.</p>
<p><strong>Multiple Iteration</strong></p>
<ul>
<li>Assigner의 Context 길이가 전체 Corpus를 포함할 수 없어 PAS를 5번 반복 진행</li>
<li>이전 반복 결과들에서 Explanation이 Assign 되지 않는 Sample을 바탕으로 새로운 Explanation을 생성하는 형태</li>
</ul>
<p><strong>Commit to a Single Cluster</strong></p>
<ul>
<li>PAS가 끝날 때, 일부 Sample은 여러 Explanation에 할당될 수 있음</li>
<li>그러나 사용자나 벤치마크는 각 Sample를 가장 적합한 하나의 Cluster에 Commit하도록 요구할 수 있음 LM을 활용해서 각 Sample을 단일 Cluster에 Commit하는 절차를 추가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a58f622c-16b7-4185-804e-27e1c2958fc7/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] SCINet: Time Series Modeling and Forecasting with
Sample Convolution and Interaction]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-SCINet-Time-Series-Modeling-and-Forecasting-withSample-Convolution-and-Interaction</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-SCINet-Time-Series-Modeling-and-Forecasting-withSample-Convolution-and-Interaction</guid>
            <pubDate>Wed, 11 Dec 2024 06:31:15 GMT</pubDate>
            <description><![CDATA[<p>이번 글은 논문이 게재되었을 당시 SOTA에서 많은 조회수를 기록하고 뛰어난 성능을 가진 것으로 유명했던 시계열 예측 모델인 <strong>SCINet</strong>을 가지고 왔습니다.</p>
<p>최근 시계열분석에 대해 관심을 많이 가지고 있는데, SCINet이라는 모델이 워낙 유명하고 Dacon 공모전에서 우수한 성적을 거둔 분들이 활용했던 모델이고 코드도 잘 나와있어서 한번 공부해보고 싶은 마음에 가지고 오게 되었습니다. </p>
<p>개인적으로는 SCINet을 통해 처음 최신 AI 논문을 접하게 되어 제게 의미가 큰 논문입니다. 그때 당시엔 지금보다 공부가 미흡하여 제대로 공부하지 못했는데, 지금도 완벽히 이해하기엔 부족하겠지만 다시 한번 복습해보고 싶어서 가지고 오게 되었습니다.</p>
<p>자료는 서울대학교 산업공학과 DSBA 연구실 소속 이정호 님의 유튜브 영상을 참고하였으며 링크는 아래와 같습니다.
<a href="https://www.youtube.com/watch?v=UEYYvKnqIms&amp;t=114s">DSBA SCINet 논문 리뷰 영상</a></p>
<p>또한 본 논문은 SOTA에서도 Star가 엄청난 논문이고 코드도 잘 구현되어 있습니다. 본 연구에 대한 논문과 깃허브 링크는 아래 링크를 통해서 확인할 수 있습니다. 
<a href="https://paperswithcode.com/paper/time-series-is-a-special-sequence-forecasting">SCINet 논문 &amp; 깃허브</a></p>
<h1 id="introduction">[Introduction]</h1>
<h2 id="시계열-데이터의-특징">[시계열 데이터의 특징]</h2>
<p>시계열 데이터는 <strong>Cyclical, Trend, Seasonal</strong>한 특징을 가지고 있으며 그 과정에서 <strong>Irregular fluctuation(불규칙한 파동)</strong>이 있다. 그래서 시계열 모델은 이러한 특징이 고려되어야 하지만 대개 모델들은 이를 잘 고려하지 않는다. </p>
<p>이에 대해 SCINet의 저자들은 부분적으로 Sampling을 취해서 Sequence를 만들었을 때 <strong>부분적인 sequence를 뽑더라도 전체적인 Cyclical, Trend, Seasonal한 특징은 보존되어야 한다고 생각</strong>했다.</p>
<p>따라서 저자들은 부분적으로 뽑아낸 Subsequence에 대해 학습을 진행하기로 했다.</p>
<p>Subsequence를 반복적으로 정보를 뽑더라도 Subsequence는 시계열에 대한 특징을 가지고 있을 것이고, 반복적으로 뽑는다면 다양한 Cyclical, Trend, Seasonal한 특징을 뽑아낼 수 있을 것이라고 생각하였다. 이를 통해 Subsequence 사이의 관계를 학습하고자 했다.</p>
<h2 id="기존의-시계열-딥러닝-모델">[기존의 시계열 딥러닝 모델]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/e291b5a7-c6fa-4c96-b44a-0d022259d558/image.png" alt=""></p>
<p>(1) <strong>RNN Model</strong>: 잘못된 예측이 중첩되어 Long-term에 대해 매우 취약함</p>
<p>(2) <strong>Transformer</strong>: 모든 시점에 대한 상관성을 학습 $\to$ Long Sequence를 다루기에 비용($O(m^2)$)이 매우 큼</p>
<p>(3) <strong>TCN</strong>: Long Sequence를 효율적으로 다루지만 Look back (반복되는 정보의 활용)이 부족함
$\to$ 위 그림을 보면 TCN은 Input에서 Conv.Layer 1로, Conv.Layer2, Output과 같이 반복되며 Look back이 되는데, 따라서 TCN 모델은 Conv.Layer의 수만큼만 Look back이 된다는 한계를 가지고 있다. </p>
<p>또한, TCN 모델에서 다뤄지는 부분 중 앞 부분은 많이 다뤄지지도 않는다는 한계 역시 존재 </p>
<h2 id="시계열-예측-setting">[시계열 예측 Setting]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/9e6eef39-053c-4b6c-aae7-db854cdd57f8/image.png" alt=""></p>
<p>Time Series Forecasting Setting에 대해 먼저 설명을 드리면, Input이 Input window로 들어가고 이 데이터로 next steps에 따라 Pred를 제공한다. </p>
<p>이때 Step의 수에 따라 multi-step forecasting으로 정의한다.</p>
<h1 id="scinet">[SCINet]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/77fe61ef-dd9d-417e-ad0c-4ab0de83f46c/image.png" alt=""></p>
<p>SCINet은 크게 3가지 구조로 구성되어 있는데, Stacked 상태로 SCINet이 있으며 각 SCINet에선 SCI-Block들이 Tree 모형으로 구성되어 있다. 또한 각 SCI-Block은 Split과 Interactive Learning이라는 특징을 가지고 있다.</p>
<p>SCI-Block부터 상세하게 설명을 드리면, Input에 대해 Split을 통해 짝수, 홀수로 분할하고 Interact를 통해 나눠진 Sequence의 정보 교환이 이뤄집니다. 이를 통해 얻어지는 $F&#39;<em>{odd}, F&#39;</em>{even}$이 나오고 이렇게 분할되는 과정을 트리 모양으로 쌓은 게 SCINet, 이를 Stacking 한게 모델의 구조이다. 
(* 논문에서는 일반적으로 Stack을 1, 2개 쌓아서 활용했다고 언급)</p>
<h2 id="scinet-block">[SCINet-Block]</h2>
<p>SCINet-Block을 직관적인 예시로 다시 보여드리자면 다음과 같이 나타낼 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/e9dd1ddf-fc1a-4697-b094-5d9d4fb30333/image.png" alt=""></p>
<p>이에 대해 설명하자면,</p>
<p>1, 2, 3, 4, ......, 16으로 구성된 Sequence가 있었다면 홀,짝으로 나눠서 Split을 한 후 재배열 한다. 이후 2-level(그림의 2-layer은 오타)에서 다시 Split하고 재배열 하는 등 이 과정을 각 level에서 반복한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/38f3e479-4cd3-4aa1-9437-8375887ebf04/image.png" alt=""></p>
<p>기존 커널이 3인 1D-conv가 있다고 할 때 1, 2, 3까지의 영역을 활용하므로 Long-term을 잡아내는데에 한계가 있었다. 이에 <strong>SCINet은 2, 4를 제외하고 홀수인 1, 3, 5만 가지고 Split한 후 1D-conv를 함</strong>으로써 Dilated Conv를 활용하는 효과와 동일하게 Receptive field가 넓어져 <strong>똑같이 커널이 3인 1D-Conv를 활용하더라도 Long-term 학습에 뛰어난 효과를 보임</strong>을 알 수 있다.</p>
<p>이때 <strong>각 1D-Conv가 파라미터를 공유하지 않는 이유</strong>는 1, 3, 5와 2, 4, 6을 구성하는 각 Down Sample들이 Trend, Seasonality와 같은 정보를 각각 내포하고 있을 것이고 이에 대한 Interaction을 고려해준다면 더욱 많은 Representation을 만들 수 있을 것이라고 생각했기 때문이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/21775849-614d-4737-bb9a-852b0e80db6c/image.png" alt=""></p>
<p>이를 <strong>각 Level에서 반복적인 Look-Back 구조를 가져준다면 Long-Term에 대한 정보를 한번에 학습</strong>할 수 있다. 또한 <strong>커널 사이즈가 고정된 상태에서도 Split을 통해 Long-Term에 대한 정보를 그대로 가져올 수 있다는 큰 특징</strong>도 가지고 있다.</p>
<p>그럼 이제 Split을 왜 하는지에 대한 의문이 풀렸다면 이번엔 Interaction하는 이유에 대해 알아봅시다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7df4f077-d472-45fd-9e16-223b8f5eb331/image.png" alt=""></p>
<p>Interaction이 일어난다고 할 때 빨간색 1D-Conv로 구한 값을 지수 변환 해주고, 파란색 1D-conv도 EXP변환을 해준 후 각 값을 곱연산함으로써 1st Interaction을 구해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/878ac21a-51d8-4ee9-9f97-3424cdf29651/image.png" alt=""></p>
<p>이렇게 나온 Gradation 값을 똑같이 Conv을 통해 Representation을 변환하여 2nd Interaction을 구해줍니다. 이후 앞서 나왔던 1st Interaction과 2nd Interaction을 합차연산(논문의 코드에선 (+)를 사용)을 통해 두개의 연산 값을 이용하여 최종적으로 representation을 만들어줍니다.</p>
<h2 id="scinet-tree">[SCINet-Tree]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/0cf4ba10-f64a-444a-9e07-43aadb646d01/image.png" alt=""></p>
<p>위와 같은 과정을 통해 구해진 최종적인 Sequence를 모두 Concat한 후 재배열 후 Original Sequence와 더하는 연산을 해줍니다. 추가적으로 Fully Connect Layer를 이용해서 차원을 맞춰서 예측 Sequence를 구해줍니다. </p>
<h2 id="scinet-stack">[SCINet-Stack]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7a002633-ecf2-4547-8117-03bd19471b79/image.png" alt=""></p>
<p>Tree를 통해 얻은 Pred 값을 실제 정답인 17<del>20의 Sequence와 MAE Loss를 활용하여 Loss를 구해줍니다. 이후 다시 한번 이런 식으로 Stack의 2번째에서 처음 예측한 Pred 값을 합쳐 1</del>20 Sequence를 모두 활용하여 SCINet의 과정을 반복하며 이 과정 반복은 Stack의 수만큼 진행되게 됩니다. </p>
<p>이를 통해 최종적인 예측결과를 산출하게 됩니다. </p>
<h1 id="experiment">[Experiment]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/d729651b-ddf3-42a5-8348-3e9381e23c9e/image.png" alt=""></p>
<p>다변수 시계열 예측 데이터셋에서 성능을 살펴보면, <strong>Horizon(시계열 예측 기간) 길이가 720과 같이 길어지게 되면 RNN, LSTM 기반 모델의 성능이 매우 떨어짐</strong>을 알 수 있다. TCN 모델은 Long-Term forecasting에서 좋은 성능을 가지고 있으나, SCINet의 성능이 더 우수함을 알 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/effa6777-7ed4-42d5-b2c9-0ebd3f634be6/image.png" alt=""></p>
<p>Univariate 데이터셋으로 해당 방법론들과도 비교해보면, 이런 방법들은 Seasonality나 Trend를 활용하는데 SCINet은 이러한 정보를 직접적으로 활용하진 않지만 SCINet이 해당 방법론보다 더 우수함을 알 수 있다. </p>
<p>이는 결국 Split을 해도 Seasonality나 Trend 특성이 보존될거고 그러한 정보에서 뽑아냈으니 그 과정에서 이러한 시계열적인 특성을 가진 것으로 파악됩니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/faff5e7a-16d2-4347-8dae-d2ec25d10dda/image.png" alt=""></p>
<h2 id="ablation-study">[Ablation Study]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/0175b0a1-f4c7-42f5-bb21-bd89f23578df/image.png" alt=""></p>
<p>MAE loss 기준으로 Interaction이나 가중치 공유를 해버리게 되면 오차가 급격하게 증가합니다. 또한 마지막에 기존 시계열 데이터를 더해주는 ResCon을 안했을 때도 오차가 급격히 증가했음을 알 수 있습니다. </p>
<p>이때 저자들은 ResCon을 해야하는 이유에 대해 Original data에서도 정보가 있을텐데 Split한 데이터만 사용하게 되면 그 과정에서 Bias가 많이 발생할 수 있다고 생각한다고 합니다.</p>
<h1 id="conclusion">[Conclusion]</h1>
<p>일반적인 시계열 데이터를 수집하고 시간 순서로 정리가 된 데이터에 대해 SCINet을 제한적인 사용을 했을 때 성능이 좋았습니다.</p>
<p>즉, 어느정도 실제 시계열적 특징(계절성, 트렌드 등)이 반영되는 데이터셋에서 좋았지만 불규칙한 시계열 데이터(ex. 이상치)에 대해서는 성능 보장이 힘들다는 것입니다. 심지어 불규칙한 시계열 데이터에선 LSTM보다 성능이 좋지 않았습니다.</p>
<p>그러므로 <strong>SCINet은 (1) Long-term 예측이나 (2) 시계열적인 특성이 존재하는 데이터에서 사용하기에 적절하다는 것</strong>을 알 수 있습니다. </p>
<p>이러한 성능 저하는 본 논문의 가정이 Down sampling(ex. Split)을 진행해도 전반적인 시계열 특징을 보장하는 것으로 하기 때문에 이와 반대로 <strong>Noise가 존재한다면 Down sampling 과정에서 잘못된 편향에서 영향을 받을 수 있기 때문인 것으로 파악</strong>된다.</p>
<p>그래서 이 논문에 대한 <strong>추후 연구</strong>로,</p>
<p>SFINet이라 해서 Noise가 있는 Real Data에서도 강건한 모델을 구현하는 연구를 진행했고, 공간적 정보를 함께 활용하는 SCINet 구조 모델인 Spatial-Temporal Interactive Dynamic Graph Convolution Network for Traffic Forecasting이라는 연구도 함께 살펴보시면 좋을 듯 싶습니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Koopman Neural Operator Forecaster for Time-series with Temporal Distribution Shifts (2)]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Koopman-Neural-Operator-Forecaster-for-Time-series-with-Temporal-Distribution-Shifts-2</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Koopman-Neural-Operator-Forecaster-for-Time-series-with-Temporal-Distribution-Shifts-2</guid>
            <pubDate>Sat, 16 Nov 2024 16:25:30 GMT</pubDate>
            <description><![CDATA[<p>이번 글은 ICLR 2023에서 accept된 <strong>시계열 예측 모형 KNF(Koopman Neural Forecasting)</strong>에 대해서 알아보도록 하겠습니다.</p>
<p>본 논문에서 제안하는 시계열 모델은 비정상성을 가진 시계열 데이터의 예측을 주목적으로 하는 모델입니다.</p>
<p>항상 시계열 공부를 하면서 정상성을 만족해야만 하는 모델들이 너무 많았고, ARIMA와 같은 기존 통계적 모델이 예측 성능 면에서 월등한 것도 아니기 때문에 정상성 가정을 넘어서는 최신 시계열 모델에 대해 공부하고 싶었는데 마침 잘 소개된 영상이 있어서 가지고 왔습니다.</p>
<p>또한 시계열 예측을 필요로 하는 데이터의 경우 항상 들었던 생각이 &quot;시계열 데이터의 경우 모델을 검증할 때 Train/Test로 분리하는 과정에서 상반기/하반기로 분리하게 되면 Distribution Shift, 즉 시간에 따라 데이터의 분포가 달라지는 걸 고려해야 올바른 분석이지 않을까&quot;하는 생각이었는데 마침 이 연구에서 그에 대한 답을 얻을 수 있을 것 같아서 더 맘에 드는 연구인 것 같습니다.</p>
<p>따라서 제안 모델에 대해 다루는 부분이 어렵다면 (1)편에서 시계열 데이터 특성을 다루는 부분이라도 읽어보시면 시계열 분석에 도움이 될 듯 합니다!</p>
<p>자료는 서울대학교 산업공학과 DSBA 연구실 소속 박진우 님의 유튜브 영상을 참고하였으며 링크는 아래와 같습니다.
<a href="https://www.youtube.com/watch?v=1UxuZ9jVU5U&amp;t=784s">DSBA KNF 논문 리뷰 영상</a></p>
<p>또한 본 논문은 구글 클라우드 AI 분들이 직접 연구하신 논문이여서 더 좋은 것 같고, SOTA에서도 Star가 엄청난 논문입니다. 논문과 깃허브 링크는 아래 링크를 통해서 확인할 수 있습니다. 
<a href="https://paperswithcode.com/paper/koopman-neural-forecaster-for-time-series">KNF 논문 &amp; 깃허브</a></p>
<p>(1)편에서 시계열 데이터의 특성과 모델 setting, 모델 아키텍처 중 Leveraging Predefined Measurement functions을 살펴 보았습니다. </p>
<p>따라서 이번 (2)편에서는 모델 아키텍처 설명 중 Global and Local Koopman Operators에서부터 이어서 설명드리겠습니다.</p>
<h1 id="method">[Method]</h1>
<h2 id="model-architecture">[Model architecture]</h2>
<p><strong>Global and Local Koopman Operators</strong></p>
<p>전통적인 Koopman thoery는 무한 차원을 유한 차원으로 근사하자는 게 기본 Concept이므로 전통적인 Koopman thoery을 따르면 measurement vector $G(V_t)$는 infinite dimension을 가지므로 학습이 불가능합니다.</p>
<p>하지만 제안 연구에서는 Encoder에서 finite한 approximate를 학습을 하고 있기 때문에 $G(V_t)$ 역시 finite Koopman-invariant subspace를 형성한다고 가정하여 이론적인 문제를 해결합니다.</p>
<p>다음으로 이상적으로 찾아야 하는 Koopman operator은 시간이 지나에 따라 measurements를 시간적으로 가장 잘 forwading 시키는 finite matrix를 의미합니다. </p>
<p>즉 아래 식에서 $g(x_t)$를 g(x_{t+1})로 잘 forward시키는 Koopman operator $K$를 찾는 것</p>
<p>$$
Kg(x_t) = g(F(x_t)) = g(x_{t+1})$$</p>
<p>이때 Koopman matrix는 time-step과 feature에 따라 달라져야 하지만 <strong>시계열의 전역적인 행동 또한 포착할 수 있어야 합니다.</strong></p>
<p>따라서 전체적인 경향성과 dynamics를 모두 모델링 하기 위해 Global operator $K^g$와 Local operator $K^l_t$를 따로 나눠서 사용합니다.</p>
<p>$$
Kg(V_t) = (K^g + K^l_t)g(V_t) = g(V_{t+1}), \quad t \leq 0$$</p>
<ul>
<li><p>Global operator $K^g$는 nd $\times$ nd의 학습이 가능한 matrix로 전체 시계열에서 공유함으로써 Trend와 같이 전체적으로 공유되는 동작 학습이 목적 </p>
</li>
<li><p>Local operator $K^l_t$는 Lookback window 내 샘플에 특화된 local dynamics 포착이 목적
$\to$ Lookback window 내에서 Autoregressive하게 지속적으로 학습하여 window 내의 distribution shift에 적용하게 하는 것이 목표</p>
</li>
</ul>
<p>Global operator와 Local operator를 어떻게 도출할건지에 대해선 제안 연구에서는 Single-head Transformer encoder에서 <strong>attention matrix<a id="footnote1" href="#test">(1)</a></strong>를 바탕으로 Local operator를 계산하며 Global operator은 Linear layer를 통하여 도출합니다.</p>
<p><strong>Feedback Loop</strong></p>
<p>Lookback window 중간에 갑작스런 Distribution shift가 발생한다고 가정하면 데이터 기반 모델 특성 상 발생한 변화의 이전과 이후 두 가지 distribution에 fitting 하고자 할 것이나 기존 연구에서는 단일 행렬만을 사용하기에 여러 분포를 모델링하기 충분하지 않았습니다.</p>
<p>이에 해당 연구에선 Lookback window 내부에서 발생한 Prediction error를 기준으로 하여 adjustment operator $K^c_t$를 사용하여 추가적인 feedback loop를 진행하여 이를 해결하고자 했습니다.</p>
<p>adjustment operator $K^c_t$은 Lookback window 내에서 Prediction을 지속적으로 도출하여 얻어진 예측값과 실제값 차이를 MLP에 입력 데이터로 넣음으로써 구해집니다.</p>
<p>따라서 최종 예측 시에는 세 가지 Operator의 합을 사용합니다.</p>
<p>$$
\hat{X_{t+i}} = \phi((K^g+K^l_t+K^c_t)^iG(V_t)), \quad i \gt0$$</p>
<p>즉, feedback loop는 lookback window 내부에서의 distribution shift가 발생할 경우 이를 감지하고, Global 및 local operator를 lookback window 내의 마지막 분포에 맞추기 위하여 설계된 것이라고 할 수 있습니다.</p>
<p><strong>Loss function</strong></p>
<p>해당 연구의 모델은 3가지 Loss를 바탕으로 학습이 진행됩니다.</p>
<p>1) $L_{rec} = l(X_t, \phi(G(\psi(X_t)X_t))), \quad t \geq0$
    Reconstruction loss로 Decoder $\phi$가 measurements로부터 시계열 데이터를 올바르게 구성하기 위함</p>
<p>2) $L_{back} = l(X_{t-q/k+i}, \phi((K^g+K^l_t)^iG(\psi(X_{t-q/k})X_{t-q/k}))), \quad 0 \lt i \le q/k$
Lookback window에서의 Prediction loss로, global/local operator의 합이 lookback window에서 가장 적합한 propagation matrix가 되도록 하기 위함</p>
<p>3) $L_{forw} = l(X_{t+i}, \phi((K^g+K^l_t+K^c_t)^iG(V_t))), \quad i \gt 0$</p>
<p>Prediction window에서의 Prediction accuracy를 위한 loss term으로, Feedback loop가 Koopman operator에 올바른 adjustment를 학습하게 하기 위함.</p>
<h1 id="experiment">[Experiment]</h1>
<p>해당 단원은 성능을 검증하는 파트로 중요한 부분만 가지고 왔습니다.</p>
<p><strong>Data 설명 지표</strong></p>
<p>1) Forecastability: 시계열의 푸리에 분해의 엔트로피를 이용하여 계산되며 계산된 값을 1에서 빼준 값으로 정의 </p>
<p>2) Lyapunov exponent: dynamical system이 초기 조건에 얼마나 민감한지를 측정하는 지표</p>
<p>3) Trend: 시계열에 선형 회귀를 fitting 시킨 후 기울기를 해당 시계열의 크기로 scaling 시킨 지표</p>
<p>4) seasonality: ACF test 사용</p>
<p><strong>Interpretability Results</strong></p>
<p>KNF는 Koopman operator의 spectral analysis를 제공한다는 것이 또 다른 장점! 
$\to$ 이를 통해 설명력을 확보 가능함</p>
<p>학습된 KNF 내의 $K^g+K^l_t$에 eigen-decomposition을 통하여 개별 eigen-function이 무엇을 학습했는지 확인할 수 있으며 각 eigen-function은 서로 다른 역할(어떤 경우는 trend, 어떤 경우는 seasonality에 강점)을 함. 따라서 종합적으로 학습에 유의미하게 작용함을 확인 가능하다.</p>
<h1 id="conclusion">[Conclusion]</h1>
<p>KNF는 분포 변화가 심한 시계열 데이터셋에서 가장 좋은 예측 성능을 보이며 해석 가능한 결과를 제공하기 때문에 큰 장점을 보임</p>
<ul>
<li><p>Perdefined measurement function을 활용하여  Neural network가 학습하기 어려운 비선형적이고 비정상성을 가지는 특성을 포착</p>
</li>
<li><p>Global operator를 통해 전체 시계열에서 공통되는 특성을 학습하고 Local operator를 통하여 변화하는 temporal dynamics를 포착</p>
</li>
<li><p>학습된 operator를 시간에 따라 지속적으로 업데이트하기 위하여 feedback loop 사용</p>
</li>
</ul>
<p><a id="test" href="#footnote1">(1) </a>: 추후 다룰 예정</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] CTGAN기반 데이터 증강 비율 최적화 연구]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-CTGAN%EA%B8%B0%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A6%9D%EA%B0%95-%EB%B9%84%EC%9C%A8-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%97%B0%EA%B5%AC</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-CTGAN%EA%B8%B0%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A6%9D%EA%B0%95-%EB%B9%84%EC%9C%A8-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%97%B0%EA%B5%AC</guid>
            <pubDate>Sun, 03 Nov 2024 14:54:30 GMT</pubDate>
            <description><![CDATA[<p>이번 논문은 CTGAN이라는 데이터 증강에 사용되는 모델을 통해 어떤 비율로 합성데이터를 만들어야하는지에 대한 논문입니다. </p>
<h1 id="데이터-불균형성의-문제">[데이터 불균형성의 문제]</h1>
<p>이진분류와 같은 분류문제에서는 종속변수의 Class끼리 수가 너무나도 다를 수 있다. </p>
<p>예를 들어 반도체 공정 불량품을 맞추는 AI가 있다면, 정상/불량이라는 종속변수의 두가지 Class 중에 정상에 해당하는 데이터는 많은 반면 불량에 해당하는 데이터는 1% 정도일 수도 있다. </p>
<p>이때 모델은 이러한 데이터의 불균형성이 존재할 경우 적은 수의 Class 분포를 제대로 학습하지 못해 과대적합이 발생할 수 있다.</p>
<p>따라서 SMOTE나 최근엔 CTGAN과 같은 데이터 증강기법을 통해 데이터의 불균형성을 해소하여 이 문제를 해결할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/47ccbdd0-1cc8-42e3-a722-23e2374abeed/image.png" alt=""></p>
<h1 id="gan">[GAN]</h1>
<p>테이블 데이터를 증강하는 모델은 크게 베이지안 네트워크(Bayesian Network)를 활용한 방법(CLBN, PrivBN 등)과 딥러닝 모델인 생성적 적대 생성망(GAN)을 활용한 방법 (MedGAN, VeeGAN, TableGAN, CTGAN 등)이 있다. </p>
<p>그러나 베이지안 네트워크기반 방법은 고차원 데이터와 같은 복잡하고 비선형적인 데이터 패턴을 모델링하기 어렵다는 한계가 있어, 최근에는 GAN을 활용한 딥러닝 기반의 데이터 증강 모델 연구가 활성화되고 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/9272a7c6-c404-4800-b02e-1a2658e952d6/image.png" alt=""></p>
<p>GAN은 생성자(Generator)와 판별자(Discriminator)의 구조를 가져 다양한 유형의 데이터를 생성할 수 있다. 생성자는 랜덤한 노이즈나 입력 데이터를 받아 실제 데이터와 유사한 데이터를 생성한다. </p>
<p>이렇게 생성된 데이터는 처음에는 랜덤하고 무질서하지만 훈련 과정을 통해 실제 데이터와 더욱 유사한 패턴을 학습하게 된다. </p>
<p>판별자는 생성자에서 만들어진 데이터와 실제 데이터를 구분하려고 노력하며 입력된 데이터가 실제인지 생성된 데이터인지 판별하는 역할을 한다. </p>
<p>생성자는 더욱 실제와 유사한 데이터를 생성하려고 노력하고, 판별자는 생성자가 만든 합성 데이터와 실제 데이터를 구분하려고 노력한다. 이 경쟁 과정에서 생성자는 점차적으로 더 나은 데이터를 생성하게 된다.</p>
<p><strong>즉, GAN의 핵심 아이디어는 생성자와 판별자가 서로 경쟁하며 학습하는 것이다.</strong></p>
<p>그래서 GAN, Generative Adversarial Network에 Adversarial가 이러한 모델에 정의에 포함된 이유이기도 하다.</p>
<p>특히, 이런 Tabular data(테이블 데이터)에 뛰어난 성능을 가진 딥러닝 모델이 CTGAN이다.</p>
<h1 id="ctgan">[CTGAN]</h1>
<p>조건부 적대적 테이블 생성망(Conditional Tabular GAN, CTGAN)은 GAN을 기반으로 하는 딥러닝 모델로, 연속과 불연속 데이터가 혼재되어있는 테이블 데이터에서 데이터를 생성하는 테이블 데이터 증강 모델이다. </p>
<p>일반적인 적대적 생성망은 다수의 클래스 데이터 위주로 학습되기 때문에 그 희소한 값을 잘 학습하지 못해, 데이터 재현 시 다수의 클래스만 재현하는 문제가 발생하게 된다. </p>
<p>그러나 조건부 적대적 생성망은 이러한 문제에 대응할 수 있다. 조건부 적대적 생성망을 통해 희소한 클래스를 생성하도록 범주형 열을 조건으로 넣어주어, 생성자가 학습 과정에서도 조건으로 희소한 범주형 속성값에 노출되도록 조절 가능하기 때문이다.</p>
<p>데이터 증강 모델을 사용하여 합성 데이터를 만들어 데이터를 증강하는 것과 희소 데이터를 단순히대량으로 복제하여 수를 늘리는 것(오버샘플링)은 차이가 있다. <strong>오버샘플링은 기존 데이터의 특성만 반영하여 과적합 모델로 이어질 수 있다는 한계</strong>가 있다.</p>
<p>CTGAN 데이터 증강 모델은 이웃 정의(Defining Neighborhoods)를 통해 희소한 데이터 사이의 일반적인 공통점을 식별하여 실제자료와 유사한 분포를 가진 맥락있는 합성 데이터를 생성할 수 있다는 장점이 있다.</p>
<h1 id="실험">[실험]</h1>
<p>실험은 테이블 데이터의 증강 시나리오에 따라 구분하였다. 먼저 <strong>시나리오 1인 원본 데이터의 사이즈가 작은 경우</strong>에는, 합성 데이터를 원본 데이터의 0.5배, 1배, 2배, 3배, 5배로 각각 증강하여, 원본 데이터와 합성 데이터의 5가지의 비율(1:0.5, 1:1, 1:2, 1:3, 1:5)을 구성하였다. </p>
<p>다음으로 원본 데이터에서 <strong>이상 데이터(소수 Class)만 증강하는 시나리오 2</strong>에서는, 정상 데이터와 이상 데이터의 비율을 기존의 1:0.001에서 다음과 같도록(1:0.005, 1:0.01, 1:0.05, 1:0.1) 이상 데이터를 각각 5배, 10배, 50배, 100배 증강하였다.</p>
<p>학습된 모델을 실제 데이터와 합성 데이터의 각 테스트 데이터에 적용하여 각각의 F1_Real과 F1_Fake 점수, 그리고 자카드 유사도를 구하여 적절한 증강 비율을 확인하였다.</p>
<h2 id="실험-결과">[실험 결과]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/39d83505-4ae9-4065-ad80-f6ad05bb6d48/image.png" alt=""></p>
<p>시나리오 1에서 전체 데이터를 늘리는 경우, 실제 데이터와 합성 데이터의 비율별로 |F1_Real-F1_Fake|의 점수와 자카드 유사도의 평균 점수를 비교하면 (그림 2)와 같다.</p>
<p>증강 비율별 |F1_Real-F1_Fake|의 평균 점수를 보면, 합성 데이터를 원본 데이터의 2배로 증가시켰을 때 그 차이가 가장 작아 합성 데이터와 원본 데
이터의 유사도가 가장 높고, 0.5배로 증가시켰을 때는 가장 낮은 유사도를 보였다. 자카드 유사도의 평균 점수의 경우에도 마찬가지로 합성 데이터를 원본 데이터의 2배로 늘렸을 때 유사도가 가장 높게 나왔으며, 0.5배로 늘렸을 때 가장 낮게 도출되었다.</p>
<p>그러나 |F1_Real-F1_Fake|의 경우 최고와 최저 성능의 차이가 0.03 미만이며, 자카드 유사도의 경우 0.01 미만으로 그 차이가 근소하여 <strong>본 실험의 시나리오 1에서는 합성 데이터를 실제 데이터의 5배까지 증강한다 하더라도 데이터의 특성에 큰 변화를 발생시키지 않는 것을 확인</strong>할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/90af2006-64bc-46c9-8fb8-6ab98bc434fc/image.png" alt=""></p>
<p>시나리오 2의 경우, 원본 이상 데이터가 충분하지 않아 두 데이터 간 유사성을 평가하기 어려웠다. 따라서 실험에서 설정한 정상 데이터와 이상 데이터의 비율 별로 합성한 각 이상 데이터 F를 전체 데이터 R에 더하여 RF 데이터를 만들었으며, R과 RF의 유사성을 비교하였다.</p>
<p>|F1_R–F1_RF|의 평균 점수를 보면 이상 데이터를 기존의 5배로 합성하여 전체 데이터와의 변화가 가장 적은 1:0.005의 경우가 가장 유사도가 높고, 이상 데이터를 100배 늘린 1:0.01의 경우가 유사도가 가장 낮게 나왔으나 그 차이는 근소하다.</p>
<p>자카드 유사도의 경우에도 비슷한 결과가 도출되었다. 그리고 |F1_R–F1_RF|의 평균과 자카드 유사도의 평균 점수 모두 <strong>전반적으로 이상 데이터의 합성 배율을 최대 100배 가까이 증강시킨다 하더라도 데이터의 특성 변화에 유의미한 영향을 미치지 않는것을 확인</strong>하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Koopman Neural Operator Forecaster for Time-series with Temporal Distribution Shifts (1)]]></title>
            <link>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Koopman-Neural-Operator-Forecaster-for-Time-series-with-Temporal-Distribution-Shifts-1</link>
            <guid>https://velog.io/@withs-study/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Koopman-Neural-Operator-Forecaster-for-Time-series-with-Temporal-Distribution-Shifts-1</guid>
            <pubDate>Fri, 18 Oct 2024 05:02:04 GMT</pubDate>
            <description><![CDATA[<p>이번 글은 ICLR 2023에서 accept된 시계열 예측 모형 <strong>KNF(Koopman Neural Forecasting)</strong>에 대해서 알아보도록 하겠습니다.</p>
<p>본 논문에서 제안하는 시계열 모델은 <strong>비정상성을 가진 시계열 데이터의 예측</strong>을 주목적으로 하는 모델입니다.</p>
<p>항상 시계열 공부를 하면서 정상성을 만족해야만 하는 모델들이 너무 많았고, ARIMA와 같은 기존 통계적 모델이 예측 성능 면에서 월등한 것도 아니기 때문에 <strong>정상성 가정을 넘어서는 최신 시계열 모델</strong>에 대해 공부하고 싶었는데 마침 잘 소개된 영상이 있어서 가지고 왔습니다. </p>
<p>또한 시계열 예측을 필요로 하는 데이터의 경우 항상 들었던 생각이 <strong>&quot;시계열 데이터의 경우 모델을 검증할 때 Train/Test로 분리하는 과정에서 상반기/하반기로 분리하게 되면 Distribution Shift, 즉 시간에 따라 데이터의 분포가 달라지는 걸 고려해야 올바른 분석이지 않을까&quot;</strong>하는 생각이었는데 마침 이 연구에서 그에 대한 답을 얻을 수 있을 것 같아서 더 맘에 드는 연구인 것 같습니다. </p>
<p>따라서 제안 모델에 대해 다루는 부분이 어렵다면 (1)편에서 시계열 데이터 특성을 다루는 부분이라도 읽어보시면 시계열 분석에 도움이 될 듯 합니다!</p>
<p>자료는 서울대학교 산업공학과 DSBA 연구실 소속 박진우 님의 유튜브 영상을 참고하였으며 링크는 아래와 같습니다.
<a href="https://www.youtube.com/watch?v=1UxuZ9jVU5U&amp;t=784s">DSBA KNF 논문 리뷰 영상</a></p>
<p>또한 본 논문은 구글 클라우드 AI 분들이 직접 연구하신 논문이여서 더 좋은 것 같고, SOTA에서도 Star가 엄청난 논문입니다. 논문과 깃허브 링크는 아래 링크를 통해서 확인할 수 있습니다. 
<a href="https://paperswithcode.com/paper/time-series-is-a-special-sequence-forecasting">KNF 논문 &amp; 깃허브</a></p>
<h1 id="overview">[Overview]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/6b4b6e3d-06e5-4a50-bf6a-65e2c4ad173b/image.png" alt=""></p>
<p>KNF(Koopman Neural Forecasting)은 한마디로 다음과 같습니다.
<strong>Non-Stationary timeseries</strong>를 분석하고자 동역학의 <strong>Koopman이론</strong>을 바탕으로 시계열 예측을 수행하는 모델!</p>
<p><em>Non-stationary</em> 하다는 것은 Distribution Shift가 발생한다는 것입니다. </p>
<p>이때 우리는 머신러닝과 딥러닝에서 일반적으로 Test Data와 Train Data의 분포가 일치한다고 가정하고 모델을 사용하는데, Distribution Shift가 존재한다면 이 가정을 위배하는 상황이 생긴다는 의미입니다.</p>
<p>따라서 Distribution Shift 문제를 해결하는 건 어렵지만 중요한 문제라는 의미이고, 이에 본 논문에서는 Koopman 이론을 활용하여 이 문제를 해결하였습니다. </p>
<h1 id="background">[Background]</h1>
<h2 id="timeseries-data-특성">[Timeseries data 특성]</h2>
<p><strong>정상성(Stationary)</strong></p>
<p>시간의 흐름에 따라 <strong>평균이나 분산 등의 통계적인 특성이 변하지 않는 데이터</strong>로, 정상성이 보장되기 위해선 추세나 계절성이 존재하지 않아야 합니다. </p>
<p>정상성이 존재한다면 데이터의 시점이 어떻게 바뀌든 간에 데이터의 분포는 같습니다. 하지만! <strong>현실의 데이터는 대부분 정상성을 가지지 못합니다.</strong></p>
<p>이는 실제 데이터엔 Seasonality, Concept drift, Change point 등과 같이 변동성을 가지는 특성들이 많기 때문입니다. </p>
<ul>
<li><p>Concept Drift: 독립변수에서 부터 예측하려고 하는 &quot;종속변수&quot;의 의미/개념/통계적 특성(즉 데이터와 라벨의 관계성, 데이터의 해석 방법)이 모델 훈련때와 비교하여 변화가 있음을 의미함.</p>
</li>
<li><p> Data Drift: 모델의 훈련시 &quot;독립변수&quot;의 통계적 분포와 테스트 시/ 실제 배포 환경에서의 &quot;독립변수&quot;의 통계적 분포가 어떠한 변화에 의해 차이가 발생하고 있는 것을 의미한다. Feature drift나 Covariate shift라고 불림.</p>
</li>
</ul>
<p><strong>Distribution Shift</strong></p>
<p>Distribution Shift는 시계열 데이터가 <em>Non-Stationary</em> 하면서 발생하는 기본적인 문제로, 시계열 데이터는 수집되는 특성 상 시간에 따라 특정 간격으로 순차적으로 수집되는데, <strong>대체로 시간 변화에 따라 분표가 변화</strong>하며 이에 따라 발생하는 문제입니다. </p>
<p>이러한 분포의 차이는 Train Data와 Test Data 사이의 분포 차이가 발생하게 되므로 시계열 모델의 <em>Generalization</em>이 잘 되지 않는 결과를 초래하여 낮은 성능을 야기합니다. 따라서 시계열 데이터를 잘 다루기 위해서는 시간에 따른 분포 변화로 인한 통계적인 특성 변화를 잘 포착하는 것이 중요합니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/301d2b3c-2a62-4ee8-9010-a4182cf7c200/image.png" alt=""></p>
<p><strong>Distribution Shift의 원인</strong></p>
<ol>
<li>Train data, Test Data 사이에서 발생하는 Distribution Shift</li>
<li>시간이 지남에 따라 분포 변화가 지속적으로 발생하는 경우
$\to$ Concept Drift 및 Non-stationary process와 관련</li>
</ol>
<p>대부분의 딥러닝 기반 접근 방식은 Stationary 시계열 데이터에서는 좋은 성능을 보이지만, 다양한 분포 변화를 보이는 데이터에 대해서는 약한 모습을 보입니다. </p>
<p><strong>Keyword description</strong></p>
<p>(1) Linear vs Nonlinear</p>
<p>모델의 출력결과와 입력값이 선형조합으로 표현될 수 있는지 없는지에 대한 차이입니다.</p>
<p>Linear 모형은 선형회귀, ARIMA 모델이 있으며 일반적으로 모델의 입력과 출력을 수식적으로 명확하게 보여줄 수 있어 설명력이 확보되는 모델이며, Non-linear 모형은 대표적으로 딥러닝 모형이 있고 이는 Black box 모델로 수식적으로 관계를 명확하게 설명할 수 없습니다. 대신 일반적으로 Linear 모형보다 예측력이 높다는 특징을 가지고 있습니다. </p>
<p>(2) Time-variant vs Time-invariant</p>
<p>Time-invariant란 시간이 지남에 따라서도 특성이 변하지 않는 시스템으로 입력 $X(t)$에 대한 출력이 $Y(t)$인 모델이 존재할 때 입력이 $r$만큼 늦어진 $X(t+r)$에 대해서도 동일하게 $r$만큼 늦어진 $Y(t+r)$의 출력이 도출됨을 보장할 수 있다는 의미입니다.</p>
<p>반면 Time-variant는 시간이 지남에 따라 특성이 변화하는 모델입니다. </p>
<p><strong>Koopman theory</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a9ab7bfb-6f75-4f7c-bebf-36de65707979/image.png" alt=""></p>
<p>Koopman theory는 <em>Nonlinear dynamic system</em> 의 분석 및 예측을 특정한 <em>Linear operator</em> 를 바탕으로 수행하는 것이 목적입니다.</p>
<ul>
<li><p><em>Nonlinear dynamic system</em> 은 특정 task에서 뛰어난 성능을 보일 수 있지만 매우 복잡한 구조를 가짐</p>
</li>
<li><p><em>Linear operator</em>은 비교적 간단하지만 다양한 수학적 도구와 기법으로 쉽게 분석할 수 있다는 장점 존재 </p>
</li>
<li><p>즉, Koopman theory의 핵심 아이디어는 <em>Nonlinear dynamic system</em>을 묘사할 수 있는 <em>Linear operator</em>를 찾는 것!!</p>
</li>
</ul>
<p>이를 바탕으로 <em>Nonlinear dynamic system</em>의 복잡성을 linear하게 변형하여 보다 직관적으로 이해하고 분석할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/66bc433f-800c-4b35-946a-115cce3fc17c/image.png" alt=""></p>
<p>시계열 데이터는 위와 같이 해당 데이터가 가지는 내재적인 변동성(koopman 이론에선 Dynamic)을 바탕으로 이상적인 궤도(Trajectory)를 구성할 수 있는 <em>function</em> <strong>F</strong>로 표현할 수 있습니다. </p>
<p>이때 Discrete-Time dynamical system 가정에서는 이를 $x_{t+1} = F(x_t)$로 수식화가 가능합니다. </p>
<p>Non-stationary timeseries data $x_t$는 <strong>Time-variant dynamics</strong>를 가지기에, 이를 선형 연산이 가능하게끔 더 높은 차원의 공간으로 변환하고자 <strong>Measurement function $g$</strong>이용하여 <strong>비선형 함수를 더 높은 차원 공간에서 다룸으로써 선형 함수로 근사</strong> 하고자 합니다. </p>
<p>이때 <em>Koopman operator</em> <strong>K</strong>는 고차원 공간에서의 선형 연산자로, $g(x_t)$를 $g(x_{t+1})$로 선형 변환할 수 있으며 결국 찾고자 하는 것은 $Kg(x_t) = g(x_{t+1})$를 가능하게 하는 <em>Koopman operator</em> <strong>K</strong>이다.(우리는  $F(x_t)$를 찾을 수 없기 때문)</p>
<ul>
<li><strong>*&quot;비선형 함수를 더 높은 차원 공간에서 다룸으로써 선형 함수로 근사&quot;*</strong>  예시</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/11811f17-16bc-4ac1-bb7d-6d08ecc41612/image.png" alt=""></p>
<p>위와 같은 비선형 데이터를 고차원 공간에서 다루면 아래와 같이 선형 함수를 통해 나눌 수 있음.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/94f98278-5ac2-4cb6-b958-13d0fdf4c9dc/image.png" alt=""></p>
<h1 id="method">[Method]</h1>
<h2 id="contribution">[Contribution]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/efdb8314-4233-4ab7-b2b7-e74bb9cfb4eb/image.png" alt=""></p>
<p>(1) <strong>Leveraging Predefined Measurement functions</strong></p>
<ul>
<li><strong>Predefined Measurement function</strong>을 <em>Learned coefficients</em>와 함께 사용하여 Timeseries를 functional space로 mapping</li>
</ul>
<p>(2) <strong>Global and Local Koopman Operators</strong></p>
<ul>
<li><strong>Global Koopman Operators</strong>를 사용하여 공유되는 특성을 학습하고, <strong>Local Koopman Operators</strong>를 통하여 지역적인 변화 dynamics를 포착</li>
</ul>
<p>(3) <strong>Feedback loop</strong></p>
<ul>
<li><em>Forecasting error</em> 에 기반하는 <strong>Feedback loop</strong>를 통합하여, 학습된 <em>operator</em>를 시간이 지남에 따라 <strong>재학습함</strong>으로써 long-term forecasting 성능을 유지</li>
</ul>
<h2 id="model-setting">[Model setting]</h2>
<p>우리는 과거의 값을 바탕으로 미래 값을 예측할 수 있는 <strong>functional map $f$</strong>를 찾는 것이 목적으로 다음과 같이 수식으로 나타낼 수 있습니다. </p>
<p>$$
f: (x_{t-q+1}, \dots , x_t) \to (x_{t+1}, \dots, x_{t+h})$$</p>
<p>여기서, $q$는 얼마만큼의 데이터를 모델의 입력 데이터로 사용할 것인지에 대한 하이퍼파라미터인 Window length라 하며, $h$는 얼만큼 예측할 것인지에 대한 하이퍼파라미터인 forecasting horizon를 의미합니다. </p>
<p><strong>Koopman theory</strong>는 어떠한 <strong>Nonlinear dynamic system</strong>이 가능한 모든 <strong>measurement function</strong>의 공간 안에서 작동하는 <strong>infinite-dimensional linear Koopman operator</strong>로 모델링될 수 있다는 것을 보여준다.</p>
<p>$$ 
Kg(x_t) = g(F(x_t)) = g(x_{t+1})$$</p>
<h2 id="model-architecture">[Model architecture]</h2>
<p><img src="https://velog.velcdn.com/images/withs-study/post/5455566f-d756-4883-b1b4-aec96e681a54/image.png" alt=""></p>
<p><strong>Leveraging Predefined Measurement functions</strong></p>
<p>먼저, Koopman Space를 이루는 <strong>Measurement function</strong>의 Set 정의 
$$
G = [g_1, \dots , g_m]$$</p>
<p>어떠한 Measurement function을 사용해도 상관없지만 제안 연구에서는 <strong>Canonical nonlinear function</strong> 사용</p>
<p><strong>Canonical nonlinear function</strong>이란</p>
<ul>
<li>polynomials, exponential functions, trigonometric functions 등이 존재</li>
<li>Duffing oscillator, 유체역학 등의 분야에서 복잡한 dynamic system 모델링에 흔히 이용되며 DNN으로는 학습하기 어려운 <strong>high-nonlinear action</strong>을 표현 가능</li>
<li>Canonical nonlinear function은 전통적으로 성능이 보장되는 case가 많았고, 이들은 모델에 학습 과정 중 일반화 성능을 얻기 위해 추가적으로 도입되는 편향인 inductive bias를 잘 반영하며 nonlinear 동작도 잘 포착할 수 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/b544705b-b137-47b6-ba3b-4847ac60fee7/image.png" alt=""></p>
<p>다음으로, 코딩 과정에서 데이터를 고차원의 데이터로 바꾸기 위해 Embedding을 하게 됩니다. </p>
<p>이때 만약 우리가 데이터를 8개의 dimension으로 Embedding하고 4개의 Predefined measurement function을 사용하게 된다면, 4개의 dimension에 대해서만 Predefined measurement function의 Coefficient로 구성이 되며 나머지 4개의 부분은 파라미터로써 추후 모델에서 역할을 하게 됩니다. </p>
<ul>
<li><p><strong>Embedding</strong>: 일반적으로는 범주형인 값을 연속적인 숫자로 구성된 벡터로 변환하는 것으로, 특히 인공신경망에서는 임베딩은 <strong>원래 차원보다 저차원의 벡터로 만드는 것</strong>을 의미</p>
</li>
<li><p>원래 차원은 매우많은 범주형 변수들로 구성되어있으나 학습방식(인근에 모여있는 것들끼리 그룹화)을 통해 저차원으로 대응되며 인공신경망의 임베딩은 수천 수만개의 고차원 변수들을 몇백개의 저차원 변수로 만들어 주고, 또한 변형된 저차원 공간에서도 충분히 카테고리형 의미를 내재하기 때문에 차원축소 관점에서도 유용함</p>
</li>
</ul>
<p>이는 뒤에서 다시 다루도록 하겠습니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/f0d6c7ef-ab2e-44e9-b573-1c2c3112386b/image.png" alt=""></p>
<p>이제 모델에 입력 시계열 데이터가 들어온다면 모델이 어떻게 작동하는지 알아봅시다. 중요한 부분입니다!</p>
<p>어떠한 입력 시계열 데이터가 들어온다면 Encoder의 입력으로 사용하여 Measurement function의 계수 $\Psi(X_t)$로 사용합니다. $\Psi : \mathbb{R}^{d \times k} \to \mathbb{R}^{n \times d \times k}$ </p>
<p>이 입력 시계열 데이터가 Encoder를 통해서 나온 결과를 그대로 이용하는 게 아니라 Measurement function의 계수를 향후 모델링 과정에서 사용하게 됩니다. </p>
<ul>
<li>$\Psi(X_t)$는 사전에 정의된 Canonical nonlinear function의 계수를 의미하며, 해당 계수들은 각 Measurement function이 어떻게 입력데이터의 특정 부분(변수, 시점)에 어떻게 적용될지 결정하게 된다. </li>
</ul>
<p>이때 하나의 Window 내에서도 Distribution shift가 발생할 수 있기 때문에 하나의 Window 내에서도 다양한 구간으로 나누어 모델링을 진행합니다. </p>
<p>위 과정을 통해 Encoder의 output인 계수를 구하고나선, 원본 데이터의 값을 함께 고려함으로써 최종적인 계수 $V_t = [V_t^{(1)}, V_t^{(2)}, \dots, V_t^{(n)}] \in \mathbb{R}^{n \times d}$를 도출합니다. </p>
<p>이때 원본 데이터의 값을 함께 고려하는 과정을 아래와 같이 이뤄집니다.</p>
<p>$$
V_t[i,j] = \sum_l \psi(X_t)[i,j,l] X_t[j,l], \quad 1\leq i \leq n, 1\leq j \leq d, 1 \leq l \leq k$$</p>
<ul>
<li><p>$V_t[i,j]$
$\to$ encoder를 거친 후 Representation과 <strong>원본 시계열 데이터의 Linear transformation</strong>. 즉, 해당하는 시계열 데이터가 가지는 동역학적인 특성을 measurement function의 계수로 변환한 것</p>
</li>
<li><p>$\psi(X_t)[i,j,l]$
$\to$  encoder를 바탕으로 입력 시계열 데이터에서의 각 시간 스텝, 특성, 측정함수에 대응하는 가중치 값을 생성</p>
</li>
<li><p>$X_t[j, l]$
$\to$  $t$ 시점에서의 입력 시계열 데이터</p>
</li>
</ul>
<p>이어 다음 과정을 살펴봅시다.</p>
<p>앞에서 구한 $V_t$를 활용하여 Predefined measurement function을 적용하여 <strong>Measurement</strong>를 도출합니다. 이때 $g_1$은 Polynomial function, $g_2$는 trigonometric function 등 앞에서 정의한 함수를 사용하며 각 함수는 다른 종류일 수 있습니다. Measurement 수식적인 과정은 아래와 같습니다. </p>
<p>$$
G(V_t) = [g_1(V_t^{(1)}), g_2(V_t^{(2)}), \dots, g_n(V_t^{(n)})] \in \mathbb{R}^{n \times d}$$</p>
<p>구해진 Measurement를 flatten한 후, 최종적인 decoder $\phi$: $\mathbb{R}^{n \times d} \to  \mathbb{R}^{k \times d}$를 통하여 observation을 Reconstruction합니다. </p>
<p>$$
\hat{X_t} = \phi(G(V_t))$$</p>
<p>제안 연구에서 Encoder과 Decoder은 MLP layer를 이용하였으며, Encoder 모델은 non-stationary 특성을 직접적으로 학습할 필요 없이 오직 measurement function의 parameter만을 근사하는 것이 목적이다. </p>
<ul>
<li>predefined measurement function은 학습된 measurement function을 사용하는 것보다 더 좋은 성능을 보임 </li>
</ul>
<h1 id="next">[Next]</h1>
<p>이어서, (2)편에서 Global and Local Koopman Operators부터 다루도록 하겠습니다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[딥러닝 기초 (2)]]></title>
            <link>https://velog.io/@withs-study/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-2</link>
            <guid>https://velog.io/@withs-study/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-2</guid>
            <pubDate>Sat, 05 Oct 2024 18:33:20 GMT</pubDate>
            <description><![CDATA[<p>이번 글에서는 앞으로 자주 다루게 될 딥러닝에 대해 개괄적으로 다뤄보도록 하겠습니다.</p>
<h1 id="output--loss-function">[Output / Loss function]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/bf43acb6-97b0-4e03-929d-78324ffbcfad/image.png" alt=""></p>
<p>우리가 이해하기 가장 쉬운 이진분류 문제(Binary Classification)를 예시로 <em>Output function or Loss function</em> 에 대해서 알아보자</p>
<p>만약에 MLP를 활용해 모델을 구성하여 출력층에서 다음과 같이 결과가 도출되었다. 이때 MLP 결과는 우리가 원하는 0 or 1이 아니라 위 왼쪽 행렬과 같이 출력층 결과가 도출된다. </p>
<p>따라서 우리는 출력층 결과를 결과 값인 각 Class에 <em>mapping</em> 을 해야한다.</p>
<p>이를 위한 <em>function*으로 기존엔 *argmax</em> 값을 사용하고자 하였다.</p>
<p>만약에 위와 같이 출력층의 결과가 도출된다면 1.37을 class 1에 매핑했다. 하지만 이 방식은 스코어값이 천차만별로 튀어나오고 이진분류에선 크게 도움이 안된다.</p>
<p>왜냐면 <em>argmax function</em>을 사용한다면 $(1.37, 0)$이든 $(1.37, 1.36)$이든 큰 값을 1로 매칭한다는 것인데, 이는 거의 비슷한 값일 수 있음에도 0과 1로 확 구분된다는 문제점을 가지고 있기 때문이다.</p>
<p>즉, <strong>argmax function은 출력값 결과 자체는 비슷한데도 class가 나뉘므로 분류 성능이 낮다.</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/d8c7c6e2-add0-486e-9aa4-2332b2d28c73/image.png" alt=""></p>
<p>그래서 등장한 게 <strong>softmax function</strong>이다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/94625b70-9fce-4ea9-be28-5a635ac92009/image.png" alt=""></p>
<p><strong>softmax function</strong>은 위와 같은 식으로 구성되며, 장점은 0과 1사이로 출력값이 나오고 이 출력값의 합이 1이 된다는 것이다.</p>
<p>왜냐하면 출력값의 합이 1이 되기 때문에 찾고자 하는 정답인 1과 0에 가깝게 나눠질 수 있고, Good case엔 1과 0으로 명확하게 나눠질 수도 있는 함수이기 때문이다. 따라서 실제로 <em>Softmax function</em> 을 많이 사용한다고 한다.</p>
<p>또한 결과값을 정규화시킨다는 특징이 있으며 지수함수를 사용함으로써 미분을 가능케하고, 입력값 중 큰 값은 더 크게 작은 값은 더 작게 만들어 <em>Classification</em> 이 더 명확해진다는 특징도 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/5e33e862-512e-4445-8793-8e2e2013cea8/image.png" alt=""></p>
<p>출력층에 자주 사용되는 <em>Softmax function</em>은 입력으로 사용되는 벡터의 차원은 분류하고자 하는 <em>Class</em>의 개수가 되어야 하므로 만약 위의 그림처럼 4개의 변수로 구성된 경우 4차원 벡터가 입력되는데, 이때는 어떤 가중치 연산을 통해 3차원 벡터로 바꿔줘야 한다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2067e2e9-0acf-40bd-86d0-d7f44dec3f80/image.png" alt=""></p>
<p>따라서 4차원 데이터 벡터를 <em>Softmax function</em>의 입력 벡터로 차원을 축소하려면 위와 같이 입력 벡터 $Z$의 차원수만큼 결과값이 나오도록 가중치 곱을 진행하여 위 그림처럼 총 12(3 x 4)개의 화살표가 다른 가중치를 가지며 학습 과정에서 점차적으로 오차를 최소화하는 가중치로 값이 업데이트되도록 바꿔주면 된다.</p>
<p>그렇다면 오차를 줄이는 방향으로 가중치를 어떻게 업데이트시키냐?</p>
<p>바로 <strong>Cross-entropy</strong>를 활용한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/c9cace2b-dd77-4d50-8d55-a8ff6c5a47a7/image.png" alt=""></p>
<p>만약 위와 같이 3개의 Class가 있을 때 각 실제값마다 다음과 같은 원-핫 벡터가 존재할 것이다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/b9572a5c-39e3-452f-9fc0-50ee78e1f896/image.png" alt=""></p>
<p>만약 데이터의 실제 <em>Class*가 setosa라면 위와 같이 setasa의 원-핫 벡터와 예측값 간의 차이를 오차로 정의하여 그 오차를 이용하여 *Cross-entropy</em> 를 손실함수로 사용하여 손실함수가 최소화되는 방향으로 가중치를 업데이트한다. </p>
<p>$$
H(P,Q) = - \sum P(x)logQ(x)$$</p>
<p><em>Cross-entropy</em>는 위 식과 같이 구성되는데, 만약 3개의 클래스 $c_1, c_2, c_3$가 존재하는 분류 문제에서 어떤 데이터의 출력값이 다음과 같다면</p>
<p>$$
softmax(input) =  \begin{pmatrix} 0.2 \ 0.7 \ 0.1 \end{pmatrix}$$</p>
<p>모델이 나타내는 확률분포 $Q(x)$는 다음과 같이 나타낼 수 있다.</p>
<p>$$
Q(X=c_1) = 0.2 \ Q(X=c_2) = 0.7 \ Q(X=c_3) = 0.1 $$</p>
<p>만약 데이터가 실제로 2번 <em>Class</em>에 해당한다면 데이터의 실제 확률분포 $P(x)$는 아래와 같이 나타난다. </p>
<p>$$
P(X=c_1) = 0 \ P(X=c_2) = 1 \ P(X=c_3) = 0 $$</p>
<p>따라서 위의 $Q(x)$와 $P(x)$를 통해 <em>Cross-entropy</em>를 계산한다면 다음과 같은 결과가 도출된다.</p>
<p>$$
\begin{aligned} &amp;H(P, Q) = - \sum P(x)logQ(x) \
&amp;= -(0 \cdot log0.2 + 1 \cdot log0.7 + 0 \cdot log0.1) \
&amp;    = - log0.7 \approx 0.357 \end{aligned}$$</p>
<p>이때 $H(P,Q)$를 최소로 만들도록 가중치를 업데이트한다. </p>
<p>예를 들어 $Q(x)$가 $[0.4, 0.4, 0.2]$라면 $H(P,Q)$값이 더 커지게 되고 이는 분류가 제대로 되지 않았을 확률이 높다는 것과 직관적으로 같다는 것을 확인할 수 있다.</p>
<h1 id="역전파">[역전파]</h1>
<p> 이제까지 딥러닝 모델의 시작인 퍼셉트론부터 MLP, 모델의 오차 계산까지 다뤄보았다. 사실 여기까지의 내용만 보면 딥러닝의 성능이 탁월하게 좋은 이유가 부족하다고 생각할지도 모른다. </p>
<p> 하지만 딥러닝의 성능이 탁월히 좋은 이유는 바로 이제 다룰 딥러닝의 <strong>학습</strong>에 있다.</p>
<p> 그리고 딥러닝 학습에서의 핵심이 바로 이번 단원의 <strong>역전파(Backpropagation)</strong>이다.</p>
<p> <img src="https://velog.velcdn.com/images/withs-study/post/9b2b2dd6-4b8e-4e62-aae7-8d6e1d051547/image.png" alt=""></p>
<p><strong>역전파</strong>란 실제 값과 모델의 예측 값 사이 얼마나 차이가 나는지 확인하고 그 오차를 바탕으로 가중치와 편향을 뒤에서부터 앞으로 갱신해가는 것을 의미한다. </p>
<p>그리고 역전파는 <strong>경사하강법</strong>을 통해 오차가 최소화되는 방향으로 최적화(Optimization)되고 <strong>미분의 연쇄법칙(Chain Rule)</strong>을 통해서 그 값이 계산된다.</p>
<h2 id="경사하강법">[경사하강법]</h2>
<p> 가중치를 최적화하는 방법은 일반적으로 경사하강법 즉, <em>Gradient Descent</em> 기반의 최적화 기법이 사용된다. </p>
<p> 따라서 경사하강법 알고리즘에 대해 먼저 살펴보자.</p>
<p> 경사하강법은 함수의 기울기(Gradient)를 이용하여 독립변수 값들을 어디로 옮겼을 때 함수가 최소가 되는지를 알아보는 방법이다. 기울기가 양수라는 것은 독립변수 $x$ 값이 커질수록 함수 값이 커진다는 것을 의미하고, 반대로 기울기가 음수라면 $x$값이 커질수록 함수의 값이 작아진다는 것을 의미한다.</p>
<p>또한 기울기의 값이 크다는 것은 단위당 변화가 큰 지점이라는 것을 의미하기도 하지만 또 한쳔으로는 $x$의 위치가 최소값 혹은 최댓값에 해당되는 $x$ 좌표로부터 멀리 떨어져있는 것을 의미하기도 한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/4b9b50a1-2aee-43f2-8938-69a8ce75f684/image.png" alt=""></p>
<p>우리는 경사하강법을 통해 함수의 최소값을 구해야 하므로 특정 값 $x$에서 기울기가 양수이라면 음의 방향으로 $x$를 옮겨야 하고 반대로 기울기가 음수라면 양의 방향으로 $x$로 옮겨야 함을 파악할 수 있다.</p>
<p>이를 다음과 같이 수식으로 나타낼 수 있다.</p>
<p>$$
x_{i+1} = x_i - 이동 거리 \times 기울기의 부호$$</p>
<p>여기서 $x_i$와 $x_{i+1}$은 각각 $i$번째, $i+1$번쩨 계산된 $x$의 좌표를 의미한다.</p>
<p>즉 기울기의 부호를 통해 가중치를 최소화하는 방향을 파악할 수 있다.</p>
<p>그럼 <strong>이동 거리</strong>는 어떻게 계산할 수 있을까?</p>
<p>미분 계수(기울기)값은 극소값에 가까울 수록 그 값이 작아진다.
(극대값에 가까울 때에도 미분 계수는 작아지지만 극대값에 머물러 있는 경우는 극히 드물기 때문에 이 문제에 대해서는 고려하지 않음)</p>
<p>따라서, 이동거리에 사용할 값을 gradient의 크기와 비례하여 이동 거리를 설정하면 현재 $x$의 값이 극소값에서 멀 때는 많이 이동하고, 극소값에 가까워졌을 때는 조금씩 이동할 수 있게 된다.</p>
<p>즉, gradient 값을 직접 이용하되, 이동 거리를 적절히 사용자가 조절 할 수 있게 수식을 조정해 줌으로써 상황에 맞게 이동거리를 맞춰나갈 수 있게 하면 된다.</p>
<p>이때, 이동 거리의 조정 값을 보통 step size라고 부르고 기호는 $\alpha$로 사용한다.</p>
<p>따라서 최종 수식은 다음과 같이 계산할 수 있다.</p>
<p>$$
x_{i+1} = x_i - \alpha \frac{df}{dx}(x_i)$$</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/918998f0-ab6b-4598-8472-88c7260b12a3/image.png" alt=""></p>
<p>그리고 이를 다변수 함수로 확장하면 다음과 같은 식으로 나타난다.</p>
<p>$$
x_{i+1} = x_i - \alpha     \nabla f(x_i)$$</p>
<p>(<a href="https://velog.io/@withs-study/%ED%86%B5%EA%B3%84%ED%95%99%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-Chapter-1-%EB%AF%B8%EB%B6%84#%EB%AF%B8%EB%B6%84%ED%95%A8%EC%88%98%EC%99%80-%ED%8E%B8%EB%AF%B8%EB%B6%84%ED%95%A8%EC%88%98">$\nabla$가 뭔지 궁금하다면</a>: 미분함수와 편미분 함수 단원 참고)</p>
<p> 그리고 이를 가중치 업데이트 식으로 변환하면 아래와 같다.
 $$
 w_{new} \leftarrow w_{old} - \nabla w\cdot\alpha$$</p>
<ul>
<li>학습률(learning rate): $\alpha \to$ hyper-parameter</li>
</ul>
<p>[경사하강법 참고 링크!] (<a href="https://angeloyeo.github.io/2020/08/16/gradient_descent.html">https://angeloyeo.github.io/2020/08/16/gradient_descent.html</a>)</p>
<h2 id="미분의-연쇄법칙">[미분의 연쇄법칙]</h2>
<p>그럼 이번엔 미분의 연쇄법칙, <strong>Chain Rule</strong>을 알아보자.</p>
<p>연쇄법칙(Chain Rule)이란 &quot;합성함수의 미분은 합성함수를 구성하는 각 함수의 미분의 곱으로 나타내어진다.&quot; 라는 의미다.</p>
<p>식으로 나타내면 다음과 같이 나타낼 수 있다. </p>
<p>$$
\frac{\partial L}{\partial w_i} = \frac{\partial L}{\partial y} \times \frac{\partial y}{\partial h} \times \frac{\partial h}{\partial w_i}$$</p>
<p>위 식을 통해 가중치 $w_i$ 변화에 따른 <em>Cost function</em> $L$의 변화량을 계산할 수 있다. </p>
<h2 id="역전파-계산">[역전파 계산]</h2>
<p>그럼 이제 경사하강법과 미분의 연쇄법칙을 적용하여 역전파를 계산하는 문제를 한번 해결해보자.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a6872742-ae5f-4733-a21c-baeafc84f6f5/image.png" alt=""></p>
<p>다음과 같이 입력층, 은닉층, 출력층 총 3개의 층으로 구성된 딥러닝 모델이 있다고 하자. 이때 은닉층과 출력층의 활성화 함수는 앞에서 다룬 <em>Sigmoid function</em>을 사용하며 인공 신경망에 존재하는 모든 가중치 $w$에 대해 역전파를 통해 업데이트 하며 편향 $b$는 고려하지 않는다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/c786ed51-1074-4ca5-8b22-f305593d1062/image.png" alt=""></p>
<p>위와 같이 값들이 주어졌을 때 역전파를 진행하기 전 순전파 과정부터 계산해보자. </p>
<p>각 입력은 입력층에서 은닉층 방향으로 향하면서 각 입력에 해당하는 가중치와 곱해지고, 결과적으로 가중합으로 계산되어 은닉층 뉴런의 시그모이드 함수의 입력값이 된다. 아래에서 $z_1$과 $z_2$는 시그모이드 함수의 입력으로 사용되는 각각의 값이다.</p>
<p>$$
z_1 = w_1x_1 + w_2x_2 = 0.3 \times 0.1 + 0.25 \times 0.2 = 0.08 \ 
z_2 = w_3x_1 + w_4x_2 = 0.4 \times 0.1 + 0.35 \times 0.2 = 0.11$$</p>
<p>$z_1$, $z_2$가 각각의 은닉층 노드에서 시그모이드 함수를 거친 최종 출력값은 $h_1$, $h_2$가 되며 아래의 결과와 같다.</p>
<p>$$
h_1 = sigmoid(z_1) = 0.51998934 \
h_2 = sigmoid(z_2) = 0.52747230$$</p>
<p>또다시 $h_1$, $h_2$는 출력층의 노드로 가며, 이때 다시 각각의 값에 해당하는 가중치와 곱해진 후 가중합 되어 출력층 뉴런의 시그모이드 함수의 입력값이 된다. 식에서는 각각 $z_3$과 $z_4$에 해당한다.</p>
<p>$$
z_3 = w_5h_1 + w_6h_2 = 0.45 \times h_1 + 0.4 \times h_2 = 0.44498412 \ 
z_4 = w_7h_1+ w_8h_2 = 0.7 \times h_1 + 0.6 \times h_2 = 0.68047592$$</p>
<p>$z_3$, $z_4$는 출력층의 뉴런에서 시그모이드 함수를 지나 $o_1$, $o_2$가 되고 이 값들이 이 인공 신경망에서 최종적으로 계산한 출력값 즉, 예측값이 된다. 수식으로 계산한 결과는 아래와 같다.</p>
<p>$$
o_1 = sigmoid(z_3) = 0.60944600 \
o_2 = sigmoid(z_4) = 0.66384491$$</p>
<p>이제 예측값과 실제값 사이의 오차를 계산하여야 한다.</p>
<p>여기서 오차를 계산하기 위한 손실함수로는 평균제곱오차(MSE)를 사용하였으며 식에서 실제 값을 $target$으로, 예측 값을 $output$로 표현했다. 그리고 각 오차를 모두 더한 전체 오차가 $E_{total}$이 된다. </p>
<p>$$
E_{o_1} = \frac{1}{2}(target_{o_1} - output_{o_1})^2 = 0.02193381 $$
$$
E_{o_2} = \frac{1}{2}(target_{o_2} - output_{o_2})^2 = 0.00203809 $$
$$
E_{total} = E_{o_1} + E_{o_2} = 0.02397190$$</p>
<p>순전파가 입력층에서 출력층으로 향한다면 역전파는 반대로 출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트한다. 출력층 바로 이전의 은닉층을 N층이라고 하였을 때, 출력층과 N층 사이의 가중치를 업데이트하는 단계를 역전파 1단계, 그리고 N층과 N층의 이전층 사이의 가중치를 업데이트 하는 단계를 역전파 2단계라고 해보자.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/c145f144-997b-4522-a565-1eb6328c9f78/image.png" alt=""></p>
<p>역전파 1단계에서 업데이트해야할 가중치는 $w_5, w_6, w_7, w_8$ 총 4개이다. 원리 자체는 동일하게 적용되므로 $w_5$를 예시로 업데이트를 진행해보자. </p>
<p>경사하강법을 수행하여 가중치 $w_5$를 업데이트하기 위해선 $\frac{\partial E_{total}}{\partial w_5}$를 계산해야한다.</p>
<p>이를 위해 미분의 연쇄법칙에 따라 아래와 같이 풀어서 계산할 수 있다. </p>
<p>$$
\frac{\partial E_{total}}{\partial w_5} = \frac{\partial E_{total}}{\partial o_1} \times \frac{\partial o_1}{\partial z_3} \times \frac{\partial z_3}{\partial w_5}$$</p>
<p>위의 식에서 우변 각 항에 대해 첫번째 항부터 계산해보면 $E_{total}$이므로 아래와 같다.</p>
<p>$$
E_{total} = \frac{1}{2}(target_{o_1} - output_{o_1})^2 + \frac{1}{2}(target_{o_2} - output_{o_2})^2$$</p>
<p>이에 $\frac{\partial E_{total}}{\partial o_1}$은 다음과 같다.</p>
<p>$$
\frac{\partial E_{total}}{\partial o_1} = 2 \times \frac{1}{2}(target_{o_1} - output_{o_1})^{2-1} \times (-1) + 0$$</p>
<p>$$
\frac{\partial E_{total}}{\partial o_1} = -(target_{o_1} - output_{o_1}) = -(0.4-0.60944600) = 0.20944600$$</p>
<p>이제 두번째 항을 살펴보자. </p>
<p>$o_1$이라는 값은 시그모이드 함수의 출력값이며, 시그모이드 함수의 미분은 아래 식에 따라 $f(x) \times (1-f(x))$이다.
<img src="https://velog.velcdn.com/images/withs-study/post/edd7e829-a35e-4ca4-8147-e0a666b09651/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/3c7b9374-0a91-48d1-8915-193e922e8707/image.png" alt=""></p>
<p>따라서 두번째 항의 미분 결과는 다음과 같다.</p>
<p>$$
\frac{\partial o_1}{\partial z_3} = o_1 \times (1-o_1) = 0.60944600(1-0.60944600) = 0.23802157$$</p>
<p>마지막으로 세번째 항은 $h_1$과 동일하므로 다음과 같다.</p>
<p>$$
\frac{\partial z_3}{\partial w_5} = h_1 = 0.51998934$$</p>
<p>그럼 이제 우변의 모든 항을 곱하면 다음과 같은 결과가 도출된다.</p>
<p>$$
\frac{\partial E_{total}}{\partial w_5} = 0.20944600 \times 0.23802157 \times 0.51998934 = 0.02592286$$</p>
<p>이제 앞서 배웠던 경사하강법의 가중치를 업데이트할 수 있다. 하이퍼파라미터에 해당하는 학습률 $\alpha$를 0.5라고 가정하면 다음과 같은 식이 계산된다. </p>
<p>$$
w_5^+ = w_5 - \alpha \frac{\partial E_{total}}{\partial w_5} = 0.45 - 0.5 \times 0.02592286 = 0.43703857$$</p>
<p>이와 같은 원리로 $w_6^+, w_7^+, w_8^+$을 계산할 수 있다.</p>
<p>$$
\frac{\partial E_{total}}{\partial w_6} = \frac{\partial E_{total}}{\partial o_1} \times \frac{\partial o_1}{\partial z_3} \times \frac{\partial z_3}{\partial w_6} \to w_6^+ = 0.38685205$$</p>
<p>$$
\frac{\partial E_{total}}{\partial w_7} = \frac{\partial E_{total}}{\partial o_2} \times \frac{\partial o_2}{\partial z_4} \times \frac{\partial z_4}{\partial w_7} \to w_7^+ = 0.69629578$$</p>
<p>$$
\frac{\partial E_{total}}{\partial w_8} = \frac{\partial E_{total}}{\partial o_2} \times \frac{\partial o_2}{\partial z_4} \times \frac{\partial z_4}{\partial w_8} \to w_8^+ = 0.59624247$$</p>
<p>그럼 이제 역전파 2단계로 넘어가보자.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/4ee9528f-baa8-415e-8892-9e595471e11f/image.png" alt=""></p>
<p>이때 유의할 점은 현재 인공 신경망은 은닉층이 1개밖에 없으므로 이번 단계가 마지막 단계이지만 은닉층이 더 많은 경우라면 입력층 방향으로 한 단계씩 계속해서 계산해가야 한다.</p>
<p>그럼 이제 가중치 $w_1, w_2, w_3, w_4$를 업데이트 해보자. $w_1$도 미분의 연쇄법칙에 따라 아래와 같이 풀어서 사용할 수 있다.</p>
<p>$$
\frac{\partial E_{total}}{\partial w_1} = \frac{\partial E_{total}}{\partial h_1} \times \frac{\partial h_1}{\partial z_1} \times \frac{\partial z_1}{\partial w_1}$$</p>
<p>위 식에서 우변의 첫번째 항인 $\frac{\partial E_{total}}{\partial h_1}$은 다음과 같이 다시 풀어서 쓸 수 있다.</p>
<p>$$
\frac{\partial E_{total}}{\partial h_1} = \frac{\partial E_{o_1}}{\partial h_1} + \frac{\partial E_{o_2}}{\partial h_1}$$</p>
<p>따라서 첫번째 항을 분해 및 계산하면 아래와 같이 나타낼 수 있다.</p>
<p>$$
\frac{\partial E_{o_1}}{\partial h_1} = \frac{\partial E_{o_1}}{\partial z_3} \times \frac{\partial z_3}{\partial h_1} = \frac{\partial E_{o_1}}{\partial o_1} \times \frac{\partial o_1}{\partial z_3} \times \frac{\partial z_3}{\partial h_1}$$</p>
<p>$$
=-(target_{o_1}-output_{o_1})\times o_1\times (1-o_1)\times w_5 $$
$$
= 0.20944600 \times 0.23802157 \times 0.45 = 0.02243370$$</p>
<p>이와 같은 원리로 $\frac{\partial E_{o_2}}{\partial h_1}$도 구합니다.
$$
\frac{\partial E_{o_2}}{\partial h_1} = \frac{\partial E_{o_2}}{\partial z_4} \times \frac{\partial z_4}{\partial h_1} = \frac{\partial E_{o_2}}{\partial o_2} \times \frac{\partial o_2}{\partial z_4} \times \frac{\partial z_4}{\partial h_1} = 0.00997311$$</p>
<p>$$
\frac{\partial E_{total}}{\partial h_1} = 0.02243370 + 0.00997311= 0.03240681$$</p>
<p>$\frac{\partial E_{total}}{\partial w_1}$을 구하기 위한 첫 항의 계산을 했으니, 이제 다른 두 항도 구하면 다음과 같다.</p>
<p>$$
\frac{\partial h_1}{\partial z_1} = h_1 \times (1-h_1) = 0.51998934(1-0.51998934) = 0.24960043$$</p>
<p>$$
\frac{\partial z_1}{\partial w_1} = x_1 = 0.1$$</p>
<p>즉, $\frac{\partial E_{total}}{\partial w_1}$은 다음과 같다. </p>
<p>$$
\frac{\partial E_{total}}{\partial w_1} = 0.03240681 \times  0.24960043 \times 0.1 = 0.00080888$$</p>
<p>이제 앞서 배웠던 경사하강법을 이용해 가중치를 업데이트할 수 있다.</p>
<p>$$
w_1^+ = w_1 - \alpha \frac{\partial E_{total}}{\partial w_1} = 0.3 - 0.5 \times 0.00080888 = 0.29959556$$</p>
<p>이와 같은 원리로 $w_2^+, w_3^+, w_4^+$을 계산할 수 있다.</p>
<p>$$
\frac{\partial E_{total}}{\partial w_2} = \frac{\partial E_{total}}{\partial h_1} \times \frac{\partial h_1}{\partial z_1} \times \frac{\partial z_1}{\partial w_2} \to w_2^+ = 0.24919112$$</p>
<p>$$
\frac{\partial E_{total}}{\partial w_3} = \frac{\partial E_{total}}{\partial h_2} \times \frac{\partial h_2}{\partial z_2} \times \frac{\partial z_2}{\partial w_3} \to w_3^+ = 0.39964496$$</p>
<p>$$
\frac{\partial E_{total}}{\partial w_4} = \frac{\partial E_{total}}{\partial h_2} \times \frac{\partial h_2}{\partial z_2} \times \frac{\partial z_2}{\partial w_4} \to w_4^+ = 0.34928991$$</p>
<p>이렇게 가중치를 업데이트 했으니 다시한번 순전파시켜 오차가 줄어들었는지 확인해보겠습니다.</p>
<p>$$
z_1 = w_1x_1 + w_2x_2 = 0.29959556 \times 0.1 + 0.24919112 \times 0.2 = 0.7979778$$</p>
<p>$$
z_2 = w_3x_1 + w_4x_2 = 0.39964496 \times 0.1 + 0.34928991 \times 0.2 = 0.10982248$$</p>
<p>$$
h_1 = sigmoid(z_1) = 0.51993887$$
$$
h_2 = sigmoid(z_2) = 0.52742806$$
$$
z_3 = w_5x_1 + w_6x_2 = 0.43703857 \times h_1 + 0.38685205 \times h_2 = 0.43126996$$</p>
<p>$$
z_4 = w_7x_1 + w_8x_2 = 0.69629578 \times h_1 + 0.59624247 \times h_2 = 0.67650625$$</p>
<p>$$
o_1 = sigmoid(z_3) = 0.60617688$$</p>
<p>$$
o_2 = sigmoid(z_4) = 0.66295848$$</p>
<p>$$
E_{o_1} = \frac{1}{2}(target_{o_1}-output_{o_1})^2 = 0.02125445$$</p>
<p>$$
E_{o_2} = \frac{1}{2}(target_{o_2}-output_{o_2})^2 = 0.00198189$$</p>
<p>$$
E_{total} = E_{o_1}+E_{o_2} = 0.02323634$$</p>
<p>기존 전체 오차 $E_{total}$가 $0.02397190$였으므로 1번의 역전파로 오차가 감소한 것을 확인할 수 있다. </p>
<p>이처럼 인공신경망의 학습은 오차를 최소화하는 가중치를 찾는 목적으로 순전파와 역전파를 반복하는 것을 의미한다.</p>
<h1 id="최적화-함수">[최적화 함수]</h1>
<p>위 과정에서는 최적화 함수 즉, Optimizer로 경사하강법(아래 그림에서 GD)을 사용했지만 다음과 같이 다양한 Optimizer가 존재한다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/146c994f-8b39-4e66-8f9a-9088fcbe984a/image.png" alt=""></p>
<p>경사하강법을 기반으로 하여 방향성과 스텝 크기 두 관점을 바탕으로 Optimizer가 발전했으며 현재 주로 <em>Adam</em>이 자주 Optimizer로써 사용된다. </p>
<h1 id="plus">[Plus]</h1>
<p>여기까지 기본적인 딥러닝의 내용을 개괄적으로 훑어보았다. 하지만 언급된 내용 외에도 규제화와 같이 일부 포함되지 않은 내용도 있으며, 간단하게 언급만 한 부분도 존재한다. 따라서 Deep Learning 시리즈에서는 MIT의 <strong>Deep learning</strong>이라는 책을 참고하여 이를 공부하며 추후 자세하게 다루고자 한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[딥러닝 기초 (1)]]></title>
            <link>https://velog.io/@withs-study/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-1</link>
            <guid>https://velog.io/@withs-study/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-1</guid>
            <pubDate>Thu, 03 Oct 2024 07:37:30 GMT</pubDate>
            <description><![CDATA[<p>이번 글에서는 앞으로 자주 다루게 될 딥러닝에 대해 개괄적으로 다뤄보도록 하겠습니다.</p>
<h1 id="deep-learning">[Deep Learning]</h1>
<p><strong>딥러닝이란 무엇일까요??</strong></p>
<p>딥러닝은 머신러닝과 Deep Neural Network 모델을 합친 것이라고 이해할 수 있습니다. 딥러닝은 결국 머신러닝의 일부이고 따라서 머신러닝의 개념들이 모두 딥러닝에서도 사용됩니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/d9a2f2ed-ba5b-49b6-99f8-59907bd35e5b/image.png" alt=""></p>
<p>train/test, parametic learning, weight update.. 등등의 머신러닝 개념을 똑같이 사용하지만 Deep Neural Network라는 것이 딥러닝의 특징이라고 할 수 있습니다.</p>
<p>그럼 <strong>딥러닝을 왜 사용할까요?</strong></p>
<p>결국엔 딥러닝이 성능이 좋기 때문에 사용하는 거고, 딥러닝이 성능이 좋은 이유는 딥러닝 모델이 내재적으로 가지고 있는 <em>Feature extraction</em> 때문입니다.</p>
<p>머신러닝은 <em>Feature engineering*을 분석가가 직접 수행해야 하기 때문에 한계가 있는 반면, 딥러닝은 모델이 직접 *Feature extraction</em> 하기 때문에 일반적으로 성능이 좋습니다. </p>
<p>하지만 이러한 특징 때문에 주의할 점도 있습니다.</p>
<p>바로 딥러닝은 ML보다 더 많은 학습 데이터를 필요로 한다는 것입니다. 딥러닝은 데이터가 충분하지 않으면 바로 오버피팅되어버립니다.</p>
<p>또한 딥러닝은 ML보다 더 많은 computing resource(GPU, TPU)를 필요로 합니다.</p>
<p>따라서 정형 데이터의 경우 머신러닝 특히 lightGBM이 더 좋은 성능을 보이기 때문에 굳이 현업에서도 가성비를 생각하여 라이트한 머신러닝을 쓰지 헤비한 딥러닝을 쓰려고 하지 않습니다. </p>
<p>다만 딥러닝은 컴퓨터 비전, 자연어처리, 음성파트 등 비정형 데이터 처리에서 매우 뛰어납니다. 이미지, 텍스트, 음성 데이터 분석의 경우 딥러닝이 좋기 때문에 위 분야에서 딥러닝을 많이 사용하고 이런 사례의 경우 굳이 white box일 필요가 없기 때문에 더욱 일반적으로 사용됩니다.</p>
<h1 id="perceptron">[Perceptron]</h1>
<p>AI 즉, <em>Artificial Intelligence</em> 라는 단어 그 자체의 의미처럼 사람의 뇌를 본떠 인공지능을 만들자는 생각에서 출발한 Deep Neural Network 모델의 시작은 <em>Perceptron</em>이라는 모델이었습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a523282e-4824-439a-b4ea-c2665dd454bb/image.png" alt=""></p>
<p>Perceptron은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 제안한 초기 형태의 인공 신경망으로 뉴런의 구조에서 영감을 받아 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘입니다.</p>
<p>뉴런은 *수상돌기(입력) -&gt; 신경세포체(처리) - 역치를 넘어가면 처리해줌 -&gt; 축삭돌기(출력) *라는 과정으로 데이터를 처리하는데요.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/1d728829-abc8-4038-8c7b-c402e4566901/image.png" alt=""></p>
<p>퍼셉트론의 구조도 이와 비슷합니다. </p>
<p>$x_1, x_2, x_3$는 데이터를 의미하고, $w_1, w_2, w_3$는 가중치를 의미합니다. 
그리고 이들이 선형결합 즉 $f(w_1x_1+w_2x_2+w_3x_3+bias)$ 형태로 $f$의 입력으로 들어가게 됩니다. </p>
<p>이때 만약 $bias$가 없다면 이 선형결합이 계속 원점을 지나기 때문에 $bias$도 함께 입력하여 다른 곳도 돌아다닐 수 있도록 해줘야한다. </p>
<p>그리고 이때 위 선형결합 식에서 $f$를 <em>activation function(활성함수)</em>이라고 한다. </p>
<p>또한 이와 동시에 처음 등장한 활성함수는 <em>step function</em>으로 $w_1x_1+w_2x_2+w_3x_3+bias$라는 식의 값이 0을 넘으면 1, 아니면 0을 반환한다
<img src="https://velog.velcdn.com/images/withs-study/post/d36ed735-f8d4-413d-afed-ce2f9df3b92b/image.png" alt=""></p>
<p>하지만 퍼셉트론과 같은 Single Neural Network는 $XOR$ 문제를 해결하지 못한다는 단점을 가지고 있다!</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/41e3551c-3960-4bf9-98d3-7ea565e62dcf/image.png" alt=""></p>
<p>예를 들어 위와 같이 빨간 점과 파란 점 데이터를 분류하는 문제를 해결할 때 Single Neural Network은 하나의 선만으로 분류해야하는데 위 데이터에선 어떤 선을 그어도 올바르게 분류할 수 없다. 즉 비선형 데이터의 경우 해결할 수 없다는 특징을 가지고 있다.</p>
<h1 id="multi-layer-perceptronmlp">[Multi Layer Perceptron(MLP)]</h1>
<p>퍼셉트론의 위 단점을 해결하기 위해 또다시 사람의 뇌에서 영감을 받아 퍼셉트론들로 층을 구성한 다음 나열한 MLP 모델이 등장했다.</p>
<p>즉, MLP는 퍼셉트론을 쌓아서 구조적으로 위 문제를 해결하고자 하였다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/ef4464a9-57d6-426f-985e-842d08912e0c/image.png" alt=""></p>
<p>MLP에선 각 퍼셉트론을 동그라미로 나타내며 노드라고 한다. </p>
<p>각 노드들의 쌓이는걸 <em>layer*라 하고,  각 레이어들을 여기서 입력층, 은닉층, 출력층이라고 하고 각 노드는 *fully connected</em> 되어 있습니다. </p>
<p>또한 각 노드에는 앞에서 다뤘듯 활성함수가 정의되어있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a9473c14-0892-4659-81ed-d336b6e6d889/image.png" alt=""></p>
<p>이렇게 하면 뭐가 좋냐면 $z_1$에서 합친 선형결합한 값을 $z_3$에서 한번 더 계산하기 때문에 다음과 같이 선을 그릴 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/8935aa63-5a36-47cd-b719-bd0a32774444/image.png" alt=""></p>
<p>이렇게 $XOR$ 문제를 풀 수 있고 좋은 <em>nonlinear classification</em> 이 된다. </p>
<p>하지만! 선형문제를 두번 푼다고 해서 비선형문제를 풀 수 없겠죠?
그래서 활성함수를 <strong>nonlinear function</strong>으로 설정해서 이 문제를 해결해야 한다.</p>
<p>여기서 나온 활성함수가 바로 <strong>시그모이드 함수</strong>이다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/71f8f6da-4dd8-404f-9fd5-9095bed67a43/image.png" alt=""></p>
<p>이 <strong>시그모이드 함수의 특징</strong>은 $x$에 입력되는 애들이 무슨 짓을 하더라도 결과값이 0과 1사이로 나온다는 것이다.</p>
<p>따라서 굉장히 많은 가중치가 합쳐져도 0과 1사이 값이 나오니깐 수치적으로 안정화되서 학습이 잘된다.</p>
<p>두번째 특징은 나중에 최적화를 배우면 최적화를 위해 미분을 써야하는데 시그모이드 함수는 미분을 하기 쉽다는 특징이 있습니다. </p>
<p>하지만 최근에는 여기서 더 발전한 활성함수인 <em>ReLu function(Recified Linear Unit)</em>을 사용합니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/72a0c978-aadc-4828-9194-ba5f5c111614/image.png" alt=""></p>
<p>이 함수도 역시 미분할 경우 0보다 작으면 0, 0보다 크면 1의 값을 가져서 미분도 되게 쉽고 음수 부분을 모두 0으로 제거하기 때문에 업데이트 관점에서 되게 좋습니다.</p>
<p>시그모이드 함수의 경우 양 끝의 기울기가 거의 0에 가깝기 때문에 이 부분에서 업데이트가 안되는데 ReLu 함수는 이 문제를 해결할 수 있습니다.</p>
<h1 id="feed-forward">[feed forward]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/ae013ded-63a6-400b-9c1b-fc85da39ac7e/image.png" alt=""></p>
<p>feed forward의 예시는 위와 같은데, 예를 들어 위 식에서 $g$가 앞에서 살펴본 <em>ReLu</em> 함수라면 노드 3에선 다음과 같이 계산된다.</p>
<p>$$
Node_3 = max(0, W_{1,3} \ a_1+W_{2,3} \ a_2 + bias)$$</p>
<p>이때 $W_{1,3} \ a_1+W_{2,3} \ a_2 + bias$가 0보다 크면 해당 값이, 0보다 작으면 0이 결과로 도출된다.</p>
<p>그리고 마지막 출력층에서 Node5에서는 다음과 같이 식으로 정리된다.</p>
<p>$$
Node_5 = max(0, W_{3,5} \ a_3+W_{4,5} \ a_4 + bias)$$</p>
<p>이 방식처럼 입력층-&gt;히든층-&gt;출력층으로 활성함수를 지나면서 값이 업데이트 되는 게 feed forward입니다. </p>
<p>그래서 MLP의 feed-forward는 선형 식의 결과가 선형 식에 들어가고 또 다시 선형 식으로 들어가며 진행되는 방식에, <em>nonlinear</em> 한 활성함수를 씌우는 것입니다. </p>
<p>최종적으로 feed forward를 통해 &quot;합성합수&quot;의 형태로 결과가 도출되게 됩니다. </p>
<p>그리고 이런 모델을 <em>Neural network</em> 라 하고, 은닉층이 2개 이상이면 <em>Deep Neural network(DNN)</em> 이라고 합니다. </p>
<p>여기까지 딥러닝과 머신러닝의 차이, 퍼셉트론, $XOR$ Problem, MLP, 활성화함수, feed forward까지 간략하게 다뤄보았습니다. 2편에서는 Output / Loss function과 역전파, 딥러닝 학습방법에 대해 다뤄보도록 하겠습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[분봉데이터 다운로드 방법]]></title>
            <link>https://velog.io/@withs-study/%EB%B6%84%EB%B4%89%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@withs-study/%EB%B6%84%EB%B4%89%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Sun, 08 Sep 2024 16:04:13 GMT</pubDate>
            <description><![CDATA[<p>분봉 데이터를 돈 주고 사야한다고 생각했는데 무료로 다운 받을 수 있는 방법을 알게 되어 공유드립니다.</p>
<ol>
<li><p><strong>대신증권 계좌 개설 &amp; 회원가입 후 공동인증서 &amp; Cybos5 설치</strong>
(아래는 Cybos5 설치 링크)
<a href="https://www.daishin.com/g.ds?m=1101&amp;p=12294&amp;v=11949">https://www.daishin.com/g.ds?m=1101&amp;p=12294&amp;v=11949</a></p>
</li>
<li><p><strong>Cybos5 로그인 화면에서 Cybos plus로 바꿔서 로그인</strong>
(좌측 상단 Cybos 클릭해서 바꿀 수 있음)</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/withs-study/post/68c104cc-e0a3-4476-bf0c-308615be2c54/image.png" alt=""></p>
<p>Cybos plus 실행시키면 작업 표시줄에 아래 사진처럼 보라색 아이콘이 생김</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a9b2431a-aa73-4941-891d-2c6e9e2d9ae9/image.png" alt=""></p>
<p>해당 아이콘을 우클릭 후 주문오브젝트 사용 동의 필요</p>
<ol start="3">
<li>anaconda 설치 후 anaconda prompt 열기</li>
</ol>
<p><a href="https://www.anaconda.com/download">https://www.anaconda.com/download</a>
<img src="https://velog.velcdn.com/images/withs-study/post/dc2a3bd7-7e8e-4aff-bf97-7a26625cee1b/image.png" alt=""></p>
<p>이후 프롬프트 창에 아래 코드 입력해서 가상환경 만들기(가상환경 이름을 py36_32로 설정하는 코드임)</p>
<p>conda 프롬프트에서 아래 코드 실행</p>
<pre><code>conda create -n py36_32
conda activate py36_32
conda config --env --set subdir win-32
conda install python=3.6
conda info
# conda info 실행 후 플랫폼에서 win-32인지 확인하기</code></pre><p>다음과 같이 platform이 win-32면 성공(대신증권 API가 32 bit 가상 환경에서만 돌아감)
<img src="https://velog.velcdn.com/images/withs-study/post/b18a8600-e0d0-4e33-ae78-42dd7dff1129/image.png" alt=""></p>
<p>아래 주소 참고
<a href="https://koos808.tistory.com/2">https://koos808.tistory.com/2</a></p>
<ol start="4">
<li>pycharm 설치
설치하면 아래 화면처럼 나옴
<img src="https://velog.velcdn.com/images/withs-study/post/83e1d900-72a1-467a-9dcc-dd3d3d34248b/image.png" alt=""></li>
</ol>
<p>위 화면에서는 Create New Project, 만약 이미 다른 프로젝트 창이 있다면 왼쪽 위 삼선 아이콘 - 파일 - 새 프로젝트</p>
<p>그러면 다음과 같이 창이 나옴
<img src="https://velog.velcdn.com/images/withs-study/post/c8a128df-cd89-4371-abde-8d8736483035/image.png" alt=""></p>
<p>이때 인터프리터 타입을 사용자 지정 환경 - 환경: 기존항목 - 타입: Conda - 환경: 위에서 만든 가상환경(32bit 환경) 설정 후 생성</p>
<p>여기서 가상환경 파일 경로는 C드라이브 사용자 폴더, 아나콘다 폴더에 들어가서 py36_32 폴더 설정하면 됨</p>
<p><strong>5. 아래 코드 파일 다운로드</strong>
아래 깃허브 주소의 py 파일과 ui파일 모두 다운로드 해서 바로 위 새 프로젝트 만드는 사진 속 위치에 해당하는 폴더에 옮기기(위 사진에서는 pythonProject2 폴더)
<a href="https://github.com/gyusu/Creon-Datareader">https://github.com/gyusu/Creon-Datareader</a>
대신증권(Creon) PLUS API를 이용한 주가 데이터 수집 프로그램. </p>
<p>다음으로 anaconda prompt 창에 아래 코드를 실행해서 가상환경을 활성화 시킨 뒤 모듈을 다운로드</p>
<pre><code>conda activate py36_32 # 32bit 파이썬 설치된 가상환경 활성화
pip install pandas
pip install tqdm
pip install PyQt5
pip install pypiwin32</code></pre><p><strong>6. SQLite 설치</strong></p>
<p><a href="https://www.sqlite.org/download.html">https://www.sqlite.org/download.html</a></p>
<p>위 주소에서 아래 사진 속 파란색 상자에있는 주소 파일 다운로드(이때 32비트 운영체제면 파란색 상자 위 32비트 파일과 파란색 상자 속 아래 tool 파일 다운로드)
<img src="https://velog.velcdn.com/images/withs-study/post/687f300f-97d8-4cc2-9905-d7a2bae468ad/image.png" alt=""></p>
<p>압축파일을 해제하고 sqlite3.exe 실행
<img src="https://velog.velcdn.com/images/withs-study/post/9c2a4490-a1ab-4b2f-942a-2494abdf548c/image.png" alt=""></p>
<p>그럼 이런 창이 뜰건데, .open (지정하고픈 db파일명) 쓰기 아래 사진 참고
<img src="https://velog.velcdn.com/images/withs-study/post/5dcf8cd6-ef2d-4302-b030-5d41a3491c88/image.png" alt=""></p>
<p>그러면 db 파일이 만들어집니다.
(만약 안된다면 다음 주소 참고해서 환경변수 추가해야함)
<a href="https://blog.naver.com/rickman2/222850909657">https://blog.naver.com/rickman2/222850909657</a></p>
<p>그럼 얼추 준비가 모두 되었습니다.</p>
<p><strong>Cybos plus와 pycharm을 관리자 권한으로 실행(아이콘 우클릭시 표시됨)</strong>
pycharm에서 py 파일 하나 만들어서
<img src="https://velog.velcdn.com/images/withs-study/post/2d92715c-1a69-425d-91eb-8d883daec4e8/image.png" alt=""></p>
<p><strong>다음과 같은 코드로 Cybos plus 연결여부 확인(1이 출력되면 연결 성공)</strong></p>
<p><strong>이후 Creon_datareader.py 파일 실행</strong>
<img src="https://velog.velcdn.com/images/withs-study/post/9c4a838e-b41c-4cc5-9a91-b4abca5b4633/image.png" alt=""></p>
<p>그럼 위와 같이 창이 뜨는데 DB 경로를 보면 ./db/~~ 라고 되어있음
그래서 5단계에서 py파일 옮겼던 폴더에 &#39;db&#39;라는 이름의 폴더 새로 만들어줘야함</p>
<p>그리고 DB 경로 옆 연결 누르면 1분봉/5분봉/일봉/주봉/월봉 데이터를 다운 받을 수 있으며, <strong>1분봉은 최근 2년, 5분봉은 최근 5년 다운로드 가능.</strong>
이때 DB 경로 파일의 db명은 py 파일 옮겼던 폴더에 이미 존재하는 db 이름이면 안됨.</p>
<p>종목리스트 경로는 여러 종목의 분봉 데이터를 가져오고 싶을 때 연결하는 경로로, csv 파일만 사용할 수 있으며 csv 파일에 종목코드나 종목명을 써놓으면 됨.(만약 하나만 가져오고 싶거나 전체 가져오고 싶으면 필요 x)</p>
<p>이후 검색결과만 다운로드 or 전체 다운로드를 다운받고 싶은만큼 누르면 됨.</p>
<p>다음으로, db경로로 설정한 db 파일을 SQLite로 열면 다음과 같은 창이 뜸
<img src="https://velog.velcdn.com/images/withs-study/post/36e26d45-afc3-478b-b954-6f2b9b8f7590/image.png" alt=""></p>
<p>그럼 파일 - 내보내기 - csv 파일로 내보내기를 통해 각 종목별 봉차트를 얻을 수 있습니다.</p>
<p>참고하기 좋은 글</p>
<p>1) <a href="https://wikidocs.net/3681">https://wikidocs.net/3681</a></p>
<p>2) <a href="https://koos808.tistory.com/3">https://koos808.tistory.com/3</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DSBA-ITS504] Dimensionality Reduction (Overview)]]></title>
            <link>https://velog.io/@withs-study/DSBA-ITS504-Dimensionality-Reduction-Overview</link>
            <guid>https://velog.io/@withs-study/DSBA-ITS504-Dimensionality-Reduction-Overview</guid>
            <pubDate>Tue, 27 Aug 2024 08:36:33 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 <strong>고려대학교 산업경영공학부 강필성 교수님의 강의</strong>를 참고하였습니다. Business Analytics라는 과목이고, 데이터사이언스 분야의 내용이 잘 정리되어 있어 공부하기 좋을 것 같아 이번 시리즈를 연재하게 되었습니다. 부족한 점이 많겠지만 데이터사이언스 공부를 하는데 도움이 되었으면 합니다.</p>
<h1 id="introduction">[Introduction]</h1>
<p>Dimensionality Reduction, 차원 축소.</p>
<p>대체 무슨 의미일까?</p>
<p>차원축소라는 용어는 매우 어려워보이지만 쉽게 말하면 독립변수를 줄이는 과정을 의미한다. 데이터 프레임의 관점으로는 열의 개수를 줄인다는 의미이다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/cf253efa-c5a0-493b-885a-cb09fd32ea9f/image.png" alt=""></p>
<p>차원축소는 일반적으로 데이터 전처리 과정에서 수행되며 &#39;문서 분류&#39;, &#39;추천시스템&#39;, &#39;유전 군집화&#39; 등에서 사용된다. </p>
<p>그러면 왜?? 우리는 차원 축소 알고리즘을 사용해야할까?</p>
<p>바로 <strong>차원의 저주</strong>때문이다.</p>
<h1 id="차원의-저주curse-of-dimensionality">[차원의 저주(Curse of Dimensionality)]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/90149c91-431a-4495-bf38-468aa7d794fc/image.png" alt=""></p>
<p>차원의 저주는 <strong>변수의 수가 증가할 때 같은 설명력을 계속해서 확보하기 위해서는 데이터의 수가 기하급수적으로 증가해야 한다는 의미</strong>이다.
($n$차원에서 동일한 설명력을 확보하기 위해서는 $2^n$개의 데이터가 필요하다.)</p>
<p>또한, <strong>오컴의 면도날이라는 원칙에선 &quot;어떤 현상을 설명하기 위한 여러가지 방법이 있다면 가장 간단한 게 가장 최적의 방식&quot;</strong>이라고 말한다.</p>
<p>이를 머신러닝의 관점에서 살펴보면, </p>
<p>$$
f(x_1, \cdots, x_{10}) \to R^2 = 0.95 \ 
f(x_1, x_2, x_3) \to R^2 = 0.95$$</p>
<p>위와 같이 변수 10개로 $R^2$가 0.95인 것보다 변수 3개로만 $R^2$가 0.95인 것이 더 최적의 설명이라는 것을 의미한다.</p>
<p>다음으로, 오리지널 데이터의 차원 수보다 데이터에 내재된 차원의 수가 상대적으로 더 낮은 경우가 있을 수도 있다.</p>
<p>예를 들어 아래와 같은 MNIST Dataset의 경우</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/adcf1756-ee32-408b-b569-69b09f454635/image.png" alt=""></p>
<p>차원축소 기법인 PCA나 ISOMAP을 통해 아래와 같이 차원을 줄일 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/91b458de-8264-4e87-bd9a-22f05062c41c/image.png" alt=""></p>
<p>이처럼 $16 \times 16 = 256$ 차원의 데이터를 5차원으로 줄여도 데이터를 설명하는 데에는 크게 부족함이 없음을 알 수 있다. </p>
<p>고차원의 데이터로 인해 야기되는 문제들은 다음과 같다.</p>
<p>1) 모든 데이터는 $y = f(x) + \epsilon$로 구성되어 있다. 따라서 Noise($\epsilon$)가 포함된 데이터의 경우 과적합으로 모델의 예측 능력을 저해시킬 수 있다. </p>
<p>2) 계산 시간이 증가</p>
<p>3) 동일한 설명력을 확보하기 위한 더 많은 데이터 필요</p>
<p>이 문제를 해결하기 위해선 아래와 같은 방법들이 사용된다.</p>
<p>1) 현업에서는 여전히 도메인을 활용하여 문제를 해결한다.</p>
<p>2) 목적함수에 규제항이 사용된다.</p>
<p>3) 정량적인 변수 감소 방법을 활용한다.</p>
<h2 id="정리">[정리]</h2>
<p>이론적으로 모델의 수행능력은 변수의 수가 증가할수록 증가하지만, 이는 모든 변수가 독립적일 때로 한정된다. 따라서 실제로는 모델의 변수들끼리 Dependence가 있으며 Noise가 존재하므로 오히려 변수가 많을수록 모델의 수행능력이 저해된다. </p>
<p>따라서, 우리는 모델이 가장 Best fit이 되는 변수들의 Subset을 찾아보자는 목적으로 차원축소를 수행한다. </p>
<p>결과적으로 변수 사이 상관관계가 감소하고, 사후 과정이 단순화되며(ex. 전처리 공정의 경우 센서의 수를 줄여도 된단 의미), 시각화가 수월해지고 마지막으로 불필요한 변수가 제거된다. </p>
<h1 id="차원-축소-방법">[차원 축소 방법]</h1>
<p>1) Supervised VS Unsupervised</p>
<ul>
<li>Supervised Dimensionality Reduction</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/e624328f-7b54-4137-9e19-8861680756f9/image.png" alt=""></p>
<p>Supervised Dimensionality Reduction는 $X$에서 $X&#39;$로 데이터를 축소시킨다고 할 때 Learning Algorithm(선형 회귀 or 로지스틱 회귀) 등을 통해 더 나은 Subset을 찾는 방식으로 일종의 Loop가 존재한다.  </p>
<ul>
<li>Unsupervised Dimensionality Reduction</li>
</ul>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2b61c962-fde6-448b-b62a-b44f1dac6cd6/image.png" alt=""></p>
<p>Unsupervised Dimensionality Reduction의 경우 Loop가 없고, 한번에 정량적인 방법을 통해 차원을 축소하는 것을 의미한다.</p>
<p>2) Selection VS Extraction</p>
<p>Variable/feature selection은 기존 데이터 변수 중 Subset을 뽑아내는 방식이다. 반면 Variable/feature Extraction의 경우 새로운 변수를 뽑아내는 것을 의미한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/b6f3b5b8-802a-4269-8488-63d48454cebe/image.png" alt=""></p>
<p>왼쪽처럼 Selection은 변수가 그대로 줄어드는 것이고, 오른쪽인 Extraction은 어떠한 함수 $f(x)$와 같이 원래 $x$들의 조합으로 $y$가 만들어진다.</p>
<p>여기까지 전반적인 차원축소 분야에 대해 살펴보았고, 다음 글에서 자세히 다뤄보도록 하겠습니다. 이번 글에선 차원축소의 의미, 차원의 저주 등을 잘 기억해주시면 좋을 것 같습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DSBA-ITS504] Classification Performance Evaluation]]></title>
            <link>https://velog.io/@withs-study/DSBA-ITS504-Classification-Performance-Evaluation</link>
            <guid>https://velog.io/@withs-study/DSBA-ITS504-Classification-Performance-Evaluation</guid>
            <pubDate>Mon, 26 Aug 2024 10:36:24 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 <strong>고려대학교 산업경영공학부 강필성 교수님의 강의</strong>를 참고하였습니다. Business Analytics라는 과목이고, 데이터사이언스 분야의 내용이 잘 정리되어 있어 공부하기 좋을 것 같아 이번 시리즈를 연재하게 되었습니다. 부족한 점이 많겠지만 데이터사이언스 공부를 하는데 도움이 되었으면 합니다.</p>
<h1 id="why-evaluate">[Why Evaluate?]</h1>
<h2 id="과적합">[과적합]</h2>
<p>분류 모델의 학습을 위해선 보유하고 있는 데이터를 Train data, Validation data, Test data 3개로 분리하여 Train data만을 사용한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/fd2b5cbb-f238-4034-94e9-5a06f6e01f34/image.png" alt=""></p>
<p>이때 위와 같이 웃음 표시인 데이터와 화난 표시의 데이터가 있을 때 파랑색 점선인 Predictive model overfit처럼 모델을 학습한다면 Train data에서는 성능이 좋겠지만 Test data에서는 좋지 않을 수 있다.</p>
<p>왜냐하면 모든 실제 데이터들은 다음과 같은 식을 따르기 때문이다.
$$
y = f(x) + \epsilon$$
여기서 $\epsilon$은 데이터에 내재된 변동성을 의미한다. 따라서 만약 Train data만으로 파란 점선과 같이 분류 기준을 정한다면 $f(x)$가 아닌 $f(x)+\epsilon$ 을 추정하여 Test data에서는 결과가 나쁠 수 있다.</p>
<p>예를 들어 모의고사 기출 문제를 복습하면서 100점 맞는 거는 아무 의미가 없고, 새롭게 치르는 수능을 100점 맞아야만 의미가 있다는 것이다. </p>
<h2 id="성능-평가">[성능 평가]</h2>
<p>분류 문제나 회귀 문제에 있어서 다양한 모델 중 최적의 모델을 찾기 위해서이다.</p>
<h2 id="하이퍼파라미터-최적화">[하이퍼파라미터 최적화]</h2>
<p>신경망 모델에서 은닉층의 개수나 활성화함수 설정 등 하이퍼파라미터 설정이 필요한 모델에서 Validation data만을 이용하여 Best parameter를 탐색하는 역할을 한다. </p>
<p>정리하면, 모델 학습을 위해 Train data, 하이퍼파라미터 설정을 위해 Validation data, 그렇게 찾은 최적의 모델 중 어떤 모델이 좋은 지를 판단하기 위해 Test data를 사용한다는 것이다. </p>
<h1 id="classification-performance-evaluation">[Classification Performance Evaluation]</h1>
<p>그럼 분류를 위한 평가 기준은 어떤 기준들이 있을까?</p>
<p>첫번째는 <strong>정확도(accuracy)</strong>가 있다.</p>
<p>정확도는 모델이 전체 문제 중에서 정답을 맞춘 비율로 0 ~ 1 사이의 값을 가지며, 1에 가까울수록 좋다.</p>
<p>하지만 <strong>데이터가 불균형할 때(ex) positive:negative=9:1)는 Accuracy만으로 제대로 분류했는지는 알 수 없기 때문에 Recall과 Precision을 사용</strong>한다.(범주 0과 1이 있으면 불균형 데이터의 경우 많은 수의 범주를 모두 맞추고 적은 수의 범주를 모두 틀려도 정확도가 높게 나옴.)</p>
<h2 id="confusion-matrix">[Confusion Matrix]</h2>
<p>Recall과 Precision을 이해하기 전에 <strong>혼동행렬(Confusion Matrix)</strong>에 대해 우선 살펴보아야 한다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/66445925-a68d-4ab2-b06e-25e8a2273b82/image.png" alt=""></p>
<p>여기서 각 용어는 다음과 같다.</p>
<p>T(True): 예측한 것이 정답
F(False): 예측한 것이 오답
P(Positive): 모델이 positive라고 예측
N(Negative): 모델이 negative라고 예측
TP(True Positive): 모델이 positive라고 예측했는데 실제로 정답이 positive (정답)
TN(True Negative): 모델이 negative라고 예측했는데 실제로 정답이 negative (정답)
FP(False Positive): 모델이 positive라고 예측했는데 실제로 정답이 negative (오답)
FN(False Negative): 모델이 negative라고 예측했는데 실제로 정답이 positive (오답)</p>
<p>이를 통해 범주별 정확도를 비롯한 다양한 평가지표로 계산이 가능하다.</p>
<p>두번째 평가지표인 <strong>Recall(재현율)</strong>은 실제로 정답이 positive인 것들 중에서 모델이 positive라고 예측한 비율이다. 해당 평가지표는 <strong>실제 정답이 positive인 데이터를 negative라고 잘못 예측하면 안 되는 경우에 중요한 지표</strong>가 될 수 있다. 재현율이 유용한 분야는 예를 들어 암 검진 기기 등의 분야가 있다.</p>
<p>Recall를 높이기 위해선 FN(모델이 negative라고 예측했는데 정답이 positive인 경우)을 낮추는 것이 중요하다. 식은 다음과 같다.</p>
<p>$$
Recall = \frac{TP}{TP+FN}$$</p>
<p>세번째 평가지표는 <strong>Precision(정밀도)</strong>입니다.</p>
<p>모델이 positive라고 예측한 것들 중에서 실제로 정답이 positive인 비율이다. 이는 <strong>실제 정답이 negative인 데이터를 positive라고 잘못 예측하면 안 되는 경우에 중요한 지표</strong>가 될 수 있다.</p>
<p>Precision을 높이기 위해선 FP(모델이 positive라고 예측했는데 정답은 negative인 경우)를 낮추는 것이 중요하다.</p>
<p>$$
Precision = \frac{TP}{TP+FP}$$</p>
<p>네번째 평가지표는 <strong>Balanced correction rate(BCR)</strong>로 이는 범주별 정답의 비율을 고르게 반영시켜주는 평가지표이다. 식은 다음과 같다.</p>
<p>$$
BCR = \sqrt{\frac{TP}{TP+FN} \cdot \frac{TN}{TN+FP}}$$</p>
<p>다섯번째 평가지표는 <strong>F-1 Score</strong>이다. </p>
<p>F-1 Score은 Recall과 Precision의 조화평균으로 Recall과 Precision은 상호 보완적인 평가 지표이기 때문에 F1 score를 사용한다. Precision과 Recall이 한쪽으로 치우쳐지지 않고 모두 클 때 큰 값을 가진다. 식은 다음과 같다.</p>
<p>$$
Score = \frac{2 \times Precision \times Recall}{Precision+Recall}$$</p>
<h1 id="cut-off">[Cut-off]</h1>
<p>위의 평가지표들은 모두 이 Cut-off의 영향을 받는다. </p>
<p><strong>Cut-off</strong>란 말 그대로 <strong>&quot;분류 기준&quot;</strong>을 의미한다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/c469c36a-d40d-469f-9af4-b1616050a134/image.png" alt=""></p>
<p>예를 들어 다음과 같이 BFS에 따라 Gender를 구분하는 문제가 있다고 하자. 이때 Cut-off 기준을 24로 한다면 위의 3개의 행은 F(female)로, 나머지는 M(male)로 구분된다. </p>
<p>따라서 오른쪽 혼동행렬과 같은 표가 구해진다.</p>
<p>이때 만약 Cut-off 기준을 22로 수정하면 다음과 같이 결과가 달라진다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/0593b226-ae8f-40d8-81ec-a25ecadfbc23/image.png" alt=""></p>
<p>즉, <strong>정확도(Accuracy)와 BCR, f-1 score은 Cut-off 기준에 Dependent</strong>하다는 것을 의미한다.</p>
<p>이때 Model Selection &amp; Model comparison 과정에서 Cut-off 기준에 따라 평가지표가 Dependent하다면 분석가의 주관에 따라 결과가 달라질 수 있다. </p>
<p>따라서 이때 <strong>Cut-off와 독립적인 평가지표가 바로 ROC courve</strong>이다.</p>
<h1 id="roc-curve">[ROC Curve]</h1>
<p>우리는 이때 이를 이해하기 위해 생산품의 불량 판단 문제를 풀어보고자 한다.</p>
<p>교수님이 사용하신 데이터는 100개의 생산품 중 20개가 불량품인 데이터이며 1일 때 불량, 0일 때가 정상이다. 그리고 이때 평가지표로 AUROC(Area Under Receiver Operating Characteristic Curve)를 사용한다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/ecbbd100-36b7-49d5-9fb9-f18d39500a45/image.png" alt=""></p>
<p>데이터 셋은 위와 같으며 P(NG)는 로지스틱 회귀분석 결과로 나온 불량품일 확률, Label은 실제 레이블을 의미한다. 따라서 Best Model은 20까지 모두 실제 레이블이 1이고 그 아래는 0이겠지만 실제 분석은 그럴 가능성이 매우 적다. </p>
<p>그러므로 우리는 최대한 Cut-off 위에는 label 1이 많고 아래에는 0이 많게 설계해야한다. 이때 역시 Cut-off에 따라 정확도는 아래와 같이 달라질 수 있다. </p>
<p>1) Cut-off가 0.9</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/a49464c1-c776-4a9d-bc8e-cc38d443241b/image.png" alt=""></p>
<p>2) Cut-off가 0.8
<img src="https://velog.velcdn.com/images/withs-study/post/0daad230-fc14-4518-ade8-b203a93602ff/image.png" alt=""></p>
<p>이렇게 정확도가 달라진다면 이는 Performance를 측정하는 기준으로 옳지 않을 수 있다.</p>
<p>따라서 ROC Curve를 사용한다면 이를 해결할 수 있다.</p>
<p>그럼 ROC Curve가 무엇이냐.</p>
<p>P(NG)를 내림차순으로 정렬하고 Cut-off를 다르게 바꿔가며 <strong>TPR(True Positive ratio)을 Y축, FPR(False Positive Ratio)을 X축</strong>으로 함께 보며 이를 차트로 시각화하는 것이다.</p>
<p>이때 $TPR = \frac{TP}{TP+FN}$, $FPR=\frac{FP}{FP+TN}$으로 계산된다.</p>
<p>다시 이어가서, 만약 데이터가 100개 있다면 총 101개의 Cut-off 기준이 존재한다. </p>
<p>따라서 첫 Cut-off 기준은 다음과 같이 혼동행렬이 구성되어 (0,0)에서 시작된다. 
<img src="https://velog.velcdn.com/images/withs-study/post/b832686b-55f8-4f7e-b023-f3bddce72cac/image.png" alt=""></p>
<p>-&gt; TPR = $\frac{0}{20}$, FPR = $\frac{0}{80}$</p>
<p>다음 두번째 Cut-off 기준은 다음과 같이 혼동행렬이 계산된다.
<img src="https://velog.velcdn.com/images/withs-study/post/fe840e24-bcc5-405b-b0cc-9eb6f96e7dd5/image.png" alt=""></p>
<p>-&gt; 이때 TPR = $\frac{1}{20}$, FPR = $\frac{0}{80}$</p>
<p>다시 4번째 Cut-off 기준을 살펴보면 다음과 같이 혼동행렬이 계산된다.
<img src="https://velog.velcdn.com/images/withs-study/post/dda8ecc1-0b93-4c7b-a716-1c5b84d53a31/image.png" alt="">
-&gt; 이때 TPR = $\frac{2}{20}$, FPR = $\frac{1}{80}$</p>
<p>따라서 다음과 같이 결과가 구해진다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2b427e6b-6bf5-4e3d-bd44-eedf7c7c140e/image.png" alt=""></p>
<p>그럼 결국 마지막 Cut-off는 (1,1)로 계산되고 다음과 같이 시각화할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/47f00ccb-e12c-494e-88dd-cc35d5463228/image.png" alt=""></p>
<p>이때 만약 좋은 분류기면 아래의 보라색 선과 같고, Random 즉, 아무 의미 없는 분류기의 경우 아래 빨간 점선과 같은 ROC curve가 나타난다. 따라서 모든 ROC Curve는 Perfect Classifier와 Random Classifier 사이로 지나가게 된다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/0d535697-7993-43e5-963b-b7331c170896/image.png" alt=""></p>
<p>이때 사람들은 ROC Curve를 보고 이해할 수 있지만 컴퓨터는 그렇지 못하다. 그래서 등장한 개념이 바로 AUROC이다. 이는 ROC Curve 아래 면적을 계산하는 것이다. 따라서 대부분의 분류기는 1과 0.5 사이의 AUROC 값이 나오게 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DSBA-ITS504] Logistic Regression (2)]]></title>
            <link>https://velog.io/@withs-study/DSBA-ITS504-Logistic-Regression-1</link>
            <guid>https://velog.io/@withs-study/DSBA-ITS504-Logistic-Regression-1</guid>
            <pubDate>Fri, 16 Aug 2024 05:46:16 GMT</pubDate>
            <description><![CDATA[<p>이번 시리즈는 <strong>고려대학교 산업경영공학부 강필성 교수님의 강의</strong>를 참고하였습니다. Business Analytics라는 과목이고, 데이터사이언스 분야의 내용이 잘 정리되어 있어 공부하기 좋을 것 같아 이번 시리즈를 연재하게 되었습니다. 부족한 점이 많겠지만 데이터사이언스 공부를 하는데 도움이 되었으면 합니다.</p>
<h1 id="이론적-배경">[이론적 배경]</h1>
<p>로지스틱 회귀 1편에 이어서 <strong>Gradient descent의 이론적 배경</strong>부터 다뤄보도록 하겠습니다.</p>
<ul>
<li>1편 링크) <a href="https://velog.io/@withs-study/DSBA-ITS504-Logistic-Regression#logistic-regression">https://velog.io/@withs-study/DSBA-ITS504-Logistic-Regression#logistic-regression</a></li>
</ul>
<h2 id="learning">[Learning]</h2>
<h3 id="taylor-expansion">[Taylor expansion]</h3>
<p>Taylor expansion(테일러 전개)는 $\Delta w$가 매우 작은 값일 때 다음과 같은 식으로 나타낼 수 있음을 의미합니다.
$$
f(w+\Delta w) = f(w)+\frac{f&#39;(w)}{1!} \Delta w+ \frac{f&#39;&#39;(w)}{2!}(\Delta w)^2 + \ \cdots \quad (1)$$</p>
<p>이때 $\Delta w$가 매우 작다면 2차항을 포함한 그 이상의 고차항들은 0으로 수렴하게 됩니다.  </p>
<p>만약 1차 도함수가 0이 아니면, 아래를 통해 가중치를 업데이트할 수 있습니다.
$$
w_{new} = w_{old}-\alpha f&#39;(w), \quad where ; 0&lt;\alpha&lt;1 \quad (2)$$</p>
<p>여기서 $-f&#39;(w)$는 <strong>&quot;방향&quot;</strong>을 의미하고 $\alpha$는 <strong>&quot;크기&quot;</strong>를 의미합니다.</p>
<p>따라서 (1)식에 (2)를 대입하면 다음과 같이 나타납니다.</p>
<p>$$
f(w_{new}) = f(w_{old}-\alpha f&#39;(w_{old})) \simeq f(w_{old})-\alpha |f&#39;(w)|^2 &lt; f(w_{old}) $$</p>
<p>조금 더 상세히 설명하자면 $-\alpha f&#39;(w_{old})$를 (1)의 $\Delta w$라고 생각할 수 있습니다.</p>
<p>따라서 $f(w_{old}-\alpha f&#39;(w_{old}))$가 $f(w_{old})-\alpha |f&#39;(w)|^2$로 다음과 같은 과정을 통해 근사하게 됩니다.</p>
<p>$$
f(w_{old}-\alpha f&#39;(w_{old})) \simeq f(w_{old}) \ + \ \frac{f&#39;(w_{old})}{1!} \cdot -\alpha f&#39;(w_{old}) = f(w_{old})-\alpha|f&#39;(w)|^2$$</p>
<h3 id="로지스틱-회귀에서의-적용">[로지스틱 회귀에서의 적용]</h3>
<p>이를 독립변수가 2개인 로지스틱 회귀에 적용하면 다음과 같습니다.
<img src="https://velog.velcdn.com/images/withs-study/post/2ae9c02e-df04-40ad-b3f7-579b239b7239/image.png" alt=""></p>
<p>여기서, $x_i$가 3개인 이유는 $x_0$은 상수항 즉, 1을 의미하기 때문이며 $h$와 $y$는 다음과 같습니다.</p>
<p>$$
h = \sum^2_{i=0}w_ix_i \
y = \frac{1}{1+exp(-h)} = σ(X∣w)$$</p>
<ul>
<li>$h$의 $w_i$는 사실상 로지스틱 회귀분석의 $\beta_i$를 의미하며, $y$는 로지스틱 회귀식임을 알 수 있습니다.
$\to$ 쉽게 말해, <strong>그냥 독립변수 2개로 로지스틱 회귀분석한 것!</strong></li>
</ul>
<p>이때 <em>Cost function</em>을 아래와 같다고 가정해보자
$$
L=\frac{1}{2}(t-y)^2$$
여기서 $t$는 종속변수인 0 or 1이고, $y$는 $p(y=1)$로 $t=1$인 경우에는 $p(y=1)$이 1에 가깝게 나오면 좋고, $t=0$인 경우에는 $p(y=1)$이 0에 가까울수록 좋은 비용함수입니다.</p>
<p>그럼 우리는 위 <em>Cost function</em>을 활용하여 가중치를 업데이트를 해야하고, 그러기 위해선 $\frac{\partial L}{\partial w_i}$를 계산해야합니다. </p>
<p><em>Cost function</em> $L$에는 $w$에 관한 식이 없지만 다음과 같은 Chain rule를 통해 계산할 수 있습니다.</p>
<p>$$
\frac{\partial L}{\partial w_i} = \frac{\partial L}{\partial y} \times \frac{\partial y}{\partial h} \times \frac{\partial h}{\partial w_i}$$</p>
<p>여기서 각 $\frac{\partial L}{\partial y}, \frac{\partial y}{\partial h}, \frac{\partial h}{\partial w_i}$의 계산 과정은 아래와 같습니다.</p>
<p>$$
\begin{aligned}
&amp;L = \frac{1}{2}(t-y)^2 \ \to \ \frac{\partial L}{\partial y}
 = y-t \ \end{aligned}$$</p>
<p>몫의 미분법에 따라, 
 $$ 
 \frac{\partial y}{\partial h} = \frac{exp(-h)}{(1+exp(-h))^2} = \frac{1}{1+exp(-h)} \cdot \frac{exp(-h)}{1+exp(-h)} = y(1-y) $$</p>
<p>$$
h = w_ix_i \ \to \ \frac{\partial h}{\partial w_i} = x_i$$</p>
<p>따라서, 우리는 다음과 같은 식을 도출할 수 있습니다.
$$
\frac{\partial L}{\partial w_i} = \frac{\partial L}{\partial y} \times \frac{\partial y}{\partial h} \times \frac{\partial h}{\partial w_i} = (y-t) \cdot y(1-y) \cdot x_i$$</p>
<p>그러므로 우리는 가중치 $w_i$를 다음과 같이 업데이트를 할 수 있습니다.</p>
<p>$$
w_{new} = w_{old}-\alpha \frac{\partial L}{\partial w_i} = w_{old}-\alpha \times (y-t) \cdot y(1-y) \cdot x_i$$</p>
<p>여기서, $(y-t)$는 예측값인 $y$과 실제값인 $t$로 이루어진 항으로 예측값과 실제값의 <strong>차이</strong>를 나타내는 항입니다. 이때 만약 그 차이가 작다면 가중치 업데이트의 양 역시 줄이는게 합리적이라고 생각할 수 있습니다.</p>
<p>그러므로 <em>Update the coefficient more if the current output $y$ is very different from the target $t$</em></p>
<p>즉 <strong>조절할 가중치의 변화량</strong>을 의미합니다.</p>
<p>다음으로 $x_i$항은 <em>Update the coefficients more if the value of corresponding input variable is large</em></p>
<p>즉, <strong>가중치 조절에서 연관된 독립변수의 값만 영향을 미친다는 것</strong>입니다. 예를 들어 로지스틱 회귀식에서 $\hat{\beta_2}$를 추정하는데 있어서, $x_1$이나 $x_3$는 영향을 주지않고 $x_2$만이 영향을 준다는 의미입니다.</p>
<h2 id="prediction">[Prediction]</h2>
<p>성공확률 $p$는 로지스틱 회귀식에 따라 다음 식을 통해 예측됩니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/b2a00827-16dc-4b6a-9955-5fde7855e76d/image.png" alt=""></p>
<p>$$
p= \frac{1}{1+e^{-(\hat{\beta_0}+\hat{\beta_1}x_1+\hat{\beta_2}x_2 \cdots \hat{\beta_d}x_d)}}$$</p>
<p>따라서 새로운 데이터가 들어왔을 때 위 식을 통해 두 범주 중 한 범주에 속할 확률을 구할 수 있습니다. </p>
<p>여기서 위 그림의 $x$축은 $\hat{\beta_0}+\hat{\beta_1}x_1+\hat{\beta_2}x_2 \cdots \hat{\beta_d}x_d$을 의미하며, $y$축은 $p$를 의미합니다.</p>
<p>이때 현실에서는 어떤 변수에 대해 항상 선형적으로 증가하는 것이 아닌 <strong>특정 구간에 대해서만 선형성을 가지는 경우가 빈번합니다.</strong></p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/da782dbb-c433-4524-99c7-440c81b9cd4b/image.png" alt=""></p>
<p>예를 들어 위 그림을 보면 <strong>초록색 구간보다 왼쪽</strong>에서는 $x$축의 값이 증가하더라도 $y$축의 값이 많이 상승하지 않습니다. 이는 소득이 적은 구간에서는 아무리 소득이 증가하더라도 집을 구매하기가 어렵다는 것을 의미합니다.</p>
<p>하지만 <strong>초록색 구간</strong>에서는 소득이 증가하는 만큼 집을 소유할 확률도 함께 올라가는 <strong>선형성</strong>을 보입니다. 또한 <strong>초록색구간보다 오른쪽</strong>은 소득이 많은 구간으로 이미 그 구간의 대부분이 집을 소유하고 있을 확률이 높기 때문에 $x$축의 값이 떨어진다고 해도 $y$축의 값이 크게 떨어지지는 않는 모습을 보입니다.</p>
<h2 id="cut-off">[Cut-off]</h2>
<p>로지스틱 회귀를 통해 한 범주에 속할 확률 $p$를 계산한 후에는 $p$값에 따라 한쪽 범주로 할당해줘야 합니다. </p>
<p>즉, 0.76과 같이 확률값으로 산출되는 결과를 0 or 1로 나타내줘야한다는 의미입니다. 이를 <strong>Cut-off</strong> 또는 <strong>threshold</strong>라고 합니다. </p>
<p>일반적으로는 0.5로 기준을 정의해주지만, <strong>제조업과 같은 분야</strong>에서는 정상/불량 판단에 있어서 <strong>불량이 매우 적습니다.</strong></p>
<p>이러한 경우 0.5를 cut-off 기준으로 사용하면 불량으로 너무 많이 판단됩니다. 따라서 그 기준을 옮길 필요가 있습니다. 보통은 우리가 관심있는 범주를 &quot;1&quot;범주로 지정을 하는데, 제조업의 경우 불량 범주가 &quot;1&quot;범주가 됩니다. </p>
<p>이 경우 대부분 <strong>현실 문제에서는 관심있는 범주에 속하는 수가 적은 경우가 많습니다.</strong> 따라서 Cut-off 기준을 <strong>0.5보다 낮은 값으로 정하여 이를 해결합니다.</strong></p>
<p>이때 정확한 Cut-off 기준에 대해 정답은 없지만 <strong>Classification accuracy가 최대가 되거나 Sensitivity와 같은 값이 최대화가 되도록 하는 값을 기준으로 사용</strong>합니다. </p>
<h1 id="interpretation">[Interpretation]</h1>
<p>위 과정들을 거쳐 회귀 계수를 추정했으니 그러면 회귀 계수가 무엇을 의미하는지에 대해서도 알아봐야겠죠??</p>
<p>선형 회귀 식
$$
\hat{y} = \hat{\beta_0} + \hat{\beta_1}x_1+\hat{\beta_2}x_2+\cdots+\hat{\beta_d}x_d$$
에서 $\hat{\beta}$는 설명변수가 한 단위 증가했을 때 변화하는 종속변수($\hat{y}$)의 양입니다. </p>
<p>반면, 로지스틱 회귀식
$$
log(Odds)=log(\frac{p}{1-p}) = \hat{\beta_0}+\hat{\beta_1}x_1+\hat{\beta_2}x_2+\cdots+\hat{\beta_d}x_d$$
은 좌변이 $log(Odds)$이기 때문에 회귀계수의 의미를 직관적으로 파악하기 어렵습니다. </p>
<p>그래서 로지스틱 회귀에선 <strong>Odds ratio</strong>라는 개념이 사용됩니다.
예를 들어 $x_1$ 한 단위가 증가할 때 Odds ratio 식은 아래와 같습니다.
$$
\frac{Odds(x_1+1, \cdots, x_d)}{Odds(x_1, \cdots, x_d)} = \frac{e^{\hat{\beta_0}+\hat{\beta_1}(x_1+1)+\hat{\beta_2}x_2+\cdots+\hat{\beta_d}x_d}}{e^{\hat{\beta_0}+\hat{\beta_1}x_1+\hat{\beta_2}x_2+\cdots+\hat{\beta_d}x_d}} = e^{\hat{\beta_1}}$$</p>
<p>의미를 알아보면, <strong>$x_1$ 한 단위가 증가할 때 <em>Odds</em>는 $e^{\hat{\beta_1}}$만큼 증가한다는 뜻</strong>입니다.</p>
<p>이때 만약 $\hat{\beta} &gt;0$이라면 $e^{\hat{\beta}}&gt;1$를 만족하고, 이는 결국 <em>Odds ratio</em>가 커진다는 것을 의미하며 이는 성공확률 $p$가 증가한다는 의미입니다.</p>
<p>따라서, <strong>$\hat{\beta} &gt;0$인 경우는 &quot;성공&quot; 범주와 회귀계수 간에 양의 상관관계</strong>가 있음을 의미합니다. 또한 만약 반대로 <strong>$\hat{\beta} &lt;0$인 경우</strong>에는 $e^{\hat{\beta}}&lt;1$이며 이는 위와 같은 과정을 통해 <strong>&quot;성공&quot;범주와 회귀계수 간에 음의 상관관계</strong>가 있다는 것을 의미하게 됩니다.</p>
<p>그럼 예시를 통해 다시 이해해보도록 하겠습니다. </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/2a7f5f0c-caa5-4a15-b076-9a0f3171d967/image.png" alt=""></p>
<p>만약 파란색 동그라미는 Not Default, 주황색 십자표시는 Default한 사람들의 데이터라고 할 때, 산점도와 Boxplot을 살펴보면 Balance 변수는 Default 판단에 있어 매우 유용한 변수이지만 Income 변수는 두 범주를 명확하게 구분할 수 없기 때문에 유용하지 않은 변수인 것을 파악할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/86dd823f-94ef-4627-92a6-f470686cfe22/image.png" alt=""></p>
<p>위 변수들과 Student 변수(학생이면 1, 아니면 0인 범주형 변수)로 로지스틱 회귀분석을 실시한 결과가 다음과 같다면, balance 변수만 유의수준 5%하에소 유의한 것을 확인할 수 있습니다. </p>
<p>다음으로 독립변수에 따른 확률값 추정을 예로 확인하기 위해 유의한 변수인 balance 변수만을 활용하여 로지스틱 분석을 실시하면 다음과 같은 결과가 나옵니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/64c60746-0e85-4541-a3fc-102633a47504/image.png" alt=""></p>
<p>이를 통해 만약 balance변수가 1000$이면 아래와 같이 Default 확률을 계산할 수 있습니다.</p>
<p>$$
\hat{p(X)} = \frac{e^{\hat{\beta_0}+\hat{\beta_1}X}}{1+e^{\hat{\beta_0}+\hat{\beta_1}X}} = \frac{e^{-10.6513+0.0055\times 1000}}{1+e^{-10.6513+0.0055\times 1000}} = 0.006$$
위 결과에 따라 만약 balance 변수가 1000$라면 0.6%의 확률로 Default가 발생함을 알 수 있습니다.</p>
<p>또한 만약 2000$의 값을 가진다면 다음과 같이 계산할 수 있습니다.</p>
<p>$$
\hat{p(X)} = \frac{e^{\hat{\beta_0}+\hat{\beta_1}X}}{1+e^{\hat{\beta_0}+\hat{\beta_1}X}} = \frac{e^{-10.6513+0.0055\times 2000}}{1+e^{-10.6513+0.0055\times 2000}} = 0.586$$</p>
<p>따라서 이 경우에는 58.6%로 Default가 발생함을 알 수 있으며 변수는 2배 증가했지만, default 확률은 58%나 증가함을 확인할 수 있습니다. </p>
<h2 id="geometric-interpretation">[Geometric interpretation]</h2>
<p>만약 2가지 변수를 통해 로지스틱 회귀분석을 한다면, </p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/eb553702-f813-4905-a286-b943962fb59d/image.png" alt=""></p>
<p>위 결과처럼 결과를 얻을 수  있습니다. 이때 만약 분류 기준이 초록색 선이라면 회귀계수에 따라 파란색 방향으로 가면 &quot;1&quot;로 라벨링된 범주일 확률이 1에 가까워지고 빨간색 방향에 데이터가 있을수록 확률이 0에 가까워진다는 것을 알 수 있습니다.</p>
<h1 id="multinomial-logistic-regression">[Multinomial Logistic Regression]</h1>
<p><img src="https://velog.velcdn.com/images/withs-study/post/7d9d3111-cc96-4746-bde3-a33625ee8ccd/image.png" alt=""></p>
<p>위에선 종속변수의 범주가 2개인 경우만을 살펴보았지만 범주값이 2개보다 더 많은 경우가 존재할 수 있습니다. 이 경우에는 <strong>Multinomial Logistic Regression</strong>를 통해 해결할 수 있습니다.</p>
<p>Multinomial Logistic Regression의 과정을 설명드리자면,</p>
<p>우선 일명 <strong>Baseline</strong>으로 사용할 변수를 하나 정해줍니다.
(이 글에서는 예시로 범주가 3개인 로지스틱 분석에서 $y=3$일 경우를 baseline으로 정해서 사용하겠습니다.)</p>
<p>이후 Baseline 범주를 분모로 하여 다른 범주들 각각 $log(Odds)$값을 통해 회귀식 2개를 계산해줍니다.</p>
<p>$$
log(\frac{p(y=1)}{p(y=3)})=\hat{\beta_{10}}+\hat{\beta_{11}}x_1+\cdots \hat{\beta_{1d}}x_d = \beta_1^T X$$</p>
<p>$$
log(\frac{p(y=2)}{p(y=3)})=\hat{\beta_{20}}+\hat{\beta_{21}}x_1+\cdots \hat{\beta_{2d}}x_d = \beta_2^T X$$</p>
<p>이때 위에서 살펴본 이항 로지스틱 회귀분석에서 $\frac{p}{1-p} = \frac{p(y=1)}{p(y=0)}$인 점을 생각하면 이 과정을 이해하기가 쉬울겁니다.</p>
<p>다음으로 위 과정을 통해 얻은 회귀식은 아래와 같이 표기할 수 있습니다.</p>
<p>$$
\frac{p(y=1)}{p(y=3)}=e^{\beta_1^TX}, \ \frac{p(y=2)}{p(y=3)}=e^{\beta_2^TX}$$</p>
<p>이때 각 범주가 될 변수의 확률들을 합하면 1이 되어야 하므로 
$p(y=1)+p(y=2)+p(y=3)=1$라는 식을 만족해야하고 이는 위 두 식을 통해 다음과 같이 나타낼 수 있습니다.</p>
<p>$$
e^{\beta_1^TX} \times p(y=3)+e^{\beta_2^TX} \times p(y=3)+p(y=3)=1
\
\therefore p(y=3)=\frac{1}{1+e^{\beta_1^TX}+e^{\beta_2^TX}}$$</p>
<p>정리하면 종속변수가 K개의 범주로 구성되어 있을 때 K-1개의 로지스틱 회귀식을 얻을 수 있고, 이를 통해 위와 같이 다항 로지스틱 회귀식을 얻을 수 있다는 것입니다.</p>
<p><img src="https://velog.velcdn.com/images/withs-study/post/1fcb695c-d921-467c-819e-eac68b6812fb/image.png" alt=""></p>
<p>또한 범주가 3개인 다항 로지스틱 회귀분석을 실시하면 위와 같은 결과를 얻을 수 있고 결과를 살펴보면 Baseline인 &quot;3&quot;범주에 대해 1 vs 3, 2 vs 3으로 비교할 수 있음을 확인할 수 있습니다.</p>
<p>이때 중요한 점은 <em>Ash</em> 변수나 <em>Proanthocyannins</em> 변수와 같이 &quot;1&quot; 범주와 &quot;3&quot; 범주를 판단할 때는 두 변수 모두 $p-value$가 0.05 이상으로 유의수준 5% 이내에서 유의하지 않은 변수이지만 &quot;2&quot; 범주와 &quot;3&quot; 범주를 판단할 때는 $p-value$가 0에 가까운 변수로 매우 유의한 변수임을 확인할 수 있습니다. </p>
<p>따라서 <strong>범주 각각을 판단할 때 중요한 변수가 달라질 수 있다</strong>는 점을 유의하면 다항 로지스틱 분석을 잘 활용할 수 있을 것이라고 기대됩니다.</p>
]]></description>
        </item>
    </channel>
</rss>