<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Soo 배움일지</title>
    <link>https://jangsoooo.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 24 Aug 2026 23:24:06 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>장수우</managingEditor>
    <item>
      <title>금융 데이터 구조</title>
      <link>https://jangsoooo.tistory.com/148</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;비정형 금융 데이터를 다루는 방법과 이를 바탕으로 머신러닝 알고리즘에서 활용할 수 있는 데이터셋을 도출하는 방법을 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 이상적인 방법은 비정형 데이터를 수집한 후 의미 있는 특성을 알아낼 수 있는 방법으로 처리하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;금융 데이터의 근본적 형태&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 116px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;기본 데이터&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;시장 데이터&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;분석&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;대체 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;자산&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;가격/이자율/내재 변동성&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;분석가 추천&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;위성/CCTV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;부채&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;거래량&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;신용 평가&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;구글 검색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;영업&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;배당/쿠폰&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;이익 예측&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;트위터 / 채팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;비용/수익&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;호가/취소&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;뉴스 감성&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;메타 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;거시/변수&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;공격적 포지션 방향&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;...&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 데이터&lt;br /&gt;감독 기관 제출 자료에서 찾을 수 있는 정보와 비즈니스 분석이 포함, 대개 분기별 회계 데이터&lt;br /&gt;자료의 특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자료 보고에 시간 지연이 있다&lt;/li&gt;
&lt;li&gt;데이터가 소급(당시에는 값을 알 수 없으나 일단 값을 할당)되거나 수정(최초 발표에 잘못 기입한 값을 나중에 수정해 제대로 기입)된다는 것&lt;/li&gt;
&lt;li&gt;대부분의 회사는 최초 발표 이후 한참 후에 지난 분기 자료를 여러 번 수정하며, 데이터 업체들은 초기값을 수정값으로 바꿔 놓습니다.&lt;/li&gt;
&lt;li&gt;기본 데이터는 엄청나게 잘 정규화 되어있어 빈도도 적습니다. 시중에 많이 알려진 자료일수록 유용성은 떨어지는 법입니다.&lt;/li&gt;
&lt;li&gt;다만 다른 자료와 함께 종합적으로 볼 때 가치가 있을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;시장데이터&lt;br /&gt;거래소나 트레이딩 장소에서 발생하는 모든 자료&lt;br /&gt;이상적으로, 데이터 공급자는 트레이딩 북을 완전히 재구성할 수 있도록 하는 FIX 메시지 또는 BWIC 반응에 대한 전체 자료와 같은 모든 종류의 비정형 정보를 담은 원시데이터를 제공합니다.&lt;br /&gt;모든 시장 참여자는 자신만의 기록을 남기므로 주의 깊게 살펴보면 경쟁자들의 다음 전략을 예측할 수 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TWAP(Time-Weighted Average Price) 알고리즘은 매우 특별한 흔적을 남기는데, 약탈적 알고리즘이 이를 적극적으로 활용해 장 종료 전에 TWAP 트레이딩(대게 헤징)을 선행 매매한다.&lt;/li&gt;
&lt;li&gt;사람들이 수동으로 매매할 때는 주로 규정된 최소 거래 단위에 따라 거래하게 된다.&lt;/li&gt;
&lt;li&gt;이 사실을 적용하면 특정 시간에 몇 퍼센트의 거래가 이뤄졌는지 추정해 볼 수 있으며, 특별한 시장 형태와 연계할 수 있습니다.&lt;/li&gt;
&lt;li&gt;FIX 데이터의 매력적인 특성 중 하나는 기본 데이터와 달리 가공하기가 쉽지 않다는 것.&lt;/li&gt;
&lt;li&gt;데이터의 양도 하루에 10TB 정도씩 생성되어 전략 연구에 도움이 많이 되는 데이터 셋&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;분석&lt;br /&gt;기본 데이터, 시장 데이터, 대체 데이터 또는 다른 분석을 종합한 원시 데이터로부터 파생된 데이터로 생각
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특성은 정보의 내용 자체에 있는게 아닌 원래 소스에서는 바로 알아볼 수 없는 정보이므로 특별한 방법으로 가공해야만 알 수 있습니다.&lt;/li&gt;
&lt;li&gt;투자 은행과 연구소는 여러 회사의 비즈니스 모델, 활동, 결쟁, 전망 등을 심층 분석한 결과로 얻은 귀중한 자료를 판매합니다.&lt;/li&gt;
&lt;li&gt;분석의 양성적 측면은 원시 데이터로부터 신호를 추출한다는 점&lt;/li&gt;
&lt;li&gt;음성적 측면은 비용이 과도하고 분석을 위한 방법론들이 편향되거나 불투명 하고, 경쟁자들도 동일한 방법을 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;대체 데이터&lt;br /&gt;생성 소스에 따라 개인적(사회 관계망, 뉴스, 웹 탐색 등), 비즈니스 프로세스(거래내역, 회사 데이터, 정부 기관 등), 센서(위성, 지리정보, 기상, CCTV 등)로 구분됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 특성은 다른 데이터에 비해 최초 정보라는 점입니다.&lt;/li&gt;
&lt;li&gt;다른 소스에 아직 사용되지 않은 정보&lt;/li&gt;
&lt;li&gt;문제점은 비용과 사적 비밀 보장에 문제가 있다&lt;/li&gt;
&lt;li&gt;고유하며 처리가 쉽지 않은 데이터 셋으로 작업할 수 있는 기회를 제공, 저장, 처리, 조작이 힘든 데이터는 항상 가장 좋은데이터에 속한다. 사내의 데이터 인프라 구조 팀이 역정을 낸다는 것은 아주 유용한 자료라는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>데이터분석</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/148</guid>
      <comments>https://jangsoooo.tistory.com/148#entry148comment</comments>
      <pubDate>Wed, 8 Apr 2026 22:00:24 +0900</pubDate>
    </item>
    <item>
      <title>올 일렉트릭 미니 쿠퍼쏘카 시승 이벤트 당첨!</title>
      <link>https://jangsoooo.tistory.com/147</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 이번에 쏘카 시승하기 이벤트에 당첨되어 차량을 7일간 탑승할 수 있는 기회를 얻게 되었습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후기를 작성해보겠습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쏘카 모바일 어플이 있다면 아래 링크로 26.3.6(금)까지 신청 가능합니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;쏘카 시승하기 이벤트(어플 있어야 가능)&quot; href=&quot;https://www.socar.kr/?airbridge_deeplink=https%3A%2F%2Fwww.socar.kr%2F&amp;amp;airbridge_referrer=airbridge%3Dtrue%26event_uuid%3D6034e99f-f3f4-4fc9-a949-7aa1df760b00%26client_id%3Dfb38b0ba-5cb6-465e-afa8-f1bd373d7f88%26channel%3Dairbridge.websdk%26referrer_timestamp%3D1771846570546&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.socar.kr/?airbridge_deeplink=https%3A%2F%2Fwww.socar.kr%2F&amp;amp;airbridge_referrer=airbridge%3Dtrue%26event_uuid%3D6034e99f-f3f4-4fc9-a949-7aa1df760b00%26client_id%3Dfb38b0ba-5cb6-465e-afa8-f1bd373d7f88%26channel%3Dairbridge.websdk%26referrer_timestamp%3D1771846570546&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771846789732&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;쏘카&quot; data-og-description=&quot;라이프타임 모빌리티 플랫폼, 쏘카. 쏘카 카셰어링과 다양한 서비스로 끊임없이 확장되는 이동 경험&quot; data-og-host=&quot;www.socar.kr&quot; data-og-source-url=&quot;https://www.socar.kr/?airbridge_deeplink=https%3A%2F%2Fwww.socar.kr%2F&amp;amp;airbridge_referrer=airbridge%3Dtrue%26event_uuid%3D6034e99f-f3f4-4fc9-a949-7aa1df760b00%26client_id%3Dfb38b0ba-5cb6-465e-afa8-f1bd373d7f88%26channel%3Dairbridge.websdk%26referrer_timestamp%3D1771846570546&quot; data-og-url=&quot;https://www.socar.kr/?airbridge_deeplink=https%3A%2F%2Fwww.socar.kr%2F&amp;amp;airbridge_referrer=airbridge%3Dtrue%26event_uuid%3D6034e99f-f3f4-4fc9-a949-7aa1df760b00%26client_id%3Dfb38b0ba-5cb6-465e-afa8-f1bd373d7f88%26channel%3Dairbridge.websdk%26referrer_timestamp%3D1771846570546&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EENNQ/dJMb85vLN1W/0iJFqBAxXkRpNXSFLeQm71/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.socar.kr/?airbridge_deeplink=https%3A%2F%2Fwww.socar.kr%2F&amp;amp;airbridge_referrer=airbridge%3Dtrue%26event_uuid%3D6034e99f-f3f4-4fc9-a949-7aa1df760b00%26client_id%3Dfb38b0ba-5cb6-465e-afa8-f1bd373d7f88%26channel%3Dairbridge.websdk%26referrer_timestamp%3D1771846570546&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.socar.kr/?airbridge_deeplink=https%3A%2F%2Fwww.socar.kr%2F&amp;amp;airbridge_referrer=airbridge%3Dtrue%26event_uuid%3D6034e99f-f3f4-4fc9-a949-7aa1df760b00%26client_id%3Dfb38b0ba-5cb6-465e-afa8-f1bd373d7f88%26channel%3Dairbridge.websdk%26referrer_timestamp%3D1771846570546&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EENNQ/dJMb85vLN1W/0iJFqBAxXkRpNXSFLeQm71/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;쏘카&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;라이프타임 모빌리티 플랫폼, 쏘카. 쏘카 카셰어링과 다양한 서비스로 끊임없이 확장되는 이동 경험&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.socar.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 안들어 가진다면 쏘카 어플에서 시승하기를 선택하시면 다양한 차종을 만나보실 수 있습니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_204818183.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM5J8R/dJMcacoCaEZ/ljdJtdorpeWwscES7Al4p0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM5J8R/dJMcacoCaEZ/ljdJtdorpeWwscES7Al4p0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM5J8R/dJMcacoCaEZ/ljdJtdorpeWwscES7Al4p0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM5J8R%2FdJMcacoCaEZ%2FljdJtdorpeWwscES7Al4p0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1235&quot; data-filename=&quot;KakaoTalk_20260223_204818183.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 평소에 지나가다 볼 때마다 가장 궁금했던 호평과 악평이 공존하는 미니였습니다. &lt;br /&gt;그러던&amp;nbsp;와중에&amp;nbsp;쏘카&amp;nbsp;시승&amp;nbsp;이벤트&amp;nbsp;페이지에서&amp;nbsp;미니&amp;nbsp;일렉트릭을&amp;nbsp;발견하고,&amp;nbsp;고민&amp;nbsp;1초도&amp;nbsp;안&amp;nbsp;하고&amp;nbsp;바로&amp;nbsp;신청했어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외형은 딱정벌레 같이 동글동글하니 귀엽습니다! (번호판은 블러처리 했습니다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;사진1.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bca75K/dJMcadnujwy/gJI2MecNvKDx8PySCf57C0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bca75K/dJMcadnujwy/gJI2MecNvKDx8PySCf57C0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bca75K/dJMcadnujwy/gJI2MecNvKDx8PySCf57C0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbca75K%2FdJMcadnujwy%2FgJI2MecNvKDx8PySCf57C0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-filename=&quot;사진1.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운전석에&amp;nbsp;앉아서&amp;nbsp;가장&amp;nbsp;먼저&amp;nbsp;눈에&amp;nbsp;들어온&amp;nbsp;건&amp;nbsp;동글동글한&amp;nbsp;스티어링&amp;nbsp;휠이었어요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Gemini_Generated_Image_1oeaay1oeaay1oea.png&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;1588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VMyjj/dJMcabpJKCx/5giRazOZikJtHf3koEC32k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VMyjj/dJMcabpJKCx/5giRazOZikJtHf3koEC32k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VMyjj/dJMcabpJKCx/5giRazOZikJtHf3koEC32k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVMyjj%2FdJMcabpJKCx%2F5giRazOZikJtHf3koEC32k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1588&quot; data-filename=&quot;Gemini_Generated_Image_1oeaay1oeaay1oea.png&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;1588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;핸들 중앙에서 아래로 내려오는 부분을 스트랩으로 처리하여 멋진 느낌이 납니다!&lt;br /&gt;또한 핸들 질감이 손에 착 붙는 느낌이라 좋았고 스티치 디테일도 은근히 고급스러웠습니다. &lt;br /&gt;&lt;br /&gt;실내 전체 분위기는 사진에서 보던 것보다 훨씬 고급스럽고 캐주얼한 느낌이었어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마감처리나 색 배합, 조명위치가 마음에 들었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_193750617_16.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7cdyb/dJMcahXLq53/Culo8cj8NXjlRKdWdB48o1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7cdyb/dJMcahXLq53/Culo8cj8NXjlRKdWdB48o1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7cdyb/dJMcahXLq53/Culo8cj8NXjlRKdWdB48o1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7cdyb%2FdJMcahXLq53%2FCulo8cj8NXjlRKdWdB48o1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-filename=&quot;KakaoTalk_20260223_193750617_16.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시트 패턴이 독특해서 보는 맛이 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;현대차와 다른 버튼에 좀 헷갈렸지만 다행이 시동과 기어변속은 직관적이라 알기 쉬웠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 다른 버튼은 어떨때 사용하는지 모르겠습니다..!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_193750617_12.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFDD6u/dJMcaaxz1Ci/tdj6QZ9W2ar1jvvoCvWGNK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFDD6u/dJMcaaxz1Ci/tdj6QZ9W2ar1jvvoCvWGNK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFDD6u/dJMcaaxz1Ci/tdj6QZ9W2ar1jvvoCvWGNK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFDD6u%2FdJMcaaxz1Ci%2Ftdj6QZ9W2ar1jvvoCvWGNK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-filename=&quot;KakaoTalk_20260223_193750617_12.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그래도 원형 디스플레이 안에서 주행 정보, 내비, 미디어가 한꺼번에 나와서 금방 익숙해졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완충기준 400Km 까지 나오는데 이정도면 전국 어디든 편도로 갈 수 있는 베터리 용량이라 걱정이 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 다양한 안전 및 경고 기능이 있어서 초보자 분들도 걱정을 좀 내려 놓고 탈 수 있다는 장점이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_193750617_13.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LwCq3/dJMcagkeWpV/x6v8WHZhonQrz7tqiM5QlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LwCq3/dJMcagkeWpV/x6v8WHZhonQrz7tqiM5QlK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LwCq3/dJMcagkeWpV/x6v8WHZhonQrz7tqiM5QlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLwCq3%2FdJMcagkeWpV%2Fx6v8WHZhonQrz7tqiM5QlK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-filename=&quot;KakaoTalk_20260223_193750617_13.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블루투스로 Android Auto 연결도 잘 되고 음성인식으로 작동도 잘 합니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_193750617_17.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyGnpM/dJMcachRkQK/YoFBm0isGd2oeUS1jwvKO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyGnpM/dJMcachRkQK/YoFBm0isGd2oeUS1jwvKO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyGnpM/dJMcachRkQK/YoFBm0isGd2oeUS1jwvKO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyGnpM%2FdJMcachRkQK%2FYoFBm0isGd2oeUS1jwvKO1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-filename=&quot;KakaoTalk_20260223_193750617_17.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 한가지 불편한 점은 네비를 사용할 때 어느 방향으로 갈지 차량 앞 카메라로 영상을 띄워주는데 신기하면서도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 네비 앞부분을 가려 전반적인 길을 파악하기 힘들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 차량에 내장된 네비가 아닌 Tmap 이나 네이버 지도를 사용하시면 문제 없다고 생각합니다.&lt;br /&gt;&lt;br /&gt;뒷좌석은 사진에서 보이다시피 좁은편이라 4명이서 타는 차는 아니라는 생각이 듭니다! 진짜 급할때 아니면 물건을 놔두는 용도로 쓰일 것 같아요! 2인용 차 라고 생각하고 타시는게 좋겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_193750617_20.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nEerD/dJMcabXxMul/kTJG53g4XF0Us727gYS3S0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nEerD/dJMcabXxMul/kTJG53g4XF0Us727gYS3S0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nEerD/dJMcabXxMul/kTJG53g4XF0Us727gYS3S0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnEerD%2FdJMcabXxMul%2FkTJG53g4XF0Us727gYS3S0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3181&quot; data-filename=&quot;KakaoTalk_20260223_193750617_20.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;전기차라&amp;nbsp;그런지&amp;nbsp;시동&amp;nbsp;걸었을&amp;nbsp;때의&amp;nbsp;정숙함은&amp;nbsp;확실히&amp;nbsp;인상적이었습니다. &lt;br /&gt;출발할 때 살짝 밟기만 해도 부드럽게 쭉 나가고, 저속에서는 거의 소리가 안 나서 편안했습니다.&lt;br /&gt;&lt;br /&gt;다만 전기차 특성인 회생제동으로 운전이 좀 불편해 설정에서 가장 낮게 설정했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차 크기와 휠베이스 때문인지, 노면이 안 좋은 구간을 지날 때는 충격이 조금 더 또렷하게 전해지는 편이었어요. &lt;br /&gt;부드럽게&amp;nbsp;떠다니는&amp;nbsp;타입의&amp;nbsp;승차감보다는,&amp;nbsp;노면을&amp;nbsp;솔직하게&amp;nbsp;전달해&amp;nbsp;주는&amp;nbsp;스타일이라&amp;nbsp;호불호가&amp;nbsp;조금&amp;nbsp;갈릴&amp;nbsp;수&amp;nbsp;있겠다는&amp;nbsp;생각이&amp;nbsp;들었습니다. &lt;br /&gt;&lt;br /&gt;이러한 차량의 장 단점을 구매 전 미리 파악 할 수 있어서 쏘카가 참 좋은 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 쏘카 시승 이벤트라 대여료 부담 없이 미니를 마음껏 타 볼 수 있었던 점이 제일 좋았어요. &lt;br /&gt;실제로 미니 일렉트릭을 이렇게까지 길게 타볼 일이 또 있을까? 싶을 만큼 만족도가 높은 이벤트 였습니다!&lt;br /&gt;&lt;br /&gt;덕분에 주말에 강진여행 잘 다녀 왔습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260223_193750617_11.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nPRme/dJMcahQZDGQ/hEdnEFCNHI3OSWq0yo6QJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nPRme/dJMcahQZDGQ/hEdnEFCNHI3OSWq0yo6QJ0/img.jpg&quot; data-alt=&quot;강진 우아민물나라 추어탕과 민물메기탕 맛있습니다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nPRme/dJMcahQZDGQ/hEdnEFCNHI3OSWq0yo6QJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnPRme%2FdJMcahQZDGQ%2FhEdnEFCNHI3OSWq0yo6QJ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_20260223_193750617_11.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;강진 우아민물나라 추어탕과 민물메기탕 맛있습니다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;총평을 해보자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인과 동글동글한 감성은 정말 최고입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도심 주행을 중요하게 생각한다면 정말 매력적인 선택지지만, 뒷좌석 공간을 우선으로 본다면 한 번 더 고민해 볼 필요가 있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분들도 다양한 차종 중 어떤 차량을 구매할지 고민 중 이라면 쏘카를 통해 시승을 해보시고 나에게 맞는 차량인지 파악 후 구매를 하신다면 현명한 소비를 하는 길이라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시승이벤트에 원하는 차량이 있다면 더 없는 행운이겠지요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고민 하지말고 바로 신청하세요&lt;/p&gt;</description>
      <category>BMW</category>
      <category>BMW Mini</category>
      <category>미니</category>
      <category>미니 쿠퍼</category>
      <category>시승이벤트</category>
      <category>쏘카</category>
      <category>쏘카 이벤트</category>
      <category>이벤트</category>
      <category>일렉트릭 미니 쿠퍼</category>
      <category>쿠퍼</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/147</guid>
      <comments>https://jangsoooo.tistory.com/147#entry147comment</comments>
      <pubDate>Mon, 23 Feb 2026 21:49:10 +0900</pubDate>
    </item>
    <item>
      <title>실전 금융 머신러닝</title>
      <link>https://jangsoooo.tistory.com/146</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 이번에 접하게 된 책인 Advances in Financial Machine Learning 을 읽고 느낀 부분이나 기록하면 좋을 부분과 새로 검색해 알게된 내용을 소개하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사일로(Silo) 아키텍처의 구조적 분석과 한계 : 토너먼트 모델의 붕괴&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.1-1 역사적 배경과 사일로 모델의 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;금융 투자 산업, 특히 헤지펀드 업계는 오랜 기간 스타 매니저 중심의 사일로 구조를 유지해 왔습니다. 이 구조아래 개별 포트폴리오 매니저(Portfolio Manager, PM)는 하나의 독립된 사업 단위 처럼 기능합니다. 회사는 PM에게 자본, 사무 공간, 기본적인 데이터 접근 권한, 법적 컴플라이언스 인프라를 제공하는 플랫폼 역할만을 수행합니다. 대신 PM은 투자 아이디어의 생성부터 데이터 정제, 모델링, 백테스트, 그리고 최종적인 주문 실행에 이르는 투자의 전 과정을 독자적 or 소규모 팀과 함께 수행해야합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 구조는 밀레니엄 매니지먼트(Millennium Management)나 시타델(Citadel)과 같은 멀티 매니저 플랫폼(Multi-Manager Platform)에서 극대화되었습니다. 이런 기업은 수백 개의 독립적인 팀(Pod)을 운영하며, 각 팀의 성과(P&amp;amp;L)에 따라 자본을 동적으로 배분합니다. 성과가 좋은 팀은 더 많은 자본과 보너스를 받고, 성과가 저조한 팀은 가차 없이 퇴출당하는 이 시스템은 다원주의적 '토너먼트' 모델로 불리면서, 생존한 팀드르이 성과 합이 곧 회사의 성과가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.1-2 사일로 모델의 지속 요인과 착시 현상&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리의 용의성 : &lt;br /&gt;&amp;nbsp;경영진 입장에서 수백 명의 퀀트 연구원들의 세부적인 연구 과정을 일일이 감독하는 것은 불가능에 가깝습니다. 대신 각 사일로의 P&amp;amp;L 이라는 단일 지표로 성과를 측정하고 보상하는 방식은 경영 효율성을 극대화 합니다. 잘하는 만큼 벌어가는 보상 체계는 강력한 동기부여 수단으로 작용합니다.&lt;/li&gt;
&lt;li&gt;다각화(Diversification)의 환상 :&lt;br /&gt;이론적으로 서로 소통하지 않는 많은 팀들이 각자 다른 전략을 개발한다면, 이들의 수익 흐름은 상관관계가 낮아야 합니다.&lt;br /&gt;이런 방식은 포트폴리오 이론상 위험을 분산시키는 최적의 구조로 여겨졌습니다.&lt;/li&gt;
&lt;li&gt;지적 재산권의 격리 :&amp;nbsp;&lt;br /&gt;개별 PM이 퇴사하더라도 해당 사일로만 폐쇄하면 되므로, 회사 전체의 리스크로 전이되지 않는다는 인식이 있었습니다. 또한, PM들 간의 정보 차단은 내부 정보 유출을 막는 보안 장치로 기능하기도 했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.1-3 머신러닝 시대에서의 구조적 실패 요인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이 책은 이러한 사일로 구조가 현대의 금융 머신러닝 환경에서는 필연적으로 실패한다고 주장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 금융 머신러닝의 본질적인 복잡성과 데이터 의존성 때문입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업무의 전문화 부재 :&lt;br /&gt;현대의 퀀트 투자는 고도의 데이터&amp;nbsp; 엔지니어링, 특성 공학, 머신러닝 모델링, 고성능 PC관리가 결합된 융합 과학입니다. 그러나 사일로 모델은 소수의 인원에게 이 모든 과정을 완벽하게 수행할 것을 요구합니다. 한 명의 연궁원이 데이터 정제 전문가 이자, 네트워크 아키텍트이며, 동시에 파생상품 트레이더가 될 수는 없습니다. 결국 사일로 내의 연구원들은 표준화된 도구(Scikit-learn 등)와 정제되지 않은 데이터를 사용해 '장난감 모델'을 만드는데 그치게 됩니다.&lt;/li&gt;
&lt;li&gt;다각화의 실패 :&lt;br /&gt;사일로 구조 하의 PM들은 서로 격리되어 있지만, 아이러니하게도 모두 동일한 데이터 벤더(Vendor)로부터 동일한 데이터를 구매하고, 동일한 오픈 소스 라이브러리를 사용합니다. 그 결과, 수십 개의 팀이 서로 다른 사무실에서 동일한 팩터(Factor)와 전략을 중복 발견하게 됩니다. 시장이 평온할 때는 이들이 다각화 되는 것처럼 보이지만, 2007년 퀀트 대폭락이나 2020년 코로나 위기 시에는 모든 사일로의 전략이 동시에 붕괴되는 높은 상관관계를 보이게 됩니다.&lt;/li&gt;
&lt;li&gt;지적 재산권의 휘발성 :&lt;br /&gt;사일로 모델에서 전략에 대한 모든 지식은 PM의 머릿속이나 개인적인 코드 저장소에 존재합니다. PM이 더 좋은 조건을 제시하는 경쟁사로 이직할 경우, 회사는 해당 전략의 디테일을 잃게됩니다. 이는 회사가 장기적인 연구 역량이나 제도적 기억(Institutional Menory)을 축적하지 못하고, 매번 새로운 PM을 영입해 처음부터 다시 시작해야 하는 비효율적인 순환을 초래합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;background-color: #1e1f20; color: #e3e3e3; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;18&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,0,0,0&quot;&gt;비교 항목&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,0,1,0&quot;&gt;사일로(토너먼트) 모델&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,0,2,0&quot;&gt;팩토리(공장) 모델&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,1,0,0&quot;&gt;운영 주체&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,1,1,0&quot;&gt;개별 PM / 소규모 팀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,1,2,0&quot;&gt;회사 전체 / 중앙화된 연구소&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,2,0,0&quot;&gt;업무 범위&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,2,1,0&quot;&gt;데이터~실행 전 과정 (Full Stack)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,2,2,0&quot;&gt;세분화된 전문 영역 (Specialized)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,3,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,3,0,0&quot;&gt;보상 체계&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,3,1,0&quot;&gt;개별 P&amp;amp;L 연동 (Silo Profit)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,3,2,0&quot;&gt;회사 전체 성과 연동 (Firm Profit)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,4,0,0&quot;&gt;지적 재산권&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,4,1,0&quot;&gt;PM 개인에게 귀속 (이직 시 유출)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,4,2,0&quot;&gt;회사 시스템에 귀속 (영구 보존)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,5,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,5,0,0&quot;&gt;전략 상관성&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,5,1,0&quot;&gt;높음 (중복 발견, 군집 행동)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,5,2,0&quot;&gt;낮음 (직교하는 알파 추구)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,6,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,6,0,0&quot;&gt;주요 리스크&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,6,1,0&quot;&gt;과적합(Overfitting), 인력 유출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #1b1b1b;&quot;&gt;&lt;span data-path-to-node=&quot;18,6,2,0&quot;&gt;관료제화, 조정 비용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.2-1. 복잡성의 딜레마와 역량의 한계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재량적 트레이딩은 인간의 직관과 경험, 그리고 거시경제적 통찰에 의존합니다. 폴 튜더 존스(Paul Tudor Jones)와 같은 전설적인 트레이더들은 소수의 팀원과 함께 시장의 심리를 읽고 과감한 베팅을 통해 성공을 거두었다. 이 과정은 고도의 지적 능력을 요구하지만, 기술적으로 복잡한 인프라를 필수적으로 요구하지는 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, 금융 머신러닝은 본질적으로 산업공학(Industrial Engineering)의 영역입니다. 의미 있는 신호를 찾기 위해서는 페타바이트(Petabyte) 규모의 비정형 데이터(text, 위성 이미지, 틱 데이터 등)을 처리해야 하며, 이를 위해서는 클라우드 컴퓨팅, 병렬 처리, DB 최적화 등의 기술이 필요합니다. 사일로 구조의 소규모 팀은 이런 인프라 구축 및 유지보수할 자원과 시간이 부족합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 사일로 퀀트들은 복잡한 문제를 단순화하려는 유혹에 빠지게 됩니다. 예로, 데이터의 비정상성을 정밀하게 처리하기보단 단순히 차분해 메모리를 날려버리거나, 표준화된 리스크 모델을 무비판적으로 사용해 실제 시장의 꼬리 위험(Tail Risk)을 과소평가합니다. 이는 기술적 부채(Techical Debt)를 누적시키고, 결국 시장 충격 시 시스템이 오작동하는 원인이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.2-2. 구조적으로 강요된 과적합(Incentivized Overfitting)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사일로 모델의 가장 치명적인 결함은 과적합을 구조적으로 장려한다는 점입니다. 토너먼트 시스템에서 PM의 생존과 보상은 오로지 백테스트 결과와 단기적인 실적에 달려있습니다. 다양한 과학적 방법론을 적용한 결과 유의미한 신호가 없다라고 보고하면 해고될 확률이 높아진다는 것이죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사일로 내의 연구원들은 소위 P-해킹(P-hacking)이나 데이터 준설(Data Dredging)을 수행하게 됩니다. 이들은 수천, 수만 가지의 변수 조합을 시도하며, 우연히 과거 데이터에서 수익이 나는 패턴을 찾아낼 때까지 백테스트를 반복합니다. 통계적으로 5%의 유의수준 하에서는 20번의 독립적인 테스트 중 1번은 우연히 유의미한 결과를 보일 수 밖에 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사일로 모델은 이런 거짓 양성(FP)을 걸러낼 수 있는 내부 감시 장치가 부족합니다. PM은 수천 번의 실패한 시도는 숨기고, 성공한 단 하나의 백테스트 결과만을 경영진에게 보고합니다(선택 편양). 경영진은 이 전략이 실제 전략인지, 아니면 과적합의 결과인지 판단할 수 있는 정보가 없으므로 자금은 배분하게 되고, 이 전략은 실제 시장에서 필연적으로 손실을 기록하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로페즈 데 프라도는 이를 &quot;금융 돌팔이 행위(Financial Charlatanism)&quot;라고 강하게 비판합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.3-1. 팩토리 모델의 구조와 철학&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팩토리 모델은 르네상스 테크놀로지, D.E, Shaw, Two Sigma와 같은 최상위 퀀트 펀드들이 채택하고 있는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모델의 핵심 철학은 투자를 예술이 아닌 과학이나 재조업으로 바라보는 것입니다. 자동차 공장이 엔진, 차체, 전자장비 조립 라인으로 나뉘어 있듯, 투자 프로세스도 고도로 전문화된 단계로 분업화됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 큐레이터(Data Curators):&lt;br /&gt;원시 데이터를 수집, 정제, 구조화하여 고품질의 데이터셋을 만듭니다. 이들은 모델을 만들지 않고, 오직 데이터의 무결성(Integrity)과 포인트-인-타임(Point-in-Time) 정확성을 보장하는 데 집중합니다.&lt;/li&gt;
&lt;li&gt;특성 분석가(Feature Analysts):&lt;br /&gt;정제된 데이터를 바탕으로 경제적, 통계적 의미가 있는 특성이나 신호를 추출합니다. 최종 포트폴리오의 성과를 직접 보지 못할 수도 있으며, 오직 신호의 예측력 향상에만 주력합니다.&lt;/li&gt;
&lt;li&gt;전략 모델러(Strategy Modelers):&lt;br /&gt;머신러닝 알고리즘을 선택하고, 학습시켜 특성을 수익 예측으로 변환합니다.&lt;/li&gt;
&lt;li&gt;백테스터(Backtesters):&lt;br /&gt;독립된 부서로서, 모델러가 만든 전략을 엄격한 기준(홀드아웃 데이터, 교차 검증 등) 하에 테스트합니다. 이들은 모델의 승인 여부를 결정하는 품질관리(QC) 역할을 수행하며, 연구원들의 과적합 시도를 차단합니다.&lt;/li&gt;
&lt;li&gt;포트폴리오 최적화(Portfolio Optimizers):&lt;br /&gt;수많은 모델에서 나온 예측치를 통합해, 거래 비용과 리스크 제약을 고려한 최적의 포트폴리오를 구성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.3-2. 메타 전략(Meta-Strategy)으로서의 시스템&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팩토리 모델에서 회사가 투자하는 대상은 개별 전략(ex: 200일 이평선 돌파)이 아니라, 그런 전략을 끊임 없이 생산해내는 시스템 그 자체, 메타 전략입니다. 개별 전략은 시장 상황에 따라 수명이 다할 수 있지만, 전략을 연구하고 검증하며 배포하는 파이프라인은 지속적으로 가치를 창출합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.3-3. 리스크 완화와 경쟁 우위&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 분업화 구조는 사일로 모델의 어려 리스크를 효과적으로 완화합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;과적합 방지:&lt;br /&gt;전략을 만드는 사람(모델러)과 이를 검증하는 사람(백테스터)이 분리되어 있어, 연구원이 자신의 보너스를 위해 백테스트를 조작하려는 유인이 차단됩니다.&lt;/li&gt;
&lt;li&gt;협업과 집단지성:&lt;br /&gt;팩토리 모델에서는 특정 PM이 모든 수익을 독식하지 않고, 회사의 전체 성과에 따라 보상을 받습니다. 이는 연구원들이 서로의 코드를 리뷰하고, 아이디어를 공유하며, 문제를 함께 해결하는 협업 문화를 조성합니다. D.E.Shaw나 르네상스 테크놀러지의 성공 비결중 하나는 이런 개방적인 연구 환경입니다.&lt;/li&gt;
&lt;li&gt;규모의 경제와 인프라:&lt;br /&gt;전문화된 팀은 각자의 영역에서 최고 수준의 기술을 도입할 수 있다. 예를 들어, 전문 HPC팀은 개별 퀀트가 구축하기 힘든 슈퍼컴퓨팅 그리드를 운영해, 딥러닝과 같은 고연산 알고리즘의 적용을 가능케 합니다.&lt;/li&gt;
&lt;li&gt;IP의 영속성:&lt;br /&gt;모든 코드는 중앙화된 라이브러리에 통합되므로, 특정 인력이 퇴사하더라도 회사의 연구 역량은 유지됩니다. 이는 회사의 가치가 인력이 아닌 시스템에 축적됨을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.4.1. 퀀터멘탈의 부상과 필연성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 가용성이 폭발적으로 증가함에 따라, 전통적인 펀더멘털 분석(재무제표 분석, 경영진 미팅 등) 만으로는 시장 초과 수익을 창출하기 어려워 졌습니다. 이에 따라 블랙록(BlackRock), 포인트72(Point72), 폴 튜더 존스 등 유수의 재량적 운용사들은 펀더멘털 통찰력과 퀀트의 데이터 처리 능력을 결합한 퀀터멘탈전략으로의 전환을 시도하고 있습니다. 이들은 머신러닝을 통해 대체 데이터를 분석하고, 이를 인간 매니저의 의사결정을 보조하는 도구로 활용하고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.4.2 문화적 충돌: 예술가와 공학자의 대립&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 전환은 기술적 문제보다 문화적 충돌로 인해 실패하는 경우가 많습니다. 재량적 매니저와 퀀트 연구원은 세상을 바라보는 인식론적 틀이 다릅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설명 가능성 vs 예측력: 재량적 매니저는 투자의 이유와 스토리를 중시합니다. 그들은 인과관계가 명확하지 않은 투자를 꺼립니다. 반면, 머신러닝 퀀트는 데이터가 보여주는 상관관계와 예측력을 중시하며, 모델이 블랙박스일지라도 통계적으로 유의미하다면 수용합니다. 이런 차이는 결정적인 순간에 충돌을 일으킵니다. 모델이 매도 신호를 보냈을 때, 재량적 매니저는 이유를 설명하지 못한다는 이유로 신호를 무시하는 경향이 있습니다.&lt;/li&gt;
&lt;li&gt;권력 구조의 비대칭: 전통적인 운용사에서 퀀트는 종종 IT 지원부서나 리스크 관리자 정도로 취급받습니다. 투자의 최종 의사 결정권은 여전히 스타 매니저가 쥐고 있습니다. 이런 구조에서 유능한 퀀트 인재들은 자신의 기여가 폄하된다고 느끼며, 퀀트 중심의 회사나 테크 기업으로 이탈하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.4.3 시지프스의 과제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로페즈 데 프라도는 이런 상황을 그리스 신화의 시지프스(Sisyphus)에 비유합니다. 재량적 회사가 퀀트 도구를 도입하려는 시도는 마치 바위를 산 정상으로 밀어 올리는 것과 같습니다. 경영진은 퀀트 팀을 고용하고 인프라를 구축하지만, 기존의 재량적 문화와 의사결정 구조를 바꾸지 않는 한 퀀트 팀은 주변부로 밀려나거나 실패하고, 이 과정이 무한히 반복됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공적인 전환을 위해서는 단순히 퀀트 팀을 추가하는게 아닌, 회사의 DNA를 바꿔야 합니다. 포인트72의 큐비스트 사업부처럼 퀀트 조직에 완전한 자율성을 부여하거나, 블랙록처럼 전사적인 데이터 플랫폼을 구축하여 모든 의사결정 과정을 데이터 기반으로 재설계하는 근본적인 개혁이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.5.1. 추론(Inference) vs 예측(Prediction)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계량경제학은 추론에 중점을 둡니다. 경제 이론에 기반해 변수 간의 인간관계를 설명하고, 모수의 불편추정량을 구하는 것이 목표이다. 따라서 모델의 해석 가능성과 파라미터의 통계적 유의성(t-stat, p-value)를 중시합니다.&lt;/li&gt;
&lt;li&gt;머신러닝은 예측에 중점을 둡니다. 데이터의 패턴을 학습해 표본 밖 데이터에 대한 예측 오차를 최소화하는 것이 목표입니다. 모델이 복잡해 내부 구조를 알기 어렵더라도(Black Box), 예측 성능이 뛰어나다면 유용한 것으로 간주합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.5.2. 금융 데이터의 특성과 계량경제학의 한계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로페즈 데 프라도는 전통적인 계량경제학이 금융 시장의 현실을 반영하지 못하는 가정들에 묶여 있다고 비판합니다. 이를 &quot;Econ-quant&quot;의 실패라고 지칭하기도 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선형성(Linerarity)의 가정 : 계량경제학 모델(ex: OLS 회귀분석)은 대부분 변수 간의 선형 관계를 가정합니다. 그러나 금융시장은 인간의 심리, 피드백 루프, 임계점 효과 등으로 인해 고도로 비선형적인 복잡계(Complex Adaptive System)입니다. 머신러닝의 딥러닝이나. 트리 기반 모델은 이러한 비선형 상호작용을 포착하는 데 탁월합니다.&lt;/li&gt;
&lt;li&gt;다중공선성과 고차원성 : 빅데이터 시대에는 관측치(N)보다 변수(P)가 많은 경우(P &amp;gt; N)가 빈번합니다. 전통적인 계량경제학은 이런 고차원 환경에서 다중공선성 문제로 인해 붕괴됩니다. 반면 머신러닝은 릿지(Ridge), 라쏘(Lasso)와 같은 정규화 기법이나 앙상블 기법을 통해 고차원 데이터를 효과적으로 처리하고 유용한 정보를 추출합니다.&lt;/li&gt;
&lt;li&gt;확증편향(Confirmation Bias): 계량경제학은 &quot;이론설정 -&amp;gt; 모델 수립 -&amp;gt; 검증&quot;의 순서를 따릅니다. 연구자는 자신의 경제학적 직관(이론)이 맞다는 것을 증명하기 위해 모델을 수정하려는 확증 편향에 빠지기 쉽습니다. 반면 머신러닝은 데이터 주도(Data-driven) 접근법을 통해 이론적인 선입견 없이 데이터 자체에서 구조를 발결할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.5.3 편향-분산 트레이드오프(Bias-Variance Tradeoff)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계량경제학은 편향(Bias, 모델의 잘못된 가정으로 인한 오차)을&amp;nbsp; 줄이는 데 집착하는 반면, 머신러닝은 분산을 관리하는데 강점이 있습니다. 금융 데이터는 신호 대 잡음비(Signal-to-Noise Ratio)가 매우 낮기 때문에, 편향이 없는 복잡한 모델보다는 약간의 편향을 감수하더라도 분산을 낮춰 일반화 성능을 높이는 머신러닝 기법(ex : 배깅, 부스팅)이 실전에서 더 우수한 성과를 낼 가능성이 높습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;63&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;금융 계량경제학 (Econometrics)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;금융 머신러닝 (Machine Learning)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;63,1,0,0&quot;&gt;주목적&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,1,1,0&quot;&gt;인과관계 규명 및 설명 (Explain)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,1,2,0&quot;&gt;미래 데이터 예측 (Predict)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;63,2,0,0&quot;&gt;모델 가정&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,2,1,0&quot;&gt;선형성, 정규성, 독립성 등 강한 가정&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,2,2,0&quot;&gt;비선형성, 복잡성 허용 (Data-driven)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,3,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;63,3,0,0&quot;&gt;데이터 구조&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,3,1,0&quot;&gt;소수의 변수, 긴 시계열 (Low-dim)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,3,2,0&quot;&gt;대량의 변수, 고차원 데이터 (High-dim)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;63,4,0,0&quot;&gt;주요 리스크&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,4,1,0&quot;&gt;과소적합(Underfitting), 모델 설정 오류&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,4,2,0&quot;&gt;과적합(Overfitting), 블랙박스 문제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,5,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;63,5,0,0&quot;&gt;검증 방식&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,5,1,0&quot;&gt;P-value, &lt;span data-index-in-node=&quot;9&quot; data-math=&quot;R^2&quot;&gt;$R^2$&lt;/span&gt; 등 표본 내(In-sample) 통계&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;63,5,2,0&quot;&gt;교차 검증(CV) 등 표본 밖(Out-of-sample) 오차&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.6.1 다중 가설 검정의 함정&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백테스트는 과거 데이터에 전략을 시뮬레이션하여 미래 성과를 추정하는 도구입니다. 그러나 수많은 퀀트 펀드들이 훌륭한 백테스트 결과를 가지고도 실전에서 실패하는 이유는 백테스트를 연구 도구가 아닌 선별 도구로 오용하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구자가 하나의 데이터셋에 대해 1,000개의 무작위 전략을 테스트한다고 가정한다면 유의수준 5% 기준에서, 통계적으로 아무런 예측력이 없는 전략이라도 약 50개는 우연히 좋은 성과를 낼 것입니다 (FP). 사일로 환경의 연구원들은 수천 번의 시뮬레이션을 돌린 후, 그중 가장 샤프 지수가 높은 전략하나를 선택합니다. 이때 그들은 실패한 999번의 시도에 대해서는 언급하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.6.2 제 2의 백테스트 법칙&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로페즈 데 프라도는 이를 제 2의 백테스트 법직(Second Law of Backtesting)으로 정의합니다 : 백테스트를 통해 최적화하면 할수록, 그 전략이 실전에서 실패할 확률은 높아진다는 것이죠. 이는 수학적으로 볼 때, 최적화 과정이 데이터의 신호가 아닌 노이즈에 모델을 적합시키기 때문입니다. 높은 샤프지수의 백테스트는 실력의 증거가 아니라, 과적합의 증거일 가능성이 높다는 역설적인 상황이 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.6.3 축소된 샤프 지수(Deflated Sharpe Ratio, DSR)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위해 제시된 개념이 축소된 샤프 지수(DSR)입니다. DSR은 백테스트 결과로 나온 샤프 지수를 다음의 세 가지 요소를 고려해 하향 조정해야 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수익률의 비정규성 : 금융데이터는 투터운 꼬리(Fat Tail)와 편포도(Skewness)를 가지므로, 정규분포 가정 하의 샤프 지수는 리스크를 과소평가합니다.&lt;/li&gt;
&lt;li&gt;트랙 레코드의 길이 : 데이터가 길수록 통계적 신뢰도가 높아집니다.&lt;/li&gt;
&lt;li&gt;독립적인 시행 횟수(Number of Independent Trials) : 가장 중요한 요소로, 연구자가 최종 전략을 찾기 위해 시도한 테스트의 횟수(K)를 반영합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DSR은 K가 커질수록 유의미하다고 인정받기 위해 필요한 샤프 지수의 임계값(Threshold)을 높입니다. 예를 들어 한 번의 시도에서 샤프지수 2.0이 나왔다면 유의미할 순 있지만, 1,000번의 시도 끝에 나온 샤프 지수 2.0은 우연일 가능성이 높으므로 DSR은 이를 0에 가깝게 깎아 버립니다. 이는 퀀트들이 자신의 백테스트 결과를 과신하지 않도록 하는 강력한 수학적 제동 장치입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.7.1. 고성능 컴퓨팅 (HPC)의 필연성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 언급한 팩토리 모델과 DSR 검증을 수행하기 위해서 막대한 연산 능력이 필요합니다. 예를들어 조합적 정화 교차 검증(Combinatorial Purged Cross-Validation, CPCV)을 수행하려면 데이터를 수천 개의 조각으로 나누고, 훈련세트와 테스트 세트 간의 정보유출을 제거한 뒤 수만 번의 모델 학습과 평가를 반복해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 포트폴리오 최적화 문제는 본질적으로 NP-Hard(비결정론적 다항식 난해) 문제에 속하는 경우가 많습니다. 이를 해결하기 위해 퀀텀 어닐링(Quantum Annealing)이나 대규모 병렬 그리드 컴퓨팅이 도입되고 있습니다. 이제 퀀트 펀드의 경쟁력은 단순히 수학적 알고리즘 뿐 아니라, 슈퍼 컴퓨터를 운영하고 관리할 수 있는 하드웨어 인프라 역량에 달려있습니다. 이는 소규모 펀드나 개인 투자자가 따라올 수 없는 진입 장벽을 형성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.7.2. 비정상성의 딜레마 : 메모리 vs 정상성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 알고리즘의 대다수는 학습 데이터가 IID(독립항등분포)이거나 최소한 정상성(Stationarity)을 가진다고 가정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 과거의 데이터 분포(평균, 분산 등)가 미래에도 유지되어야 학습이 가능합니다. 그러나 금융 시장은 구조적 변화, 레짐 체인지(Regime Change) 등으로 인해 대표적인 비정상 시계열 입니다.&amp;nbsp; 2008년 금융위기 때의 데이터 분포는 2017년의 저변동성 장세와는 완전히 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.7.3 해결책: 분수 차분(Fractional Differentiation)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로페즈 데 프라도는 이 델레마의 해결책으로 분수차분을 제안합니다. 기존의 차분은 정수 단위(d= 1)로만 이뤄졌지만, 수학적으로 차분 차수 d는 실수(Real Number)일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분수 차분은 0 &amp;lt; d &amp;lt; 1 사이의 값을 사용하여, 데이터의 비정상성을 제거할 수 있는 최소한의 수준까지만 차분을 수행합니다. 예를 들어 d = 0.4로 차분하면 데이터는 통계적 검점(ADF test)을 통과할 만큼 충분히 정상적이면서도, 과거 데이터와의 상관관계(메모리)를 상당 부분 보존하게 됩니다. 이는 머신러닝 모델이 노이즈에 현혹되지 않으면서도 장기적인 신호를 학습할 수 있게 하는 핵심적인 데이터 전처리 기법입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.8.1 수탁자 책임과 블랙박스의 충돌&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;투자 관리자는 고객의 이익을 최우선으로 해야 하는 법적 수탁자 책임(Fiduciary Duty), 특히 주의 의무와 충실 의무를 집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 딥러닝과 같은 고도화된 머신러닝 모델은 입력과 출력 사이 과정을 인간이 직관적으로 이해하기 힘든 블랙박스 특성을 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 블랙박스 알고리즘이 예측하지 못한 시장 상황에서 오작동하여 고객 자산에 막대한 손실을 입혔을 경우(ex: 2010 플래시 크래시), 매니저가 알고리즘이 왜 그랬는지 나도 모른다 라고 변명하는 것은 법적으로 용납되지 않습니다. 이는 주의 의무 위반으로 간주될 수 있으며, 알고리즘에 대한 통제권과 이해 부족은 심각한 법적 리스크를 초래합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.8.2 알고리즘 혐오와 신뢰&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심리학적 연구에 따르면, 사람들은 인간의 실수보다 알고리즘의 실수에 대해 훨씬 더 가혹하게 반응하는 알고리즘 혐오 성향을 보입니다. 인간 펀드 매니저가 손실을 내면 시장 상황 탓 이라고 이해해주지만, AI가 손실을 내면 시스템에 고장 났다고 생각해 사용을 중단합니다. 따라서 펀드가 지속 가능한 자금을 유치하기 위해선 모델의 신뢰성을 확보하는 것이 기술적 성능만큼이나 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.8.3 해결책 : XAI와 감사 추적&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 윤리적, 법적 문제를 해결하기 위해 금융 머신러닝은 설명 가능성과 투명성을 강화하는 방향으로 나아가고 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설명 가능한 AI(XAI) : 단순히 예측값만 내놓는 것이 아닌, 특성 중요소(Feature Importance) 분석(MDI, MDA) 이나 SHAP 값 등을 통해 &quot;왜&quot; 모델이 그런 결정을 내렸는지 설명할 수 있어야 합니다. 이는 펀드 매니저가 모델의 결정을 사후적으로 검증하고, 규제 당국이나 고객에게 투자 근거를 설명하는데 필수적입니다.&lt;/li&gt;
&lt;li&gt;감사 추적(Audit Trail) : 알고리즘 트레이딩의 모든 의사결정 과정을 기록되고 추적 가능해야 합니다. 어떤 데이터 버전이 사용되었는지, 당시 모델의 파라미터는 무엇이었는지, 왜 주문이 실행되었는지를 블록체인이나 불변로그(Immutable Log) 형태로 저장해야 합니다. 이는 사고 발생 시 책임 소재를 규명하고, 시스템의 오류를 수정하며, 규제 준수를 입증하는 증거가 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론 : 금융 머신러닝 도입은 단순한 도구의 교체가 아닌 금융 산업의 구조적 혁명을 의미합니다. 사일로 모델은 과적합과 비효율성으로 인해 팩토리 모델에 자리를 내어주고 있습니다. 또한, 계량 경제학의 설명적 접근은 머신러닝의 예측적 접근과 융합되어야 하며, 데이터 처리와 검증 방식(DSR, 분수 차분)역시 과학적 엄밀성을 갖추어야 합니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중요질문&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 자의적인 판단에 의거(전통적인 액티브)한 투자에서 머신러닝-기반의 투자로 변화를 시도하거나 퀀터멘탈 펀드로 불리는 &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 방식으로 변환하려고 시도하는 회사에 대해 알고 있나?&lt;/b&gt;&lt;br /&gt;&amp;rarr; D.E. Shaw, Two Sigma, Renaissance, AQR 등은 2017년 이전부터 이미 시스템, 머신러닝 기반 운용을 확대해 왔고&lt;br /&gt;&amp;nbsp; &amp;nbsp; AUM(Assets Under Management)과 전략 다변화 측면에서 업계 핵심으로 자리 잡았습니다.&lt;br /&gt;&amp;rarr; Man Group, Bridgewater, Point72, Schonfeld 등은 리서치, 리스크 관리, 시그널 발굴에 머신러닝/대체데이터를 결합한 &lt;br /&gt;&amp;nbsp; &amp;nbsp; quantamental 모델은 적극적으로 도입했습니다.&lt;br /&gt;&amp;rarr; 전통 롱온리 자산운용사(글로벌 대형 운용사, 연기금 등)도 AI,ML 팀과 대체데이터 조직을 신벌하는 방식으로 부분적 &lt;br /&gt;&amp;nbsp; &amp;nbsp; 시스템화를 진행했습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;그 회사들은 성공적이었나?&lt;/b&gt;&lt;br /&gt;&amp;rarr; 17년 기준으로 헤지펀드 자산 중 약 17%인 5000억 달러가 퀀트 전략에 배분되어있었고, 이후에도 시스템 전략으로의 &lt;br /&gt;&amp;nbsp; &amp;nbsp; 자금 유입이 비중 이상으로 빠르게 늘었습니다.&lt;br /&gt;&amp;rarr; 24년 기준 글로벌 헤지펀드 AUM은 약 4.9조 달러로 추정, 이 중 상당 비중이 멀티 전략,마켓뉴트럴,시스템 전략 등 &lt;br /&gt;&amp;nbsp; &amp;nbsp;계량 색채가 강한 운용사에 집중되고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성과&lt;/b&gt;&lt;br /&gt;&amp;rarr; 2018-2020 년 구간에서는 일부 전통 퀀트 주식 팩터전략(밸류, 모멘텀 등)의 알파 약화로 수익률이 부진했지만, 멀티&lt;br /&gt;&amp;nbsp; &amp;nbsp;전략, 고급 퀀트(옵션, 매크로, 고빈도)는 비교적 견조한 성과를 유지했습니다.&lt;br /&gt;&amp;rarr; 2024-2025 년에는 멀티전략, 퀀트 전략이 다시 강한 알파를 기록하면서 헤지펀드 산업 전체 성과를 상회하는 사례가 &lt;br /&gt;&amp;nbsp; &amp;nbsp;많았습니다.&lt;br /&gt;&amp;rarr; 기술,데이터를 제대로 흡수한 대형사, 선도사는 성공적이었지만, 단순히 이름만 퀀트로 바꾼 소규모, 후발 운용사의&lt;br /&gt;&amp;nbsp; &amp;nbsp;상당수는 성과와 자금 유치 양쪽에서 별 효과를 보지 못했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이런 변화에 저항하는 문화적 어려움에는 어떤 것들이 있는가?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;스타 PM/애널리스트 문화화의 충돌&lt;br /&gt;&lt;b&gt; &lt;b&gt;&amp;rarr;&lt;/b&gt; &lt;/b&gt;기존 액티브 조직은 개인의 직관, 경험을 강하게 신뢰하는 문화가 있고, 의사결정의 서사적 스토리를 중시합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; 반면 퀀트/ML은 집단 모델, 코드가 의사결정을 주도하므로, 개인 영향력과 보상의 정당성이 줄어든다고 느끼는&lt;br /&gt;&amp;nbsp; &amp;nbsp; 사람이 저항합니다.&lt;/li&gt;
&lt;li&gt;투명성과 책임소재 문제&lt;br /&gt;&lt;b&gt;&amp;rarr;&amp;nbsp;&lt;/b&gt;규제, 컴플라이언스, 이사회, 고객은 왜 이 종목을 샀는가에 대한 설명 가능성을 요구하는데, 고난도 ML 모델은 설명이 어렵습니다.&lt;br /&gt;&lt;b&gt;&amp;rarr; &lt;/b&gt;설명 책임이 사람에서 모델 데이터 팀으로 이동하면서, 오류 발생 시 누가 책임을 지는지 불명확해지는 것에 대한 불안이 존재합니다.&lt;/li&gt;
&lt;li&gt;IT/데이터, 리서치 사이의 권력 재배분&lt;br /&gt;&lt;b&gt;&amp;rarr; &lt;/b&gt;투자부서, 데이터 엔지니어, 리스크관리, IT 모두 의사결정 체인의 핵심이 되면서 조직 구조를 개편하고, 예산 의사결정 권한 재배분에 반발이 생깁니다.&lt;/li&gt;
&lt;li&gt;블랙박스 불신과 학습 곡선&lt;br /&gt;&lt;b&gt;&amp;rarr; &lt;/b&gt;시니어 인력들이 통계, ML을 깊이 이해하지 못한 상태에서, 모델이 만들어내는 추상적 시그널을 신뢰하기 어렵다고 느끼며, 특히 손실이 발생하면 역시 사람 판단이 낫다는 회귀가 발생합니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 금융 수학에서 현재의 가장 중요한 난제는 무엇인가? 문제가 해결된다면&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 리스크와 강건&amp;middot;비모수적 가격결정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전통적인 단일 확률모형(예: Black&amp;ndash;Scholes, Heston)에 의존하는 가격결정은 시장 현실(점프, 비유동성, 불완전시장, &lt;br /&gt;구조 변화)에 취약합니다.&lt;/li&gt;
&lt;li&gt;Martingale Optimal Transport, 강건 헤징, 비모수&amp;middot;모형 집합 접근 등, &amp;ldquo;모형을 틀릴 수밖에 없는 근사치&amp;rdquo;로 보는 강건 금융수학이 활발한 연구 주제입니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;시스템 리스크&amp;middot;네트워크&amp;middot;전염(contagion) 모델링
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;금융기관 간 상호연계와 파생상품&amp;middot;담보&amp;middot;리포 거래 구조를 반영한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;네트워크 기반 디폴트 전염 모델&lt;/b&gt;은 수학적으로 고차원&amp;middot;비선형&amp;middot;불완전관측 문제를 동반합니다.&lt;/li&gt;
&lt;li&gt;McKean&amp;ndash;Vlasov SDE, mean-field 게임, 점프가 있는 BSDE 등을 이용한 거시 시스템 리스크 정량화가 난제로 연구되고 있습니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;마켓 마이크로스트럭처와 알고리즘 트레이딩
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;틱 데이터 수준에서의 주문흐름(order flow), 호가장(book) 동학, 유동성&amp;middot;임팩트 코스트를 반영한 최적 체결&amp;middot;헤징 전략 설계는 여전히 난제입니다.&lt;/li&gt;
&lt;li&gt;고빈도 환경에서의 최적제어&amp;middot;강건 제어, 비마르코프/비가우시안 노이즈, 상호작용 에이전트의 균형 분석이 어려운 문제로 남아 있습니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;이 밖에, ESG, 기후리스크의 계량 모형화, 암호화폐,디파이 시장의 가격결정 및 리스크 측정도 새로운 난제 영역으로 확장되고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제가 해결될 경우의 활용&lt;/b&gt;&lt;span style=&quot;background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;자금 배분
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;모델 리스크&amp;middot;시스템 리스크를 정량화할 수 있다면, 투자자는 진짜 알파와 모델 착시를 더 잘 구분해 전략별 한도(Limit)&lt;br /&gt;&amp;middot;리스크 버짓을 정교하게 배분할 수 있습니다.&lt;/li&gt;
&lt;li&gt;시스템 리스크 측정이 개선되면, 연기금&amp;middot;보험사는 위기 시 손실 꼬리 위험이 낮은 전략/자산군에 구조적으로 더 큰 비중을 실을 수 있습니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;연구원 보상
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이론적 난제를 해결해 실제 리스크 측정&amp;middot;헤징 비용을 줄이거나, 자본 효율성을 높이는 연구 결과는 지속 가능한 알파에 가깝기 때문에,&lt;br /&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt; 헤지펀드&amp;middot;IB에서는 PnL 기반 보너스(모델로 인한 절감&amp;middot;수익 기여 추적),&lt;br /&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt; 자산운용사&amp;middot;연기금에서는 장기 성과와 내부 자본 비용 감소 기여에 연동된 보상 구조가 적합합니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;최근에는 연구원이 포트폴리오 매니저와 유사한 PnL 공유 구조를 갖거나, 특정 전략&amp;middot;모델에 대한 로열티 성격의 인센티브를 부여하는 사례도 늘고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 투자 전문잡지 (Institutional Investor)에 따르면 17%의 헤지 펀드 자산이 계량 금융회사에 의해 운용된다고 한다.&lt;br /&gt;&amp;nbsp;17년 6월 지금 5천억 달러에 달하고, 전년도 보다 3,860억 달러보다 늘어난 수치. 이러한 변화의 원동력이 무엇이라 생각하는가?&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;2017년 기준 상황&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;2017년 보고에 따르면 퀀트 헤지펀드는 전체 헤지펀드 자산의 약 17%를 차지했지만, 2010년 이후 순유입 자금의 29%를 흡수할 정도로 비중 이상의 인기를 누리고 있었습니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;AUM 기준 약 5,000억 달러 수준으로, 당시로서는 역대 최대 규모였습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;2017&amp;ndash;2025년 변화&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;헤지펀드 전체 AUM은 2017년 약 3조 달러에서 2024년 3분기 약 4.9조 달러로 증가했습니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;세부 전략별 비중을 보면,&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr; &lt;/b&gt;&lt;/b&gt;멀티전략, 대형 매크로&amp;middot;마켓뉴트럴, 통계차익 등 퀀트 색채가 강한 전략의 AUM이 빠르게 증가했고,&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt; 전통 롱&amp;middot;쇼트 에쿼티 중 상당수가 팩터&amp;middot;시스템 요소를 도입해 경계가 흐려졌습니다.&lt;/li&gt;
&lt;li&gt;정확한 퀀트 비중은 조사마다 다르지만, 2020년대 중반에는 퀀트/시스템 전략이 전체 자산의 20&amp;ndash;30% 범위까지 확대되었다는 추정이 일반적입니다(퀀터멘탈&amp;middot;멀티전략 내 퀀트 요소 포함 시).&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;원동력&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;성과와 위험조정 수익률&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt;&amp;nbsp; 위에서 언급한 대로, 특정 기간(특히 2024&amp;ndash;2025년)에 대형 퀀트&amp;middot;멀티전략 펀드가 강한 알파와 낮은 변동성을 동시에&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;보여주면서, 기관투자가들이 보수 높은곳도 돈을 넣을 가치가 있다고 판단한 것이 큽니다.&lt;/li&gt;
&lt;li&gt;데이터&amp;middot;컴퓨팅 비용 하락과 대체데이터 확산&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt;&amp;nbsp; 데이터 인프라&amp;middot;클라우드&amp;middot;GPU의 비용 하락으로, 자연어처리&amp;middot;이미지분석&amp;middot;위치 데이터 등 비정형 데이터를 활용한 투자&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;모델 구축이 가능해졌고, 이는 전통 액티브보다 퀀트 조직에 더 큰 Comparative Advantage를 줬습니다.&lt;/li&gt;
&lt;li&gt;알고리즘에 대한 거부감(algo aversion) 감소&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt;&amp;nbsp; 2010년대 초까지 존재하던 기계가 돈을 맡아 운용하는 것에 대한 심리적 거부감이, 빅테크&amp;middot;핀테크&amp;middot;전자상거래에서의 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;알고리즘 성공 경험을 통해 완화되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;규제&amp;middot;리스크 관리 요구 강화
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;금융위기 이후의 규제 체계(Basel, Solvency 등)는 정량적 리스크 측정을 강조했고, 이 과정에서 계량 리스크&amp;middot;퀀트 조직이 핵심 역할을 맡으면서 투자 프로세스까지 확장되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 부자목록에 따르면 이익을 가장 많이 창출하는 최상위 10위 자산 운용사 중 계량 투자를 수행하고 있는 회사가 얼마나 되는가? 계량 펀드로 운용되는 자산 비율과 비교하면?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;/b&gt;정확한 계량 투자 수행 여부&amp;middot;비율은 각 운용사의 내부전략 공개 정도에 따라 다르지만, 2024년 성과를 기준으로 한 Institutional Investor &amp;middot; Forbes 등의 Rich List를 보면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최상위 10위 내에 포함되는 대형사들 중 상당수가&lt;span&gt;&amp;nbsp;&lt;/span&gt;멀티전략&amp;middot;퀀트&amp;middot;시스템 요소를 핵심 경쟁력으로 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: Citadel, D.E. Shaw, Millennium, Point72, Balyasny, Schonfeld 등은 시스템&amp;middot;퀀트 팀을 대규모로 운영합니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2010년대 초와 비교하면, &amp;ldquo;순수 재량형 롱&amp;middot;쇼트&amp;rdquo;만으로 상위 10위에 오르는 경우보다,&amp;nbsp;멀티전략 + 대규모 계량 인프라를 가진 운용사가 상위권을 점유하는 경향이 뚜렷합니다.&lt;/li&gt;
&lt;li&gt;다만, AUM 기준 &amp;ldquo;전체 계량 펀드 비중(예: 20~30%)&amp;rdquo;에 비해, 상위 10위 운용사 중 계량 요소를 핵심으로 쓰는 곳의 비율은 그보다 훨씬 높다고 보는 것이 타당합니다. 즉,&amp;nbsp;&amp;ldquo;수익 상위&amp;rdquo;에서는 퀀트&amp;middot;시스템 비중이 전체 평균보다 과대표집되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.5. 계량 경제학과 머신러닝의 가장 큰 차이는 무엇인가? 통계적 툴을 개선함으로써 경제학이나 금융이 어떠한 혜택을 볼 수 있는가?&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목표
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;계량경제학:&lt;span&gt;&amp;nbsp;&lt;/span&gt;인과&amp;middot;구조 파라미터 추정과 정책 효과 평가(&amp;ldquo;왜, 얼마나&amp;rdquo;에 관심).&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;머신러닝: 예측 정확도&amp;middot;일반화 성능, 분류&amp;middot;회귀&amp;middot;탐지 등 &amp;ldquo;무엇이 일어날지&amp;rdquo;에 집중.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모델 구조
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;계량경제학: 경제이론에 기반한 구조적 모형, 명시적 함수형, 해석 가능한 계수(탄력성, 한계효과 등)를 중시.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;머신러닝: 유연한 함수 근사(딥러닝, 랜덤포레스트 등), 이론보다 데이터 주도, 해석보다는 성능을 우선.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;검증 방식
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;계량경제학: 식별(identification), 내생성, 도구변수, 동태적 편의 등 이론적&amp;middot;통계적 타당성을 중시.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;머신러닝: 교차검증, 트레이닝/테스트 분리, 정규화&amp;middot;앙상블 등으로 예측 오차를 최소화.&lt;/li&gt;
&lt;li&gt;&lt;span data-state=&quot;closed&quot;&gt;​&lt;b&gt;요약하면, 계량경제학은 &quot;왜&quot;에, 머신러닝은 &quot;무엇&quot;에 강점이 있습니다.&lt;/b&gt;&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통계적 툴 개선이 주는 혜택&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;인과 추론 강화를 통한 정책&amp;middot;전략 설계&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt; &amp;nbsp;Double Machine Learning(DML) 등, ML을 활용한 인과 추론 프레임워크는 고차원&amp;middot;비선형 환경에서도 편향을 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;줄이고, 계량경제학의 식별 전략을 보완합니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;br /&gt;&lt;/span&gt; &lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt; &amp;nbsp;금융&amp;middot;경제에서 복잡한 정책(예: 금리정책, 규제, 세제 변화)의 효과를 더 정확하게 추정할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;예측과 구조 분석의 결합
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;금융에서는 리스크관리&amp;middot;자산배분&amp;middot;옵션가격결정 등에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;정확한 예측 + 이해 가능한 구조가 모두 필요합니다.&lt;/li&gt;
&lt;li&gt;계량모형을 벤치마크로 두고, ML을 예측 보정&amp;middot;비선형 포착에 사용하면, 둘을 통합한 &amp;ldquo;해석가능한 고정밀 모델&amp;rdquo;을 구축할 수 있습니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;비정형 데이터 활용
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;경제&amp;middot;정책 연구에서도 뉴스&amp;middot;소셜미디어&amp;middot;위성사진&amp;middot;카드데이터 등 비정형 데이터를 ML로 처리한 후, 그 결과를 계량모형의 설명변수로 넣으면, 숨겨진 경제활동&amp;middot;리스크 요인을 포착할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.6 과학은 인간의뇌를 거의 이해하지 못하고 있다. 이 관점에서 뇌는 절대적인 블랙박스라고 볼 수 있다.&lt;br /&gt;금융 머신러닝을 블랙박스라고 무시하고 비판하면서 주관적 판단에 의거한 투자를 신봉하는 원인을 어떻게 생각하는가?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인지 편향과 통제감 환상
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사람은 자신의 판단을 &amp;ldquo;이해하고 있다&amp;rdquo;고 느끼지만, 실제로는 수많은 무의식적&amp;middot;감정적 요인에 의해 결정됩니다.&lt;/li&gt;
&lt;li&gt;반면, ML 모델은 수학적으로 정의되고 재현 가능하지만, 복잡성 때문에 &amp;ldquo;직관적으로 이해가 안 된다&amp;rdquo;는 이유로 더 불신을 받습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;통제감을 잃는 느낌이 강해서입니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;책임 회피 구조
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;인간 의사결정은 &amp;ldquo;경험과 직관&amp;rdquo;이라는 서사를 통해 사후 변명&amp;middot;정당화를 할 수 있지만, 알고리즘은 로그와 코드로 남기 때문에 실수를 변명하기 어렵습니다.&lt;/li&gt;
&lt;li&gt;따라서, 일부 의사결정자는 오히려 사람이 실수하는 체계를 선호하는 &amp;ldquo;역설적인 인센티브&amp;rdquo;를 가질 수 있습니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;기술&amp;middot;통계에 대한 이해 부족
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;고위 의사결정자&amp;middot;클라이언트의 상당수는 고급 ML/통계에 익숙하지 않아서, 자신의 이해 범위 밖의 모델에 대해 과도한 불신을 가집니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;정체성과 직업 안정성
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;액티브 매니저, 애널리스트, 자문가는 &amp;ldquo;판단&amp;rdquo;이 자신의 전문성 핵심이라는 정체성을 갖고 있고, ML 도입은 곧 직업&amp;middot;가치의 축소로 느껴질 수 있습니다.&lt;/li&gt;
&lt;li&gt;결과적으로, 인간의 &amp;ldquo;블랙박스&amp;rdquo;는 정체성 때문에 용인되고, 알고리즘의 블랙박스는 위협으로 평가됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.7. 투자 전략을 설명하는 저널의 기사를 읽었다고 가정하고, 백테스트에서 95%의 신뢰 수준으로 연간 샤프 비율(SR, Sharpe Ratio) 2를 성취했다고 가정하면 동일한 데이터셋을 활용해 독립적 백테스트를 수행할 수 있다고 가정해보자. 이 발견이 거짓일 가능성이 높은 이유는 ?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 주장이 의심스러운 이유:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 스누핑&amp;middot;p-해킹 가능성
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;동일 데이터셋에서 수많은 전략&amp;middot;파라미터 조합을 실험한 뒤,&lt;span&gt;&amp;nbsp;&lt;/span&gt;가장 좋아 보이는 것만 선택하면, 통계적 유의성(p-value, 신뢰구간)은 심각하게 과대평가됩니다.&lt;/li&gt;
&lt;li&gt;저자는 이미 수많은 탐색을 했을 가능성이 크므로, &amp;ldquo;독립&amp;rdquo; 테스트라고 보기 어렵습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구조 변화&amp;middot;버블 구간 의존
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;SR=2 수준의 고샤프 전략은 특정 시장 구간(버블, 한 방향 트렌드)에 과도하게 의존했을 가능성이 큽니다.&lt;/li&gt;
&lt;li&gt;동일 데이터로 검증하면 이런 편향을 걸러낼 수 없고, 실제 out-of-sample에서는 성과가 급격히 낮아지는 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;리스크&amp;middot;거래비용&amp;middot;슬리피지 미반영
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;많은 논문 백테스트는 유동성 제약, 거래비용, 시장충격, 제한된 공매도 등을 과소평가하거나 무시합니다.&lt;/li&gt;
&lt;li&gt;실거래에서 이들을 반영하면 SR이 2 &amp;rarr; 0.5~1 수준으로 떨어지는 것이 흔합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;샤프 비율 추정의 표본오차
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;연간 샤프를 신뢰구간까지 의미 있게 추정하려면 충분한 표본 길이가 필요합니다.&lt;/li&gt;
&lt;li&gt;몇 년치 데이터로 SR=2, 95% 신뢰라고 주장한다면, 샘플 수가 부족해 추정오차가 과소평가되었을 가능성이 큽니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;종합하면, 테스트 데이터가 진정으로 독립(out-of-sample)이 아니고, 탐색, 최적화 과정을 고려하지 않은 유의성 주장이기 때문에, 실제로는 우연에 가까운 결과일 확률이 높습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.8 투자 자문가들은 투자가들을 대신해 의사결정을 하는 데 있어 이해 상충의 영향을 받을 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;머신러닝 알고리즘은 이해상충과 상관없는 전략 운용이 가능하다. 그 이유는 ?
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;알고리즘은 미리 정의된 목적함수(예: 기대효용 극대화, 추적오차 최소화, 규제 제약 준수 등)를 따르며, 스스로 수수료&amp;middot;커미션&amp;middot;사적 이익을 고려하지 않습니다.&lt;/li&gt;
&lt;li&gt;사람이 이해상충을 발생시키는 경로(커미션 높은 상품 판매, 자기 계정과 고객 계정 간 거래, 보너스를 위한 과도한 리스크 등)가 알고리즘에는 직접적으로 존재하지 않습니다.&lt;/li&gt;
&lt;li&gt;물론 알고리즘을 설계한 사람이 이해상충을 반영한 목적함수를 넣을 수는 있으나, 그 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;코드&amp;middot;로그를 통해 더 쉽게 추적&amp;middot;감사&lt;/b&gt;할 수 있다는 점에서 여전히 투명성이 높습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;머신러닝 알고리즘을 활용해 결론적으로 손실을 봤다고 가정해보자. 알고리즘은 프로그램된 대로 실행됐고, 투자가들은 컴퓨터 로그의 포렌식 잠정 결과 프로그램의 의견에 동의했다. 자의적 판단에 의거한 투자에서 잘못된 판단 때문에 발생한 투자 손실과 비교했을 때 이 경우가 더 나은 점이 무엇인가? 각 경우에 있어 투자가의 손실배상 청구는?&lt;/li&gt;
&lt;li&gt;가정 : &lt;br /&gt;1. 알고리즘은 사전 정의된 룰과 리스크 한도 내에서 정확히 실행되었고, 로그 검증 결과도 이를 입증&lt;br /&gt;2. 투자자는 알고리즘의 구조, 위험을 사전에 설명받고 동의&lt;/li&gt;
&lt;li&gt;장점&amp;nbsp;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;의사결정 과정의 투명성&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt;&amp;nbsp; 모든 거래&amp;middot;신호&amp;middot;리스크 지표가 로그에 남아 있어, ex post 포렌식에서 &amp;ldquo;규정 위반&amp;middot;임의 변경&amp;middot;의도적 리스크 과다&amp;rdquo;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;여부를 객관적으로 판단할 수 있습니다.&lt;/li&gt;
&lt;li&gt;책임 범위의 명확화&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt;&amp;nbsp; 손실이 모델의 통계적 한계(불확실성) 때문인지, 구현 오류인지, 리스크 한도 위반 때문인지가 비교적 명확히 구분&lt;/li&gt;
&lt;li&gt;사후 학습&amp;middot;개선 가능성&lt;br /&gt;&lt;b&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;/b&gt;&amp;nbsp; 같은 상황에서 모델이 어떤 신호를 만들었는지 재현 가능하므로, 연구&amp;middot;개선에 활용할 수 있고, 이는 조직 차원의 &lt;br /&gt;&amp;nbsp; &amp;nbsp; 지식으로 축적됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;자의적 판단 손실 :&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;의사결정의 근거가 모호하고 문서화가 불완전한 경우가 많아, 책임소재&amp;middot;과실 여부를 판단하기 어렵습니다.&lt;/li&gt;
&lt;li&gt;결과적으로, 투자자가 &amp;ldquo;설명의 충실도&amp;middot;위험 고지 여부&amp;rdquo;에 기반해 민사상 손해배상 청구를 하기 수월할 수 있지만, 입증은 훨씬 더 주관적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;손실배상 청구 측면&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ML 알고리즘
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;프로그램이 사전 설명된 범위와 리스크 한도 내에서 정상적으로 실행되었다면, 통상적인 시장 리스크로 간주되어 배상 책임이 제한됩니다(규정&amp;middot;계약 위반 없음).&lt;/li&gt;
&lt;li&gt;반대로, 구현 오류&amp;middot;리스크 한도 무시&amp;middot;모델 검증 소홀 등 &amp;ldquo;운용사의 과실&amp;rdquo;이 입증되면, 손해배상 책임이 발생할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;자의적 판단
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명백한 규정 위반(투자정책서 위반, 레버리지 한도 초과, 허위 설명 등)이 없다면, 역시 시장 리스크로 간주되어 배상 범위는 제한적입니다.&lt;/li&gt;
&lt;li&gt;다만, &amp;ldquo;적합성 원칙 위반&amp;rdquo;이나 고위험 상품 오판 등에 대한 소송 여지는 더 크게 인식되는 편입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;금융 자문가를 중립적 에이전트와 벤치마킹하는 것이 타당한가?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이론적으로는, &amp;ldquo;이해상충이 없는 중립적 에이전트(예: 미리 정의된 ML 알고리즘 또는 규범적 결정모형)&amp;rdquo;의 의사결정과 인간 자문가의 의사결정을 비교하는 것은 매우 유용합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자문가의 추천이 수수료&amp;middot;커미션&amp;middot;인센티브에 의해 왜곡되는지 검증할 수 있기 때문입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;실무적으로는,
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;투자자의 선호&amp;middot;제약&amp;middot;비재무적 목표(ESG, 유동성 선호 등)를 얼마나 잘 반영했는지를 함께 봐야 하므로, 단순 수익률 비교만으로 벤치마킹하는 것은 불충분합니다.&lt;/li&gt;
&lt;li&gt;따라서 &amp;ldquo;중립적 알고리즘 + 인간 자문가&amp;rdquo;의 혼합 모델로, 서로를 상호 검증하는 구조가 점점 더 현실적인 방향으로 평가됩니다.&lt;span data-state=&quot;closed&quot;&gt;​&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>데이터분석</category>
      <category>금융머신러닝</category>
      <category>머신러닝</category>
      <category>사일로</category>
      <category>퀀트</category>
      <category>팩토리</category>
      <category>프랙탈</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/146</guid>
      <comments>https://jangsoooo.tistory.com/146#entry146comment</comments>
      <pubDate>Mon, 2 Feb 2026 23:18:46 +0900</pubDate>
    </item>
    <item>
      <title>HHI(HerfindahI-Hirschmana Index)</title>
      <link>https://jangsoooo.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;경제학에서 시장 점유율의 집중도를 측정하여 독과점 여부를 판단할 때 사용하는 지표입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허핀달-허쉬만 지수의 값이 클수록 산업에서 특정 시장 집중도가 더욱 커진다는 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 기업의 시장 점유율이 큰 경우에 보다 높은 가중치를 두게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FUnJL/dJMcabXd8T5/P3CPn4V15AZ4QDM4mXe7F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FUnJL/dJMcabXd8T5/P3CPn4V15AZ4QDM4mXe7F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FUnJL/dJMcabXd8T5/P3CPn4V15AZ4QDM4mXe7F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFUnJL%2FdJMcabXd8T5%2FP3CPn4V15AZ4QDM4mXe7F0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;160&quot; height=&quot;62&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #101418;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8;&quot;&gt;특정 카테고리의 구매 비중 (0~1)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #101418;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8;&quot;&gt;- 제곱을 하는 이유는 점유율이 높은 항목에 가중치를 주기 위해서 입니다. 작은 구매는 무시하고, 굵직한 구매가 어디에 쏠려 있는지 알기 위함입니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #383a42;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #101418; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #101418; text-align: start;&quot;&gt;허핀달-허쉬만 지수는 계산 값에 10,000을 곱한 값으로 쓰이기도 하며, 이 경우 최대값은 10,000이 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #383a42;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #101418; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #101418; text-align: start;&quot;&gt;시장 내에 소수 기업만이 가지고 있는 과점 시장에서 점유율 격차가 큰 시장에서 시장 집중도를 높게 측정하는 장점이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;점유율이 각각 60%, 20%, 15%, 5%인 경우 CR&lt;/span&gt;3&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;은 95%이고, HHI는 4,250입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;점유율이 각각 35%, 30%, 30%, 5%인 경우에는 CR&lt;/span&gt;3&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;은 역시 95%이고, HHI는 3,375입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt; 허핀달-허쉬만 지수는 CR&lt;/span&gt;N&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;값이 같다고 하더라도 시장 점유율이 특정한 기업에 집중되어 있을 때 보다 높은 값을 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt; 따라서 시장 점유율의 집중 현상을 CR&lt;/span&gt;N&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;보다 잘 나타낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점으로는 &lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;시장을 넓게 정의한다 가정했을 때 개별 기업의 점유율이 낮게 평가되어 허핀달-허쉬만 지수가 낮게 측정되고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt; 시장을 좁게 정의하면 개별 기업의 점유율이 높게 평가되어 허핀달-허쉬만 지수가 높게 측정됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;이걸 응용해 고객의 제품 구매 목록, 즉 장바구니 분석에 활용을 한다면 ?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;고객이 기업에서 구매를 하는 카테고리의 비중을 확인할 수 있는 지표가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #383a42;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #101418; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #101418; text-align: start;&quot;&gt;HHI 지수는 항상 1/n (분산)dptj 1.0(집중) 사이의 값을 가집니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;점수 범위&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;비즈니스 해석&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;비유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;1.0에 근접&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;고도 집중(Monopoly)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;한 카테고리만 90%이상 구매&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;0.5 ~ 0.7&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;보통 집중(Concentrated)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;메인 카테고리가 있고, 서브가 1~2개 섞임&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;0.2 ~ 0.5&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;분산 구매(Diversified)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;3~5개의 카테고리를 골고루 삼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;0.1 미만&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;극도 분산 (Highly Fragmented)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;다양한 카테고리를 구매&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767263432807&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user_cat_spend = c1_transactions.groupby(['고객ID', '제품카테고리'])['평균금액'].sum().unstack(fill_value=0)
    user_cat_share = user_cat_spend.div(user_cat_spend.sum(axis=1), axis=0)
    c1_hhi = (user_cat_share**2).sum(axis=1)
    avg_hhi = c1_hhi.mean()

    print(f&quot;  - Cluster 1 평균 HHI: {avg_hhi:.3f}&quot;)
    if avg_hhi &amp;gt; 0.6:
        print(&quot;  =&amp;gt; 결과: [전문가/설치업자형] 특정 카테고리에 고도로 특화됨&quot;)
    else:
        print(&quot;  =&amp;gt; 결과: [오피스/총무형] 다양한 카테고리를 골고루 구매&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;[1] Market Basket Analysis (함께 구매하는 품목)
  - Apparel + Nest-USA: 1053번 동시 구매
  - Apparel + Office: 873번 동시 구매
  - Nest-USA + Office: 862번 동시 구매
  - Apparel + Drinkware: 699번 동시 구매
  - Drinkware + Nest-USA: 690번 동시 구매
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;[2] Category Concentration (구매 집중도 분석)
  - Cluster 1 평균 HHI: 0.493
  =&amp;gt; 결과: [오피스/총무형] 다양한 카테고리를 골고루 구매&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 구매하는 품목에 가장 많이 산 카테고리가 뭘까? 라고 묻는 질문에 Nest 라고 단순한 답을 주기 보다는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HHI를 활용하면 Nest를 제일 많이 사긴 하는데 다른것도 꽤 구매를 하네? 그럼 단순한 한명의 고객이 아닌 구매 대행사 거나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기업의 총무팀이라는 가설에 힘을 보태주게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 고객의 정체성(Identity)를 입체적으로 생각해 볼 수 있게하는 지표가 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 지표로 데이터 분석에서 집중도를 측정할 때 유용하게 사용할 수 있겠습니다.&lt;/p&gt;</description>
      <category>통계</category>
      <category>HHI</category>
      <category>데이터분석</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/145</guid>
      <comments>https://jangsoooo.tistory.com/145#entry145comment</comments>
      <pubDate>Thu, 1 Jan 2026 19:36:11 +0900</pubDate>
    </item>
    <item>
      <title>MinMaxScaler</title>
      <link>https://jangsoooo.tistory.com/144</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Interaction(상호작용 비율) 지표가 포함된 모델에서 K-Means 클러스터링을 수행하기 전에 적용하면 좋습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;MinMaxScaler
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;모든 피처(Feature)값을 0과 1사이로 압축하는 기법입니다.&lt;br /&gt;&amp;nbsp;X(sclaed) = ( X - X(min) ) / ( X(max) - X(min) )&lt;br /&gt;최솟값 (x min) 은 0이 되고 최댓값(x max)는 1이 됩니다.&lt;br /&gt;데이터의 상대적 분포는 유지하면서 오직 단위(Scale)만 통일합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;K-means에서 스케일링을 해야하는 이유
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;K-Means는 데이터&amp;nbsp; 포인트 사이의 유클리드 거리를 계산하여 군집을 나눕니다.(평균값)&lt;/li&gt;
&lt;li&gt;만약 매출은 수천만원인데 비율은 0~1 사이라면 매출을 더 중요한 변수로 착각하기 때문에 문제가 생깁니다. MinMaxSclaer를 통해 모든 변수를 0~1사이로 맞춰 모든 지표가 군집 형성에 동등한 영향력을 갖게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MinMaxScaler에는 치명적인 약점이 하나 있습니다. 바로 이상치(Outlier)에 취약하다는 점입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 99명의 고객이 100달러를 썼는데, 1명의 VIP가 1,000,000달러를 썼다면?&lt;/li&gt;
&lt;li&gt;MinMax 적용 시 99명의 데이터는 0.0001 근처에 다닥다닥 붙게 되고, 군집이 제대로 나뉘지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;주의사항: &quot;로그 변환&quot;이 선행되어야 하는 이유
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Log 변환 후 Scaling 순서가 중요합니다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot; data-path-to-node=&quot;20&quot;&gt;
&lt;li&gt;&lt;b data-path-to-node=&quot;20,0,0&quot; data-index-in-node=&quot;0&quot;&gt;Log 변환:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1,000,000처럼 거대한 숫자를 작게 쪼개서 이상치의 영향력을 줄입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-path-to-node=&quot;20,1,0&quot; data-index-in-node=&quot;0&quot;&gt;MinMaxScaler:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로그로 다듬어진 데이터의 범위를 0~1로 맞춥니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이는 K-Means 만이 해당되는 것이아닌 K-medoids를 쓸 때도 마찬가지입니다.&lt;/li&gt;
&lt;li&gt;다만 Outler를 방어하는데 K-medoids (중앙값)가 더 안정적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size23&quot;&gt;K-Medoids를 쓸 때의 추천 전략&lt;/h3&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;만약 K-Medoids를 선택하신다면, 아래의 흐름을 추천합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;Log 변환:&lt;/b&gt; 여전히 필요합니다. 데이터의 분포 자체를 예쁘게 만들어주기 때문입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,1,0&quot;&gt;MinMaxScaler:&lt;/b&gt; 반드시 해야 합니다. 변수 간 단위 차이를 없애기 위함입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,2,0&quot;&gt;Manhattan 거리 사용:&lt;/b&gt; K-Medoids는 보통 유클리드 거리보다 &lt;b data-index-in-node=&quot;41&quot; data-path-to-node=&quot;13,2,0&quot;&gt;맨해튼(Manhattan) 거리&lt;/b&gt;를 많이 씁니다. 맨해튼 거리는 이상치의 영향을 한 번 더 억제해 주는 효과가 있어, 이커머스 데이터 분석 시 궁합이 아주 좋습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 89px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;기준&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;K-Means&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;K-Medoids&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;데이터 크기&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;대용량 데이터에 유리(빠름)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;소-중규모 데이터에 적합 (느림)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;이상치 대응&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;매우 취약, 평균이 이상치에 끌려만&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;매우 강함, 실제 데이터 포인트만 중심이 됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;데이터 분포&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;구형(Spherical)분포일 때 베스트&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;분포의 모향에 덜 민감함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;언제 쓰나?&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;전체적인 흐름은 빠르게 파악할때&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;이상치가 많고 데이터의 무결성이 중요할 때&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>통계</category>
      <category>k-means</category>
      <category>MinMaxSclaer</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/144</guid>
      <comments>https://jangsoooo.tistory.com/144#entry144comment</comments>
      <pubDate>Wed, 24 Dec 2025 14:28:41 +0900</pubDate>
    </item>
    <item>
      <title>비즈니스 의사결정에 사용하는 수학적 원리</title>
      <link>https://jangsoooo.tistory.com/143</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 선형회귀(Linear) vs 이차회귀(Quadratic)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀 : y = Ax + b&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 식은 x 가 오를 때마다 y가 일정한 비율(A)으로 계속 증가하거나 감소한다고 가정합니다.&lt;/li&gt;
&lt;li&gt;다만 실제 세상에서는, 적당히 따뜻할 땐 좋지만, 너무 더우면 나가기 싫어지는 현상을 설명하지 못합니다 (변곡점)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이차회귀 : y = Ax^2 + Bx + C&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래서 이런 변곡점을 설명하기 위해 X의 제곱항을 추가한 다항 회귀식을 만듭니다.&lt;/li&gt;
&lt;li&gt;여기서 A는 그래프의 곡률(Curvature)을 결정하는 핵심 변수 입니다.&lt;/li&gt;
&lt;li&gt;A가 음수나 양수에 따라 이차함수의 그래프 모양이 달라집니다.&lt;/li&gt;
&lt;li&gt;A &amp;gt; 0&amp;nbsp; = 아래로 볼록한(U자) 모양&lt;/li&gt;
&lt;li&gt;A &amp;lt; 0 = 위로 볼록한(&amp;cap;자) 모양 : 특정 지점까지 증가하다가 정점을 찍고 내려오는 모양&lt;/li&gt;
&lt;li&gt;따라서 이차항의 계수(A)가 음수이면서 통계적으로 유의미(p &amp;lt; 0.05)하다는 결과가 나오면&lt;/li&gt;
&lt;li&gt;수학적으로 이 데이터는 위로 볼록한 포물선 형태를 띄며, 수요가 꺽이는 지점(peak)가 존재한다 라고 결론을 내릴 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 최적(peak)찾기 : 미분활용&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래서 어느 지점일때 가장 수요가 많을까? 라는 질문에 답하기 위해서는 미분 시 기울기가 0이 되는 지점을&amp;nbsp; 찾으면 됩니다.&lt;/li&gt;
&lt;li&gt;A &amp;lt; 0 이면, 최대값이 존재, A &amp;gt; 0 이면 최소값만 존재&lt;/li&gt;
&lt;li&gt;최대값(or 최소값)이 발생하는 x 좌표는 다음 꼭지점 공식으로 계산이 가능합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;x(peak) = - B / 2A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;피크의 y 좌표 계산
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;y(peak) = A(x peak)^2 + B(x peak) + C&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;y = -2x^2 + 4x +3&lt;/li&gt;
&lt;li&gt;A = -2, B = 4 , C = 3&lt;/li&gt;
&lt;li&gt;x peak = - (4/ 2 *-2) = 1&lt;/li&gt;
&lt;li&gt;y peak = -2(1)^2 + 4(1) + 3 = 5&lt;/li&gt;
&lt;li&gt;이 모델의 피크는 (1, 5) 지점에서 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 타겟 변수의 분포 분석 및 정규화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;: 우리가 예측하려는 정답이 어떻게 생겼는가? 를 확인하는 단계&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왜 이 작업을 하나요?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선형 회귀 모델(Linear Regression)은 기본적으로 오차(Residual)가 정규분포를 따른다는 가정을 바탕으로 설계되었습니다.&lt;/li&gt;
&lt;li&gt;만약 타겟 변수가 한쪽으로 심하게 치우져 있다면, 모델은 데이터가 많은 쪽에만 편향되어 학습하게 되고,&lt;/li&gt;
&lt;li&gt;높은 수요가 발생하는 피크 타임을 제대로 예측하지 못하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;무엇을 확인해야 하나요?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;왜도(Skewness) : 데이터 분포가 얼마나 비대칭인가를 나타냅니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;0에 가까우면 정규분포와 비슷합니다.&lt;/li&gt;
&lt;li&gt;양수(&amp;gt; 0)면 왼쪽으로 쏠린 형태, 즉 오른쪽으로 긴 꼬리 형태입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;첨도(Kurtosis) : 데이터 분포가 얼마나 뾰족한가를 나타냅니다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1766398942798&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import skew

# 데이터 로드
df = pd.read_csv('train.csv')

# 1. 시각화: 히스토그램과 커널 밀도 추정(KDE)
plt.figure(figsize=(12, 5))
sns.histplot(df['count'], kde=True)
plt.title(f&quot;Original Demand Distribution (Skewness: {skew(df['count']):.2f})&quot;)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JafwK/dJMcahpt0TO/K7dh9nbSSC8IN5x9FmSsO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JafwK/dJMcahpt0TO/K7dh9nbSSC8IN5x9FmSsO1/img.png&quot; data-alt=&quot;이런 차트가 나옵니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JafwK/dJMcahpt0TO/K7dh9nbSSC8IN5x9FmSsO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJafwK%2FdJMcahpt0TO%2FK7dh9nbSSC8IN5x9FmSsO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1061&quot; height=&quot;474&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런 차트가 나옵니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 로그 변환(Log Transformation)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위의 그래프를 보면 0 근처에 데이터가 몰려있고 오른쪽으로 긴 꼬리가 있죠 이를 해결하기 위해 로그 변환을 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;y' = log(1 + y) : 1을 더하는 이유는 count가 0인 경우 log(0)이 정의되지 않기 때문입니다.&lt;/li&gt;
&lt;li&gt;로그 변환을 사용하면 &lt;b&gt;&lt;b&gt;큰 값들 사이의 간격은 좁히고, 작은 값들 사이의 간격을 넓혀서 분포를 종 모양(정규분포)에 가깝게 만듭니다.&lt;/b&gt;&lt;/b&gt;
&lt;pre id=&quot;code_1766399331484&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 2. 로그 변환 적용
df['count_log'] = np.log1p(df['count'])

# 변환 후 시각화
plt.figure(figsize=(12, 5))
sns.histplot(df['count_log'], kde=True, color='green')
plt.title(f&quot;Log Transformed Distribution (Skewness: {skew(df['count_log']):.2f})&quot;)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ej2VSv/dJMcadHkY35/0t9MWp8lonatNjKkWffobK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ej2VSv/dJMcadHkY35/0t9MWp8lonatNjKkWffobK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ej2VSv/dJMcadHkY35/0t9MWp8lonatNjKkWffobK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fej2VSv%2FdJMcadHkY35%2F0t9MWp8lonatNjKkWffobK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1050&quot; height=&quot;473&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;로그 변환하는 이유
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;비대칭의 압축 :&lt;/b&gt;&lt;br /&gt;로그를 취하면 1000은 3, 10000 은 4 로 변환되기 때문에(상용로그 기준), 멀리 도망가 있던 극단치들을 중앙으로 강하게&lt;br /&gt;끌어당기는 효과가 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;곱셈을 덧셈으로:&lt;/b&gt;&lt;br /&gt;자연 현상이나 경제 데이터는 전년대비 &quot;몇&amp;nbsp; % 성장&quot;과 같은 곱셈 단위로 움직이는 경우가 많습니다. 로그는 이러한&lt;br /&gt;지수적 증가(Exponential)을 선형적 증가(Linear)로 바꿔 줍니다.&lt;br /&gt;원리 :&lt;br /&gt;log(A * B) = log(A) + log(B)&lt;br /&gt;이점 :&lt;br /&gt;- 복잡한 곱셈 연산을 다순한 덧셈 연산으로 바꿔준다. 변수들이 결합해 수요를 어떻게 변화시키는지 쉽게 계산가능&lt;br /&gt;- 선형 모델에서는 계수를 X 가 1단위 증가할 때 Y가 몇 단위 증가한다로 해석하지만 로그변환 시&lt;br /&gt;- 해석의 단위가 비율(%)로 바뀝니다.&lt;br /&gt;- 5대 라는 절대 수치 보다 5% 증가 라는 성장률 단위가 예산 책정이나 공급 계획 수립에 훨씬 직관적이고 유용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;등분산성 확보:&lt;br /&gt;&lt;/b&gt;수요량이 처질수록 그 변동 폭(오차)도 커지는 경향이 있는데, 로그 변환은 이 변동 폭을 일정하게 만들어 줍니다.&lt;br /&gt;이는 회귀 분석의 핵심 가정인 '등분산성'을 만족시키는데 도움을 줍니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;왜도(skewness)가 어느 정도여야 심각하다고 판단하나요?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통용되는 외도의 판단 기준(Thumb rule)&lt;br /&gt;1. -1 &amp;lt; 왜도 값 &amp;lt; +1 : 데이터 분포가 정규 분포에 가깝고 양호한 것&lt;br /&gt;2. -2 &amp;lt; 왜도 값 &amp;lt; +2 : 일반적으로 허용 가능한 수준&lt;br /&gt;3. -2 &amp;gt; 왜도 값 &amp;gt; + 2 : 분포가 심하게 비대칭(비정규)임을 시사합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 집단 간 차이 검정(Independent T-test)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 T-test를 하나요? (Statistical Reason)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 직관적으로 나오는 추측을 데이터의 평균값만 보고 결론을 내리면 위험합니다.&lt;br /&gt;- 표본의 크기와 데이터의 변동성(분산)을 고려했을 때, 그 차이가 오차 범위를 벗어날 만큼 통계적으로 유의미 한지 확인하기 위해&lt;br /&gt;- T-test를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설 설정 (Hypothesis)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;귀무가설(H0) : 평일의 평균 대여량과 주말의 평균 대여량은 같다. (차이가 없다.)&lt;/li&gt;
&lt;li&gt;대립가설(H1) : 평일의 평균 대여량과 주말의 평균 대여량은 다르다. (차이가 있다.)&lt;br /&gt;
&lt;pre id=&quot;code_1766402815743&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 1. 데이터 준비 (1단계에서 만든 로그 변환 데이터 사용 권장)
workingday_demand = df[df['workingday'] == 1]['count']
weekend_demand = df[df['workingday'] == 0]['count']

# 2. 시각화: 두 집단의 평균 차이 확인
plt.figure(figsize=(8, 6))
sns.barplot(x='workingday', y='count', data=df)
plt.title('Average Demand: Working Day (1) vs Weekend/Holiday (0)')
plt.xticks([0, 1], ['Weekend/Holiday', 'Working Day'])
plt.show()

# 3. T-test 수행 (등분산 가정은 False로 설정하여 더 보수적으로 검정 - Welch's T-test)
t_stat, p_val = stats.ttest_ind(workingday_demand, weekend_demand, equal_var=False)

print(f&quot;--- T-test Result ---&quot;)
print(f&quot;T-statistic: {t_stat:.4f}&quot;)
print(f&quot;P-value: {p_val:.4e}&quot;)

# 4. 결과 해석
if p_val &amp;lt; 0.05:
    print(&quot;\n결론: P-value가 0.05보다 작으므로 귀무가설을 기각합니다.&quot;)
    print(&quot;즉, 평일과 주말의 대여량은 통계적으로 유의미한 차이가 있습니다.&quot;)
else:
    print(&quot;\n결론: P-value가 0.05보다 크므로 귀무가설을 채택합니다.&quot;)
    print(&quot;즉, 평일과 주말의 대여량 차이는 통계적으로 유의미하지 않습니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DQJmy/dJMcagRDba4/KWIWFjfttupLHFk6XiAbQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DQJmy/dJMcagRDba4/KWIWFjfttupLHFk6XiAbQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DQJmy/dJMcagRDba4/KWIWFjfttupLHFk6XiAbQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDQJmy%2FdJMcagRDba4%2FKWIWFjfttupLHFk6XiAbQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;810&quot; height=&quot;665&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;T-statistic : 이 값이 클수록 두 집단의 평균 차이가 크다는 뜻입니다.&lt;/li&gt;
&lt;li&gt;P-value : 이 차이가 우현이 일어날 확률 입니다&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t-test는 전체 평균을 비교하기 때문에 이런 오류가 생기진 않았는지 주말과 평일을 분리하는 작업을 거치도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설 재설정 : 평일과 주말의 전체 평균 대여량은 통계적으로 차이가 없으니 시간대에 따른 수요의 패턴은 통계적으로 유의미하게 다를 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBkRut/dJMcaa4WWyN/Qty9lKCdMbvrYZtLNfTkF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBkRut/dJMcaa4WWyN/Qty9lKCdMbvrYZtLNfTkF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBkRut/dJMcaa4WWyN/Qty9lKCdMbvrYZtLNfTkF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBkRut%2FdJMcaa4WWyN%2FQty9lKCdMbvrYZtLNfTkF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1081&quot; height=&quot;560&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평일(1, 주황색)이 쌍봉형 분포이고 주말(0, 파란색)이 완만한 단봉형 분포입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평일의 출퇴근 시간과 주말의 낮 시간 집중 수요가 합쳐져 하루 전체의 평균이 비슷해져 평균의 함정에 빠지게되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 다중 회귀 분석(Multiple Regression Analysis)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 온도가 높으면 수요가 많다는 결과는 위험할 수 있습니다. 온도가 높은 시간이 &lt;br /&gt;마침 퇴근 시간이라 수요가 많았던게 아닐까요?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통제 : 시간대와 근무일의 영향을 통계적으로 고정(통제)한 상태에서 순수하게 온도 만의 영향력을 변별할 수 있습니다.&lt;/li&gt;
&lt;li&gt;상대적 중요도 파악 : 변수 중 어떤 녀석이 상대적으로 중요한지 파악 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1766410543906&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import statsmodels.api as sm
from sklearn.preprocessing import StandardScaler

# 1. 분석에 사용할 변수 선택
# 앞서 만든 'hour' 변수가 포함되어 있어야 합니다.
features = ['temp', 'hour', 'workingday']
X = df[features].copy()
y = df['count']

# 2. 표준화 (Standardization)
# 변수들의 단위를 맞춰서 계수(Beta)의 크기로 영향력을 직접 비교하기 위함입니다.
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_scaled = pd.DataFrame(X_scaled, columns=features)

# 3. 상수항(절편) 추가 및 모델 적합
X_scaled = sm.add_constant(X_scaled)
multi_model = sm.OLS(y, X_scaled).fit()

# 4. 결과 출력
print(multi_model.summary())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NCUwN/dJMcafkS8Zd/QvpkcUo0e6litfU8O7ui8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NCUwN/dJMcafkS8Zd/QvpkcUo0e6litfU8O7ui8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NCUwN/dJMcafkS8Zd/QvpkcUo0e6litfU8O7ui8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNCUwN%2FdJMcafkS8Zd%2FQvpkcUo0e6litfU8O7ui8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;680&quot; height=&quot;464&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[A] 모델의 전체적인 건강 상태 (Goodness of Fit)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Dep. Variable (Dependent Variable) : 종속 변수&lt;/li&gt;
&lt;li&gt;R-squard (R^2) : 모델의 설명력&lt;/li&gt;
&lt;li&gt;Adj.R-squared (수정된 결정계수) :&lt;br /&gt;변수가 많아지면 R^2 값이 억지로 올라가는데 이걸 보정한 값&lt;br /&gt;보통 이 값을 더 선호&lt;br /&gt;이 모델이 전체 수요 변동의 몇 %를 설명하는가 (0.3 이상이면 유의미)&lt;/li&gt;
&lt;li&gt;F-statistic &amp;amp; Prob (F-statistic) : 모델 전체가 통계적으로 유의미 한지 묻는 시험&lt;br /&gt;- Prob &amp;lt; 0.05 = 이 모델은 쓸모가 있다.&lt;br /&gt;- 예약 데이터를 얼마나 정확하게 복제 해냈는지를 보여줌&lt;/li&gt;
&lt;li&gt;Log-Likelihood (로그 우도)&lt;br /&gt;- 모델이 현재의 데이터를 얼마나 잘 나타내는지에 대한 확률 값의 로그치&lt;br /&gt;- 값이 클수록 (0에 가까울 수록) 모델의 적합도가 좋다는 뜻, 변수 추가하면 보통 올라감&lt;/li&gt;
&lt;li&gt;AIC (Akaike Information Criterion)&lt;br /&gt;- 적합도와 단순함사이의 균형을 잡는 지표 ( AIC = -2 * log(L) + 2k)&lt;br /&gt;- 낮을수록 좋습니다. 변수를 너무 많이 넣어 모델이 불필요하게 복잡해지면 패널티를 부여&lt;br /&gt;- 모델이 얼마나 가성비 있는지를 판단&amp;nbsp;&lt;/li&gt;
&lt;li&gt;BIC (Bayesian Information Criterion)&lt;br /&gt;- AIC 와 비슷하지만 변수 개수에 대해 AIC 보다 더 엄격한 패널티를 줍니다.&lt;br /&gt;- 낮을 수록 좋고 데이터 양이 많을 수록 BIC를 더 신뢰하기도 합니다.&lt;br /&gt;- 변수를 10개써서 예측력을 1% 올리느냐, 핵심 변수 3개만 쓰는게 나은가? 를 판단하게 해줌&lt;/li&gt;
&lt;li&gt;DF Resiudals&lt;br /&gt;- 잔차의 자유도 : 전체 관측치 수(No. Observation) - 모델이 사용한 변수 개수(Df Model) - 1(절편)&lt;br /&gt;- 가지고 있는 데이터 중 모델을 만드는 데 소비하고 남은 여유분, 값이 클 수록 통계적 검정(t-test, F-test)결과가 &lt;br /&gt;&amp;nbsp; 안정적이고 신뢰할 수 있다.&lt;/li&gt;
&lt;li&gt;Covariance Type&lt;br /&gt;- 회귀 계수의 오차 (분산 - 공선성 매트릭스)를 계산하는 방시&lt;br /&gt;- nonorobust (비강건성) : 가장 기본적인 방식, 오차의 분산이 모든 데이터에서 일정하다는 등분산성 가정을 전제&lt;br /&gt;&amp;nbsp; 만약 데이터에 이질성이 크다면 robust 옵션으로 바꿔서 분석하기도 합니다.&lt;br /&gt;- nonorobust 사용 시 분석은 오차들이 평등하게 퍼져 있다고 가정하고 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[B] 변수별 성적표
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;P-value : 0.05 보다 작은 변수들은 유의미한 영향&lt;/li&gt;
&lt;li&gt;Coefficient (계수, coef) : 기울기(계수), 독립변수가 1단위 변할 때 종속변수가 얼마나 변하는지 보여줍니다.&lt;br /&gt;표준화된 계수, 절댓값이 가장 큰 변수가 수요에 가장 큰 영향을 미친다.&lt;/li&gt;
&lt;li&gt;std err(standard Error) : 계수의 오차 범위, 작을수록 계수가 정확하게 추정되었다는 뜻&lt;/li&gt;
&lt;li&gt;t-value&amp;nbsp; : coef / std err 값 : 클 수록 해당 변수의 영향력이 확실하다는 증거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[C] 잔차 분석 - 모델의 약점 진단
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Omnibus / Jarque-Bera (JB) :&lt;br /&gt;잔차가 정규분포를 따르는지 확인. 값이 너무 크거나 0에 가까우면 잡지 못한 패턴이 있다는 증거&lt;/li&gt;
&lt;li&gt;Skew(왜도) : 잔차 분포의 비 대칭도&lt;/li&gt;
&lt;li&gt;Kurtosis(첨도) : 분포의 뾰족한 정도 : 3에 가까울 수록 정규분포와 흡사합니다.&lt;/li&gt;
&lt;li&gt;Durbin-Watson : 잔차들 사이에 상관관계(자기상관)이 있는지 봅니다. 2에 가까울 수록 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OLS 모델은 상반된 패턴을 하나의 직선으로 설명하기 때문에 workingday 가 상쇄되어 영향이 없다고 오류를 범했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R^2 값을 보니 모델이 수요 변동의 27.6%만 설명하고 있다는 뜻이고 Skew(왜도) : 1.297 이기 때문에 심각하게 치우친 데이터 라는 뜻입니다. count 대신 count에 로그변환을 해 다시 돌려보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2CBXb/dJMcaiWaG4J/5VnCpsnPgjF09gM2fa14kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2CBXb/dJMcaiWaG4J/5VnCpsnPgjF09gM2fa14kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2CBXb/dJMcaiWaG4J/5VnCpsnPgjF09gM2fa14kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2CBXb%2FdJMcaiWaG4J%2F5VnCpsnPgjF09gM2fa14kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;473&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;R^2 : 0.276 -&amp;gt; 0.414&lt;br /&gt;- 모델의 설명력이 약 50% 개선되었습니다.&lt;/li&gt;
&lt;li&gt;Skew : 1.297 -&amp;gt; -0.322&lt;br /&gt;- 절대값이 0.5 미만이면 거의 대칭임으로 통계적으로 매우 안정한 상태입니다.&lt;/li&gt;
&lt;li&gt;workingday 의 P 값이 0.968 -&amp;gt; 0 의미있는 값으로 변환됐습니다.&lt;/li&gt;
&lt;li&gt;workingday의 coef 값이 음수로 바뀌었습니다. 이는 시간과 기온이 동일하다면, 주말(0)의 평균적인 수요 베이스가 평일(1)보다 약간 더 높음을 시사합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 상호작용 항(Interaction Term) 을 추가한 모델 고도화&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 개 이상의 독립변수가 서로 영향을 주고받으며 반응변수에 미치는 효과가 단순 합산 이상으로 달라지는 현상을 모델링하기 위해 추가하는 항&lt;/li&gt;
&lt;li&gt;두 변수를 곱한 형태(X1 * X2)로 나타나면 한 변수의 영향력이 다른 변수의 수준에 따라 변하는 조절효과를 검증하는 핵심 요소&lt;/li&gt;
&lt;li&gt;지금 데이터를 기준으로 Hour * Workingday 를 기준으로 새로운 회귀식을 만듭니다&lt;/li&gt;
&lt;li&gt;count_log = b0 + b1 * temp + b2 * hour + b3 * workingday + b4 * (hour * workingday)&lt;/li&gt;
&lt;li&gt;이전 모델이 hour의 영향력이 workingday에 상관없이 항상 일정하다고 가정했을 때 평일 8시 수요가 치솟고 주말은 낮에 치솟았습니다.&lt;/li&gt;
&lt;li&gt;b4의 역할 : 근무일 여부에 따라 시간대의 영향력이 얼마나 변하는가를 측정해, 이 값이 유의미 하게 나오면 두 변수가 서로&lt;br /&gt;시너지나 상쇄 효과를 내고있다는 통계 근거를 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1766424026050&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import statsmodels.api as sm
from sklearn.preprocessing import StandardScaler

# 1. 상호작용 항 생성 (시간 * 근무일)
# workingday가 1인 경우에만 hour 값이 살아남고, 0인 주말에는 0이 됩니다.
df['hour_interaction'] = df['hour'] * df['workingday'].astype(int)

# 2. 분석 변수 설정 (기존 변수 + 상호작용 항)
features = ['temp', 'hour', 'workingday', 'hour_interaction']
X = df[features].copy()
y = np.log1p(df['count']) # 1단계에서 배운 로그 변환 적용

# 3. 표준화 (비교를 위해 필수)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_scaled = pd.DataFrame(X_scaled, columns=features)
X_scaled = sm.add_constant(X_scaled)

# 4. 모델 적합 및 결과 출력
interaction_model = sm.OLS(y, X_scaled).fit()
print(interaction_model.summary())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w8twk/dJMcai9HXqw/S3mkKkzJ6Rx02qGGDlRHP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w8twk/dJMcai9HXqw/S3mkKkzJ6Rx02qGGDlRHP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w8twk/dJMcai9HXqw/S3mkKkzJ6Rx02qGGDlRHP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw8twk%2FdJMcai9HXqw%2FS3mkKkzJ6Rx02qGGDlRHP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;656&quot; height=&quot;433&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;R^2 : 0.414 -&amp;gt; 0.421 : 변수를 단 하나 추가했을 뿐인데 모델의 설명력이 향상되었습니다.&lt;/li&gt;
&lt;li&gt;AIC/BIC 감소 : 모델이 복잡해졌음에도 불구하고 정보 손실 지표인 AIC, BIC가 모두 낮아졌습니다.&lt;/li&gt;
&lt;li&gt;통계적 유의성 : P &amp;gt;|t| 값이 0으로 매우 유의합니다. 평일과 주말의 시간대별 수요 패턴 차이는 우연이 아닌 인과관계가 있습니다.&lt;/li&gt;
&lt;li&gt;hour (0.5849) : 주말 (=0)에 시간이 1단위 증가할 때 로그 대여량이 늘어나는 속도&lt;/li&gt;
&lt;li&gt;workingday(-0.2228) : 시간이 0일 때(심야), 평일이 주말보다 기본 수요 베이스가 낮음을 의미&lt;/li&gt;
&lt;li&gt;hour_interaction(0.2718) : 평일이 되면 시간이 흐름에 따른 수요 증가 속도가 주말보다 약 0.27 만큼 가팔라짐&lt;/li&gt;
&lt;li&gt;해석 : 평일은 주말보다 시작은 낮게 출발하지만, 시간이 지날수록 수요가 훨씬 더 급격하게 치솟는 패턴을 보인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한정된 자원을 어디에 우선 투입할지 결정하는 기준이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시간대별 탄력적 배치 : 평일의 시간당 수요 증가율 (0.58 + 0.27 = 0.85)이 주말 (0.58)보다 약 46% 높습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기온 (temp) 기반 가중치 적용 : 예상 수요에 기온 가중치를 곱하여 공급량을 상향 조정해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. workingday의 음수 계수는 역설적으로 주말 심야 수요가 평일보다 높음을 시사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. 날씨 변수와 더미 변수 적용&lt;/h4&gt;
&lt;pre id=&quot;code_1766425876905&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import statsmodels.api as sm
from sklearn.preprocessing import StandardScaler

# 1. 날씨 변수를 더미 변수로 변환 (One-Hot Encoding)
# drop_first=True를 통해 '맑음(1)'을 기준점으로 설정합니다.
weather_dummies = pd.get_dummies(df['weather'], prefix='weather', drop_first=True)

# 2. 분석 데이터 결합
# 기존 변수들 + 상호작용 항 + 날씨 더미 변수
df_final = pd.concat([df, weather_dummies], axis=1)

features = ['temp', 'hour', 'workingday', 'hour_interaction', 'weather_2', 'weather_3', 'weather_4']
X = df_final[features].copy()
y = np.log1p(df_final['count']) # 로그 변환 유지

# 3. 표준화 및 모델 적합
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_scaled = pd.DataFrame(X_scaled, columns=features)
X_scaled = sm.add_constant(X_scaled)

weather_model = sm.OLS(y, X_scaled).fit()
print(weather_model.summary())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/weFpw/dJMcahCZ23o/8vZYVeSp13qTE4wGmuC5s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/weFpw/dJMcahCZ23o/8vZYVeSp13qTE4wGmuC5s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/weFpw/dJMcahCZ23o/8vZYVeSp13qTE4wGmuC5s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FweFpw%2FdJMcahCZ23o%2F8vZYVeSp13qTE4wGmuC5s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;492&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;날씨 변수를 추가하여 R^2 값이 0.421 -&amp;gt; 0.432로 증가했습니다. AIC 값도 220정도 감소해 모델의 효율성이 좋아졌음을 알 수 있습니다.&lt;/li&gt;
&lt;li&gt;weather_3 (-0.1521)&lt;br /&gt;: 맑은 날(기준)대비, 눈이나 비가 오는날(weather_3)은 수요가 통계적으로 매우 유의미하게 (p = 0) 감소합니다.&lt;br /&gt;- 로그 스케일에서 -0.15라는 수치는 대략 전체의 15%를 증발 시킬 수 있는 강한 하방 압력&lt;/li&gt;
&lt;li&gt;weather_2, weather_4&lt;br /&gt;: p-value가 0.661, 0.724로 매우 높습니다.&amp;nbsp;&lt;br /&gt;- 흐린 날(weather_2) 은 맑은 날과 수요 차이가 거의 없음을 의미하며, 악천후(weather_4)는 데이터셋 내에 표본 수가 너무 적어 통계적 유의성을 확보하지 못한 것으로 추정&lt;/li&gt;
&lt;li&gt;해석 : &lt;br /&gt;- weather3 = 비 예보가 있을 경우 수요가 약 15% 감소할 것, 이때 세차 및 경정비 주기를 우천 시간대로 집중 배치하여 맑은 날의 가동률을 올리는 정비 스케줄링이 필요합니다.&lt;br /&gt;- 다만 날씨가 변해도 hour_interaction (0.2581)의 유의성은 유지됩니다. = 비가와도 출근은 해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. 모델의 약점 진단 : 잔차분석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델에서 현재 Durbin-Watson 지수가 0.502로 여전히 낮아 이는 잔차들 사이에 어떤 시간적 흐름이 남아 있다는 신호&lt;/p&gt;
&lt;pre id=&quot;code_1766426565399&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import matplotlib.pyplot as plt
import seaborn as sns

# 1. 잔차(Residuals) 계산
df['predicted'] = weather_model.predict(X_scaled)
df['residuals'] = y - df['predicted']

# 2. 잔차 시각화 (시간 흐름에 따른 잔차)
plt.figure(figsize=(15, 6))
plt.subplot(1, 2, 1)
sns.scatterplot(x=df['predicted'], y=df['residuals'], alpha=0.3)
plt.axhline(0, color='red', linestyle='--')
plt.title('Residuals vs Predicted')

plt.subplot(1, 2, 2)
sns.histplot(df['residuals'], kde=True)
plt.title('Residual Distribution')
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6fWFo/dJMcagD7gNs/9tLJ2hlBOErTBKV1tVPaM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6fWFo/dJMcagD7gNs/9tLJ2hlBOErTBKV1tVPaM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6fWFo/dJMcagD7gNs/9tLJ2hlBOErTBKV1tVPaM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6fWFo%2FdJMcagD7gNs%2F9tLJ2hlBOErTBKV1tVPaM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1138&quot; height=&quot;490&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 두 그래프는 모델의 신뢰성을 최종적으로 검증하는 척도입니다.&lt;/li&gt;
&lt;li&gt;잔차분포(Residual Distribution) : 우측 히스토그램을 보면 0을 중심으로 아주 예쁜 종 모양(Bell-curve) 모양을 띄고 있어 모델이 예측한 오차가 특정방향으로 쏠리지 않고 정규분포를 따른다는 것으로, 로그 변환이 매우 효과적이었다는 것을 증명&lt;/li&gt;
&lt;li&gt;예측값 vs 잔차 : 좌측 산점도에서 데이터가 0을 중심으로 위아래로 넓게 퍼져있습니다.&lt;br /&gt;다만 좌측 하단에 대각선 형태의 패턴이 보이는데 이는 카운트 데이터(정수형)의 특성이 반영된 것&lt;/li&gt;
&lt;li&gt;다만 Durbin-Watsion 지수가 낮고, 산점도에서 보이는 미세한 패턴은 아직 시간적 흐름을 다 반영하지 못했음을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. 추천하는 비즈니스 중심 구성 순서&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;요약 및 핵심 결론(Executive Summary)&lt;br /&gt;: 결론을 보여주고, 통합 시각화 대시보드 배치&lt;/li&gt;
&lt;li&gt;비즈니스 가설(Business Hypotheses)&lt;br /&gt;: 왜 이 분석을 하는가? 에 대한 답&lt;/li&gt;
&lt;li&gt;Visual Storytelling - EDA&lt;br /&gt;: 코드는 간결하게, 그래프가 주인공&lt;/li&gt;
&lt;li&gt;통계적 신뢰도&lt;/li&gt;
&lt;li&gt;액션 플랜&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>통계</category>
      <category>데이터분석</category>
      <category>회귀분석</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/143</guid>
      <comments>https://jangsoooo.tistory.com/143#entry143comment</comments>
      <pubDate>Tue, 23 Dec 2025 12:03:34 +0900</pubDate>
    </item>
    <item>
      <title>협업을 위한 Github 사용법</title>
      <link>https://jangsoooo.tistory.com/142</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;가장 중요한 황금률 : 브랜치에서 직접 작업하지 않기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한가지 중요한 규칙이 있다면 main 브랜치(or master)는 언제나 모두가 믿고 사용할 수 있는, 안정적인 '최종버전'이어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 프로젝트 복제하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀의 원격 저장소(Github)에 있는 프로젝트를 내 컴퓨터에 그대로 복제해오는 과정입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1760423074241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone [GitHub 저장소 주소]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2. 내 작업 공간 만들기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main 브랜치를 건들지 않기 위해, 새로운 기능을 만들거나 버그를 수정할 나먼의 branch를 만듭니다.&lt;/p&gt;
&lt;pre id=&quot;code_1760423121758&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 'feature/login' 이라는 이름의 새 브랜치를 만들고, 그 브랜치로 이동합니다.
git checkout -b feature/login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브랜치 이름은 보통 feature/기능이름 또는 bugfix/버그이름처럼 짓습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;3. 최신 내용 동기화 하기 (git pull)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내가 작업하는 동안 다른 팀원이 main 브랜치에 새로운 내용을 업데이트 했을 수 있기 떄문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최신 내용을 먼저 컴퓨터로 가져와야 충돌을 막을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760423193479&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 원격(origin)의 main 브랜치에 있는 최신 내용을 가져옵니다.
git pull origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;4. 내 작업물 저장하기 (git add &amp;amp; commit)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내 브랜치(feature/login)에서 열심히 코드를 작성하고 수정합니다. 마무리 되면 변경된 내용을 내 개인 저장 공간(로컬 저장소)에 기록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760423255621&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 변경된 모든 파일을 저장 목록에 추가
git add .

# 2. &quot;로그인 기능 구현&quot;이라는 메시지와 함께 저장
git commit -m &quot;feat: 로그인 기능 구현&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;5. 내 작업물 공유하기 (git push)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;로컬에 저장된 내 브랜치를 다른 팀원들도 볼 수 있게 원격 저장소(GitHub)에 업로드 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760423304714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 원격(origin)에 내 브랜치(feature/login)를 올립니다.
git push origin feature/login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;6. 코드 리뷰 요청하기 (Pull Request)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내 작업이 완료 되었으니, 내가 만든 브런치를 main 브런치에 합쳐달라고 공식적으로 요청하는 과정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 과정은 터미널이 아닌 Github 웹사이트에서 이뤄집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;과정:&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;GitHub 저장소에 접속하면, 방금 push한 브랜치에 대해 &lt;b&gt;&quot;Compare &amp;amp; pull request&quot;&lt;/b&gt; 버튼이 보입니다.&lt;/li&gt;
&lt;li&gt;버튼을 클릭하여 어떤 작업을 했는지 상세히 설명하고 Pull Request(PR)를 생성합니다.&lt;/li&gt;
&lt;li&gt;다른 팀원들이 코드를 보고 의견을 남기거나(코드 리뷰), 승인(Approve)을 해줍니다.&lt;/li&gt;
&lt;li&gt;모두가 동의하면, &lt;b&gt;'Merge pull request'&lt;/b&gt; 버튼을 눌러 내가 만든 feature/login 브랜치의 내용이 드디어 main 브랜치에 안전하게 합쳐집니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제 상황: 충돌(Conflict) 해결하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;언제 발생하나요?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;내가 A라는 파일의 3번 라인을 수정했는데, 다른 팀원도 똑같이 A 파일의 3번 라인을 수정해서 먼저 main에 합쳐버렸을 때 발생합니다. Git은 누구의 수정이 맞는지 스스로 판단할 수 없어 우리에게 알려줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;어떻게 해결하나요?&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;충돌이 발생한 파일을 열면, &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD, =====, &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 같은 이상한 기호들이 보입니다.&lt;/li&gt;
&lt;li&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; 와 ===== 사이는 &lt;b&gt;내 코드&lt;/b&gt;, ===== 와 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 사이는 &lt;b&gt;팀원의 코드&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li&gt;팀원과 상의하여 어떤 코드를 남길지 결정하고, 나머지 코드와 특수 기호들을 &lt;b&gt;모두 직접 손으로 지웁니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;수정이 완료되면, 다시 git add와 git commit으로 충돌을 해결했다는 사실을 저장하면 끝입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>github</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/142</guid>
      <comments>https://jangsoooo.tistory.com/142#entry142comment</comments>
      <pubDate>Tue, 14 Oct 2025 15:30:58 +0900</pubDate>
    </item>
    <item>
      <title>메시지 큐와 stomp.py</title>
      <link>https://jangsoooo.tistory.com/141</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;분석과 주문의 역할을 분리하기 위해 메시지 큐(Message Queue) 기반의 아키텍처를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 메시지 큐(Message Queue)란?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지 큐는 주문서 레일과 같습니다.&lt;/li&gt;
&lt;li&gt;분석 프로그램 : 시장 분석 중 매수 신호를 발견하면 이 신호를 주문서(메시지)에 적어 주문서 레일 (Active MQ)에 올린 후 분석을 지속합니다.&lt;/li&gt;
&lt;li&gt;주문 프로그램 : 주문서 레일에서 대기하다가 주문서가 올라오면 증권사 API에게 전달합니다.&lt;/li&gt;
&lt;li&gt;장점
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;비동기 처리 (Asynchronous)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 온라인 쇼핑몰에서 '주문하기' 버튼을 누르면, &quot;주문 접수 완료!&quot; 메시지가 바로 뜹니다. 실제 재고 처리, 카드 승인, 배송 준비 등 시간이 걸리는 작업들은 메시지 큐에 차곡차곡 쌓여 백그라운드에서 순차적으로 처리됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결합도 감소 (Decoupling)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 주문을 처리하는 '소비자' 프로그램을 더 빠른 신기술로 업그레이드해도, 주문을 생성하는 '생산자' 프로그램 코드는 단 한 줄도 수정할 필요가 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;확장성 (Scalability)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 블랙 프라이데이 세일 기간에 주문이 폭주하면, '홀 매니저(소비자)'를 1명에서 10명으로 늘려 주문서를 동시에 처리하게 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;안정성 및 데이터 보존 (Reliability)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;소비자 프로그램에 갑자기 문제가 생겨 멈추더라도, 처리되지 않은 메시지들은 큐 안에 안전하게 보관됩니다. 프로그램이 복구된 후, 큐에 남아있던 메시지부터 다시 처리를 시작할 수 있어 데이터가 유실될 위험이 적습니다.&lt;/li&gt;
&lt;li&gt;만약 주문이 갑자기 폭주한다면, '소비자' 프로그램의 개수만 늘려서 큐에 쌓인 메시지를 더 빠르게 함께 처리하면 됩니다. 반대로 일이 없으면 소비자 수를 줄여 자원을 효율적으로 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;생산자와 소비자는 서로의 존재를 전혀 알 필요가 없습니다. 오직 '메시지 큐'의 주소만 알면 됩니다. 이 덕분에 한쪽 시스템을 수정하거나 교체해도 다른 쪽에 전혀 영향을 주지 않습니다.&lt;/li&gt;
&lt;li&gt;생산자는 소비자가 메시지를 처리할 때까지 기다릴 필요가 없습니다. 메시지를 큐에 던져놓고 바로 자신의 다음 일을 할 수 있습니다. 이 덕분에 전체 시스템의 응답 속도가 빨라집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. ActiveMQ와 stomp.py: 서버와 통역사&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ActiveMQ 위에서 설명한 '주문서 레일'의 역할을 하는 실제 서버 프로그램 입니다.&lt;/li&gt;
&lt;li&gt;stomp.py: Python이 ActiveMQ 서버와 대화할 수 있도록 도와주는 라이브러리 입니다.&lt;br /&gt;ActiveMQ는 'STOMP'라는 프로토콜로 대화하는데, stomp.py는 Python 코드를 이 STOMP 언어로 번역해 ActiveMQ에 전달하고, 반대 역할도 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 간단 실습&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;mq_sender.py (메시지 생산자):&lt;/p&gt;
&lt;pre id=&quot;code_1760154337468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import stomp
import time

# 1. ActiveMQ 서버에 연결 ('localhost'의 61613번 포트)
conn = stomp.Connection([('localhost', 61613)])
conn.connect('admin', 'admin', wait=True)

# 2. 'trading_signals'라는 이름의 레일에 메시지를 보냄
conn.send(body='AAPL 매수 신호 발생!', destination='/queue/trading_signals')
print(&quot;메시지를 성공적으로 보냈습니다.&quot;)

# 3. 연결 종료
conn.disconnect()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;mq_receiver.py (메시지 소비자)&lt;/p&gt;
&lt;pre id=&quot;code_1760154382844&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import stomp
import time

# '리스너'는 새로운 메시지가 도착했을 때 실행할 행동을 정의합니다.
class MyListener(stomp.ConnectionListener):
    def on_message(self, frame):
        print(f'메시지 수신: {frame.body}')

# 1. ActiveMQ 서버에 연결
conn = stomp.Connection([('localhost', 61613)])
conn.set_listener('', MyListener())
conn.connect('admin', 'admin', wait=True)

# 2. 'trading_signals'라는 이름의 레일을 구독(지켜보기 시작)
conn.subscribe(destination='/queue/trading_signals', id=1, ack='auto')
print(&quot;메시지를 기다리는 중입니다...&quot;)

# 3. 10초 동안 메시지를 기다리다가 종료
time.sleep(10)
conn.disconnect()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 방향성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;분석 로직 고도화:&lt;/b&gt; mq_sender.py는 앞으로 &lt;b&gt;RSI, MACD 등 다양한 보조지표를 계산&lt;/b&gt;하여, 복잡한 조건에 따라 '매수/매도' 신호를 생성하고, 그 신호를 메시지로 보내는 역할을 맡게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주문 실행기 개발:&lt;/b&gt; mq_receiver.py는 &lt;b&gt;실제 증권사 API와 연동&lt;/b&gt;되어, 메시지를 받는 즉시 지정된 수량만큼 자동으로 주문을 넣는 역할을 수행할 것입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분산 환경 구축:&lt;/b&gt; 다음 단계로, 이 두 프로그램을 서로 다른 컴퓨터(또-는 가상머신)에 배포하여, 실제 네트워크 환경에서도 안정적으로 메시지를 주고받는지 테스트하며 시스템을 확장해나갈 계획입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>activemq</category>
      <category>MessageQueue</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/141</guid>
      <comments>https://jangsoooo.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 11 Oct 2025 14:57:45 +0900</pubDate>
    </item>
    <item>
      <title>Multilndex</title>
      <link>https://jangsoooo.tistory.com/140</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;yfinance로 수집한 주가 데이터를 MySQL에 저장하고 다시 불러오는 과정에서, Unknown column 'Date', Unknown column 'Open' 이라는 에러에 대해 제가 해결했던 방법을 기록합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pandas의 &lt;b&gt;'MultiIndex(다중 인덱스)'&lt;/b&gt; 구조를 이해하고 해결하는 과정을 담은 기록입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yf.download()로 데이터를 수집하고, to_sql()로 DB에 저장한 뒤, read_sql()로 다시 데이터를 읽어오는 간단한 코드였습니다. 하지만 SQL 쿼리 실행 단계에서 계속해서 특정 컬럼을 찾을 수 없다는 ProgrammingError가 발생했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1760011666851&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 문제가 발생했던 SQL 쿼리
sql_query = &quot;SELECT Open, High, Low, Close FROM ohlcv ORDER BY Date&quot; 
# -&amp;gt; ProgrammingError: Unknown column 'Open' in 'field list'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pandas의 &lt;b&gt;MultiIndex(또는 Multi-level Index)&lt;/b&gt; 입니다. 여러 종목의 데이터를 한 번에 다룰 때, 어떤 데이터가 어떤 종목에 속하는지 구분하기 위해 이름표를 이중으로 붙이는 기능이죠. 예를 들어 ('Open', 'AAPL')은 'AAPL 종목의 시가'를, ('Open', 'GOOG')은 'GOOG 종목의 시가'를 의미합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;해결책: get_level_values()로 이름표 단일화하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인을 알았으니 해결은 간단합니다. 데이터베이스에 저장하기 전에, 단순한 단일 이름표로 바꿔주면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1760011997248&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# yfinance로 데이터를 가져오면 MultiIndex 컬럼이 생성됨
df = yf.download(['AAPL', 'GOOG'], start='2025-01-01')

# 이 부분이 핵심!
# 이중 이름표 중 위에 있는 진짜 이름('Open', 'High'...)만 떼어내서
# 컬럼 이름으로 다시 설정합니다.
df.columns = df.columns.get_level_values(0)

print(df.head())
# 이제 컬럼이 'Open', 'High', 'Low', 'Close' 등으로 깔끔하게 정리됩니다.&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;추가학습내용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 에러를 계기로 함께 공부하면 좋은 Pandas의 개념들을 정리해 보았습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MultiIndex(다중 인덱스) 구조의 이해:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 인덱스는 행(row)에도, 열(column)에도 적용될 수 있습니다. 데이터를 그룹별로 계층적으로 분석할 때 매우 강력한 기능입니다. 공식 문서나 잘 정리된 튜토리얼을 통해 다중 인덱스를 직접 만들고, 특정 계층의 데이터를 선택하는 방법을 연습해보는 것이 좋습니다.
&lt;pre id=&quot;code_1760012279145&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import pandas as pd

data = {'Date': ['2025-10-08', '2025-10-08', '2025-10-09', '2025-10-09'],
        'Ticker': ['AAPL', 'GOOG', 'AAPL', 'GOOG'],
        'Close': [170, 140, 172, 141],
        'Volume': [5000, 3000, 5500, 3200]}
long_df = pd.DataFrame(data)

print(long_df)&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;아래와 같은 긴 형태의 주가 데이터가 있다고 가정하면 아래와 같은 출력이 나옵니다.&lt;br /&gt;
&lt;pre id=&quot;code_1760012291787&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;         Date Ticker  Close  Volume
0  2025-10-08   AAPL    170    5000
1  2025-10-08   GOOG    140    3000
2  2025-10-09   AAPL    172    5500
3  2025-10-09   GOOG    141    3200&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;stack() &amp;amp; unstack():&lt;/b&gt;&lt;/b&gt;
&lt;pre id=&quot;code_1760013164331&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;                   Close  Volume
Date       Ticker               
2025-10-08 AAPL       170    5000
           GOOG       140    3000
2025-10-09 AAPL       172    5500
           GOOG       141    3200&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stack()은 컬럼을 인덱스로 '쌓는'(=아래로) 기능이고
&lt;pre id=&quot;code_1760013788081&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# unstacked_df를 다시 stack
stacked_df = unstacked_df.stack(level='Ticker')
print(stacked_df)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1760013802647&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;                   Close  Volume
Date       Ticker               
2025-10-08 AAPL       170    5000
           GOOG       140    3000
2025-10-09 AAPL       172    5500
           GOOG       141    3200&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;stack은 unstack의 정반대 작업입니다. 컬럼의 일부를 다시 행 인덱스로 '쌓아서' 데이터를 더 길게 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;unstack()은 인덱스를 컬럼으로 '펼치는'(= 옆으로) 기능입니다.
&lt;pre id=&quot;code_1760013214473&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Ticker 레벨의 인덱스를 컬럼으로 unstack
unstacked_df = df_multi_index.unstack(level='Ticker')
print(unstacked_df)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1760013237349&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;             Close         Volume       
Ticker        AAPL   GOOG    AAPL   GOOG
Date                                    
2025-10-08     170    140    5000   3000
2025-10-09     172    141    5500   3200&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;보시는 것처럼 unstack은 행 인덱스의 일부였던 Ticker를 컬럼 레벨로 이동시켜, 우리가 yfinance에서 처음 봤던 것과 같은 MultiIndex 컬럼 구조를 만듭니다. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;stack() &amp;amp; unstack()을 사용하면 넓은 형태(wide-format)의 데이터를 긴 형태(long-format)로 쉽게 바꿀 수 있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pivot_table(): (= 넓게 펼치기)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엑셀의 피벗 테이블과 동일한 기능입니다. 주어진 데이터로부터 원하는 행, 열, 값을 지정하여 데이터를 재구조화하고 요약 통계를 볼 수 있습니다.&lt;/li&gt;
&lt;li&gt;pivot_table의 결과물은 MultiIndex 구조를 갖는 경우가 많아, 위 개념들과 함께 익히면 시너지가 좋습니다.&lt;/li&gt;
&lt;li&gt;index : 새로운 표의 '행'이 될 칼럼(Data)&lt;/li&gt;
&lt;li&gt;columns : 새로운 표의 '열'이 될 칼럼(Ticker)
&lt;pre id=&quot;code_1760012398961&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Date를 행으로, Ticker를 열로, Close를 값으로 하는 피벗 테이블 생성
wide_df = long_df.pivot_table(index='Date', columns='Ticker', values='Close')

print(wide_df)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;pivot_table(index='Date', columns='Ticker', values='Close')
&lt;pre id=&quot;code_1760014429403&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Ticker      AAPL   GOOG
Date                   
2025-10-08   170    140
2025-10-09   172    141&lt;/code&gt;&lt;/pre&gt;
이 결과물은 'Date'를 행 인덱스로, 'Ticker'를 열 인덱스로 갖는 &lt;b&gt;MultiIndex 컬럼 구조&lt;/b&gt;와 유사한 형태가 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메서드 체이닝 (Method Chaining):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;메서드 체이닝&lt;/b&gt;이란, 여러 개의 데이터 처리/조작 함수(메서드)를 &lt;b&gt;점(.)으로 계속 연결&lt;/b&gt;하여 한 줄의 코드로 표현하는 기법입니다.&lt;/li&gt;
&lt;li&gt;이점
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;가독성:&lt;/b&gt; 데이터가 어떤 순서로 변환되는지 위에서 아래로, 왼쪽에서 오른쪽으로 자연스럽게 읽힙니다.&lt;/li&gt;
&lt;li&gt;&quot;A하고, &lt;b&gt;그리고(.)&lt;/b&gt; B하고, &lt;b&gt;그리고(.)&lt;/b&gt; C한다&quot; 처럼 이야기 흐름이 만들어집니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;효율성:&lt;/b&gt; df1, df2, df3 와 같이 불필요한 중간 과정 변수를 만들지 않아 코드가 간결해지고 메모리를 효율적으로 사용할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
예제: 메서드 체이닝 사용 전 vs. 후
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;결측치가 있는 행을 제거한다.&lt;/li&gt;
&lt;li&gt;'Volume'이 4000 이상인 데이터만 필터링한다.&lt;/li&gt;
&lt;li&gt;'Ticker' 열을 기준으로 그룹화하여 'Close' 가격의 평균을 계산한다.&lt;/li&gt;
&lt;li&gt;결과를 내림차순으로 정렬한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;사용 전
&lt;pre id=&quot;code_1760014801471&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 예제 데이터
data = {'Date': ['2025-10-08', '2025-10-08', '2025-10-09', '2025-10-09', '2025-10-10'],
        'Ticker': ['AAPL', 'GOOG', 'AAPL', 'GOOG', 'AAPL'],
        'Close': [170, 140, 172, 141, None], # 결측치 포함
        'Volume': [5000, 3000, 5500, 3200, 6000]}
df = pd.DataFrame(data)

# 1단계: 결측치 제거
df_no_na = df.dropna()

# 2단계: Volume 필터링
df_filtered = df_no_na[df_no_na['Volume'] &amp;gt;= 4000]

# 3단계: 그룹별 평균 계산
df_grouped = df_filtered.groupby('Ticker')['Close'].mean()

# 4단계: 정렬
final_result = df_grouped.sort_values(ascending=False)

print(final_result)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용 후
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 모든 단계를 하나의 흐름으로 연결합니다. 괄호 ()를 사용하면 여러 줄에 걸쳐 가독성 좋게 작성할 수 있습니다.
&lt;pre id=&quot;code_1760014831908&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 예제 데이터 (동일)
df = pd.DataFrame(data)

# 모든 단계를 하나의 체인으로 연결
final_result = (df.dropna()
                  .query(&quot;Volume &amp;gt;= 4000&quot;)  # query 메서드를 사용하면 필터링이 더 깔끔해집니다.
                  .groupby('Ticker')['Close']
                  .mean()
                  .sort_values(ascending=False)
               )

print(final_result)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터분석</category>
      <category>KeyError</category>
      <category>pandas</category>
      <category>yfinance</category>
      <category>전처리</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/140</guid>
      <comments>https://jangsoooo.tistory.com/140#entry140comment</comments>
      <pubDate>Thu, 9 Oct 2025 22:01:43 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 셀 이미지 업로드</title>
      <link>https://jangsoooo.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 최근 구글 클라우드 shell 환경에서 개발하다가 재밌는 Docker 기능을 접해서 글을 적습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 직접 경험하며 느낀 이 기능의 매력적인 장점들을 공유해봅니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 환경 설정이 필요 없는 즉각적인 개발&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 장점은 바로 '즉시성'입니다. 클라우드 셸은 웹 브라우저만 있으면 접속할 수 있는 리눅스 기반 환경으로, Docker, Git 등 개발에 필요한 모든 도구가 이미 완벽하게 설치되어 있습니다. 로컬 PC에 복잡한 개발 환경을 따로 구축할 필요가 없죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 저는 로컬에서 Dockerfile을 작성한 뒤, 클라우드 셸에 접속해 바로 &lt;b&gt;docker build&lt;/b&gt; 명령어를 실행했습니다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjmpeXEociPAxUAAAAAHQAAAAAQiw4&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;# cloud-shell-app 이라는 이름의 Docker 이미지 빌드
docker build -t cloud-shell-app .
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 gcr.io (Google Container Registry)에 푸시할 태그를 지정하고, 곧바로 docker push를 통해 이미지를 업로드할 수 있었습니다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjmpeXEociPAxUAAAAAHQAAAAAQjA4&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;# gcr.io/내-프로젝트-ID/cloud-shell-app:v1.0 태그 지정
docker tag cloud-shell-app gcr.io/[PROJECT-ID]/cloud-shell-app:v1.0

# 컨테이너 레지스트리로 푸시
docker push gcr.io/[PROJECT-ID]/cloud-shell-app:v1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 환경 설정 과정 없이, 단 몇 분 만에 이미지를 빌드하고 레지스트리에 저장할 수 있어 편리했습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 여기서 말하는 이미지는 .png 같은 진짜 이미지가 아니라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서의 이미지는 소프트웨어 개발 분야에서 사용하는 &lt;b&gt;Docker 이미지&lt;/b&gt;를 의미합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker 이미지란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker 이미지&lt;/b&gt;는 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 독립적이고 실행 가능한 소프트웨어 패키지입니다. 여기에는 다음 내용이 포함됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;애플리케이션 소스 코드&lt;/li&gt;
&lt;li&gt;운영 체제 (리눅스 배포판 같은 경량 OS)&lt;/li&gt;
&lt;li&gt;런타임 (예: Node.js, Python)&lt;/li&gt;
&lt;li&gt;라이브러리 및 종속성&lt;/li&gt;
&lt;li&gt;환경 변수, 설정 파일 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 말해, **애플리케이션을 실행하기 위한 청사진이라고 생각하면 이해하기 쉽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 이미지를 사용해 컨테이너라는 실행 환경을 만들고, 이 컨테이너 위에서 애플리케이션이 구동됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &quot;이미지 업로드&quot;라고 하면, 로컬에서 빌드한 이 Docker 이미지를 Google Cloud의 Container Registry 또는 Artifact Registry라는 중앙 저장소에 저장하는 과정을 의미합니다. 이렇게 저장된 이미지는 다른 팀원이나 다른 클라우드 서비스&lt;br /&gt;(예: Cloud Run, GKE)에서 쉽게 가져와 사용할 수 있게 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 어디서든 동일한 환경에서 작업&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 셸은 장소에 구애받지 않고 일관된 개발 환경을 제공합니다. 제 PC의 성능이나 저장 공간에 상관없이, 인터넷만 연결되면 언제든 동일한 환경에서 작업할 수 있습니다. 이는 팀원들과 협업할 때도 빛을 발합니다. &quot;내 PC에서는 잘되는데...&quot;라는 변명 대신, 모두가 표준화된 환경에서 작업하며 개발 효율을 높일 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 좋은 네트워크 성능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 셸은 클라우드 환경 내에 존재합니다. 따라서 이미지를 업로드하는 과정도 로컬 PC에서 클라우드로 데이터를 전송하는 것이 아니라, 클라우드 내에서 이루어집니다. 이 덕분에 대용량 이미지를 업로드할 때도 네트워크 지연 없이 매우 빠르게 작업이 완료됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고문서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Artifact Registry 문서&lt;/b&gt;:&lt;a href=&quot;https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757340583200&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;이미지 내보내기 및 가져오기 &amp;nbsp;|&amp;nbsp; Artifact Registry documentation &amp;nbsp;|&amp;nbsp; Google Cloud&quot; data-og-description=&quot;이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 이미지 내보내기 및 가져오기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지&quot; data-og-host=&quot;cloud.google.com&quot; data-og-source-url=&quot;https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ko&quot; data-og-url=&quot;https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/czkNZA/hyZGWKN5wi/9Wr0YYFqsOlrcOT4ccTP50/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/czkNZA/hyZGWKN5wi/9Wr0YYFqsOlrcOT4ccTP50/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;이미지 내보내기 및 가져오기 &amp;nbsp;|&amp;nbsp; Artifact Registry documentation &amp;nbsp;|&amp;nbsp; Google Cloud&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 이미지 내보내기 및 가져오기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cloud.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; Google Cloud 공식 튜토리얼 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cloud.google.com/build/docs/build-push-docker-image?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cloud.google.com/build/docs/build-push-docker-image?hl=ko&lt;/a&gt;&lt;/p&gt;</description>
      <category>shell</category>
      <category>클라우드</category>
      <author>장수우</author>
      <guid isPermaLink="true">https://jangsoooo.tistory.com/139</guid>
      <comments>https://jangsoooo.tistory.com/139#entry139comment</comments>
      <pubDate>Mon, 8 Sep 2025 23:11:56 +0900</pubDate>
    </item>
  </channel>
</rss>