<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://kdchoi-mkt.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://kdchoi-mkt.github.io/" rel="alternate" type="text/html" /><updated>2023-02-13T16:54:53+00:00</updated><id>https://kdchoi-mkt.github.io/feed.xml</id><title type="html">경돈학생의 생각공간</title><subtitle>기본적인 통계와 마케팅 과학에 대한 내용을 다룹니다. 가끔씩 수학 관련 내용이나 채-신 논문을 다루기도 합니다</subtitle><author><name>Kyungdon Choi</name></author><entry><title type="html">Instrument Variable</title><link href="https://kdchoi-mkt.github.io/econometric/instrument-var/" rel="alternate" type="text/html" title="Instrument Variable" /><published>2022-05-13T00:00:00+00:00</published><updated>2022-05-13T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/econometric/instrument-var</id><content type="html" xml:base="https://kdchoi-mkt.github.io/econometric/instrument-var/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이번 내용을 이해하기 위해서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;linear regression&lt;/code&gt;에 대한 이해와 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;econometric&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;실험 설계&lt;/code&gt; 등에 대한 내용을 숙지해야합니다. 아마도?&lt;/p&gt;

&lt;h1 id=&quot;identifying-causal-inference&quot;&gt;Identifying Causal Inference&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;관측 데이터에 한해서 어떻게 정확한 인과관계를 추정할 수 있을까?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;인과관계를 측정하기 위해서는 일반적으로 실험이 동반되어야한다. 여기서 말하는 실험이란, 사람들을 랜덤하게 A그룹, B그룹으로 나눈 후 각 그룹에 대해 서로 다른 처치를 주는 것을 의미한다. 여기서 가장 중요한건 &lt;strong&gt;랜덤&lt;/strong&gt;인데, 일반적으로 주어진 데이터는 실험 데이터가 아닌 관측 데이터이기 때문에 &lt;strong&gt;인과관계를 제대로 확인할 수 없다&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;예를 들어보자. 온라인 교육 시장에서 쿠폰을 사용하지 않고 구매한 사람들이 쿠폰을 사용하여 구매한 사람보다 더 완강을 많이 하는지를 알고 싶다. 만약 쿠폰을 준 사람들과 쿠폰을 안 준 사람들이 모두 랜덤하게 배정이 되었다면 그냥 각 그룹의 완강률 평균을 측정하면 되겠지만, &lt;strong&gt;쿠폰을 사용한 그룹과 사용안한 그룹은 본질적으로 다른 그룹이다&lt;/strong&gt;! 쿠폰을 사용한 그룹은 가격에 민감한 그룹이고, 쿠폰을 사용하지 않은 그룹은 가격에 둔감한 그룹이기 때문에, 유저가 직접 쿠폰을 사용할지 말지 선택을 하고, 이것은 우리가 흔히 말하는 &lt;strong&gt;Selection Bias&lt;/strong&gt;가 걸려있다고 볼 수 있다.&lt;/p&gt;

&lt;p&gt;사람들이 가격에 민감한지 아닌지, 그리고 완강할 능력이 충분히 되는지 안되는지를 파악하고 싶지만, 사실 그런 변수들은 우리가 통제할 수 없다. 따라서 이런 변수들이 생략되면서 &lt;strong&gt;Omitted Variable Bias&lt;/strong&gt; (생략 변수 편의)가 발생하게 되어, 우리가 보고싶은 쿠폰 사용 여부가 완강에 미치는 영향을 제대로 측정할 수 없게 되는 것이다. 그렇다면, 이 상황에서 우리는 어떻게 쿠폰 사용 여부의 영향을 미치는 것을 확인할 수 있을까? 만약 쿠폰 자체를 랜덤하는게 사용하는게 아니라, &lt;strong&gt;쿠폰을 사용하는 것과 연관이 되지만 랜덤하게 발생하는 일&lt;/strong&gt;들을 가지고 오게 된다면? 이렇게 랜덤하게 발생하는 일을 통해서 유저들을 처치군과 대조군으로 랜덤하게 나눌 수 있을텐데, 그러면 그 사람들에 대한 쿠폰 효과를 측정한다면 그게 적당한 처치효과로 볼 수 있지 않을까? 그러니까, 이런 상황을 잘 사용한다면 실험과 비슷한 세팅이 될 수 있지 않을까?&lt;/p&gt;

&lt;p&gt;학계에서는 이렇게 랜덤하게 발생하는 사건 및 변수를 &lt;strong&gt;Instrumental Variable&lt;/strong&gt; (도구 변수)라고 부른다. 어쨌든 회귀분석은 수학적인 식으로 구성되기 때문에, &lt;strong&gt;instrumental variable&lt;/strong&gt;도 수학적으로 정의해보겠다.&lt;/p&gt;

&lt;h1 id=&quot;definition-of-iv&quot;&gt;Definition of IV&lt;/h1&gt;

&lt;p&gt;우선, 우리가 보고 싶은 것은 $X$가 $y$에 얼마나 영향을 주는지를 알고싶다. 이는 다음과 같은 regression equation으로 볼 수 있다.&lt;/p&gt;

\[y =X\beta+\epsilon\]

&lt;p&gt;다만, 여기서 생기는 문제는 $X$가 완전히 $y$를 통제하지 못한다는 점에 있다. 이 말인 즉슨, $\operatorname{Cov}(y, \epsilon)\neq 0$임을 의미한다. 이 상황에서, 우리는 어떻게든 저러한 error를 없애서 $y$와의 correlation을 없애버리고 싶다. 위에서 설명했지만, 이 상황을 타개할 수 있는 것은 instrumental variable, $Z$이다. 여기서 $Z$가 가져야하는 특성을 알아보자.&lt;/p&gt;

&lt;p&gt;앞서 말했던 것과 비슷하게, instrumental variable은 우리가 보고 싶은 변수와 연관이 되면서, 랜덤하게 발생해야한다. 이를 수식적으로 풀어보면 두가지로 축약할 수 있는데&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;$\operatorname{Cov}(X, Z)\neq 0$&lt;/li&gt;
  &lt;li&gt;$\operatorname{Cov}(Z, \epsilon)=0$&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이다. 특히, (2)번의 condition은 굉장히 중요해서 이름이 있는데, 바로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;**exclusion restriction**&lt;/code&gt;이다. 사실 $Z$가 정말 pure random할 필요는 없고, 단순히 에러, 즉 $\epsilon$과 correlation만 없어도 된다. 그러나 pure random이면 pseudo random이기 때문에, 보통 $Z$를 exogenous shock으로 두기도 한다. 그러면 이걸로 어떻게 true coefficient를 측정할 수 있을까?&lt;/p&gt;

&lt;h1 id=&quot;identification&quot;&gt;Identification&lt;/h1&gt;

&lt;p&gt;현재 우리의 상황을 다시 한 번 돌아보자. $X$는 제대로 $y$를 컨트롤 못해서 $\epsilon$과 $y$가 서로 correlation이 있고, $Z$는 $X$와 관련이 있으면서 $\epsilon$과는 무관하다. 그렇다면, 우선 $Z$가 $X$에 미치는 영향을 알아보자. 이는 다음과 같은 regression으로 coefficient $\pi$를 측정할 수 있다.&lt;/p&gt;

\[X=\pi Z+ \eta\]

&lt;p&gt;그렇다면, 우리가 구한 $\pi$의 추정치 $\hat{\pi}$를 통해서 $Z$가 $X$에 미치는 추정치인 $\hat{X}=\hat{\pi} Z$를 찾을 수 있다. 여기서 중요한 점은, 이제 $\hat{X}$는 random하게 발생한 $Z$에 따라 분포가 되었다는 것이다. 이 $\hat{X}$를 원래 우리의 모형 $y=X\beta + \epsilon$에 집어넣자.&lt;/p&gt;

\[y = \hat{X}\beta + \epsilon\]

&lt;p&gt;이렇게 바뀌면, 이제 더이상 $\hat{X}$와 $\epsilon$의 correlation은 존재하지 않게 된다. 그 이유는,&lt;/p&gt;

\[\operatorname{Cov}(\hat{X}, \epsilon) = \hat{\pi}\operatorname{Cov}(Z, \epsilon) = 0\]

&lt;p&gt;그런데 여기서, 우리가 $\hat{\beta}$를 구하게 되면&lt;/p&gt;

\[\hat{\beta} = \frac{\operatorname{Cov}(\hat{X}, y)}{\operatorname{Var}(\hat{X})}\]

&lt;p&gt;가 되며, $\hat{X} = \hat{\pi}Z$이기 때문에,&lt;/p&gt;

\[\hat{\beta} = \frac{\hat{\pi}\operatorname{Cov}(Z, y)}{\hat{\pi}^2\operatorname{Var}(Z)} = \frac{\operatorname{Cov}(Z, y)}{\hat{\pi}\operatorname{Var}(Z)}\]

&lt;p&gt;이고, 사실상 $\hat{\pi} = \operatorname{Cov}(Z, X)/\operatorname{Var}(Z)$이기 때문에,&lt;/p&gt;

\[\hat{\beta} = \frac{\operatorname{Cov}(Z, y)}{\operatorname{Cov}(Z, X)}\]

&lt;p&gt;로 측정할 수 있다. 특히, 잘 보면 저것들은 $y$에 대한 $Z$의 회귀식 계수값을 $X$에 대한 $Z$의 회귀식 계수값으로 나눈 값이기 때문에, 단순히 두 식을 regression한 후에 계수만 나누면 true beta 값을 찾을 수 있다는 것이다.&lt;/p&gt;

&lt;h1 id=&quot;wald-estimator---z가-discrete할-때&quot;&gt;Wald Estimator - Z가 discrete할 때&lt;/h1&gt;

&lt;p&gt;이러한 pseudo-random을 가진 instrumental variable Z가 만약 binary 변수라면? 그렇다면 우리가 구한 beta값은 다시 써질 수 있다.&lt;/p&gt;

\[\hat{\beta} = \frac{\operatorname{Cov}(Z, y)/\operatorname{Var(Z)}}{\operatorname{Cov}(Z, X)/\operatorname{Var(Z)}} = \frac{\mathbb{E}[y|Z=1]-\mathbb{E}[y|Z=0]}{\mathbb{E}[X|Z=1]-\mathbb{E}[X|Z=0]}\]

&lt;p&gt;이 이유는 간단한데, 일반 regression 식 자체가 사실은 conditional mean을 다루기 때문이다. 즉&lt;/p&gt;

\[y=\alpha + Z\rho + \epsilon \\
\implies \mathbb{E}[y|Z=1] - \mathbb{E}[y|Z=0] = \rho\]

&lt;p&gt;가 되기 때문에, 굳이 regression coefficient를 추정하지 않고서도 단순 statistic을 통해 causal inference를 계산할 수 있는 것이다. 저런 형태의 estimator를 특히 &lt;strong&gt;&lt;em&gt;Wald Estimator&lt;/em&gt;&lt;/strong&gt;라고 부른다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;Instrumental variable의 가장 큰 특징은 $y$에 대해서 $X$와 관련있는 정보만 보존하고 $X$와 관련 없는 정보는 모두 없애버린다는 것이다. 비슷하게, instrumental variable을 여러개 사용해도 문제 없다. 그렇다면, 엄청 많은 IV를 사용하는게 항상 좋을까? 그리고 모든 instrumental variable이 다 좋을까? 여기에서 두가지 문제점이 있는데&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Overidentification: 많은 개수의 IV를 사용함으로써 오히려 검정 효과가 낮아지는 현상&lt;/li&gt;
  &lt;li&gt;Weak Instrument: Exclusion Restriction이 제대로 working하지 않아서 omitted variable bias의 효과가 줄어들지 않는 현상&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;등의 문제가 있으므로, 잘 확인하고 사용해야한다.&lt;/p&gt;

&lt;p&gt;이 토픽에서 계속 다루었던 것은 처치효과가 모든 사람들에게 똑같은 경우에 대해서만 다루었다. 그러나, 항상 이런 효과가 똑같을 이유는 없다. 만약 처치 효과가 각 사람들마다 다르다면 이러한 $\rho$값을 어떻게 해석해야할까? 이는 다음 토픽인 &lt;a href=&quot;https://www.notion.so/Econometric-2-LATE-Theorem-ca084b2f12754015a33be8f575f07cef&quot;&gt;Econometric 2. LATE Theorem&lt;/a&gt; 으로 넘기도록 하겠다.&lt;/p&gt;

&lt;h1 id=&quot;관련-페이퍼&quot;&gt;관련 페이퍼&lt;/h1&gt;

&lt;p&gt;Angrist and Pisckhe (2008) - &lt;em&gt;Mostly Harmless Econometrics: An Empiricist’s Companion&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Goldfarb and Tucker (2014) - &lt;em&gt;Conducting Research with Quasi-Experiments: A Guide for Marketers&lt;/em&gt;&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="econometric" /><category term="일반 데이터 분석론" /><category term="내생 변수" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">질적 연구 방법론 - 데이터 분석의 한계점과 보완책</title><link href="https://kdchoi-mkt.github.io/data-analysis/qualitative-method/" rel="alternate" type="text/html" title="질적 연구 방법론 - 데이터 분석의 한계점과 보완책" /><published>2022-05-06T00:00:00+00:00</published><updated>2022-05-06T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/qualitative-method</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/qualitative-method/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이번 포스팅은 2020년 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;행태과학을 위한 연구방법론&lt;/code&gt; 과목의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;“Qualitative Research (질적 연구방법론)”&lt;/code&gt; Reaction Memo에서 발췌했습니다. 지금까지 제가 포스팅한 9개의 양적 데이터 분석론 및 통계와는 결이 다르나, 한 번 정도는 이러한 질적 연구 방법론에 대해서 고민해볼 필요가 있다고 생각하여 공유합니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;“연구는 항상 객관적으로 측정한 것을 바탕으로 시행되어야 한다.” 많은 사람들, 또는 적어도 나에게는 이러한 고정 관념이 있었다. 연구를 시행할 때 주관의 개입이 들어가면 더 이상 그것은 모두에게 적용되지 않을 수 있기 때문이라는 생각이 있었기에 지금까지 qualitative research는 모순적인 말이었다. 사람들에게 인터뷰를 하는 것은 인터뷰이나 인터뷰어 두 명 모두에게 주관이 개입될 수 있기 때문에, 이 정보들을 바탕으로 어떤 결과를 나타낼 수 있고 어떻게 사람들이 받아들일 수 있는가?&lt;/p&gt;

&lt;p&gt;이번에 주어진 논문과 교과서를 아우르는 토픽은 qualitative research이다. 사실, 경영학부에 들어와서 보았던 많은 리서치들은 주관적인 견해가 충분히 반영되는 리커트 7점 척도를 가지고 평균을 재어 두 집단이 같은지, 혹은 다른지 증명하여 가설을 검증했기 때문에 그러한 method를 이해하고 받아들이는데 오랜 시간을 썼다. 어쨌든 각 집단이 서로 고르다면, 평균은 같을 것이니까. 하지만 qualitative method는 벽돌의 질감이 얼마나 좋은지에 대해 측정하는 연구 방법이다. 예를 들어서, 육각형을 보고 무엇이 떠오르세요? 라는 질문을 한다면, 누군가는 육각형이 원과 같다고 느낄 수도 있고, 누군가는 육각형이 삼각형과 같다고 생각할 수 있다. 이렇게 어떤 것에 대해 측정하는 것이 아니라 open-ended question으로 느낀점을 서술하는 것은 서로 대조를 할 수 없다. 양적 연구방법론을 채택하였을 때 나오는 장점이 바로 여기에 있다. 두 집단간의 대조를 통해 가설을 비교적 쉽게 검증할 수 있는 것. 하지만 양적 연구방법론의 단점은, 새로운 이론을 쉽사리 정립할 수 없다는 점에 있다고 생각한다. 지금까지 보았던 대부분의 양적 연구방법은 논문은 기존의 이론을 통해 현상에 대한 가설을 정의하고, 실험을 하거나 데이터를 분석하여 증명을 한다. 그러나 새로운 현상이 나와 새로운 이론을 정립해야할 때, 특히 아무 정보와 직관 등이 없을 때 어떤 것이 사람들을 움직이게 만드는지는 양적 연구방법이 아닌, 질적 연구방법이 더 도움이 된다고 생각한다.&lt;/p&gt;

&lt;p&gt;다만 qualitative research라고 해서 인터뷰를 편하게 해도 된다는 것은 아니다. 결국에는 qualitative research도 연구 행위이기 때문에 조심스럽게 다뤄져야 하는데 이는 곧 최대한 주관을 배제해야 하며, 특히 근거이론 방법의 경우에 대해서는 연구자가 통찰력이 있어야 하며 계속 데이터를 쌓으면서 어떤 집단에게 계속 research를 할 것인지 고민하여 추가적인 데이터를 쌓을 필요가 없을 때까지 연구를 진행하는 등의 연구자의 역량을 다른 것에 비해 더욱 강조한다. 그러면서 line-by-line으로 개념화, 범주화를 시킨 뒤 여러 코딩들을 통하여 이론을 정립해 나가야 한다. 결론적으로 qualitative method가 주관적인 개입이 들어가는 것이 아닌, 최대한 배제하고 추상화를 시켜 이론을 전개하는 method라는걸 알게 되었다.&lt;/p&gt;

&lt;p&gt;이번에 논문과 교과서를 보면서 인식을 바꾸었는데, 이는 연구가 아니라 실무자가 읽어도 굉장히 도움이 될 것이라 생각이 된다. 지금 같은 빅데이터 시대에 많은 사람들이 영상, 그림 또는 문서와 같은 unstructured data의 분석에 초점을 두고 있다. 세상의 대부분은 척도와 같은 structured data로 정해져 있지 않기 않기에 많은 실무자들은 unstructured data를 마주하고 이를 structured로 바꾸려고 노력한다. 그러나 실제로 어떤 사람들이 어떤 행동을 보이는지를 기존 로그 데이터 혹은 구매 데이터로 파악하는 것은 한계가 있다. 예를 들어서, 강의를 수강하는 사람들의 수강 패턴을 알고 싶다고 해보자. 그리고 여기에 선행된 분석이 하나도 없다고 해보자. 이 때 아무 정보도 없고, 아무 직관도 없을 때에는 어느 변수로 어떻게 분석을 해야 하는지 감이 오지 않기 때문에, 어느 수치를 가져와도 실제로 기업이 데이터를 써먹기 용이하지 않을 수 있다. 대신 잘 짜인 인터뷰를 통해 사람들이 어떤 행동을 순차적으로 진행하는지 파악을 한다면 그것을 토대로 이론을 확장하여 분석 메소드를 사용할 수 있을 것이다. 그리고 설령 기존의 theory를 잘 알고 있다고 해도 회사마다, 그리고 영역마다 다를 수 있기 때문에 qualitative method를 통해 소비자가 생각하는 기업에서의 행동을 유추하는 것 역시 과소평가 되어서는 안된다고 생각된다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;많은 사람들이 데이터를 가지고 사람들을 모두 판단할 수 있다고 생각합니다. 그러나 실상은 그렇지 않습니다. 데이터만 쳐다본다고 좋은 가설이 나오는 것도 아니고, 오히려 주어진 관측 데이터를 계속 바라만 보는게 어떤 측면에서는 비효율적일 수 있습니다. 예를 들어, 아하 모먼트를 찾는다고 해봅시다. 이 때 데이터를 기반으로 분석하게 되는 경우 엄청난 코스트가 들 수 밖에 없습니다. 소위 말하는 Selection Bias, Endogeneity, 결측치, 모델 세팅 방법 등… 데이터 분석을 통해 가설을 어떻게든 세우려고 한다면 철저하지만 어려운길을 돌아가는 겁니다. 왜냐하면 데이터가 사실을 말해주지 않거든요. 그러나, 소비자와 1:1 인터뷰, 혹은 그룹 인터뷰 등을 통해서 서비스의 어떤 부분에서 어떤 장단점을 생각할 수 있었는지에 대해 파악하는 것은 상대적으로 쉽습니다. 아무튼 이야기 진행을 잘 하면 되는거니까요. 물론 인터뷰이가 말한것이 보편적으로 타당한 이야기인지는 데이터로 검증해봐야겠으나, 가설 검증의 측면에서는 오히려 소비자의 이야기를 듣는 것이 때로는 더욱 정확하고, 빠를 수 있다는 것입니다.&lt;/p&gt;

&lt;p&gt;이런 측면에 대해서는 아마도 마케터들은 뼈저리게 느끼고 있을 것입니다. 소비자가 어떤 생각을 하는지 파악하고 거기에 맞춰 물건을 파는 것이 그들의 일이니까요. 그러나 데이터 분석가들은 데이터에 매몰되어있는 경우가 많습니다. 적어도 제가 그랬으나, 이 수업을 통해 관점을 바꾸게 되었습니다. 여러분들도 이 글을 읽고 실무에서 데이터 분석을 할 때 어떤 문제점이 있었는지 생각해보며, 질적 데이터 분석이 이를 과연 해결해줄 수 있는지에 대해서 고민해보는 것도 좋을 것 같습니다.&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="일반 데이터 분석론" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">분류 모델의 평가 지표 알아보기</title><link href="https://kdchoi-mkt.github.io/data-analysis/classification-metric/" rel="alternate" type="text/html" title="분류 모델의 평가 지표 알아보기" /><published>2022-04-29T00:00:00+00:00</published><updated>2022-04-29T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/classification-metric</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/classification-metric/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이 내용을 이해하기 위해서는 중학교 수준의 수학 능력 가지면 됩니다!&lt;/p&gt;

&lt;h1 id=&quot;분류-문제를-푸는-원리&quot;&gt;분류 문제를 푸는 원리&lt;/h1&gt;

&lt;p&gt;대부분의 일반 사람들이 머신러닝 기법 등의 예측 AI를 통해 가지고 싶은 것은 구별 능력입니다. 이 데이터를 가지고 있는 사람들이 이번 달에 구매할까? 이런 RGB 정보를 가지고 있는 사진이 고양이일까? 이러한 구별을 하기 위해서 머신러닝을 사용하여 분류기, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;classifier&lt;/code&gt;를 만들려고 합니다. 그러나, 사실은 머신러닝은 데이터를 구별해주지 않습니다. 각 데이터별로 어떤 분류일지 “확률”을 추정해줍니다. 특히, 우리가 예측하고자 하는 값이 어떤 특성으로 분류되는지가 아니라, 이 데이터가 어떤 클래스에 들어갈지 말지에 대한 binary 변수라면, classifier는 클래스에 들어갈 &lt;strong&gt;확률을 추정해줍니다&lt;/strong&gt;. 그렇다면 이 상황에서 어느 정도 확률이 높으면 1이고, 그게 아니면 0이라고 정의할 수 있을텐데, 어떤 threshold를 기준으로 추정을 해야할지 감이 안올 수 있습니다. 수량을 예측하는 regression의 경우에는 간단하게 MSE(Mean Squared Error)나 MAE(Mean Absolute Error)를 통해 모델의 예측력을 평가할 수 있지만, binary classification에서는 threshold를 2차적으로 계산을 해야하기 때문에 예측력을 측정하기 다소 애매합니다. 그렇다면, 이 threshold를 어떻게 정의하면 좋을까요?&lt;/p&gt;

&lt;p&gt;만약 우리가 threshold $(th)$ 를 임의로 정했다고 합시다. 그러면 우리의 예측치 $P_i &amp;gt; th$이면 1, $P_i \leq th$이면 0으로 정의를 해봅시다. 즉,&lt;/p&gt;

\[\hat{Y}_i=\begin{cases}1 &amp;amp;\text{if }P_i &amp;gt; th\\ 0 &amp;amp;\text{if }P_i \leq th\end{cases}\]

&lt;p&gt;인 상황입니다. 그러면 당연히 $\hat{Y}_i \in {0, 1}$입니다. 이 상황에서 우리는 true Y값인 $Y_i$와 predicted Y값인 $\hat{Y}_i$가 존재합니다. 이렇게 이진 분류에 대한 예측치와 실제 값이 있을 때, 분류 예측력을 평가할 수 있는 좋은 메트릭 $Metric(Y, \hat{Y}; th)$가 있다고 했을 때, threshold는 다음과 같이 세팅할 수 있습니다.&lt;/p&gt;

\[th = \operatorname{argmax}_k Metric(Y, \hat{Y}; k)\]

&lt;p&gt;여기서 어떤 분류 metric을 사용하면 좋을까요? 이는 상황, 데이터마다 다르겠지만, 일반적으로 쓰이는 것들을 한 번 의미를 짚어가며 보도록 하겠습니다. 이번 포스팅에서 저희가 볼 것은 다음 4가지입니다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Accuracy&lt;/li&gt;
  &lt;li&gt;Precision&lt;/li&gt;
  &lt;li&gt;Recall&lt;/li&gt;
  &lt;li&gt;F1 Score&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;네가지 metric 모두 $\hat{Y}_i$와 $Y_i$를 인풋으로 해서 나오는 0과 1 사이의 값이며, 1로 가면 갈 수록 예측력이 좋다고 보통 이야기 할 수 있습니다. 그렇다면 각각에 대해서 살펴보도록 하겠습니다.&lt;/p&gt;

&lt;h1 id=&quot;accuracy---가장-intuitive한-metric&quot;&gt;Accuracy - 가장 intuitive한 metric&lt;/h1&gt;

&lt;p&gt;우리가 생각했을 때, 예측을 가장 잘했다는 것은 바로 $\hat{Y}_i = Y_i$인 $i$의 값들이 많다는 것입니다. 다른 말로 하면, 예측치와 실제치가 같은 데이터의 비율이 많을 수록 예측을 잘했다고 할 수 있는 것이죠. 이 정신으로 나온 metric이 accuracy입니다. 수식적으로 표현하자면,&lt;/p&gt;

\[\operatorname{Acc}(Y, \hat{Y}) = \frac{\sum_i\mathbf{1}(Y_i = \hat{Y}_i)}{\#i}\]

&lt;p&gt;가 됩니다. 이런 accuracy가 항상 높으면 좋겠지만, 실제로는 이렇게 accuracy가 항상 1로 가지는 않습니다. 대부분 데이터 분석 및 예측 모델을 만들었을 때 accuracy는 0.9 혹은 그 아래일 것입니다. 그러면 이 때 다음과 같은 고민을 자연스럽게 할 수 있습니다. “accuracy 올리는건 포기!, 같은 accuracy라 하더라도 어떤 모델이 더 성능이 좋다고 말할 수 있을까?” 이 문제를 해결하기 위해 등장한 것인 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Recall&lt;/code&gt;과 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Precision&lt;/code&gt;입니다.&lt;/p&gt;

&lt;h1 id=&quot;recall--precision---필요한-상황만-발라내서-확인하자&quot;&gt;Recall &amp;amp; Precision - 필요한 상황만 발라내서 확인하자&lt;/h1&gt;

&lt;p&gt;Accuracy 메트릭이 만들어진 기저는 “예측치와 실제값이 같은지 여부에 대해 관심”입니다. 그러나, 사실 예측치와 실제값을 잘 뜯어보면 다음과 같은 2가지의 경우가 각각 존재함을 확인할 수 있습니다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;예측치가 1인지 0인지&lt;/li&gt;
  &lt;li&gt;실제값이 1인지 0인지&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;따라서, 이들을 2차원 평면에 잘 나타내보면 2x2 = 4가지의 경우의수가 나오는 것을 확인할 수 있습니다&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;예측치가 1인데 실제값이 1인경우 (True Positive; TP)&lt;/li&gt;
  &lt;li&gt;예측치가 0인데 실제값이 1인경우 (False Negative; FN)&lt;/li&gt;
  &lt;li&gt;예측치가 1인데 실제값이 0인경우 (False Positive; FP)&lt;/li&gt;
  &lt;li&gt;예측치가 0인데 실제값이 0인경우 (True Negative; TN)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이 중 (1)과 (4)번은 예측치와 실제값이 같기 때문에 True, (2)와 (3)번은 다르기 때문에 False로 정의합니다. 다만 예측치와 실제값이 같은 경우에 의해서 동일한 것이 아니기 때문에, 각각에 대해서 또다른 네이밍이 필요합니다. 예를 들어 (1)번은 Positive로 예측했는데 실제로도 Positive이니 True Positive, (2)번은 Negative로 예측했는데 실제로는 Positive이니 False Negative, … 이런식으로 말이죠.&lt;/p&gt;

&lt;p&gt;이를 그림으로 나타내면 다음과 같습니다.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/assets/images/metric_1.png&quot; width=&quot;400px&quot; /&gt;
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
Fig.1 Predict - Actual Mapping
&lt;/p&gt;

&lt;p&gt;이렇게 좌표평면으로 나타내면 어떤게 좋을까요? 저희는 accuracy를 여러 컴포넌트로 분리할 수 있는 새로운 관점을 얻게 됩니다. 기존의 accuracy를 계산하는 식은 다음과 같았습니다.&lt;/p&gt;

\[\operatorname{Acc}(Y, \hat{Y})=\frac{\sum_i\mathbf{1}(i\in TP \cup TN)}{\#i}\]

&lt;p&gt;그러나 이는 우리가 관심 밖에 있는 영역도 수식에 반영되는 결과가 나옵니다. 때로는, 전체 accuracy를 보는 것 뿐 아니라 이 “모델의 Positive 예측이 얼마나 진짜인지”, 혹은 “실제 Positive를 얼마나 잘 맞추는지” 등에 대해서 더욱 관심이 있을 수 있습니다.&lt;/p&gt;

&lt;p&gt;타겟 마케팅을 하는 경우를 예를 들어서 생각해보겠습니다. 마케터들은 최대한 구매를 많이 할 것 같은 사람들을 예측해서 해당 고객을 대상으로 타겟을 해야합니다. 이 때 머신러닝 모델을 사용한다고 할때 단순히 accuracy를 보는 것은 큰 도움이 되지 않습니다. 다만 “실제 구매할 사람 중에 모델이 예측한 구매자 수의 비율”을 보는 것이 모델을 선택할 때 더 큰 도움이 되겠죠. 이런 경우처럼 “실제 positive중 true positive의 비율”을 자주 접할 수 있는데, 이는 특히 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Precision&lt;/code&gt;이라는 이름의 metric으로 정의됩니다.&lt;/p&gt;

\[\operatorname{Prec}(Y, \hat{Y})=\frac{\sum_i \mathbf{1}(i \in TP)}{\sum_i\mathbf{1}(i \in TP\cup FP)}\]

&lt;p&gt;이번엔 약물을 투여하는 경우를 예를 들어 생각해보겠습니다. 의사는 특정한 병이 의심되는 환자에게 약을 투여해야합니다. 다만 이 약은 위력이 세기 때문에 실제로 병이 없는 사람들에게 투여하기엔 꽤나 위험한 약입니다. 똑같이, 머신러닝 모델을 사용해서 예측을 한다고 할 때 accuracy를 보는 것은 큰 도움이 되지 않습니다. 대신 “병이 있다고 예측한 사람 중 실제로 병이 있는 사람의 비율”을 보는 것이 모델을 선택할 때 더 좋은 의사결정을 내릴 수 있을 것입니다. 이런 경우처럼 “예측 positive중 true positive의 비율” 역시 자주 접할 수 있는 예시인데, 이는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Recall&lt;/code&gt;이라는 이름의 metric으로 정의됩니다.&lt;/p&gt;

\[\operatorname{Rec}(Y, \hat{Y})=\frac{\sum_i\mathbf{1}(i \in TP)}{\sum_i\mathbf{1}(i\in FN\cup TP)}\]

&lt;p&gt;다만 여기서 주의깊게 봐야하는 것은, False Positive가 아무데도 반영되지 않았다는 점입니다. 이 이유는 뭘까요? 일반적으로, 저희가 0 / 1로 예측하는 것 자체는 의미가 없습니다. 왜냐면 어떠한 모델 $F$가 0을 예측하는 것은 또다른 모델 $1-F$가 1을 예측하는 것과 동일하기 때문에, 우리는 0과 1이라는 숫자 자체로 접근하지 않습니다. 다만 0과 1에 대해 정성적인 의미를 추후에 부여할 뿐입니다. 사람들은 직관적으로 더 중요한 행위를 완수한 경우에 1로, 그 외에 0으로 코딩하여 모델을 학습시키기 때문에, False Positive는 태생적으로 크게 중요한 변수가 아님을 알 수 있는 것이죠. 만약 FP가 TP보다 더 중요하다면, 그대로 0과 1을 스위칭해서 precision 및 recall을 계산하시면 됩니다.&lt;/p&gt;

&lt;p&gt;다만, 여기서도 문제가 생깁니다. Precision과 Recall 중 하나의 metric만 보기 애매한 경우가 있을 수 있습니다. 타겟 마케팅과 약물 투여와 같은 극단적인 상황이 아니고서야, 우리는 precision과 recall 중 하나를 취사선택해서 모델 선정 metric으로 잡기 애매합니다. 이를 보완하기 위해 다음과 같은 metric이 등장하게 됩니다.&lt;/p&gt;

&lt;h1 id=&quot;f1-score---combination-of-recall-and-precision&quot;&gt;F1 Score - Combination of Recall and Precision&lt;/h1&gt;

&lt;p&gt;우리는 precision과 recall 둘 다 한 번에 고려하기 어렵다는 걸 인지했습니다. 그렇다면 이를 어떻게 해결하면 좋을까요? 가장 간단한 방법은, 바보 덧셈을 해보는겁니다.&lt;/p&gt;

&lt;p&gt;바보 덧셈이란, 분수 계산에서 단순히 분자와 분모를 각각 더하는 것을 의미합니다.&lt;/p&gt;

\[\frac{a}{b}+\frac{d}{c}\Rightarrow \frac{a+d}{b+c}\]

&lt;p&gt;당연히 LHS와 RHS는 등호가 아니기에 Rightarrow로 표기를 했습니다. 바보 덧셈을 했을 때의 가장 큰 장점은 a/b, d/c가 0~1 사이인 경우 바보 덧셈의 결과도 마찬가지로 0~1의 사이에 있다는 점입니다. 이의 직관을 얻어, Precision과 Recall을 바보 덧셈을 해보도록 하곘습니다.&lt;/p&gt;

\[\operatorname{Prec}(Y, \hat{Y})+\operatorname{Rec}(Y, \hat{Y})\Rightarrow \frac{2TP}{2TP+FP+FN}\]

&lt;p&gt;이를 조금 더 간단하게 바꿔보겠습니다.&lt;/p&gt;

\[\begin{align*}
\frac{2TP}{2TP+TN+FN}&amp;amp;=\frac{2}{\frac{TP+FN}{TP}+\frac{TP+FP}{TP}}\\
&amp;amp;=\frac{2}{\frac{1}{\frac{TP}{TP+FN}}+\frac{1}{\frac{TP}{TP+FP}}}\\
&amp;amp;=\frac{2}{\frac{1}{\operatorname{Rec}(Y, \hat{Y})}+\frac{1}{\operatorname{Prec}(Y, \hat{Y})}}
\end{align*}\]

&lt;p&gt;어…? 저희는 분명히 바보 덧셈과 같은 이상한 짓거리를 했는데, 최종적으로는 Recall과 Precision의 조화평균으로 귀결되는 모습을 볼 수 있습니다. 이렇게 특이하게 생긴 metric을 우리는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;F1 Score&lt;/code&gt;라고 정의하게 됩니다.&lt;/p&gt;

&lt;p&gt;그러면 다시 돌아와서, 우리는 왜 F1 Score를 사용할까요? F1 Score를 쓰는 이유는 분모에 수정을 가하기 위해서입니다. 분모에 True Negative와 False Negative가 동시에 있는 형태라면, Recall과 Precision을 적절히 조합했다고 볼 수 있을 것 같습니다. 그러면 이를 어떻게 자연스럽게 동시에 만들 수 있을까요? 바보 덧셈을 통해서 자연스럽게(?) 만들었더니, 이게 알고보니 조화평균이었던 것이죠. 이를 사용하면 0~1사이의 숫자는 변하지 않는 대신, Recall과 Precision을 적절하게 배합했다고 볼 수 있을 것 같습니다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;이번 포스팅을 통해서 우리는 분류 모델에 대한 평가 지표 및 발생 원리에 대해 간단하게 살펴봤습니다. 사실 수식 자체는 그렇게 어려운 편도 아니고, 다른 포스팅에 비해서 수학적인 선수 지식이 많이 요구되지도 않아서 특별한걸 원했던 분들에게는 살짝 실망했을 수도 있을 것 같습니다.&lt;/p&gt;

&lt;p&gt;사실 이번 포스팅을 하게 된 계기는, 나름 Machine Learning 및 Econometric쪽을 다루는 블로그인데도 불구하고 평가지표 관련 포스팅이 하나도 없다면 다른 사람들이 보기에 “얘 가라 아니냐?”하는 의문을 가질 수도 있을 것 같아 최대한 제 나름대로 해석한 분류모델 평가지표에 대해 설명을 해봤습니다.&lt;/p&gt;

&lt;p&gt;이번 포스팅에서 나열한 분류 지표를 다시 보자면 Accuracy, Precision, Recall, F1 Score입니다. 이 metric의 공통점은, 우리가 모형의 결과가 확률로 나오는데도 불구하고 이를 이산화(discretization)을 한 뒤에 계산할 수 있는 metric이라는 것입니다. 이렇게 특정 threshold를 기준으로 잘라서 해당 metric을 구성하는 것도 좋지만, 여기에는 가장 큰 문제가 있습니다. 바로 “모형과 threshold” 둘 다 optimization 해야한다는 뜻입니다. 이를 다르게 말하면, 모델 선정의 optimization cost가 너무 커지는 문제가 생깁니다. 따라서 해당 metric이 해석에는 용이하나 모델 선정 지표로 바로 사용하기에는 부적합할 수 있습니다.&lt;/p&gt;

&lt;p&gt;그렇다면 이 문제를 어떻게 해결할 수 있을까요? 바로 probability 자체를 기반으로 성능을 계산하는 metric을 구성하는 것입니다. 다만 이렇게 가는 경우 우리는 알아야하는게 더 많아집니다. “확률”이란 무엇일까요? 우리는 “확률”을 관측할 수 있을까요? 우리는 확률을 정확하게 알 수 없습니다. 그럼에도 불구하고 확률을 가지고 어떠한 metric을 구성하게 된다면, 더이상 직관적으로 해석할 수 있는 방법은 사라지게 되고, 더 높은 수준의 지식을 요구하게 됩니다. 이번 포스팅에서 자세하게 소개하지는 않았으나, 언젠가 기회가 된다면 소개드릴 다음 두가지 metric이 probability를 통해 계산하는 metric입니다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Log-loss&lt;/li&gt;
  &lt;li&gt;ROC Curve &amp;amp; AUC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Log-loss는 확률론 및 통계학에서 주로 다루는 Bernoulli Likelihood를 의미합니다. 또한, ROC Curve와 AUC는 threshold를 설정하기에 굉장히 용이한 방법론이기도 합니다. 이 외에도 다양한 metric이 어디선가 만들어지고 있을 수 있습니다. 이러한 방대한 성능 평가 metric에 관심이 있으시다면 다른 분들의 포스팅을 참고해서 보시는 것도 좋을 듯 합니다.&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="일반 데이터 분석론" /><category term="머신러닝" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">분류 예측 이해하기 - Logistic Regression</title><link href="https://kdchoi-mkt.github.io/data-analysis/logistic-regression/" rel="alternate" type="text/html" title="분류 예측 이해하기 - Logistic Regression" /><published>2022-04-22T00:00:00+00:00</published><updated>2022-04-22T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/logistic-regression</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/logistic-regression/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이번 내용을 이해하기 위해서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;고등학교 수준의 수학 지식(미적분)&lt;/code&gt;, 그리고 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;확률론&lt;/code&gt;과 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;분포&lt;/code&gt;에 관한 내용만 이해하고 있으면 충분합니다.&lt;/p&gt;

&lt;h1 id=&quot;확률을-추정하는-모델&quot;&gt;확률을 추정하는 모델&lt;/h1&gt;

&lt;p&gt;일반적으로 outcome variable을 예측하기 위해서는 linear regression을 기반으로 모델을 구성합니다. 그러나 만약 outcome variable이 0 또는 1만 있는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;binary&lt;/code&gt; 변수라면? 일반 linear regression을 사용해서 binary 변수를 예측하고자 하면 값이 항상 0$\sim$1 사이에 나오는 것이 아니라 음수, 혹은 1보다 큰 “확률의 의미를 가질 수 없는 값”이 출력될 수 있습니다. 그러면 이를 해결하기 위해 어떻게 해야할까요? 가장 심플한 방법은 linear regression을 한 뒤에 이 &lt;strong&gt;연속적인 값을 0$\sim$1로 가두어버리는 방법&lt;/strong&gt;입니다. 수학적으로는, 어떤 다음 성질을 만족하는 연속함수 $g(x)$를 가져와서 linear regression 결과를 $g(x)$로 한 번 더 convert하는 방법이 있을 것입니다.&lt;/p&gt;

\[g(x): \mathbb{R}\to [0, 1], g(\alpha + \beta_1x_1 + \cdots + \beta_kx_k) \in [0, 1]\]

&lt;p&gt;그러면 우리의 outcome variable은 무조건 0과 1 사이에 가둬지고, 확률의 의미를 어느정도 가질 수 있게 되는 것이죠. 그렇다면 저렇게 실수 전체를 정의역으로 하고 0~1사이를 치역으로 하는 좋은 함수 $g(x)$는 어떤게 있을까요?&lt;/p&gt;

&lt;h1 id=&quot;좋은-함수-탐색하기&quot;&gt;좋은 함수 탐색하기&lt;/h1&gt;

&lt;p&gt;어떤 성질을 가지는 $g(x)$가 좋은 함수라고 부를 수 있을까요? 우선, 당연히 연속이어야하고 미분가능해야할 것입니다. 그리고 만약 단조증가함수라면 더할 나위 없이 좋겠죠! 역함수가 존재한다는 것은 각 확률마다 inverse를 취할 수 있다는 뜻이기도 하기에, 이는 정보를 우리에게 손실없이 원래대로 제공해줄 수 있다는 뜻이기도 합니다. 그리고 이러한 $g(x)$는 우리가 알고 있는 다항함수나 지수, 로그 함수의 형태로 나타나면 좋을 것 같네요. 특히, $x$가 $-\infty$가 될수록 $g(x) = 0$이 되고, $x$가 $\infty$가 될 수록 $g(x) =1$이 되면 특히 더 좋을 것 같구요. 그러면 정리를 해봅시다&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;좋은 함수 $g(x)$의 성질&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;연속이고 미분가능하다&lt;/li&gt;
  &lt;li&gt;단조 증가함수이다 (역함수가 존재한다)&lt;/li&gt;
  &lt;li&gt;Elementary Function으로 이루어져있다&lt;/li&gt;
  &lt;li&gt;$\lim_{x\to-\infty}g(x) = 0, \lim_{x\to\infty}g(x) =1$이다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이것들을 만족하는 친구들은 여러가지가 있겠으나, 그 중 우리가 가장 많이 쓰는 것은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;expit 형태의 무언가&lt;/code&gt;입니다.&lt;/p&gt;

\[\sigma(x):= \frac{e^x}{1 + e^x}\]

&lt;p&gt;이녀석은 연속이고 미분가능하며, 단조증가함수에, 지수함수의 꼴로 이루어져있고, 또한 우리가 원하는 limit의 형태를 그대로 가지고 있습니다. 그렇다면 linear regression 형태에 이녀석을 composite하면 확률의 의미를 가지는 outcome이 나올 것이고, 이를 통해 우리가 원하는 $\beta$값을 추정할 수 있을 것입니다. 물론 이 $\beta$는 우리가 원하는 어떠한 cost function의 $\operatorname{argmin}$ 값일 것이죠. 즉,&lt;/p&gt;

\[\beta = \operatorname{argmin}_\beta \operatorname{Cost}(\sigma(\alpha + \beta_1x_{1i} + \cdots + \beta_kx_{ki}), Y_i)\]

&lt;p&gt;을 의미합니다. 특히 여기서 $\operatorname{Cost}$ 함수가 Bernoulli 분포의 MLE와 같다면, 우리는 이 회귀분석을 통해 $\beta$를 추정하는 방법론을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;logistic regression&lt;/code&gt;이라고 부릅니다.&lt;/p&gt;

&lt;h1 id=&quot;econometric에서의-logistic-regression&quot;&gt;Econometric에서의 Logistic Regression&lt;/h1&gt;

&lt;p&gt;그렇다면, 이 logistic regression은 단지 0과 1을 예측하는 회귀 분석일까요? 수학적으로 어떨때 데이터가 0을 가리키고 1을 가리킬까요? 이렇게 생각해봅시다. 우리가 어떤 제품을 선택하는데 있어, 제품을 선택할 때 얻을 수 있는 이익을 계산해서 가장 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;이익(utility)&lt;/code&gt;이 큰 제품을 선택한다고 해봅시다. 여기서 각 사람 $i$가 제품을 선택했을 때 얻는 이득을 수치적으로 나타낸 것을 $U_{i}$라고 정의했을 때, 상품을 선택하는 경우는 상품을 선택하지 않았을 때보다 이득이 가장 큰 경우입니다. 다른 말로,&lt;/p&gt;

\[Y_i = 1\text{ if }U_i &amp;gt; 0\]

&lt;p&gt;를 의미합니다. 그렇다면 이 이익을 어떻게 계산할 수 있을까요? 경제학자들은 이러한 개인 별 유틸리티가 특정한 방정식의 형태로 나타난다고 가정을 합니다.&lt;/p&gt;

\[U_{i} = \alpha + \beta X_i+\epsilon_{i}\]

&lt;p&gt;특히, 경제학자들은 모든 유틸리티를 계산할 때 모든 변수를 고려하는게 아니라, 선택하는 우리만 볼 수 있는 숨겨져있는 변수가 있다고 가정을 합니다. 어떤 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;랜덤한 노이즈&lt;/code&gt;가 유틸리티에 영향을 끼쳐서 선택에 영향을 주게 만들 수 있다는 것이죠. 그렇다면, $Y_i$가 1이 될 확률인 $P(Y_i = 1)$은 다음과 같이 작성할 수 있습니다. 물론 선택을 안하는 유틸리티도 어떤 랜덤 노이즈에 영향을 수 있기에 다음과 같이 쓰여집니다.&lt;/p&gt;

\[P(\alpha + \beta X_i + \epsilon_{i} &amp;gt; \epsilon_j)\]

&lt;p&gt;랜덤 변수 $\epsilon_i$에 대한 확률 밀도 함수 (probability density function)를 $f_\epsilon(x)$, 누적 분포 함수 (cumulative distribution function)을 $F_\epsilon(x)$라고 한다면 저녀석의 확률은&lt;/p&gt;

\[\int_{-\infty}^{\infty}\int_{-\infty}^{\alpha + \beta X_i + \epsilon_i}f_\epsilon(\epsilon_i)f_\epsilon(\epsilon_j)d\epsilon_j d\epsilon_i\]

&lt;p&gt;로 나타낼 수 있고, 좀 더 specific하게 나타내면&lt;/p&gt;

\[\int_{-\infty}^{\infty}f_\epsilon(\epsilon_i)F_\epsilon(\alpha + \beta X_i + \epsilon_i)d\epsilon_i\]

&lt;p&gt;가 될 수 있습니다. 아무튼 우리가 $\epsilon_i$의 분포를 알거나 가정할 수 있다면 $Y_i = 1$일 확률을 계산할 수 있으며, Maximum Likelihood Estimation을 통해 적당한 $\alpha$와 $\beta$를 도출 할 수 있습니다. 그런데, 만약 $\epsilon_i$의 CDF가 다음과 같이 생겼다면 어떻게 될까요?&lt;/p&gt;

\[f_\epsilon(x) = e^{-x}e^{-e^{-x}}, F_\epsilon(x) = e^{-e^{-x}}\]

&lt;p&gt;조잡하게 생긴 이 이상한 함수는 실제로 distribution이고, 놀랍게도 몇번의 계산을 통해 $\epsilon_i$가 저렇게 이상하게 생긴 생긴 distribution을 따른다면 다음과 같은 확률로 제품을 선택할 수 있다고 나옵니다.&lt;/p&gt;

\[P(\alpha + \beta X_i + \epsilon_i &amp;gt; \epsilon_j) = \cdots = \frac{e^{\alpha + \beta X_i}}{1 + e^{\alpha + \beta X_i}}\]

&lt;p&gt;이것은 우리가 기존에 알고 있던 logistic regression과 똑같은 형태로 나오는 것을 확인할 수 있습니다. 위의 섹션에서는 그냥 임의로 $g(x)$를 정의했지만, 알고보니 유틸리티에 포함되는 random noise의 distribution의 분포와 연관되어서 나오는 것을 확인할 수 있습니다. Econometrician, 혹은 statistician들은 이러한 에러텀의 분포를 가지고 있는 녀석들을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Gumbel Distribution&lt;/code&gt;, 혹은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Type 1 Extreme Value&lt;/code&gt;이라고 부릅니다.&lt;/p&gt;

&lt;h1 id=&quot;extend-assumption---probit&quot;&gt;Extend Assumption - Probit&lt;/h1&gt;

&lt;p&gt;이제 논의를 조금 더 확장해봅시다. 저희는 logistic regression이 단순히 좋은 $g$함수를 찾아서 쓴게 아니라 통계학적 (혹은 계량경제학적)으로 &lt;strong&gt;unobservable term의 distribution과 연관지어서 설명이 될 수 있다&lt;/strong&gt;는 것을 확인했습니다. 특히, unobservable term이 Type 1 EV을 따를 때 우리가 알고 있는 logistic regression을 따른다는 것을 알게 되었습니다. 그런데, 이 error term의 distribution이 굳이 Type 1 EV을 따를 필요가 없지 않을까요? 만약 정규분포를 따른다면? 아니면 이상한 다른 분포를 따른다면? 이 경우에는 어떻게 회귀식이 바뀌게 될까요?&lt;/p&gt;

&lt;p&gt;우선, $\epsilon_i$와 $\epsilon_j$가 똑같은 분포 $G(x)$를 따른다고 가정을 합시다. 이 때 당연하게도, $\epsilon_i - \epsilon_j$역서 어떤 분포 $H(x)$를 따르겠죠. 그렇다면, 우리의 유틸리티에 따른 선택확률은 다음과 같이 기술됩니다.&lt;/p&gt;

\[P(\alpha + \beta X_i + \epsilon_{i} &amp;gt; \epsilon_j) = H(-\alpha - \beta X_i)\]

&lt;p&gt;당연히 $H(X)$는 CDF이기 때문에 0~1사이의 값을 가지고, 이것은 valid하다는 것을 볼 수 있습니다. 이를 통해서, 똑같이 MLE를 적용하여 $\alpha$와 $\beta$를 찾을 수 있습니다. 그러나 여기서 중요한 점은, 우리가 처음에 정해야하는 분포는 $G(x)$라는 점과 동시에, $H(x)$는 웬만해서 깔끔한 형태로 나오지 않으며 웬만하면 적분을 해야하는 상태로 나타날 수 있습니다.&lt;/p&gt;

&lt;p&gt;예를 들어서, $\epsilon_i$와 $\epsilon_j$가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;정규분포&lt;/code&gt;를 따른다고 가정해봅시다. $\epsilon_i - \epsilon_j$도 정규 분포를 따르는 것이 알려져있기 때문에, $H(-\alpha - \beta X_i) = \Phi(-\alpha - \beta X_i)$입니다. 여기서 $\Phi$는 정규분포의 CDF인데, 알다시피 $\Phi$의 closed form은 존재하지 않는다는 것이 알려져있습니다. 따라서 이렇게 정규분포를 따른다고 가정하면 계산 코스트가 심하게 많이 걸려 $\beta$값을 추정하는데 오래 걸릴 수 있습니다. 그러나 이렇게 하는게 조금 더 믿음직한 가설이기 때문에 $\beta$의 설명에 있어서는 조금 더 파워풀 할 수 있습니다. 이렇게 &lt;strong&gt;error term을 normal distribution으로 가정&lt;/strong&gt;하고 choice 확률을 회귀분석하는 방법론을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Probit&lt;/code&gt;이라 부릅니다.&lt;/p&gt;

&lt;p&gt;당연히 정규분포 외에도 우리가 임의로 넣고 싶은 분포를 넣을 수 있습니다. 그러나 noise에 분포를 넣으면 noise의 차이가 어떤 분포를 따르는지 따로 계산을 해줘야하고, 여기서 더더욱 계산 코스트가 나갈 수 있습니다. 그러나 Logistic Regression의 경우 확률 값이 exponential 형태의 closed form으로 되어있기에 계산이 훨씬 간단하다는 이점이 있습니다. 따라서 계량 분석에서 logistic regression, 혹은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Logit&lt;/code&gt;을 많이 쓰는 이유가 그것입니다. 물론 Logit Regression과 같이 error term에 대한 가정을 Type 1 EV로 둬버리면 utility framework으로 접근했을 때 말도 안되는 결론이 튀어나올 수 있습니다. 이를 해결하기 위해 Nested Logit이나 Random Coefficient Logit등의 여러가지 보완 방법론을 사용하게 되는데, 이에 대해서는 다음에 기회가 된다면 설명하도록 하겠습니다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;이번 포스팅에서는 사람들이 머신러닝을 배울 때 Linear Regression 다음으로 배우는 분류 예측기인 Logistic Regression에 대해서 글을 작성해봤습니다. 실수 전체를 [0, 1] 사이로 연속적으로 압축시키는 Logistic Regression의 특징 외에도, utility framework에서 unobservable이 extreme value type 1을 따른다고 했을 때 상품 선택 확률이 Logistic Regression으로 나온다는 결과를 통해 logistic regression이 random noise의 분포와도 연관되어있다는 것을 확인할 수 있었습니다. 또한, random noise의 분포를 바꿔가면서 회귀 분석을 하는 방법론도 상이해지는 것을 볼 수 있었습니다.&lt;/p&gt;

&lt;p&gt;물론 이번 포스팅도 어렵게 어렵게 다 이해할 필요 없이, 이렇게 유틸리티의 unobservable term 등 세부적인 계량경제학적인 내용을 몰라도 그냥 머신러닝을 돌려서 예측이 잘 되는 회귀분석만 선택적으로 고르면 됩니다. 그러나 통계적인 choice model을 사용한다고 했을 때, Logit과 Probit이 어떤 의미인지 정확히 모르고 사용하게 되면 추정 $\beta$값에 대해 해석하는 방법을 잃거나, 혹은 새로운 방법론이 나왔을 때 그것을 이해하는데 오랜 시간이 걸릴 것입니다. 한 번 정도는 왜 이 데이터에서는 Logit을 쓰고, 왜 이 데이터에서는 Probit을 쓰는지 고민하는 것은 양질의 데이터 사이언티스트가 될 지름길로 보입니다.&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="계량경제학" /><category term="통계" /><category term="머신러닝" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">Ridge와 Lasso는 왜 작동하는걸까?</title><link href="https://kdchoi-mkt.github.io/data-analysis/ols-regularization/" rel="alternate" type="text/html" title="Ridge와 Lasso는 왜 작동하는걸까?" /><published>2022-04-15T00:00:00+00:00</published><updated>2022-04-15T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/ols-regularization</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/ols-regularization/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이번 포스팅을 이해하기 위해서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OLS&lt;/code&gt;에 대한 기본 개념과 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;벡터 미적분학 (Vector Calculus, 혹은 Multivariate Calculus)&lt;/code&gt;에 대한 이해가 필요합니다. 특히, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Lagrangian Multiplier&lt;/code&gt;에 대한 내용을 알고 계시면 이해가 더 편합니다.&lt;/p&gt;

&lt;h1 id=&quot;linear-regression과-ols&quot;&gt;Linear Regression과 OLS&lt;/h1&gt;

&lt;p&gt;지난번 OLS 섹션에서 이야기했던 것 처럼, Linear Regression을 통해서 각 설명변수가 어떻게 종속변수에 관여하는지, 그리고 그 의미가 정확하게 무엇인지에 대해 논의했습니다. 그러나, 몇몇 linear regression을 시행했을 때, 특정 변수에 해당하는 계수의 값이 지나치게 커져버려 오히려 예측력이 줄어들 수 있습니다.&lt;/p&gt;

&lt;p&gt;예를 들어서, 우리가 다음과 같은 regression 결과를 얻었다고 해봅시다.&lt;/p&gt;

\[Y = 20 + 100X_1 + X_2 + 3X_3\]

&lt;p&gt;이 경우, $X_1$의 값에 따라 $Y$의 값이 크게 바뀌게 되고, 이 경우 outlier의 예측에 대해 더 취약해지는, 불안정한 결과를 초래할 수 있습니다. 그렇기 때문에 통계학자들은 이러한 결과들을 보정하기 위해 계수에 대한 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;penalty term&lt;/code&gt;을 집어넣기 시작합니다. 이를 Regularization이라고도 부릅니다.&lt;/p&gt;

&lt;h1 id=&quot;regularization&quot;&gt;Regularization&lt;/h1&gt;

&lt;p&gt;앞서 말했던 문제들과 같이 특정 parameter에 의해 예측값이 치우쳐지는 경우가 있을 수 있는데, 이를 방지하고자 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;penalty term&lt;/code&gt;을 추가해서 계수가 크게 늘어나는 것을 방지하는 테크닉을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Regularization&lt;/code&gt;이라고 이야기를 합니다. 이러한 penalty term은 어디에 추가를 해야할까요? Penalty term을 추가하는 이유가 계수 추정에 규제를 두는 것이기 때문에, 계수를 추정하는 식인 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cost Function&lt;/code&gt;에 추가를 합니다. 이를 수식적으로 풀어쓰면 다음과 같이 Cost Function이 재정의 될 수 있습니다.&lt;/p&gt;

\[Cost(\beta)=L(\beta)+Reg(\beta)\]

&lt;p&gt;여기서 $L(\beta)$: likelihood estimator, $Reg(\beta)$: penalty term을 의미합니다. 여기에서 $Reg(\beta)$를 어떻게 정의하느냐에 따라 추정 결과가 달라질텐데, 일반적으로는 $L_1$ norm, 혹은 $L_2$ norm을 사용합니다. 이를 각각 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Lasso&lt;/code&gt;와 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ridge&lt;/code&gt;라고 부릅니다.&lt;/p&gt;

&lt;h2 id=&quot;lasso&quot;&gt;Lasso&lt;/h2&gt;

&lt;p&gt;단순히, Regularization이 L1 norm인 경우를 의미합니다&lt;/p&gt;

\[Cost(\beta, \lambda)=\|e\|_2^2+\lambda\|\beta\|_1^1\]

&lt;p&gt;$e = Y - X\beta$ 를 의미하며, $\lambda$ 는 일반적으로 연구자가 지정하는 임의의 숫자입니다.
또한 \(\|\beta\|_1^1 = \sum_{k=1}^K |\beta_k|\) 를 의미합니다.&lt;/p&gt;

&lt;h2 id=&quot;ridge&quot;&gt;Ridge&lt;/h2&gt;

&lt;p&gt;단순히, Regularization이 L2 norm인 경우를 의미합니다.&lt;/p&gt;

\[Cost(\beta, \lambda)=\|e\|_2^2+\lambda\|\beta\|_2^2\]

&lt;p&gt;$e = Y - X\beta$ 를 의미하며, $\lambda$는 일반적으로 연구자가 지정하는 임의의 숫자입니다.
또한 \(\|\beta\|_2^2 = \sum_{k=1}^K \beta_k^2\) 를 의미합니다.&lt;/p&gt;

&lt;h1 id=&quot;왜-저런-term이-실제로-regularization-역할을-하는가&quot;&gt;왜 저런 term이 실제로 regularization 역할을 하는가?&lt;/h1&gt;

&lt;p&gt;사실 이번 포스팅의 핵심 논의입니다. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cost Function&lt;/code&gt;에 어떤 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Regularization Term&lt;/code&gt;을 추가했을 때 뭔가 베타값이 잘 규제가 될 것 같은 느낌이 듭니다. 그러나 정확한 매커니즘이 무엇일까요? 사실 많은 블로그에서는 Ridge나 Lasso를 설명하는데 있어 뜬금없이 마름모꼴의 도형과 타원 도형들을 좌표평면 위에 그려넣으면서 &lt;strong&gt;Ridge는 올가미다, Lasso는 변수를 선택할 때 쓴다&lt;/strong&gt; 이런식으로 이야기를 합니다. 그런데 이에 대한 상세한 이야기는 많이 하지는 않은 것 같습니다. 어떤 수학적 원리가 동작하기에 Ridge와 Lasso가 그런 도형처럼 동작하는걸까요? 사실 이를 이해하기란 쉽지 않습니다. 왜냐하면 Ridge와 Lasso가 제대로 동작하는지 알려면 Lagrange Multiplier라는 Theorem을 알아야하고, 이는 대학 Calculus II에서 보통 배우거든요. 많은 사람들이 Multivariate Calculus를 접하면서 Topology 등에 대한 생소한 개념으로 뚜드려 맞으면서 정작 가장 중요한 개념인 Lagrange Multiplier에 대해서는 간과하고 넘어가는 경우가 많습니다. 그러나, 이는 사실 어려운 개념은 아닙니다. 우선 명제를 써보면 다음과 같습니다.&lt;/p&gt;

&lt;h2 id=&quot;recall-lagrange-multiplier&quot;&gt;Recall: Lagrange Multiplier&lt;/h2&gt;

\[\begin{align*}
&amp;amp;\text{For }f: \mathbb{R}^3\rightarrow\mathbb{R}: \text{differentiable ftn}, \\
&amp;amp;g: \mathbb{R}^3\rightarrow\mathbb{R},\\
&amp;amp;\text{the critical point for }f(x) \text{ when }g(x) = c\\
&amp;amp;\text{ exists on the stationary point of the curve } \\
&amp;amp;L(\lambda, x)=f(x)-\lambda g(x)
\end{align*}\]

&lt;p&gt;무수한 영어와 기호들이 악수를 요청하고 있지만, 이는 사실 어렵지 않습니다. 하나하나 보도록 하겠습니다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;우선 $f$는 3차원 실수공간을 정의역으로 하고 실수를 치역으로 하는 미분 가능한 함수입니다. 공간점 하나를 넣으면 숫자 하나가 튀어나오는거죠&lt;/li&gt;
  &lt;li&gt;$g$ 역시 3차원 실수공간을 정의역으로 하고 실수를 치역으로 하는 함수입니다.&lt;/li&gt;
  &lt;li&gt;이 경우에, 우리가 $g(x, y, z) = c$인 $x, y, z$를 가지고 있다고 해봅시다. $g = c$로 정의역을 constraint 한겁니다.&lt;/li&gt;
  &lt;li&gt;그러면 이 상황에서 $f$의 critical point (극점)은 $L(x, y, z, \lambda) = f(x, y, z) - \lambda g(x, y, z)$로 정의된 $L$ function의 stationary point와 같습니다. (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Lagrange Multiplier&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이를 그림으로 그리면 다음과 같은 상황을 의미합니다.&lt;/p&gt;

&lt;p&gt;$f$는 각 점의 원점에서부터의 거리를 의미하며, $g = c$라고 constraint 되어있는 level curve입니다. 그렇다면 여기서 풀어야하는 문제는 이 level curve에서부터까지 거리의 최솟값을 구하는 문제입니다. 이 때 lagrange multiplier를 통해서 최소 거리를 갖는 점과 실제 거리를 계산할 수 있는 것입니다.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/assets/images/post_regularization_1.png&quot; width=&quot;400px&quot; /&gt;
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
Fig.1 - Lagrange Multiplier의 예시
&lt;/p&gt;

&lt;p&gt;여기서 $\lambda$는 constraint value $c$의 값에 종속됩니다. 또한 여기서 서술된 Lagrange Multiplier는 3차원 공간에 대해 주로 이야기하는 Calculus II를 기반으로 서술되었으며, 일반적인 실수공간 $\mathbb{R}^n$에서도 적용될 수 있습니다. 이 Theorem을 기반으로 우리는 기존의 Regularization Technique를 revisit 해보겠습니다.&lt;/p&gt;

&lt;h2 id=&quot;revisit-regulaization&quot;&gt;Revisit: Regulaization&lt;/h2&gt;

&lt;p&gt;Regularization은 다음과 같은 식을 가지고 있습니다.&lt;/p&gt;

\[Cost(\beta, \lambda) = L(\beta) + \lambda Reg(\beta)\]

&lt;p&gt;그런데 이는 Lagrange Multiplier와 비슷한 꼴을 가지고 있습니다. 왜나하면 최종 cost function에 $\beta$와 $\lambda$ 두개가 모두 들어있기 때문입니다. 그래서 이를 Lagrange Multiplier의 세팅과 비슷하게 세팅할 수 있습니다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;$L(\lambda, x):=Cost(\beta, \lambda)$&lt;/li&gt;
  &lt;li&gt;$f(x):= L(\beta)$&lt;/li&gt;
  &lt;li&gt;$g(x):=Reg(\beta)$&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;아까 이야기한 것 처럼 $\lambda$는 연구자가 임의로 설정하는 숫자라고 했습니다. 그리고 Lagrange Multiplier에서 $\lambda$는 $g(x)$의 constraint $c$와도 대응합니다. 이는 비약이긴 하다만, 간단하게 생각해보면 $\lambda$를 설정하는 것 자체가 $\beta$ 공간에 대한 constraint $c$를 설정하는 것과 동일하다고 볼 수 있을 것입니다. 이 세팅에서는 $f(x) = L(\beta)$의 최솟값이 굳이 원점에 있을 필요는 없고, 어떤 좌표평면의 특정 점을 중심점으로 $f(x)$의 그래프가 그려질 것입니다. 그리고 각 $\beta_i$의 축 별로 scaling이 다르기 때문에, 타원형으로 level surface가 그려질 것입니다. 개념을 간략하게 이야기하기 위해, $\beta$ coefficient가 2개밖에 없는 상황으로 이야기해보겠습니다. 2D에서는 3D를 볼 수 없기 때문에, level curve를 계속 그려나가면서 좌표평면에 그래프를 그려보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;이 intuition 및 간략한 세팅 등을 통해서 regularization에 대한 자세한 이야기를 해보도록 하겠습니다.&lt;/p&gt;

&lt;h2 id=&quot;revisit-lasso&quot;&gt;Revisit: Lasso&lt;/h2&gt;

&lt;p&gt;앞서 말씀드렸듯이, Lasso는 $L_1$ norm을 regularized term으로 가지고 있는 녀석입니다. 따라서 이 때 $g(x) = Reg(\beta_1, \beta_2) = c$는 마름모꼴의 형태를 하고 있습니다.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/assets/images/post_regularization_2.png&quot; width=&quot;400px&quot; /&gt;
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
Fig.2 - Lasso
&lt;/p&gt;

&lt;p&gt;이 마름모꼴을 접선으로 $L(\beta_1, \beta_2)$ 이 스쳐지나간다면, 그 접점이 Regularization을 만족한 점이 될 것입니다.&lt;/p&gt;

&lt;h2 id=&quot;revisit-ridge&quot;&gt;Revisit: Ridge&lt;/h2&gt;

&lt;p&gt;앞서 말씀드렸듯이, Ridge는 $L_2$ norm을 regularized term으로 가지고 있는 녀석입니다. 따라서 이 때 $g(x) = Reg(\beta_1, \beta_2) = c$는 원형의 형태를 하고 있습니다.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/assets/images/post_regularization_3.png&quot; width=&quot;400px&quot; /&gt;
&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
Fig.3 - Ridge
&lt;/p&gt;
&lt;p&gt;이 원의 접선과 $L(\beta_1, \beta_2)$의 접선이 같아진다면, 그 접점이 Regularization을 만족한 점이 될 것입니다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;이번 포스팅에서는 regularization의 기하학적인 의미를 같이 탐구해봤습니다. 사실 Cost Function의 수치해석적으로도 생각할 수 있습니다. Regularization Term을 집어넣음으로서 기존 cost ftn $L(x)$의 값을 줄임과 동시에 $\beta$값도 동시에 줄어들게 해야하기 때문에 어떠한 새로운 균형점 $\tilde{\beta}$를 찾을 수 있다는 식으로 해석해도 무방하거든요.&lt;/p&gt;

&lt;p&gt;사실 이번 포스팅을 했던 가장 큰 이유는, 제가 혼자 Ridge와 Lasso에 대해 공부를 해야할 일이 있었습니다. 그러나 블로그 포스팅을 보면 밑도 끝도 없이 타원형 / 마름모형 그래프를 그려놓고 이게 ridge다, 이게 lasso다하는 등의 겉핥기식 내용이 많았습니다. 또한, lasso는 무조건 마름모 끝점에서 만날 수 밖에 없기 때문에 변수 선택법으로도 탁월하다는 식으로 이야기를 한 것들을 여러개 봤습니다. 사실 이해가 안갔습니다. &lt;strong&gt;왜 굳이 끝점에서 만나야하지? 그리고 실제로 제가 그렸던 Fig.3을 보면 당연하게도 그렇지 않은 경우가 많을텐데, 왜 저렇게 말을 할까?&lt;/strong&gt; 하는 의문점이 많았습니다.&lt;/p&gt;

&lt;p&gt;그래서 제가 했던 것은 논문을 찾아보는 것이었죠. 어렵게 lasso라는 개념을 처음 정립한 논문인 95년도 Tibshirani 논문을 읽으면서, 모든 것이 해소되었습니다. &lt;strong&gt;항상 끝점에서 만나는게 아니라, 끝점에서 만날 확률이 비교적 ridge 등 다른 방법론보다 높아서 변수 선택법으로 사용할 여지가 있다!&lt;/strong&gt;라고 언급을 한거죠.&lt;/p&gt;

&lt;p&gt;생각해보면 블로그 글들을 보고 편하게 공부하려고 했던 저의 잘못이라고도 생각을 합니다. 영어보다는 한국어가 더 편하니까요. 그러나 블로그 글이 생각보다 엄밀하지 않은 것들이 많았고, 그리고 잘못된 해석이나 잘못된 내용이 포함되어있을 수 있다는 의식을 가지게 되었습니다. 그리고 이게 제가 블로그를 시작하게 된 가장 큰 원동력 중 하나이기도 하죠! 물론, 제 블로그 역시 저 개인이 쓰는 것이기 때문에 언제든 잘못된 내용을 제가 포함할 수 있습니다. 그렇기에 만약 잘못된 내용이 있다면 언제든 이메일로 이야기해주세요!&lt;/p&gt;

&lt;h1 id=&quot;관련-페이퍼&quot;&gt;관련 페이퍼&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Regression Shrinkage and Selection via the Lasso (Tibshirani, 1995)&lt;/em&gt;&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="수리과학" /><category term="통계" /><category term="머신러닝" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">Dependence와 Correlation</title><link href="https://kdchoi-mkt.github.io/data-analysis/dependence-and-correlation/" rel="alternate" type="text/html" title="Dependence와 Correlation" /><published>2022-04-08T00:00:00+00:00</published><updated>2022-04-08T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/dependence-and-correlation</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/dependence-and-correlation/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이번 내용을 이해하기 위해서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;확률론(Probability Theory)&lt;/code&gt;과 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;선형 대수(Linear Algebra)&lt;/code&gt;의 지식이 필요하며, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;집합론(Set Theory)&lt;/code&gt;에 대한 얕은 지식 역시 필요합니다.&lt;/p&gt;

&lt;h1 id=&quot;두-변수가-관련이-없을때&quot;&gt;두 변수가 관련이 없을때&lt;/h1&gt;

&lt;p&gt;일반적으로 두 변수가 관련이 없다는 것을 말할때는 두 변수가 서로 &lt;strong&gt;독립적(independence)&lt;/strong&gt;이라고 말하거나, 서로 &lt;strong&gt;연관되어있지 않다(uncorrelation)&lt;/strong&gt;고 이야기 합니다. 그러면 이것들은 수학적으로 어떻게 서술할 수 있고, 왜 그렇게 서술할 수 있으며, 무엇이 다른걸까요?&lt;/p&gt;

&lt;h1 id=&quot;독립적인-변수의-정의&quot;&gt;독립적인 변수의 정의&lt;/h1&gt;

&lt;p&gt;우선, independence부터 살펴봅시다. 우선 ‘변수’라는 단어를 정의하기 전에 사건 (event)이란 것을 정의해봅시다. 사건이란 가능한 경우를 의미합니다. 수학적으로 말하자면, 모든 경우를 원소로 가지고 있는 집합(표본 공간, sample space)의 부분 집합입니다. 예를 들면 주사위 2개를 던질 때의 표본 공간은 ${(i,j): 1 \leq i, j ≤ 6}$으로 정의할 수 있고, 첫 번째 주사위의 값이 1이 되는 사건의 집합은 전체 사건의 부분 집합 중 하나인 \(\{(1,j): 1 \leq j \leq 6\}\)이 됩니다. (사건 집합이 무조건 유한할 필요는 없습니다.)&lt;/p&gt;

&lt;p&gt;이제, 표본 공간을 $S$라고 정의하고 $A, B$를 사건 집합으로 둡시다. 이 때 두 사건 $A, B$가 서로 독립적이라는 말은 어떤 말을 의미할까요? 만약에 독립적이라면, $B$ 사건이 먼저 일어났든간에 $A$가 일어날 확률이 변하지 않아야겠죠? 반대로 $A$ 사건이 먼저 일어났는지 여부에 따라서 $B$의 확률이 바뀌면 안되겠구요. 이는 조건부 확률이랑도 관련이 있는데, 수학적인 statement를 쓰면 다음과 같이 독립성이 정의됩니다.&lt;/p&gt;

\[[P(A|B)=P(A)]\ \&amp;amp;\ [P(B)=P(B|A)]\]

&lt;p&gt;다만, 조건부 확률은 일반적으로 다음과 같이 정의가 됩니다.&lt;/p&gt;

\[P(A|B)=\frac{P(A\cap B)}{P(B)}\]

&lt;p&gt;따라서, 위의 정의를 조금 더 풀어헤치면 다음과 같이 바꿀 수 있습니다.&lt;/p&gt;

\[\begin{align*}
P(A|B)&amp;amp;=P(A\cap B)/P(B)=P(A) \\
\Leftrightarrow&amp;amp; P(A)P(B)=P(A\cap B)
\end{align*}\]

&lt;p&gt;두 사건이 독립적이라는 것은 결국 두 사건이 동시에 일어날 확률이 각각이 일어날 확률의 곱과 같을때 부르는 말과 같군요! 뭔가 그럴듯합니다. 그러면 이제 변수에 대해서 독립성을 생각해봅시다. 일반적으로 변수는 여러 값을 가지고 있기 때문에, 변수 $X$에 대한 사건 집합은 보통 \(f_X^{-1}(k)=\{ x:f_X(x)=k \}\)의 합으로 이루어집니다. 여기서 $f_X$는 특이한 말이 없는 이상 $X$의 확률 밀도 함수(probability density function)입니다. 그렇다면, 변수 $X$와 변수 $Y$가 서로 독립인걸 보이기 위해서는, 모든 변수의 값 $k_X, k_Y$에 대해서 $f_X^{-1}(k_X)$와 $f_Y^{-1}(k_Y)$가 독립이라는 것을 보이면 되겠군요.&lt;/p&gt;

&lt;h1 id=&quot;두-변수간-관련이-있을-때&quot;&gt;두 변수간 관련이 있을 때&lt;/h1&gt;

&lt;p&gt;그렇다면 두 변수가 관련성이 없다는 것은 어떤 말일까요? 그 전에, 두 변수가 서로 관련이 있다는게 어떤 의미일지를 생각해봅시다. 변수 $X$가 움직일 때, 그에 맞춰 변수 $Y$가 움직인다면, 두 변수는 서로 관련이 있다고 볼 수 있겠네요. 여기서 같은 방향으로 움직이는지, 다른 방향으로 움직이는지는 중요하지 않습니다. 그저 &lt;strong&gt;같이 움직인다&lt;/strong&gt;는 사실이 중요한 것이죠. 그렇다면 이걸 어떻게 수식으로 표현할 수 있을까요? $X$가 살짝 움직였다고 했을 때 $Y$가 평균적으로 얼만큼 움직였는지 파악함으로써 관련성을 볼 수 있지 않을까요? 비슷하게, $Y$가 살짝 움직였을 때 $X$의 평균 이동 거리를 볼 수도 있겠네요. 그러면 조금 더 엄밀하게 이 개념을 정의해봅시다.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;관련성은 $X$가 평균값에서 $n$만큼 떨어졌을 때 $Y$가 평균값에서 멀어지는 것의 평균과
$Y$가 평균값에서 $n$만큼 떨어졌을 때 $X$가 평균값에서 멀어지는 것의 평균의 곱이다&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;이를 수학적 statement로 쓰면 다음과 같습니다. 편의상 $cor_n$이라고 정의하겠습니다.&lt;/p&gt;

\[cor_n(X, Y)=\mathbb{E}[Y-\mu_Y|X=\mu_X + n]\times\mathbb{E}[X-\mu_X|Y=\mu_Y + n]\]

&lt;p&gt;하지만 저희는 전체적인 추세를 보고자 하기 때문에, 또다시 이 값들을 평균을 취해서 $Y$가 벗어나는 기댓값을 구할 수 있습니다.&lt;/p&gt;

\[\begin{align*}
cor(X, Y)&amp;amp;=\mathbb{E}[cor_n(X, Y)] \\
&amp;amp;=\mathbb{E}[\mathbb{E}[Y-\mu_Y|X=\mu_X + n]\mathbb{E}[X-\mu_X|Y=\mu_Y + n]]
\end{align*}\]

&lt;p&gt;그러면, law of iterated expectation을 통해서 다음과 같이 식을 수정할 수 있습니다.&lt;/p&gt;

\[\mathbb{E}[(Y-\mu_Y)(X-\mu_X)]\]

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;유도 과정 자세히 보기&lt;/strong&gt;
우선, 일반적으로 law of iterated expectation의 정의는 다음과 같습니다. 이는 이번 포스팅에서 증명은 하지 않을 예정입니다.
\(\mathbb{E}[X] = \mathbb{E}[\mathbb{E}[X|Y]]\)
그렇다면, 두개의 랜덤변수가 곱해져있는 형태의 기댓값을 생각해보겠습니다.
\(\mathbb{E}[XY]=\mathbb{E}[\mathbb{E}[XY|X=n]]=\mathbb{E}[X\times \mathbb{E}[Y|X=n]]\)
여기서 $\mathbb{E}[Y|X=n]$은 이미 랜덤변수 $X$에 대한 함수이며, $Y$에 대해서 상수임을 쉽게 알 수 있습니다. 그렇다면
\(\mathbb{E}[X\times \mathbb{E}[Y|X=n]]=\mathbb{E}[\mathbb{E}[X\times \mathbb{E}[Y|X=n]|Y=n]]\)
으로 둘 수 있고, 이는 곧
\(\mathbb{E}[\mathbb{E}[X\times \mathbb{E}[Y|X=n]|Y=n]] =
\mathbb{E}[\mathbb{E}[X |Y=n]\mathbb{E}[Y|X=n]]\)
으로 쓸 수 있습니다. 이를 통해 위의 유도를 끝낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이것은 저희가 잘 알고 있는 $\operatorname{Cov}(X, Y)$와 같습니다. 또한 $\operatorname{Cov}(X, X)=Var(X)$임을 쉽게 알 수 있습니다. 중요한 점은, $\operatorname{Cov}(X, Y)$의 값이 한계점이 없이 왔다갔다 할 수 있습니다. 전문용어로는 unbounded되어있다, 혹은 유계가 아니다라고 이야기하는데, 이를 $[-1, 1]$ 인터벌 사이로 가두기 위해서 저희는 $X, Y$에 대한 standard deviation $\sigma_X, \sigma_Y$를 $\operatorname{Cov}(X, Y)$에 나눠줍니다.&lt;/p&gt;

\[\operatorname{Corr}(X, Y)=\frac{\operatorname{Cov}(X, Y)}{\sigma_X\sigma_Y}\]

&lt;p&gt;이러면 저희는 쉽게 $\operatorname{Corr}(X, Y) \in [-1, 1]$에 있음을 알 수 있습니다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Elegant한 증명&lt;/strong&gt;
이는 일반적인 cauchy-schwatz thm을 알고 있어야 합니다.
$(I, \langle \cdot, \cdot\rangle)$을 inner-product space로 정의합시다. 그렇다면 cauchy-schwatz thm이 의미하는 것은 다음과 같습니다.
\(\forall x, y\in I, \langle x, x\rangle\langle y, y\rangle \geq \langle x, y\rangle^2\)
여기서, inner product에 대한 공리는 3가지가 있습니다.
    &lt;ol&gt;
      &lt;li&gt;$\langle x, y\rangle =\langle y, x\rangle$&lt;/li&gt;
      &lt;li&gt;$\langle x, ay + bz\rangle=a\langle x, y\rangle+ b\langle x, z\rangle$ for $a, b\in F$: scalar&lt;/li&gt;
      &lt;li&gt;$\langle x, x\rangle \geq 0$ and $=0$ only if $x=0$
실제로, $\operatorname{Cov}(X, Y)$는 위의 세가지 조건을 모두 만족합니다. 따라서 $\operatorname{Cov}(\cdot, \cdot )$은 랜덤변수 공간의 inner product로서 정의가 가능하고, cauchy-schwatz thm에 의해서 자연스레
\(\operatorname{Cov}(X, Y)^2\leq Var(X)Var(Y)\)
를 만족하는걸 보였습니다. 따라서 $\operatorname{Corr}(X, Y) \in [-1, 1]$에 있음을 보였습니다.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;그러면 다시 본론으로 넘어와서, 어떤 것들이 연관이 없다고 할까요? 바로, $X$가 움직이든 말든 $Y$는 평균적으로 변하지 않는다는 것을 의미하겠죠? 다른 말로 하자면&lt;/p&gt;

\[\operatorname{Cov}(X, Y)=0\]

&lt;p&gt;이 uncorrelation의 정의가 될 수 있겠군요. 여기서 중요한 점은, $\operatorname{Cov}(\cdot, \cdot)$은 평균적인 추세를 잡아냅니다. 만약 $X$에 따라서 $Y$의 변동이 서로 다르게 작동하나 평균 변동값이 0이라면, covariance의 언어로 잡아낼 수 없습니다. 다시 말해, $\operatorname{Cov}(X, Y)=0$이 $X, Y$가 서로 independent한 것을 말해주지는 않는다는 것입니다!&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;사실 예전부터 $\operatorname{Cov}$의 형태가 $\mathbb{E}[XY]-\mu_X\mu_Y$인 것이 항상 궁금했습니다. 그러다가 이번 기회에 왜 covariance가 이렇게 생겼는지에 대해 탐구를 해봤습니다. 많은 수학적인 개념들은 그냥 뜬금없이 생겨난건 없고, 항상 어떤 관찰과 직관, 그리고 문제의식 때문에 만들어졌다고 봐도 무방합니다. 이번 포스팅을 통해서 여러분도 covariance에 대한 새로운 직관이 생기셨으면 좋겠습니다.&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="수리과학" /><category term="통계" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">변수간 상호작용 캐치하기</title><link href="https://kdchoi-mkt.github.io/data-analysis/interaction/" rel="alternate" type="text/html" title="변수간 상호작용 캐치하기" /><published>2022-04-01T00:00:00+00:00</published><updated>2022-04-01T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/interaction</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/interaction/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이번 내용을 이해하기 위해서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;linear regression&lt;/code&gt;에 대한 이해가 필요합니다.&lt;/p&gt;

&lt;h1 id=&quot;두-개의-변수가-상호작용-하는데&quot;&gt;두 개의 변수가 상호작용 하는데?&lt;/h1&gt;

&lt;p&gt;우리에게 설명 변수 $A$와 설명 변수 $B$가 있다고 해봅시다. 이를 통해 우리는 $Y$값을 예측하고, 얼마나 $A$, $B$가 $Y$를 잘 설명하는지 보고 싶습니다. 이럴 때 보통 쓰는건 linear regression 등의 계수를 측정하는 statistical model입니다. 그런데 $A$와 $B$가 각각 $Y$에 관여하는게 아니라, 가끔씩은 “동시에 관여”하기도 합니다. 예를 들어서 우리가 데이터를 쪼개봤더니&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;$A$가 10일때는 $B$가 30만큼 $Y$에 영향을 미치고&lt;/li&gt;
  &lt;li&gt;$A$가 20일때는 $B$가 50만큼 $Y$에 영향을 미친다는 결과가 나왔습니다&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이런 식으로 $A$와 $B$가 상호작용을 해서 coefficient가 달라지는 효과를 어떻게 잡을 수 있을까여?&lt;/p&gt;

&lt;h1 id=&quot;문제를-수식으로-만들기&quot;&gt;문제를 수식으로 만들기&lt;/h1&gt;

&lt;p&gt;문제를 간단하게 하기 위해 우리가 수학적으로 잘 알고있는 형태인 linear regression에서 다시 이야기해봅시자. 우리가 일반적으로 linear regression을 $Y$에 대해 시행하면 다음과 같은 식의 계수를 얻을 수 있습니다.&lt;/p&gt;

\[Y = \beta_aA+ \beta_bB\]

&lt;p&gt;그런데 중요한건, 여기서 저 $\beta_b$가 $A$에 대해서 상수가 아니라는 것이 문제입니다. 다른 말로 하면,&lt;/p&gt;

\[\beta_b := \beta_b(A)\]

&lt;p&gt;의 꼴로 주어지며, 조금 더 정확히는&lt;/p&gt;

\[\beta_b(A) = 10 + 2A\]

&lt;p&gt;의 꼴을 가진다는 것입니다. 이걸 기존의 $Y$에 대입을 하면, 우리는 다음과 같은 듣도보도못한 새로운 식을 얻을 수 있습니다.&lt;/p&gt;

\[Y = \beta_a A + 10B + 2A\times B\]

&lt;p&gt;물론 이 방식의 가장 큰 문제는 실제로 regression을 취했을 때 $\beta_a$와 $\beta_b$는 constant하게 추정된다는 점이긴 합니다. 아무튼, conceptually하게 문제를 풀었더니 $A$와 $B$의 곱의 형태가 새로 튀어나온걸 확인할 수 있었습니다. 그렇다면 저러한 $A\times B$가 상호작용을 나타내주는 변수가 아닐까요?&lt;/p&gt;

&lt;h1 id=&quot;상호작용은-곱하기&quot;&gt;상호작용은 곱하기&lt;/h1&gt;

&lt;p&gt;어떤 좋은 예시 하나를 통해서 우리는 곱하기 텀이 상호작용을 나타내는 변수가 아닌지 의심을 할 수 있게 되었습니다. 그렇다면, 이게 정말로 상호작용을 나타내는지 한 번 생각을 해봅시자. 이제 우리에겐 세가지 변수가 있고, 각각의 coefficient를 측정할 수 있습니다&lt;/p&gt;

\[Y = \beta_aA + \beta_bB + \beta_iA\times B\]

&lt;p&gt;여기서 각 $\beta$들은 non-zero coefficient라고 합시다. 만약 $A$가 10으로 고정되어있으면, $B$의 $Y$에 미치는 영향은 $\beta_b + 10\beta_i$가 될 것입니다. 반대로, $B$가 -100으로 고정되어있으면 $A$의 $Y$에 미치는 영향은 $\beta_a - 100\beta_i$가 될 것입니다. 이를 통해 $A$의 값에 따라서 $B$가 $Y$에 주는 영향, $B$의 값에 따라서 $A$가 $Y$에 주는 영향 모두가 달라지는걸 확인할 수 있고, 이런 non-linear interaction을 $\beta_i$로 잡아낼 수 있다는 뜻입니다. 당연히, $A$의 값에 따라서 $B$가 주는 영향이 아예 사라지거나 엄청 증폭되기 때문에 이러한 interaction term의 coefficient를 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;조절 효과 (moderation effect)&lt;/code&gt;로도 해석합니다.&lt;/p&gt;

&lt;p&gt;물론 더 나아가서 $A^2B, AB^3, log(A + B)$ 등의 non-linear function은 대부분 interaction을 잡아낼 수 있습니다. 그러나 우리가 $A\times B$를 interaction term으로 사용하는 가장 큰 이유는 만들기 단순하고 직관적이며, 해석도 쉽기 때문입니다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;우리가 살아가면서 관측하는 대부분의 변수는 독립적으로 종속 변수에 영향을 주지 않습니다. 항상 어떠한 marginal effect가 상호간에 적용되면서 복잡한 형태로 종속 변수에 영향을 줍니다. 예를 들어서, 소비자가 음료수를 구매를 한다고 했을 때 그 상품의 브랜드에 따라 가격에 대한 민감도가 다른 것 처럼 말입니다. 사실 이번 포스팅에서는 단순히 이러한 interaction effect가 linear하게 일어난다고 이야기했습니다. 그러나 실제로는 선형적인 interaction이 일어나는 것 자체가 너무 큰 가정입니다. 그렇기에 어떠한 수량을 예측하거나 분류를 예측할 때 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Deep Learning&lt;/code&gt;의 방법을 사용하는게 더욱 예측을 간단하고 강력하게 할 수 있습니다. 그렇지만, DL의 방법을 써버리는 순간, 우리는 이제 더이상 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;explainability를 사용할 수 없습니다&lt;/code&gt;. 그리고 $X$ 변수가 들어간 non-linear function에 대해서는 웬만하면 선형 가정을 했을때에도 fit이 어느정도 잘 들어맞는 것 같기에, 정확한 예측이 아니라 추세를 본다는 기준에서는 해석이 가능한 linear interaction을 사용하는 것 같습니다.&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="일반 데이터 분석론" /><category term="통계" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">Ordinary Least Square의 의미</title><link href="https://kdchoi-mkt.github.io/data-analysis/ols/" rel="alternate" type="text/html" title="Ordinary Least Square의 의미" /><published>2022-03-25T00:00:00+00:00</published><updated>2022-03-25T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/ols</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/ols/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;경영학의 관점에서 머신러닝, 또는 통계 영역에서 여러가지 모델을 사용하는 이유는 X 변수가 y 변수에 얼마나 영향을 주는지 알고, 그것을 개선하거나 새로운 액션을 취하기 위함입니다. 실제로 영향을 주는지 알려주는 모델은 다양하게 있는데, 그 중 설명하기 쉬운 모델은 선형 모델입니다. 간단히 X가 1만큼 증가하면 y가 얼마나 많이 증가하는지 알려주기 때문이죠. 그러면 선형 모델은 어떻게 만들어지고, 이게 수학적으로는 어떤 의미가 있을까요? 이번 포스팅에서는 최소제곱법을 이용한 선형 모델(Ordinary least square; OLS)을 방정식으로 풀어보고, 이것의 수학적인 의미도 같이 알아보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;이번 포스팅을 이해하기 위해서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;선형 대수(Linear Algebra)&lt;/code&gt;에 대한 지식이 필요합니다.&lt;/p&gt;

&lt;h1 id=&quot;방정식으로서-ols&quot;&gt;방정식으로서 OLS&lt;/h1&gt;

&lt;p&gt;우선, 전통적으로 OLS를 구하는 방법을 알아보겠습니다. 우리가 원하는 식은 다음과 같습니다.&lt;/p&gt;

\[\begin{align*}
y&amp;amp;=X\beta \\
&amp;amp;\text{ for }  y\in\mathbb{R}^{n\times 1}, \beta \in\mathbb{R}^{m\times 1}, \\
X&amp;amp;=\begin{bmatrix}
x_1 &amp;amp; x_2 &amp;amp; \cdots &amp;amp; x_m
\end{bmatrix}
\in\mathbb{R}^{n\times m}
\end{align*}\]

&lt;p&gt;여기서 $y$는 종속 변수, $X$는 독립 변수로, 단순히 말하자면 $y$를 설명하기 위해 만든 설명 변수입니다. $\beta$는 각 $X$의 열벡터 $x_{i}$가 $y$에 얼마나 영향을 주는지 알려주는 변수입니다. 그러면 $\beta$를 어떻게 잘 추정할 수 있을까요? 다른 말로 하면, 주어진 데이터를 통해서 가장 최적의 $\beta$는 어떤 성질을 띄고 있을까요? 그 중 가장 많이 쓰이는 방법이 $y-X\beta$의 값이 최소가 되게 하는 것입니다. 머신러닝을 공부하신 분들이라면 다음의 식을 많이 보셨을 겁니다.&lt;/p&gt;

\[\operatorname{argmin}_{\beta}\sum_{i=1}^n\left\{y_i-\sum_{j=l}^m x_{ij}\beta_j\right\}\]

&lt;p&gt;이는 Linear Regression의 cost function으로도 많이 쓰이며, ridge나 lasso의 경우에는 저 옆에 $L_p$ norm이 추가되기도 합니다. 편의상 $y-X\beta=e$로 둔다면 다음과 같이 적을 수 있습니다.&lt;/p&gt;

\[\operatorname{argmin}_{\beta}\|y-X\beta\|_2^2=\operatorname{argmin}_{\beta}\|e\|_2^2\]

&lt;p&gt;여기서 $|v|_2=\sqrt{\sum v_i^2}$인 matrix norm이며, $e$를 residual, 혹은 잔차라고 부릅니다. 이런식으로 $e$의 제곱의 합이 최소가 되도록 $\beta$를 추정하기 때문에 이러한 메소드를 최소 제곱법이라고도 불립니다. 일반적으로 최솟값, 혹은 최댓값을 구하는 최적화 기법은 explicit하게 해가 표현될 수 있는 analytic solution이 없습니다. 그러나, 특정 조건만 잘 만족한다면 선형 회귀 한정으로 해를 구할 수 있습니다. 만약 $X$의 열벡터가 모두 선형 독립이고, $X$와 $e$가 uncorrelated 되어있다면,&lt;/p&gt;

\[\begin{align*}
y&amp;amp;=X\beta+e\\
X^Ty&amp;amp;=X^TX\beta+X^Te=X^TX\beta \\
\beta &amp;amp;= (X^TX)^{-1}X^Ty
\end{align*}\]

&lt;p&gt;로 $\beta$를 구할 수 있는 것이죠. 그러나 이 식을 도출할 때에는 $e$에 대한 성질을 건드리지 않습니다. 그러면 정말로 이 식이 $e$를 최소로 만드는지는 다음 장에서 알아보도록 하겠습니다. 다만, 우회적으로 이 식이 $e$를 최소화하는걸 Gauss-Markov 정리로 보일 수 있습니다. 이것까지 다루게 되면 내용이 방대해지므로 이는 다음에 다루도록 하겠습니다.&lt;/p&gt;

&lt;h1 id=&quot;matrix-operator로서-ols&quot;&gt;Matrix Operator로서 OLS&lt;/h1&gt;

&lt;p&gt;저번 PCA 포스팅에서도 언급했듯이, 모든 행렬은 선형 함수로 작용할 수 있습니다. 이 컨셉을 통해서 위에서 도출한 $\beta=(X^TX)^{-1}X^Ty$의 의미를 하나하나 살펴보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;우선, $X^Ty$가 뭘까요? 이를 matrix-wise로 풀어보면 다음과 같이 볼 수 있습니다.&lt;/p&gt;

\[\begin{align*}
X^Ty&amp;amp;=\begin{bmatrix}
-x_1- \\
\vdots \\
-x_m-
\end{bmatrix}
\begin{bmatrix}
y_1 \\
\vdots \\
y_n
\end{bmatrix}\\
&amp;amp;=\begin{bmatrix}
x_1^Ty \\
\vdots \\
x_m^Ty
\end{bmatrix}
=\begin{bmatrix}
\langle x_1, y\rangle\\
\vdots \\
\langle x_m, y\rangle
\end{bmatrix}
\end{align*}\]

&lt;p&gt;$X^T$의 함수적인 성질은 $y$를 $x_i$에 대한 내적을 의미하는군요! ($x_i\in\mathbb{R}^n$이라는 사실에 주의하세요!) 이를 다르게 말하면 $y$를 $\text{col}(X)=\text{span}{x_i}$위로 변환 시켰다는 의미기도 합니다. 우리가 모든 변수를 다 만들어서 $y$를 100% 다 설명시킬 수 있으면 좋겠지만, 일반적인 경우에는 그렇지 않기 때문에 $y$를 $\text{span}{x_i}$위로 변환을 시킨 뒤, 관계를 보는 것입니다.&lt;/p&gt;

&lt;p&gt;자 그러면, $(X^TX)^{-1}$는 어떤 작용을 할까요? 이를 알기 위해서는 $X^TX$가 벡터를 어떻게 이동시키는지 관찰하기만 하면 충분합니다. $X^TX$를 직접 적어보면 다음과 같이 적을 수 있습니다.&lt;/p&gt;

\[\begin{align*}
X^TX&amp;amp;=\begin{bmatrix}
-x_1- \\
\vdots \\
-x_m-
\end{bmatrix}
\begin{bmatrix}
| &amp;amp; &amp;amp; |\\
x_1 &amp;amp; \cdots &amp;amp; x_m \\
| &amp;amp;&amp;amp; |
\end{bmatrix} \\
&amp;amp;=
\begin{bmatrix}
\langle x_1, x_1 \rangle &amp;amp; \cdots &amp;amp; \langle x_1, x_m \rangle \\
\vdots &amp;amp; \cdots &amp;amp; \vdots \\
\langle x_m, x_1 \rangle &amp;amp; \cdots &amp;amp; \langle x_m, x_m \rangle
\end{bmatrix}
\end{align*}\]

&lt;p&gt;$X^TX$는 $x_i, x_j$의 내적값을 엔트리로 가지고 있는 matrix였군요. 그러면 여기에 벡터를 곱하면 다음과 같이 계산됩니다.&lt;/p&gt;

\[\begin{align*}
(X^TX)c&amp;amp;=
\begin{bmatrix}
\langle x_1, x_1 \rangle &amp;amp; \cdots &amp;amp; \langle x_1, x_m \rangle \\
\vdots &amp;amp; \cdots &amp;amp; \vdots \\
\langle x_m, x_1 \rangle &amp;amp; \cdots &amp;amp; \langle x_m, x_m \rangle
\end{bmatrix}\begin{bmatrix}
c_1\\
\vdots\\
c_m
\end{bmatrix}\\
&amp;amp;=\begin{bmatrix}
\langle x_1, \sum{c_ix_i} \rangle \\
\vdots \\

\langle x_n, \sum{c_ix_i} \rangle
\end{bmatrix}
\end{align*}\]

&lt;p&gt;여기서 알 수 있는 사실은 $c$가 사실은 $\text{span}{x_i}$위의 벡터라는 점이며, $(X^TX)$는 $x_i$에 대한 $c$의 내적 벡터를 계산하는 operator라는 점이죠. 그렇다면 $(X^TX)^{-1}$이 받는 벡터는 내적 벡터이고, 이를 통해 $\text{span}{x_i}$위의 적절한 벡터로 원복시키는 함수라는 것을 알 수 있습니다! 그런데 이렇게 생긴 행렬… 어디서 보지 않았나요? 이전 PCA 포스팅에서의 $Cov(X, X)$와 같군요! 사실 어떻게 보면 $Cov(x_i, x_j)$ 역시 내적으로 생각할 수 있기 때문에, 이 행렬과 같은 선상 위에 있다고 볼 수 있습니다. 여담으로, 이렇게 생긴 행렬은 특이하기 때문에 따로 부르는 이름이 있습니다. Gram Matrix라고 부르는데, 여러가지 좋은 특징이 있으니 관심있으신 분들은 찾아보는걸 추천드립니다. 당장 두번의 포스팅에 알게 모르게 나왔잖아요?&lt;/p&gt;

&lt;p&gt;따라서, $(X^TX)^{-1}X^Ty$의 의미는, 먼저 $y$를 $\text{col}(X)$위로 변환시킨 후($X^T)$, 이 값이 나오게 하는 적절한 $\beta$를 계산하는 것($(X^TX)^{-1}$)을 의미합니다. 그런데 아직까지 풀리지 않는 의문점이 있습니다. 과연 이렇게 만든 $\beta$가 정말 $e$를 최소로 만들어 주는가? 이를 해결하기 위해서는 한 단계 스텝을 더 진행해야합니다.&lt;/p&gt;

&lt;h1 id=&quot;operator-theory를-통한-ols&quot;&gt;Operator Theory를 통한 OLS&lt;/h1&gt;

&lt;p&gt;과연 사영이 무엇일까요? 어떤 함수가 잘 있습니다. 이 함수는 어떤 성질을 가져야 사영이라고 부를 수 있을까요? 벡터 $v$를 $P$라는 operator를 통해 사영시킨다고 했을 때, $Pv$를 다시 사영시켜봤자 값이 바뀌면 안되겠죠? 따라서 operator theory에서는 $P^2=P$인 linear operator를 projection operator라고 정의합니다. 조금 더 정확한 statement는 다음과 같습니다.&lt;/p&gt;

\[\begin{align*}
&amp;amp;\text{For }P: V/K\rightarrow V/K \\
&amp;amp;P\text{ is called projection operator if }\\
&amp;amp;P^2v=PPv=Pv
\end{align*}\]

&lt;p&gt;이 때 $V=P(V)\oplus P(V)^\perp$로 나눌 수 있는데, 중요하나 증명이 길기 때문에 넘어가도록 하겠습니다. 더 중요한것은, $P:V\rightarrow P(V)$인 $P$가 unique하게 존재한다는 것입니다. 무슨 말이냐고 하면, $V$의 subspace $W$로 projection하는 operator는 unique하다는 것이죠. 자 그러면 다시 우리의 그 문제의 방정식을 들고와봅시다.&lt;/p&gt;

\[\begin{align*}
y&amp;amp;=X\beta+e \\
y&amp;amp;=X(X^TX)^{-1}X^T+e
\end{align*}\]

&lt;p&gt;이렇게 바꿀 수 있는데,&lt;/p&gt;

\[\begin{align*}
(X(X^TX)^{-1}X^T)^2&amp;amp;=X(X^TX)^{-1}X^TX(X^TX)^{-1}X^T\\
&amp;amp;=X(X^TX)^{-1}X^T
\end{align*}\]

&lt;p&gt;즉, $X(X^TX)^{-1}X^T$는 $y$를 $\text{col}(X)$로 사영을 내리는 operator이며, 따라서 $e$는 $\text{col}(X)$에 수직이고 그것이 $e$를 최소로 만들어주는 것임을 긴 차례에 걸쳐 증명했습니다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;사실 이런것들은 몰라도 됩니다. 웬만한 경우에서 OLS를 쓰는 이유가 residual을 최소화하기 위해서라는 것만 알아도 충분하기 때문입니다. 그러나, 이런 선대적인 직관을 키우는 것은 계산 과정이나 결과에 대한 해석을 하는데 꽤나 중요한 역할을 하기도 합니다. 이번 포스팅을 통해 직관에 대해서 트레이닝을 했다면, 다음 포스팅에서는 interaction이 어떤 역할을 하는지에 대해서 알아보도록 하겠습니다.&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="수리과학" /><category term="선형대수" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">PCA는 왜 분산이 큰 방향을 주축으로 잡을까?</title><link href="https://kdchoi-mkt.github.io/data-analysis/pca/" rel="alternate" type="text/html" title="PCA는 왜 분산이 큰 방향을 주축으로 잡을까?" /><published>2022-03-18T00:00:00+00:00</published><updated>2022-03-18T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/pca</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/pca/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;이 내용을 이해하기 위해서는 기초 선형 대수(linear algebra)의 지식과 선형 대수의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;고유 벡터(eigenvector)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;고유 값(eigenvalue)&lt;/code&gt;, 그리고 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;대각화(Diagonalization)&lt;/code&gt;에 대한 지식이 있어야합니다.&lt;/p&gt;

&lt;h1 id=&quot;principal-component-analysis가-뭔데&quot;&gt;Principal Component Analysis가 뭔데?&lt;/h1&gt;

&lt;p&gt;데이터를 분석하기 위해 전처리 할 때, 웬만한 변수들이 모두 의미가 있어 종속 변수 $y$에 유의한 영향을 주면 좋겠지만 사실 그런 경우는 흔하지 않습니다. 많은 경우, raw data에는 라벨링이 붙어있어 각각에 대해 one-hot encoding을 해줘야하고, 그렇게 되는 경우 대부분 값이 0이 되는 sparse matrix가 되기 때문입니다.&lt;/p&gt;

&lt;p&gt;피쳐가 많으면 많을수록, 데이터를 저장하는 용량이 커지고, 계산 속도가 느리게 되며, overfitting의 우려가 생기기 마련입니다. 따라서 여러가지 차원 축소 기법을 통해 변수를 줄이는 노력을 하게 되는데, 이 때 보통 사용하는 방법이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Principal Component Analysis; PCA&lt;/code&gt; 입니다. 머신 러닝을 공부하신 분이라면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsupervised machine-learning&lt;/code&gt;으로도 알려져있는 대표적인 방법 중 하나이기도 합니다.&lt;/p&gt;

&lt;p&gt;많은 블로그들은 PCA의 의미를 다음과 같이 서술합니다.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;PCA는 가장 데이터의 분산이 큰 방향으로 주축을 잡아서 좌표 변환을 한다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;의미가 꽤 그럴듯 합니다. 그러나, PCA를 계산하는 경우에는 뜬금없이 다음과 같은 식이 나타납니다.&lt;/p&gt;

\[Cov(X, X)=\{Cov(X_i, X_j)\}_{ij}=PDP^T\]

&lt;p&gt;이 식과 PCA의 의미는 어떤 관계가 있을까요? 아쉽게도, 많은 블로그들은 이것에 대해 상세하게 다루지 않습니다. 이번 포스팅에서는 왜 변수의 공분산 행렬을 대각화하고, 이를 통해 나온 고유 벡터가 주축에 대한 벡터가 되는지, 그리고 그 주축은 왜 분산이 큰 방향인지, 이런 것들에 대해 설명합니다.&lt;/p&gt;

&lt;h1 id=&quot;preliminary---linear-algebra&quot;&gt;Preliminary - Linear Algebra&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;앞으로, $u$ 벡터와 $v$ 벡터의 내적 $u\cdot v=u^Tv$을 $\langle u, v\rangle$로 표시합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;일반적으로, $A$ 행렬이 symmetric하면 ($A=A^T$) orthogonal eigenvalue decomposition이 가능하다는 것이 알려져있습니다.&lt;/p&gt;

\[A=PDP^T\text{ for }P^{-1}=P^T, D: \text{diagonal w/ eigenvalue of }A\]

&lt;ul&gt;
  &lt;li&gt;&lt;del&gt;중요하지 않은&lt;/del&gt; &lt;strong&gt;증명&lt;/strong&gt;
$A=A^T$이기 때문에 $\langle Au, v\rangle=\langle u, A^Tv\rangle = \langle u, Av \rangle$입니다.
이 때, $e_i$를 $A$의 eigenvector로 두게 되면, $\langle \lambda_ie_i, e_j \rangle =
  \langle Ae_i, e_j \rangle =
  \langle e_i, Ae_j \rangle =
  \langle e_i, \lambda_je_j \rangle$이고, $\lambda_i\not=\lambda_j$이므로 $\langle e_i, e_j \rangle=0$이 됩니다. 즉, $A$의 eigenvector는 orthogonal하며, 따라서 이는 $\text{col}(A)$의 basis가 됩니다.
이 때 $P=[e_1 | e_2|\cdots|e_n]$인 augment matrix라고 둡시다. 즉, $P$는 $A$의 basis change matrix가 되며, $P^{-1}=P^T$인 orthogonal matrix가 됩니다. 그렇다면 $A=PBP^T$로 구성할 수 있습니다. 이 때 $Ae_i=\lambda_ie_i$이기 때문에, $PBP^Te_i=PB1_i=Pb_i=\lambda_ie_i$가 되므로, $b_i=\lambda_i1_i$가 될 수 밖에 없다는 것을 보였습니다. 따라서 $B=D$가 되며, $D$의 entry는 $P$에 대응되는 eigenvalue로 구성됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;그리고, 우연히도, $Cov(X, Y)=\mathbb{E}[XY]-\mathbb{E}[X]\mathbb{E}[Y]=Cov(Y, X)$이므로&lt;/p&gt;

\[Cov(X, X)=\{Cov(X_i, X_j)\}_{ij}=Cov(X, X)^T\]

&lt;p&gt;따라서 $Cov(X, X)$는 symmetric matrix입니다. 편의상 $\Sigma = Cov(X, X)$로 기술하겠습니다. 그런데, $\Sigma$에 벡터 곱을 하는 것, $\Sigma u$는 과연 어떤 의미일까요? 이를 알기 위해서는 선형 대수적인 직관이 필요합니다.&lt;/p&gt;

\[\text{For all matrix }A\in\mathbb{R}^{n\times n},\]

\[\text{ there is an unique linear map }T: V\longrightarrow W\\\text{ so that }\]

\[\text{dim}(V)= \text{dim}(W)=n\]

&lt;p&gt;이 말인 즉슨, 모든 행렬을 선형 함수로서 생각할 수 있다는 이야기입니다. 우리의 원래 문제를 풀기 위해서 이런 선형 대수적인 직관을 가지고 와서 의미를 해석해보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;우선, $\Sigma$에 곱하는 벡터 $u$가 어떤 의미를 가지고 있는지를 생각해보겠습니다. $u=(u_1, u_2, \cdots, u_n)$이라는 것은 기본적으로 $\mathbb{R}^n$에 있지만, 사실은 $\text{Span}{X_i}$이라는 vector space 위의 벡터라는 것을 생각할 수 있습니다. 즉, $u=u_1X_1+u_2X_2+\cdots+u_nX_n$로 생각할 수 있습니다. 그렇다면, $\Sigma$를 linear map으로 생각한다면 ${X_i}$의 선형 결합으로 구성된 새로운 random variable을 어딘가 같은 차원의 다른 벡터로 보낸다는 것이군요! 이제 $\Sigma u$를 해보면, 다음과 같이 계산되는걸 알 수 있습니다.&lt;/p&gt;

\[\begin{align*}
\Sigma u
&amp;amp;=
\begin{bmatrix}
u_1Cov(X_1, X_1) + \cdots +u_nCov(X_1, X_n) \\
\vdots\\
u_1Cov(X_n, X_1) + \cdots +u_nCov(X_n, X_n) \\
\end{bmatrix}\\
&amp;amp;=
\begin{bmatrix}
Cov(X_1, u_1X_1+\cdots+u_nX_n) \\
\vdots\\
Cov(X_n, u_1X_1+\cdots+u_nX_n) \\
\end{bmatrix}\\
&amp;amp;=
\begin{bmatrix}
Cov(X_1, u) \\
\vdots\\
Cov(X_n,u) \\
\end{bmatrix}
\end{align*}\]

&lt;p&gt;$\Sigma$는 결국, $u$벡터가 각각 $X_i$와 얼마나 분산이 있는지에 대한 분산벡터로 가는 선형 함수였군요! 그렇다면, 가장 분산이 큰 방향은 바로 $|\Sigma u|$가 가장 큰 방향인것을 알 수 있습니다.&lt;/p&gt;

&lt;h1 id=&quot;왜-pca가-작동할까---증명&quot;&gt;왜 PCA가 작동할까? - 증명&lt;/h1&gt;

&lt;p&gt;결론적으로 우리가 증명해야하는 것은 같은 크기를 가지는 $u$벡터에 대해 $\operatorname{argmax}|\Sigma u|$가 eigenvector임을 보이는 것입니다.&lt;/p&gt;

&lt;p&gt;그런데 저희는 $\Sigma$가 symmetric matrix인것을 알고 있기 때문에, 어떤 좋은 orthonormal basis(orthogonal basis의 크기를 각각 1로 정규화) ${e_i}$가 존재한다는 것을 알 수 있습니다. 그러면 $u=u_1e_1+\cdots+u_ne_n$로 둘 수 있습니다. 그러면 다음을 생각해봅시다.&lt;/p&gt;

\[\|\Sigma u\|=\|\Sigma(u_1e_1+\cdots+u_ne_n)\|=\|u_1\lambda_1e_1+\cdots+u_n\lambda_ne_n\|\]

&lt;p&gt;여기서 $u_i\lambda_i$는 모두 상수이고, $e_i$끼리는 모두 수직이므로 일반화된 피타고라스 정리를 사용해 다음과 같이 정리할 수 있습니다.&lt;/p&gt;

\[\|u_1\lambda_1e_1+\cdots+u_n\lambda_ne_n\|=\sqrt{\sum (u_i\lambda_i)^2}\]

&lt;p&gt;이 때 $|u|=\sqrt{\sum u_i^2}=c$로 고정되어있기 때문에, greedy approach를 사용하면 가장 큰 크기를 가지는 $\lambda_i$에 대응하는 좌표 $u_i=c$로 두고, 나머지를 모두 0으로 두면 $\operatorname{argmax}|\Sigma u|$가 됩니다. 그러나 이는 $u=c_ie_i$가 되기 때문에 $\Sigma$의 eigenvector가 되는군요. 이렇게 얻은 eigenvector를 제외하고 계속 이렇게 iteration을 하면, 결국 주축이 모두 수직이면서 분산이 가장 큰 방향으로 향하는 새로운 좌표계가 만들어집니다.&lt;/p&gt;

&lt;p&gt;따라서, 공분산행렬을 eigenvalue decomposition하는 것을 통해 분산이 큰 방향으로 주축을 잡을 수 있다는 명제는 사실이 됩니다.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;사실 이렇게 긴 스토리를 아는 것보다, 언제 PCA를 사용하느냐가 더 중요할 수 있습니다. 매번 할 때마다 이렇게 장황한 증명을 하는 것은 의미가 없기도 하고, 어쨌든 명제는 참인것이 밝혀졌으니까요. 그러나 얕게 배워서 사용하는 것이 효율적일 수 있으나, 그것은 꽤나 근시안적인 발상이라고 볼 수 있습니다.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;그냥 쓰면 된다&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;쓰니까 되더라&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;이런 말을 하는 것이 초반 연구, 또는 예측 등에는 잘 먹힐 수 있습니다. 그러나 시간이 지날수록 “그래서 이게 왜 먹혀”라는 질문을 받는 경우가 종종 생길 것이고, 언제까지나 저런 결과 중심의 이유를 말할 수 없습니다. 그러기 위해서는 PCA를 비롯한 다른 method들이 왜 유용하고, 어떤 점에서 유용하며, 어느 경우에서 사용하면 안되는지를 생각하고 적용하는 것이 더더욱 중요해질 것입니다.&lt;/p&gt;

\[\]</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="수리과학" /><category term="선형대수" /><category term="머신러닝" /><summary type="html">들어가기 앞서…</summary></entry><entry><title type="html">행렬은 선형대수일까?</title><link href="https://kdchoi-mkt.github.io/data-analysis/linear-algebra/" rel="alternate" type="text/html" title="행렬은 선형대수일까?" /><published>2022-03-11T00:00:00+00:00</published><updated>2022-03-11T00:00:00+00:00</updated><id>https://kdchoi-mkt.github.io/data-analysis/linear-algebra</id><content type="html" xml:base="https://kdchoi-mkt.github.io/data-analysis/linear-algebra/">&lt;h1 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서…&lt;/h1&gt;

&lt;p&gt;데이터 사이언스 영역을 포함하여, 많은 학문에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;선형 대수를 잘한다 = 행렬 계산을 잘한다&lt;/code&gt;라고 인지하고 있습니다. 선형 대수는 무엇이고, 행렬은 무엇일까요? 서로가 어떤 관계가 있길래 사람들은 두개를 묶어서 이야기할까요? 이번 포스팅에서는 기초적인 선형 대수에 대한 내용과 행렬에 대해서 간단하게 설명하며, 특히 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;선형대수학에 대한 지식&lt;/code&gt;이 있으면 이해하기 쉽습니다.&lt;/p&gt;

&lt;h1 id=&quot;linear-map&quot;&gt;Linear map&lt;/h1&gt;

&lt;p&gt;우선, 행렬과 벡터를 곱하는 것부터 생각을 해봅시다. 저희는 보통 행렬끼리도 곱셈을 하지만, 행렬과 벡터를 곱하기도 하죠. 다음과 같이 말이에요!&lt;/p&gt;

\[Ax\text{ for }A\in \mathbb{R}^{n\times m}, x \in \mathbb{R}^m\]

&lt;p&gt;그러면 이 곱셈이 과연 어떤 것들을 의미를 할까요? 우선 간단하게 표현하기 위해 $A$를 다음과 같이 표시해봅시다.&lt;/p&gt;

\[A = (a_{ij})\]

&lt;p&gt;그러면, 이제 $x$를 비교적 쉬운 벡터인 $e_i$로 두고 $Ax$를 계산해봅시다. 이는&lt;/p&gt;

\[Ax=(a_{jk})\cdot e_i=(a_{ji})\]

&lt;p&gt;가 되겠네요. 그런데, 여기서 중요한 점은 행렬곱에 있어서 분배법칙 (distribution law)가 성립한다는 점이고, 임의의 벡터 $x$는 $e_i$의 선형합으로 나타낼 수 있다는 점이죠. 그렇다면, 조금 더 어렵게 해서, x를 다음과 같이 정의해봅시다.&lt;/p&gt;

\[x = c_1e_1+\cdots+c_me_m\]

&lt;p&gt;그렇다면 $Ax$는 다음과 같이 써질 수 있습니다.&lt;/p&gt;

\[\begin{align*}
Ax &amp;amp;= A(c_1e_1+\cdots+c_me_m) \\
    &amp;amp;= c_1Ae_1+\cdots c_nAe_n \\
    &amp;amp;= c_1(a_{j1}) + \cdots c_n(a_{jm})
\end{align*}\]

&lt;p&gt;여기서 재밌는 부분은, $A$가 $x$를 어떤 값으로 보내는지는 중요해지지 않았습니다. 다만 $Ae_i$를 각각 어느 벡터로 보내는지만 알면, 자동으로 $x$를 어떤 값으로 보내는지 알게 됩니다. 다르게 말한다면, $Ae_i$가 정해짐에 따라 $A$가 유일하게 정의된다는걸 알 수 있습니다! 그렇다면, 이 $A$의 정체는 과연 무엇일까요? $A$를 어떤 함수로써 우리가 생각할 수 있수도 있지 않을까요? 그러면 $\mathbb{R}^m\to \mathbb{R}^n$으로 보내는 다음과 같은 함수 $F$를 생각해봅시다.&lt;/p&gt;

\[F(x) = Ax\]

&lt;p&gt;이 함수의 경우에는 다음과 같은 좋은 성질을 만족하는군요. 다음과 같은 성질을 linear한 property라고 부릅시다.&lt;/p&gt;

\[F(x +ay) =F(x)+aF(y)\]

&lt;p&gt;또한, 당연하게도 $A$가 행렬이기 때문에, $F(e_i)$들에 따라서 $F$함수가 정의됩니다. 그렇다면, 반대로 처음부터 linear한 property를 가지는 임의의 함수 $T$에 대해서도 생각해볼 수 있습니다. 보통 이러한 $T$를 linear function, 혹은 linear map이라고 부릅니다. 여기서는 굳이 $T$가 어떤 행렬곱으로 나타낼 수 있다고 따로 가정하지 않겠습니다.&lt;/p&gt;

\[T(x+ay) = T(x)+aT(y)\]

&lt;p&gt;그러면, 얘도 마찬가지로 $T(e_i)$에 따라서 $T$함수가 정의될 수 있습니다. 어? $T$랑 $F$가 비슷하고, $F$는 $A$의 함수인데? 그러면 모든 linear map은 행렬로써 표현할 수 있는게 아닐까요? 그런데, 특정한 경우에서는 가능합니다! 바로 언제냐면, $T: \mathbb{R}^n\to\mathbb{R}^m$과 같이 유한차원 벡터를 유한차원 벡터로 보내주는 함수일때 가능한거죠. 즉, 행렬은 어떻게 보면 한 벡터를 다른 벡터로 옮겨주는 함수로 작용됩니다. 그렇다면 처음 옮기려고 하는 벡터는 어떤 공간안에 있었고, 옮겨진 벡터는 어느 공간 안에 있을까요? 우리는 이런 벡터들을 모아놓은 공간을 벡터 공간(vector space)이라고 부릅니다.&lt;/p&gt;

&lt;h1 id=&quot;vector-space&quot;&gt;Vector Space&lt;/h1&gt;

&lt;p&gt;Vector space를 공부하신 분들은 알겠지만, vector space는 vector를 “깔쌈하게” 모아놓은 집합입니다. 단순히 집합은 아니고, 벡터 안에서 특정 “연산”이 가능해야 합니다. 대충 말하자면 벡터끼리의 곱셈을 제외한 벡터 연산 및 스칼라 연산 그 모든것이 닫혀있으면 vector space라고 부릅니다. 더 정확히 말하자면,&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;vector끼리 더하고 빼도 vector&lt;/li&gt;
  &lt;li&gt;vector를 scalar 곱을 취해도 vector&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;입니다. Vector space에서는 scalar를 &lt;strong&gt;Field 중 하나로 선택&lt;/strong&gt;하기 때문에, 스칼라의 역원곱도 vector 안에 들어가있어야 합니다. Field가 뭐냐구요? 말하자면 긴데 간단히 말하면 실수같은거에요. 덧셈, 곱셈에 대해 닫혀있고 서로 분배법칙이 잘 작용하면 field (체)라고 부릅니다.&lt;/p&gt;

&lt;p&gt;그렇다면 vector는 무엇일까요? Vector 자체는 사실 정의하기 어렵습니다. 왜나하면 정말 vector는 ‘무언가’거든요. 이 ‘무언가’에 스칼라곱을 적용하고 벡터 연산을 적용한게 vector space이기 때문에, 사실 정의를 하기 애매합니다. 대신 vector의 의미에 대해서는 사람들이 많이 생각하죠. 어, 그런데 여러분들은 $(1, 0, 3,2)$와 같이 실수를 모아놓은 애들을 vector라고 생각하잖아요? 그러면 정의된게 아닐까요? 정확히는 정의된건 아니고, 그냥 벡터 하나를 저렇게 좌표에서 표현한 것 뿐이에요. 정확히 $x=(1, 0, 3,2)$라는건 정말로 $x$가 저런 숫자로 구성되어있다는게 아니라, $x = 1e_1+0e_2+3e_3+4e_4$로 표현될 수 있다는 것을 간략하게 서술하는 것입니다. 이렇게 서술될 수 있는 이유는 바로 vector의 합연산 덕분이죠. 저런식으로 좌표를 잡아서 표현할 수 있는 애들을 vector space의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Basis&lt;/code&gt; 라고 표현을 하고, basis의 원소의 개수를 vector space의 차원이라고 정의를 내립니다.&lt;/p&gt;

&lt;p&gt;그렇다면 정말 vector란 무엇일까요? 위에서도 언급했듯이, vector는 정의내릴 수 없지만, 의미는 파악할 수 있습니다. 만약 어떤 집합 안에 있는 원소가 실수곱을 해도 집합 안에 있고, 객체끼리 더해도 집합안에 있다면? 아 이거는 그 집합이 vector space이고 원소가 vector라는 합리적인 의심을 할 수 있습니다. 확률론에서 예시를 한 번 들어보죠.&lt;/p&gt;

\[\mathcal{R}=\{X: \mathcal{C}\to \mathbb{R}: \text{random variable}\}\]

&lt;p&gt;이렇게 $\mathcal{R}$집합을 정의를 해봤습니다. 그러면 여기서 random variable $X$를 하나 끄집어 내볼까요? 얘에 대해서 $aX$와 같이 스칼라곱을 취해도 random variable이고, 또다른 random variable인 $Y$를 끄집어내서 $X+Y$와 같이 합해도 random variable이네요. 그렇다면 이녀석은 vector space임이 분명합니다. 실수를 스칼라로 가지는 vector space요! 하지만 안타까운점은 저런 random variable이 무수히 많다는 점이기 때문에, 유한차원 벡터공간은 아니네요.&lt;/p&gt;

&lt;h1 id=&quot;다시-matrix&quot;&gt;다시, matrix&lt;/h1&gt;

&lt;p&gt;그래서 왜 갑자기 vector space로 이야기가 넘어왔느냐. 추상 대수학에서는 객체의 성질을 보존하는 매핑에 관심이 많습니다. 보통 준동형사상 (homomorphism)이라고 부르죠. 그렇다면, vector space에 대한 homomorphism이 뭘까요? Vector space의 성질이 뭘까요? 바로, 벡터끼리 더하는 것과 스칼라 연산을 취하는 것입니다. 그렇다면, 이것을 보존하는 mapping은 어떤 성질을 가져야 할까요? 느낌이 오시나요?&lt;/p&gt;

\[T(ax+y) = aT(x)+T(y)\]

&lt;p&gt;이면 vector space의 성질을 보존하게 되는겁니다! 아니 근데 이거는 아까전에 봤던 linear mapping이잖아요? 맞아요. 바로 linear mapping이 vector space에 대한 homomorphism으로 작용하게 됩니다. 그런데 아까전에 우리가 linear mapping이면 행렬곱으로 생각할 수 있다고 했잖아요? 어? 그러면 vector space끼리의 보존함수는 행렬곱이네요? 즉, 행렬은 vector space간의 변환에 대해 기술하는 함수였습니다!&lt;/p&gt;

&lt;p&gt;그렇다면 이제 실마리가 풀리는군요. 왜 linear algebra에서 행렬을 배우는지, 그리고 뜬금없이 갑자기 vector space를 배우는지, 모든 것이 풀렸어요. Vector space의 보존 함수는 linear mapping이고, 이는 행렬이다! 이 세가지 서로 달라보이는 키워드는 사실 모두 연관이 있었던거죠.&lt;/p&gt;

&lt;p&gt;자 그렇다면, 이제 행렬을 어떻게 바라봐야할까요? 사실 그냥 그대로 똑같이 바라봐도 됩니다. 이렇게 vector space가 뭐니 그런게 실제 계산에서 뭐가 중요하겠어요. 그러나, linear algebra에서 배우는 이상한 명제, 정리, 증명등을 이해하기 위해서는 이러한 사실을 아는 것이 중요합니다. 예를 들자면, $A$가 symmetric matrix일때 orthogonal decomposition이 가능하다는 fact는 행렬 자체의 계산을 중점으로 둘 수 있지만, 사실은 선형 함수를 좋게 쪼갤 수 있고 이는 곧 vector space의 변환과 관련있다고도 볼 수 있습니다. 계산 자체로 의미를 두게 되면 할 수 있는 이야기가 별로 없지만, 후자로 생각하게 되면 수학적으로 더 많은 이야기를 할 수 있는 것이죠.&lt;/p&gt;

&lt;h1 id=&quot;결론&quot;&gt;결론&lt;/h1&gt;

&lt;p&gt;행렬 계산 자체는 사실 별로 중요하지 않지만, 행렬을 통해서 의미있는 계산을 하는게 중요하다고 생각합니다. 특히, 행렬은 숫자 자체로도 생각할 수 있지만 어떤 함수로서 생각할 수 있고, 이는 고전적인 통계를 공부할 때 큰 도움이 될 수 있습니다.&lt;/p&gt;

&lt;p&gt;여담으로, vector space에서는 scalar가 실수 혹은 복소수와 같은 field라고 했잖아요? 그런데 만약 이런 scalar가 field가 아니라 정수 등과 같이 곱셈에 대한 역원이 존재하지 않는 것들로 정의하게 된다면 어떻게 될까요? 이는 바로 module이라고 부릅니다. 또한, 벡터간의 곱셈도 닫혀있다면 어떻게 될까요? 이렇게 되면 그런 집합을 algebra over a field F라고 부릅니다. 만약 이런 것들이 알고 싶다면, 수학과 대학원을 가셔서 commutative algebra같은걸 수강하시면 됩니다 ㅎㅎ&lt;/p&gt;</content><author><name>Kyungdon Choi</name></author><category term="data-analysis" /><category term="수리과학" /><category term="선형대수" /><summary type="html">들어가기 앞서…</summary></entry></feed>