<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>끄적끄적</title>
    <link>https://daondakara.tistory.com/</link>
    <description>야구를 좋아하는 다온이의 취뽀일지</description>
    <language>ko</language>
    <pubDate>Tue, 21 Jul 2026 14:18:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>daondakara</managingEditor>
    <image>
      <title>끄적끄적</title>
      <url>https://tistory1.daumcdn.net/tistory/8306188/attach/99481dc384a544f686487a12055b768b</url>
      <link>https://daondakara.tistory.com</link>
    </image>
    <item>
      <title>머신러닝 ④ - Linear Regression(선형회귀)</title>
      <link>https://daondakara.tistory.com/25</link>
      <description>&lt;h1&gt;Linear Regression(선형회귀)&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 가장 잘 대표하는 &lt;b&gt;직선(선형식)&lt;/b&gt; 을 찾아서, 보지 않은 값을 &lt;b&gt;예측&lt;/b&gt; 하는 것 &lt;b&gt;선형 회귀&lt;/b&gt;는 데이터의 &lt;b&gt;패턴을 직선으로 표현&lt;/b&gt;하는 것&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;최적의 회귀모델이란?&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제값(관측값)과 모델이 예측한 값의 오차(차이) 가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가장 작아지도록 만드는 직선&lt;/b&gt;을 찾는 것&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉, &amp;ldquo;최적의 회귀모델&amp;rdquo;이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSE가 가장 작아지는 w0, w1 값을 찾는 직선&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단순 회귀 (Simple Regression)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립변수가 하나일 때의 회귀모델 하나의 x값으로 y값을 예측할 때 사용&lt;/p&gt;
&lt;/blockquote&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;b&gt;독립변수(x)&lt;/b&gt; : 일한 시간&lt;/li&gt;
&lt;li&gt;&lt;b&gt;종속변수(y)&lt;/b&gt; : 받은 급여&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 관계를 1개의 직선으로 표현하는 것이 단순 회귀&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다중 회귀 (Multiple Regression)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립변수(입력)가 여러 개일 때 사용하는 회귀모델&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;집값(y)&amp;rdquo;은 하나의 요인만으로 결정되지 않고&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;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&gt;CRIM&lt;/td&gt;
&lt;td&gt;1인당 범죄율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RM&lt;/td&gt;
&lt;td&gt;방의 개수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AGE&lt;/td&gt;
&lt;td&gt;1940년 이전에 지어진 주택 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TAX&lt;/td&gt;
&lt;td&gt;세금 수준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LSTAT&lt;/td&gt;
&lt;td&gt;저소득층 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;hellip;&lt;/td&gt;
&lt;td&gt;&amp;hellip;&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;b&gt;단순 회귀&lt;/b&gt;는 변수 1개로 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 회귀&lt;/b&gt;는 여러 변수를 동시에 고려해서 더 현실적인 예측을 함&lt;/li&gt;
&lt;li&gt;모델 학습은 결국 &amp;ldquo;오차가 최소가 되는 w(가중치)와 b(절편)를 찾는 과정&amp;rdquo;이다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다중 회귀의 회귀 계수&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;회귀식이란?&lt;/h3&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;982&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/StNsM/dJMcadtDol8/Mjs9CQ2C7eaQWADnqkc4ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/StNsM/dJMcadtDol8/Mjs9CQ2C7eaQWADnqkc4ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/StNsM/dJMcadtDol8/Mjs9CQ2C7eaQWADnqkc4ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FStNsM%2FdJMcadtDol8%2FMjs9CQ2C7eaQWADnqkc4ak%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;704&quot; height=&quot;45&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;63&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;h2 data-ke-size=&quot;size26&quot;&gt;각 항의 의미&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;Temp&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;온도&lt;/td&gt;
&lt;td&gt;+1.52&lt;/td&gt;
&lt;td&gt;온도가 1도 올라갈 때, 오존량이 &lt;b&gt;1.52만큼 증가 &amp;rarr; 긍정적 영향&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Wind&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;바람세기&lt;/td&gt;
&lt;td&gt;-3.57&lt;/td&gt;
&lt;td&gt;바람이 1 증가할 때, 오존량이 &lt;b&gt;3.57만큼 감소 &amp;rarr; 부정적 영향&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Solar.R&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;일사량&lt;/td&gt;
&lt;td&gt;+0.07&lt;/td&gt;
&lt;td&gt;햇빛(일사량)이 1 증가할 때, 오존량이 &lt;b&gt;0.07만큼 증가&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;절편(intercept)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;-53.37&lt;/td&gt;
&lt;td&gt;모든 변수가 0일 때의 기준 오존값&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해석 방법&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;온도가 높고, 바람이 약하고, 햇빛이 강할수록 오존 농도가 증가한다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 각 변수(Temp, Wind, Solar.R)는 오존량(Ozone)에 영향을 주는 요인이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회귀계수(coef_) 값이 클수록 영향력이 크다&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;pre class=&quot;stylus&quot;&gt;&lt;code&gt;회귀계수 확인

print(list(x_train))
print(model.coef_)
print(model.intercept_)
&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;coef_은 각 변수의 가중치(영향력)&lt;/li&gt;
&lt;li&gt;intercept_은 절편을 의미하고,이들을 이용해 위의 회귀식을 구성할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&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;ldquo;그 변수가 1만큼 변할 때 결과(y)가 얼마나 변하는지&amp;rdquo;를 뜻함&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;양수 &amp;rarr; 결과를 증가시키는 변수&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;음수 &amp;rarr; 결과를 감소시키는 변수&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>KT 에이블스쿨 8기/머신러닝</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/25</guid>
      <comments>https://daondakara.tistory.com/25#entry25comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:47:51 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 ③ - 분류 모델 성능 평가</title>
      <link>https://daondakara.tistory.com/24</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;분류(Classification) 모델&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;이 데이터가 어떤 종류(범주) 인가를 구분하는 모델&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉:&lt;/b&gt; 결과값이 &lt;b&gt;글자나 라벨(label)&lt;/b&gt; 형태 데이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예: 합격/불합격, 고양이/강아지, 스팸/일반메일 등)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  예시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;20시간&lt;/td&gt;
&lt;td&gt;합격&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10시간&lt;/td&gt;
&lt;td&gt;불합격&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;/li&gt;
&lt;li&gt;&amp;ldquo;15시간 공부한 학생은 합격일까 불합격일까?&amp;rdquo; 를 맞추는 문제   &lt;b&gt;분류 문제&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;대표 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Logistic Regression (이름은 회귀지만, 분류용!)&lt;/li&gt;
&lt;li&gt;Decision Tree Classifier&lt;/li&gt;
&lt;li&gt;Random Forest Classifier&lt;/li&gt;
&lt;li&gt;K-Nearest Neighbors (KNN)&lt;/li&gt;
&lt;li&gt;XGBoost Classifier&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;성능 평가 지표&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정확도 (Accuracy) &amp;rarr; 얼마나 많이 맞췄는가&lt;/li&gt;
&lt;li&gt;정밀도 (Precision) &amp;rarr; 맞다고 한 것 중 진짜로 맞은 비율&lt;/li&gt;
&lt;li&gt;재현율 (Recall) &amp;rarr; 실제 정답 중 모델이 잘 찾아낸 비율&lt;/li&gt;
&lt;li&gt;F1-score, Confusion Matrix 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;분류 모델 평가란?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 모델은 정답(실제값) 과 예측값 이 같은지 다른지를 비교해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;얼마나 정확하게 맞췄는가&amp;rdquo;로 성능을 평가&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; 핵심 아이디어&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 모델은 어떤 데이터가 &lt;b&gt;0인지(부정)&lt;/b&gt;, &lt;b&gt;1인지(긍정)&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;스팸메일(1)인가 아닌가(0)&lt;/li&gt;
&lt;li&gt;환자가 병이 있다(1) 없다(0)&lt;/li&gt;
&lt;li&gt;시험 합격(1) 불합격(0)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;분류 모델 평가 지표(Accuracy, Precision, Recall)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EvfHz/dJMcah3ULvP/D4WahBL8nnPN0o6RHZyk8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EvfHz/dJMcah3ULvP/D4WahBL8nnPN0o6RHZyk8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EvfHz/dJMcah3ULvP/D4WahBL8nnPN0o6RHZyk8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEvfHz%2FdJMcah3ULvP%2FD4WahBL8nnPN0o6RHZyk8k%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;338&quot; height=&quot;238&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;b&gt;TP (True Positive)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;실제 1을 1로 예측함 (정답)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;b&gt;TN (True Negative)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;실제 0을 0으로 예측함 (정답)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;b&gt;FN (False Negative)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;실제 1을 0으로 예측함 (놓침)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;b&gt;FP (False Positive)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;실제 0을 1로 예측함 (잘못 탐지)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Confusion Matrix 혼동행렬 = cross tab&lt;/h3&gt;
&lt;pre class=&quot;capnproto&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import confusion_matrix

# 성능 평가
confusion_matrix(y_test, y_pred)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(1) 정확도 (Accuracy) 또는 정분류율&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체 중에 모델이 정답을 맞춘 비율&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOmPm6/dJMcaiodnzw/c6msEz4QCLFJpRmcud0j2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOmPm6/dJMcaiodnzw/c6msEz4QCLFJpRmcud0j2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOmPm6/dJMcaiodnzw/c6msEz4QCLFJpRmcud0j2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOmPm6%2FdJMcaiodnzw%2Fc6msEz4QCLFJpRmcud0j2k%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;275&quot; height=&quot;77&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;capnproto&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import accuracy_score

# 성능 평가
accuracy_score(y_test, y_pred)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;(2) 정밀도 (Precision)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 &lt;b&gt;&amp;lsquo;1&amp;rsquo;이라고 예측한 것 중에 실제로 1인 비율&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nhvd3/dJMcaiodnBh/fx0mt354jospkqrSsUGkD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nhvd3/dJMcaiodnBh/fx0mt354jospkqrSsUGkD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nhvd3/dJMcaiodnBh/fx0mt354jospkqrSsUGkD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNhvd3%2FdJMcaiodnBh%2Ffx0mt354jospkqrSsUGkD1%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;279&quot; height=&quot;85&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import precision_score

# 성능 평가
precision_score(y_test, y_pred, average=None)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;(3) 재현율 (Recall) 또는 민감도&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 &lt;b&gt;1인 것 중에서 모델이 1이라고 맞춘 비율&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rBVhe/dJMcahbL3uw/rkDho65du6vYILxjQJKTOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rBVhe/dJMcahbL3uw/rkDho65du6vYILxjQJKTOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rBVhe/dJMcahbL3uw/rkDho65du6vYILxjQJKTOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrBVhe%2FdJMcahbL3uw%2FrkDho65du6vYILxjQJKTOk%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;260&quot; height=&quot;89&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import recall_score

# 성능 평가
recall_score(y_test, y_pred, average=None)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;(4) F-1 Score&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정밀도(Precision)&lt;/b&gt; 와 &lt;b&gt;재현율(Recall)&lt;/b&gt; 을 한 번에 고려해서 평가하는 지표를 설명&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 얼마나 정확하게 예측했는지(Precision) 와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마나 &lt;b&gt;놓치지 않고 잘 찾아냈는지(Recall)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지를 &lt;b&gt;균형 있게 잘하고 있는가&lt;/b&gt;를 나타내는 점수&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;정밀도(Precision)&lt;/b&gt; 와 &lt;b&gt;재현율(Recall)&lt;/b&gt; 의 &lt;b&gt;조화평균(Harmonic Mean)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조화평균(Harmonic Mean)&lt;/b&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-origin-width=&quot;531&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd6slp/dJMcaiuWxFQ/kQNe5dBv9jYAVejOHlwATK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd6slp/dJMcaiuWxFQ/kQNe5dBv9jYAVejOHlwATK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd6slp/dJMcaiuWxFQ/kQNe5dBv9jYAVejOHlwATK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd6slp%2FdJMcaiuWxFQ%2FkQNe5dBv9jYAVejOHlwATK%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;341&quot; height=&quot;70&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;Precision&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 &quot;맞다고 한 건 다 맞긴 하지만&quot; 거의 다 놓침 (Recall 낮음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cavBlt/dJMcafkI8TH/cJS2bLrmNcWZl7TIxoG4D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cavBlt/dJMcafkI8TH/cJS2bLrmNcWZl7TIxoG4D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cavBlt/dJMcafkI8TH/cJS2bLrmNcWZl7TIxoG4D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcavBlt%2FdJMcafkI8TH%2FcJS2bLrmNcWZl7TIxoG4D1%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;310&quot; height=&quot;64&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F1이 낮다 &amp;rarr; &lt;b&gt;균형이 안 맞다&lt;/b&gt;는 뜻&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;Precision&lt;/td&gt;
&lt;td&gt;0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall&lt;/td&gt;
&lt;td&gt;0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;459&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l3hLA/dJMcaa4MUE7/Oo0Y4krOIxOgHIAS32tMo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l3hLA/dJMcaa4MUE7/Oo0Y4krOIxOgHIAS32tMo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l3hLA/dJMcaa4MUE7/Oo0Y4krOIxOgHIAS32tMo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl3hLA%2FdJMcaa4MUE7%2FOo0Y4krOIxOgHIAS32tMo1%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;294&quot; height=&quot;68&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;106&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;F1도 높음 &amp;rarr; &lt;b&gt;균형이 잘 맞는 좋은 모델&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;한 줄 요약&lt;/h2&gt;
&lt;p&gt;지표 의미 F1-Score와 관계&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&gt;&lt;b&gt;Precision&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;맞다고 한 것 중 진짜 맞은 비율&amp;rdquo;&lt;/td&gt;
&lt;td&gt;너무 높고 Recall 낮으면 불균형 ⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Recall&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;진짜 맞는 것 중 맞게 예측한 비율&amp;rdquo;&lt;/td&gt;
&lt;td&gt;너무 높고 Precision 낮으면 불균형 ⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;F1-Score&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;두 성능의 균형&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;둘 다 적당히 높을 때 최고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;언제 F1-Score를 쓰냐면&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ 정답(1)이 적은 불균형 데이터일 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ Precision과 Recall 둘 다 중요할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예: 스팸메일 분류, 질병 진단, 이상 탐지 등&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F1-Score는 &amp;ldquo;&lt;b&gt;정확히 맞춘 비율(Precision)&lt;/b&gt;&amp;rdquo;과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;&lt;b&gt;놓치지 않은 비율(Recall)&lt;/b&gt;&amp;rdquo;을 &lt;b&gt;균형 있게 평가하는 점수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;값이 1에 가까울수록 &amp;rarr; 완벽한 분류 모델!&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import f1_score

# 성능 평가
f1_score(y_test, y_pred, average=None)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/24</guid>
      <comments>https://daondakara.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:46:50 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 ② - 회귀 모델 성능 평가</title>
      <link>https://daondakara.tistory.com/23</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;회귀(Regression) 모델&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;이 데이터가 얼마인지(숫자값) 예측하는 모델&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉:&lt;/b&gt; 결과값이 &lt;b&gt;숫자형(연속형)&lt;/b&gt; 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예: 집값, 점수, 온도, 판매량 등)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  예시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;20시간&lt;/td&gt;
&lt;td&gt;90점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10시간&lt;/td&gt;
&lt;td&gt;70점&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;/li&gt;
&lt;li&gt;&amp;ldquo;15시간 공부한 학생은 몇 점일까?&amp;rdquo; 를 예측하는 문제   &lt;b&gt;회귀 문제&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  대표 알고리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Linear Regression (선형 회귀)&lt;/li&gt;
&lt;li&gt;Decision Tree Regressor&lt;/li&gt;
&lt;li&gt;Random Forest Regressor&lt;/li&gt;
&lt;li&gt;K-Nearest Regressor&lt;/li&gt;
&lt;li&gt;XGBoost Regressor&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  성능 평가 지표&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MAE (평균 절대 오차)&lt;/li&gt;
&lt;li&gt;MSE (평균 제곱 오차)&lt;/li&gt;
&lt;li&gt;RMSE (제곱근 평균 제곱 오차)&lt;/li&gt;
&lt;li&gt;R&amp;sup2; (결정계수)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;회귀 모델 평가란?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 예측한 값(ŷ) 과 실제 값(y) 의 차이, 즉 오차(error) 를 계산해서&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;ldquo;오차들의 평균&amp;rdquo;을 구하는 과정&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; 핵심 아이디어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회귀 문제에서는 &lt;b&gt;정답이 숫자&lt;/b&gt;로 되어 있음&lt;/li&gt;
&lt;li&gt;(예: 키, 집값, 점수, 온도 등)&lt;/li&gt;
&lt;li&gt;예측한 숫자와 실제 숫자는 완전히 같을 수 없어요 &amp;rarr; &lt;b&gt;항상 차이(오차)&lt;/b&gt; 가 생긴다&lt;/li&gt;
&lt;li&gt;그래서 &amp;ldquo;오차가 얼마나 작은가&amp;rdquo;로 모델의 성능을 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  성가 평가 지표 (자주 쓰는 방법)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;MAE (Mean Absolute Error)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;오차의 절댓값 평균 &amp;rarr; 예측이 실제와 얼마나 떨어져 있는지&lt;/td&gt;
&lt;td&gt;&lt;b&gt;작을수록 좋음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;MSE (Mean Squared Error)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;오차를 제곱해서 평균 &amp;rarr; 큰 오차에 더 큰 패널티&lt;/td&gt;
&lt;td&gt;&lt;b&gt;작을수록 좋음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;RMSE (Root Mean Squared Error)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MSE의 제곱근 &amp;rarr; 실제 단위와 같아 이해 쉬움&lt;/td&gt;
&lt;td&gt;&lt;b&gt;작을수록 좋음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;R&amp;sup2; (결정계수)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;예측이 실제 데이터를 얼마나 잘 설명하는가 (0~1)&lt;/td&gt;
&lt;td&gt;&lt;b&gt;1에 가까울수록 좋음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 값(y) 예측 값(ŷ) 오차y-ŷ&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&gt;10&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;+2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;-1&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;b&gt;MAE&lt;/b&gt; = (2 + 1 + 1) / 3 = &lt;b&gt;1.33&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MSE&lt;/b&gt; = (4 + 1 + 1) / 3 = &lt;b&gt;2.0&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RMSE&lt;/b&gt; = &amp;radic;2.0 = &lt;b&gt;1.41&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  핵심 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;오차 계열(MAE, MSE, RMSE)&lt;/b&gt; &amp;rarr; 작을수록 모델이 실제값에 더 가깝다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결정계수(R&amp;sup2;)&lt;/b&gt; &amp;rarr; 클수록 모델이 전체 데이터를 더 잘 설명한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결정계수 (R-squared)&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 실제 데이터를 얼마나 잘 설명하고 있는지를 나타내는 수치&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;값의 범위: &lt;b&gt;0 ~ 1 (가끔은 음수도 나올 수 있음)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1에 가까울수록 &amp;rarr; 모델이 데이터를 잘 설명함&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;0에 가까울수록 &amp;rarr; 모델이 거의 설명하지 못함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  직관적으로 이해하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상황 설명 R&amp;sup2; 값&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&gt;&lt;b&gt;모델이 완벽하게 예측함&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;예측값 = 실제값 &amp;rarr; 오차 0&lt;/td&gt;
&lt;td&gt;&lt;b&gt;R&amp;sup2; = 1.0&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;모델이 아무것도 못 맞춤&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;예측이 평균 수준으로만 나옴&lt;/td&gt;
&lt;td&gt;&lt;b&gt;R&amp;sup2; = 0&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;모델이 오히려 더 나쁨&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;평균보다 더 엉뚱하게 예측함&lt;/td&gt;
&lt;td&gt;&lt;b&gt;R&amp;sup2; &amp;lt; 0&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) MAE(Mean Absolute Error)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import mean_absolute_error

# 성능 평가
print('* MAE:', mean_absolute_error(y_test, y_pred))
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) MSE(Mean Squared Error)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import mean_squared_error

# 성능 평가
print('* MSE:', mean_squared_error(y_test, y_pred))
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) RMSE(Root Mean Squared Error)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import mean_squared_error

# 성능 평가
print('* RMSE:', np.sqrt(mean_squared_error(y_test, y_pred)))
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) MAPE(Mean Absolute Percentage Error)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import mean_absolute_percentage_error

# 성능 평가
print('* MAPE:', mean_absolute_percentage_error(y_test, y_pred))
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5) R2-Score&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.metrics import r2_score

# 성능 평가
print('* R-2:', r2_score(y_test, y_pred))
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;근데 어떨 때 어떤 식을 쓰는거지 ?&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;회귀(숫자 예측) 문제일 때&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;일반적인 회귀 문제&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MAE, MSE, RMSE&lt;/td&gt;
&lt;td&gt;오차가 얼마나 작은지 확인하기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;큰 오차가 특히 중요할 때&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MSE or RMSE&lt;/td&gt;
&lt;td&gt;제곱을 하기 때문에 큰 오차에 더 큰 패널티 줌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;해석을 직관적으로 하고 싶을 때&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MAE&lt;/td&gt;
&lt;td&gt;&amp;ldquo;평균적으로 예측이 실제값에서 이 정도 차이 난다&amp;rdquo; 라고 바로 해석 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전체 설명력을 보고 싶을 때&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;R&amp;sup2;&lt;/td&gt;
&lt;td&gt;모델이 데이터를 얼마나 잘 설명하는지(설명력) 보여줌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다온 궁금증&lt;/b&gt; 어쨋든 예제로 볼 때 수치로 나오는데 R2 스코어의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명력을 어디서 알 수 있는거지???&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그런데 모델이 데이터를 얼마나 잘 설명하느냐는?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 점수(y)가 얼마나 그 선(예측값 ŷ)에 가깝게 붙어 있냐로 판단&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 모든 점이 선 위에 정확히 있다면 &amp;rarr; 완벽히 설명 (R&amp;sup2; = 1)&lt;/li&gt;
&lt;li&gt;점들이 선에서 멀리 떨어져 있다면 &amp;rarr; 설명력이 낮음 (R&amp;sup2; = 0에 가까움)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;산점도를 그렸을 때&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(1) 모델이 데이터를 잘 설명할 때&lt;/h3&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;/li&gt;
&lt;li&gt;오차가 작음&lt;/li&gt;
&lt;li&gt;R&amp;sup2; &amp;asymp; &lt;b&gt;1.0 (100%)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 모델이 &amp;ldquo;공부시간과 점수의 관계&amp;rdquo;를 잘 설명했다고 말함&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;199&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cysVjv/dJMcabJo7fn/8bcEFC951adNg1Cvl8Kk1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cysVjv/dJMcabJo7fn/8bcEFC951adNg1Cvl8Kk1K/img.png&quot; data-alt=&quot;공부시간 &amp;amp;rarr;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cysVjv/dJMcabJo7fn/8bcEFC951adNg1Cvl8Kk1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcysVjv%2FdJMcabJo7fn%2F8bcEFC951adNg1Cvl8Kk1K%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;150&quot; height=&quot;139&quot; data-origin-width=&quot;199&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공부시간 &amp;rarr;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(2) 모델이 데이터를 못 설명할 때&lt;/h3&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;/li&gt;
&lt;li&gt;R&amp;sup2; &amp;asymp; &lt;b&gt;0&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 모델이 &amp;ldquo;공부시간과 점수의 관계를 거의 설명 못한다&amp;rdquo;는 뜻&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WesxB/dJMcachesxM/RTvymdhrQBSntPcvYA3HK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WesxB/dJMcachesxM/RTvymdhrQBSntPcvYA3HK1/img.png&quot; data-alt=&quot;공부시간 &amp;amp;rarr;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WesxB/dJMcachesxM/RTvymdhrQBSntPcvYA3HK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWesxB%2FdJMcachesxM%2FRTvymdhrQBSntPcvYA3HK1%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;132&quot; height=&quot;136&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공부시간 &amp;rarr;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>KT 에이블스쿨 8기/머신러닝</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/23</guid>
      <comments>https://daondakara.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:43:09 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 ① - 데이터 전처리, 모델링</title>
      <link>https://daondakara.tistory.com/22</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;머신러닝 개념&lt;/h2&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;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;분류(Classification)와 회귀(Regression)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델링 하기 전 원하는 결과가 분류인지 회귀인지 이해해야함 분류 - 데이터를 보고 yes냐 no냐, fail이냐 pass냐 &amp;hellip; 이게 어떤 종류인지 맞히는 것 회귀 - 양을 측정하는 것 = 숫자를 예측하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분 분류 (Classification) 회귀 (Regression)&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&gt;&lt;b&gt;예시 데이터&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;공부시간 &amp;rarr; 합격/불합격&lt;/td&gt;
&lt;td&gt;공부시간 &amp;rarr; 점수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;입력값 (X)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;공부시간&lt;/td&gt;
&lt;td&gt;공부시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;출력값 (Y)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;합격 / 불합격&amp;rdquo; 처럼 &lt;b&gt;문자나 범주형&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;점수(숫자)&amp;rdquo; 처럼 &lt;b&gt;연속형 숫자&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;예측하고 싶은 것&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;새로운 학생이 &lt;b&gt;합격할까? 불합격할까?&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;새로운 학생의 &lt;b&gt;점수는 몇 점일까?&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;결과의 형태&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;lsquo;라벨(label)&amp;rsquo;&lt;/td&gt;
&lt;td&gt;&amp;lsquo;숫자(value)&amp;rsquo;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;예시 질문&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;10시간 공부한 학생은 합격할까?&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;10시간 공부한 학생은 몇 점일까?&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  분류(Classification) 문제&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;합격/불합격&amp;rdquo;, &amp;ldquo;스팸/일반메일&amp;rdquo;, &amp;ldquo;고양이/강아지&amp;rdquo;처럼 결과가 &lt;b&gt;범주(종류)&lt;/b&gt; 로 나뉠 때!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;자주 쓰는 알고리즘&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;- DecisionTreeClassifier (의사결정나무) - KNeighborsClassifier (K-최근접 이웃) - LogisticRegression (로지스틱 회귀 &amp;mdash; 이름에 회귀 있지만 분류용!) - RandomForestClassifier (랜덤포레스트) - XGBClassifier (XGBoost 분류기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;평가 지표&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;- accuracy_score &amp;rarr; 전체 중 정답 비율 - recall_score &amp;rarr; 실제 정답 중 맞춘 비율 - precision_score &amp;rarr; 맞다고 한 것 중 진짜 정답 비율 - classification_report &amp;rarr;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;위 지표들을 한눈에 정리 - confusion_matrix &amp;rarr; 정답/오답 표로 정리&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  **결과가 라벨(label)**로 나오는 문제 (예: 0, 1, &amp;ldquo;합격/불합격&amp;rdquo;)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  회귀(Regression) 문제&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &amp;ldquo;점수&amp;rdquo;, &amp;ldquo;가격&amp;rdquo;, &amp;ldquo;온도&amp;rdquo;처럼 결과가 &lt;b&gt;숫자(연속값)&lt;/b&gt; 로 나올 때!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;자주 쓰는 알고리즘&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;- LinearRegression (선형회귀) - KNeighborsRegressor (K-최근접 회귀) - DecisionTreeRegressor (의사결정나무 회귀) - RandomForestRegressor (랜덤포레스트 회귀) - XGBRegressor (XGBoost 회귀)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;평가 지표&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;- mean_absolute_error (평균 절대 오차, MAE) - mean_squared_error (평균 제곱 오차, MSE) - root_mean_squared_error (RMSE) - mean_absolute_percentage_error (MAPE) - r2_score (설명력, 얼마나 잘 맞았는지)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;결과가 숫자(value)&lt;/b&gt; 로 나오는 문제 (예: 70점, 23.5도)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터로부터 패턴을 찾아 수학식으로 정리해 놓은것&lt;/li&gt;
&lt;li&gt;모델링 : 오차가 적은 모델을 만드는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델의 목적 - 표본(샘플)을 가지고 모집단(전체)을 예측하기 위해서&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;독립변수, 종속변수&lt;/h2&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;/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&gt;**독립변수&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(Independent Variable)**&lt;/td&gt;
&lt;td&gt;결과에 영향을 주는 &lt;b&gt;원인&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;시험 공부 시간&amp;rdquo;, &amp;ldquo;운동량&amp;rdquo;, &amp;ldquo;광고비&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;종속변수 (Dependent Variable)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;독립변수에 의해 &lt;b&gt;결정되는 결과&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;시험 점수&amp;rdquo;, &amp;ldquo;체중 변화&amp;rdquo;, &amp;ldquo;매출액&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;독립변수 &amp;rarr; 원인 / 입력값 (X) Feature&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;종속변수 &amp;rarr; 결과 / 출력값 (Y) Target&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  머신러닝 관점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;독립변수&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;모델이 이용하는 입력 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;종속변수&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;예측하려는 목표값&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오차&lt;/h2&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;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;가변수화(또는 더미 변수화, &lt;b&gt;One-hot encoding&lt;/b&gt;)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자나 범주형 데이터를 숫자(0과 1)로 바꾸는 과정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 대부분의 머신러닝 모델은 &lt;b&gt;숫자 데이터만 계산할 수 있기 때문&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;두가지 목적&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 문자 데이터를 숫자로 바꾸는 효과&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gender (원본 데이터) Male Female 원핫인코딩&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&gt;Male&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;남자면 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;여자면 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;남자면 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;여자면 1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가변수화 과정은 하나만 1을 갖기 때문에 One-Hot-Encoding이라고 부른다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 숫자의 크기가 비교되지 않게 숫자형 범주값을 별도의 독립된 변수로 떼는 것&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 크기 비교가 안 되는 범주(카테고리)를 모델이 &amp;lsquo;순서가 있는 숫자&amp;rsquo;로 오해하지 않도록 각각 따로 분리한다는 뜻&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;빨강&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파랑&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;초록&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 바꾸면 모델이 이렇게 생각할 수 있음&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;초록(3)은 빨강(1)보다 3배 크네!&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b&gt;색깔은 크고 작음이 없는 &amp;lsquo;범주형 데이터&amp;rsquo;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이렇게 숫자로 넣으면 잘못된 의미를 만들어버림&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그래서 하는 게 바로 &amp;ldquo;가변수화(= 원핫인코딩)&amp;rdquo;&lt;/h3&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;/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&gt;빨강&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파랑&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;초록&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 숫자의 크고 작음은 사라지고, &amp;ldquo;어떤 색인지&amp;rdquo;만 표시됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; (2)는 안해도 되지만 (1)은 안하면 에러남&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gender (원본 데이터) Male Female&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&gt;Male&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 표에서 Male이 없어도 Female변수만 있어도 Male값을 예측할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gender (원본 데이터) Male Female&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&gt;Male&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h2 data-ke-size=&quot;size26&quot;&gt;그래서&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bst23t/dJMcab3HwFb/Zqos7N892XR8EgulHoeja0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bst23t/dJMcab3HwFb/Zqos7N892XR8EgulHoeja0/img.png&quot; data-alt=&quot;drop=True를 지정해 가변수화 결과로 만들어진 열 중 하나를 제거&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bst23t/dJMcab3HwFb/Zqos7N892XR8EgulHoeja0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbst23t%2FdJMcab3HwFb%2FZqos7N892XR8EgulHoeja0%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;682&quot; height=&quot;73&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;drop=True를 지정해 가변수화 결과로 만들어진 열 중 하나를 제거&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 준비&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(1) 결측치 처리&lt;/h3&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;# 결측치 확인
data.isnull().sum()

확인하고
# 전날 값으로 결측치 채우기
예제 데이터가 시계열 데이터였고 결측치가 solar.R이라 전날꺼로 채우면 될 것 같아서
이걸로 했음
data.ffill(inplace=True)

# 확인
data.isnull().sum()
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(2) 변수 제거 : 분석에 의미 없다고 판단되는 변수 제거&lt;/h3&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;# 변수 제거
drop_cols = ['Month', 'Day']
data.drop(columns=drop_cols, inplace=True)
#data.drop(columns=drop_cols, inplace=True) 이렇게 써도 됨

# 확인
data.head()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 분리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 셋을 학습용, 검증용, 평가용 데이터로 분리함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xO3mN/dJMcaaqbAC8/yivhoSmHC4BMRnzUhjb6Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xO3mN/dJMcaaqbAC8/yivhoSmHC4BMRnzUhjb6Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xO3mN/dJMcaaqbAC8/yivhoSmHC4BMRnzUhjb6Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxO3mN%2FdJMcaaqbAC8%2FyivhoSmHC4BMRnzUhjb6Tk%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;661&quot; height=&quot;63&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;91&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(3) x, y 분리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우선 target 변수를 명확히 지정&lt;/li&gt;
&lt;li&gt;target을 제외한 나머지 변수들 데이터는 x로 선언&lt;/li&gt;
&lt;li&gt;target 변수 데이터는 y로 선언&lt;/li&gt;
&lt;li&gt;이 결과로 만들어진 &lt;b&gt;x는 데이터프레임, y는 시리즈&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이후 모든 작업은 x, y를 대상으로 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;# target 확인
타겟은 내가 판단해서 정하는 것
target = 'Ozone'

# 데이터 분리
x = data.drop(target, axis=1) inplace=True를 주면 x값은 none이 됨 그래서 주면 안돼
원본 데이터는 그대로 둬야하니까
y = data.loc[:, target]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(4) 학습용, 평가용 데이터 분리&lt;/h3&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;반복 실행 시 동일한 결과를 얻기 위해 random_state 옵션을 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;# 모듈 불러오기
from sklearn.model_selection import train_test_split

# 7:3으로 분리
x_train, x_test, y_train, y_test = train_test_split(x,y
,test_size=0.3,random_state = 1) random_state를 주지 않으면 진짜 막 섞임
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Scikit-Learn&lt;/h2&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;b&gt;배우기 쉬움&lt;/b&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;579&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXuV0/dJMcaihr23J/WCvdxI3RQS6r6r35cU9nlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXuV0/dJMcaihr23J/WCvdxI3RQS6r6r35cU9nlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXuV0/dJMcaihr23J/WCvdxI3RQS6r6r35cU9nlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXuV0%2FdJMcaihr23J%2FWCvdxI3RQS6r6r35cU9nlk%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;454&quot; height=&quot;294&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;과대적합 vs 과소적합&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;과적합 (Overfitting)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;훈련 데이터에는 너무 잘 맞지만, 새로운 데이터에는 잘 못 맞추는 상태&lt;/td&gt;
&lt;td&gt;시험 예상문제만 외워서 실제 시험을 망치는 학생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;과소적합 (Underfitting)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;훈련 데이터조차 제대로 학습하지 못한 상태&lt;/td&gt;
&lt;td&gt;공부를 거의 안 해서 기본 문제도 틀리는 학생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;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;hellip;&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;rarr; 과적합&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;세 가지 상태로 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;과소적합&lt;/td&gt;
&lt;td&gt;너무 단순함 (덜 배움)&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;적합&lt;/td&gt;
&lt;td&gt;적당히 잘 배움 (일반화 잘됨)&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;과적합&lt;/td&gt;
&lt;td&gt;너무 외움 (훈련에만 맞춤)&lt;/td&gt;
&lt;td&gt;매우 높음&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델이 적절히 학습하게 만드는 과정 = 튜닝&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;모델링&lt;/h1&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;알고리즘: LinearRegression&lt;/li&gt;
&lt;li&gt;평가방법: mean_absolute_error&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 모델링&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;# 1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;# 2단계: 선언하기
model = LinearRegression() 선형 회귀모델 쓸거다
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;# 3단계: 학습하기
model.fit(x_train, y_train) 학습 데이터로 학습하자

학습이 끝나면 성능이 어떻든 모델이 만들어짐
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;# 4단계: 예측하기
y_pred = model.predict(x_test) x 테스트로 예측해봐 
아직 y 테스트는 모델에게 주지 않았기 때문
&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;931&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPeUix/dJMcacuLRmf/CUSE2DKBCZri7bW9ynJEb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPeUix/dJMcacuLRmf/CUSE2DKBCZri7bW9ynJEb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPeUix/dJMcacuLRmf/CUSE2DKBCZri7bW9ynJEb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPeUix%2FdJMcacuLRmf%2FCUSE2DKBCZri7bW9ynJEb1%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;553&quot; height=&quot;236&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;# 5단계: 평가하기
mean_absolute_error(y_test, y_pred)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 예측값 실제값 비교&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;gauss&quot;&gt;&lt;code&gt;# 예측값, 실젯값 확인
print(y_pred[:10]) 이 자체가 배열이니까 벨류즈 안쓰고
print(y_test.values[:10]) y 테스트 결과는 시리즈니까 .values 결과 = 배열
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;# 예측값, 실젯값 시각화 비교
plt.plot(y_pred)
plt.plot(y_test.values) y_test는 시리즈니까 배열로 가져오기 위해 y_test.values
plt.legend(['predicted', 'Actual']) 범례
plt.show()
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>KT 에이블스쿨 8기/머신러닝</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/22</guid>
      <comments>https://daondakara.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:41:10 +0900</pubDate>
    </item>
    <item>
      <title>이변량 분석 ④ - 수치형 &amp;rarr; 범주형</title>
      <link>https://daondakara.tistory.com/21</link>
      <description>&lt;h1&gt;시각화&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Histogram&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Seaborn&lt;/b&gt;의&amp;nbsp;&lt;b&gt;histplot()&lt;/b&gt;&amp;nbsp;함수로 Histogram을 그린다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.histplot(x='BloodPressure', hue='Outcome', data=diabetes, bins=20)
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;396&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS2LP7/dJMcafygiKE/FgTQbY2qSQLKjPKDkEz62k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS2LP7/dJMcafygiKE/FgTQbY2qSQLKjPKDkEz62k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS2LP7/dJMcafygiKE/FgTQbY2qSQLKjPKDkEz62k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS2LP7%2FdJMcafygiKE%2FFgTQbY2qSQLKjPKDkEz62k%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;282&quot; height=&quot;178&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Density Plot&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Seaborn&lt;/b&gt;의&amp;nbsp;&lt;b&gt;kdeplot()&lt;/b&gt;&amp;nbsp;함수로 Density Plot을 그린다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;① kdeplot(..., hue='Outcome')&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;두 그래프의 아래 면적의 합이 1&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.kdeplot(x='BloodPressure', hue='Outcome', data=diabetes)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;② kdeplot(..., hue='Outcome', common_norm=False)&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;common_norm&lt;/b&gt;&amp;nbsp;매개변수 값을&amp;nbsp;&lt;b&gt;False&lt;/b&gt;로 지정하면 두 그래프 각각의 아래 면적이 1이 된다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;common_norm&lt;/b&gt;&amp;nbsp;매개변수의 기본값은 &lt;b&gt;True&lt;/b&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;967&quot; data-origin-height=&quot;723&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhiuj2/dJMcagxaqdo/l7tW0u0FNUXmMIV2Ihsh90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhiuj2/dJMcagxaqdo/l7tW0u0FNUXmMIV2Ihsh90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhiuj2/dJMcagxaqdo/l7tW0u0FNUXmMIV2Ihsh90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdhiuj2%2FdJMcagxaqdo%2Fl7tW0u0FNUXmMIV2Ihsh90%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;543&quot; height=&quot;406&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;723&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;multiple='fill' 지정&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;multiple&lt;/b&gt;&amp;nbsp;매개변수 값을&amp;nbsp;&lt;b&gt;'fill'&lt;/b&gt;&amp;nbsp;로 지정해 비율을 비교가능&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;b&gt;① kdeplot(..., hue='Outcome', multiple='fill')&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.kdeplot(x='BloodPressure', hue='Outcome', data=diabetes, multiple='fill')
plt.axhline(diabetes['Outcome'].mean(), color='r')
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;517&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bprDXb/dJMcagYeLGp/cVeIYxQTnFk7wAtlSv0m10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bprDXb/dJMcagYeLGp/cVeIYxQTnFk7wAtlSv0m10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bprDXb/dJMcagYeLGp/cVeIYxQTnFk7wAtlSv0m10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbprDXb%2FdJMcagYeLGp%2FcVeIYxQTnFk7wAtlSv0m10%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;295&quot; height=&quot;199&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;② histplot(..., hue='Outcome', multiple='fill')&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.histplot(x='BloodPressure', hue='Outcome', data=diabetes, bins=20, multiple='fill')
plt.axhline(diabetes['Outcome'].mean(), color='r')
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;495&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw3lLe/dJMcadmQ9h8/bgitVVK8j0nniZJcgkKZ0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw3lLe/dJMcadmQ9h8/bgitVVK8j0nniZJcgkKZ0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw3lLe/dJMcadmQ9h8/bgitVVK8j0nniZJcgkKZ0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw3lLe%2FdJMcadmQ9h8%2FbgitVVK8j0nniZJcgkKZ0K%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;304&quot; height=&quot;207&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;수치화&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로지스틱 회귀 .Logit()&lt;/h3&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;로지스틱 회귀 모델로 p-value를 구해서 차이가 있는지 없는지를 확인해보면 되겠다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;temp = diabetes.loc[diabetes['BloodPressure'].notnull()]
model = sm.Logit(temp['Outcome'], temp['BloodPressure'])
result = model.fit()
print(result.pvalues)
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>KT 에이블스쿨 8기/데이터분석</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/21</guid>
      <comments>https://daondakara.tistory.com/21#entry21comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:37:54 +0900</pubDate>
    </item>
    <item>
      <title>이변량 분석 ③ - 범주형 &amp;rarr; 범주형</title>
      <link>https://daondakara.tistory.com/20</link>
      <description>&lt;h1&gt;교차표(Crosstab)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;범주vs범주 데이터 비교하기 위해서는 Pandas의&amp;nbsp;&lt;b&gt;crosstab()&lt;/b&gt;&amp;nbsp;함수를 사용해&amp;nbsp;&lt;b&gt;교차표를 만들어야함&lt;/b&gt;&lt;b&gt;&lt;/b&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;961&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uoN4x/dJMb99LzZHX/qK2xiFBpFvEeOMMJHin6D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uoN4x/dJMb99LzZHX/qK2xiFBpFvEeOMMJHin6D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uoN4x/dJMb99LzZHX/qK2xiFBpFvEeOMMJHin6D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuoN4x%2FdJMb99LzZHX%2FqK2xiFBpFvEeOMMJHin6D0%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;961&quot; height=&quot;280&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;280&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;pre class=&quot;prolog&quot;&gt;&lt;code&gt;크로스탭 만들기

pd.crosstab(diabetes['BMIStatus'], diabetes['Outcome'])
&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;&lt;b&gt;'index'&lt;/b&gt;: 각 행의 합으로 각 요소를 나눠서 각 행의 상대적인 비율을 보여준다(각 행의 합이 1이 됨).&lt;/li&gt;
&lt;li&gt;'columns': 각 열의 합으로 각 요소를 나눠서 각 열의 상대적인 비율을 보여준다(각 열이 합이 1이 됨).&lt;/li&gt;
&lt;li&gt;'all': 전체 합으로 각 요소를 나눠서 전체 데이터셋에서 각 셀의 상대적인 비율을 보여준다(전체 합이 1이 됨).&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;976&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tNfSC/dJMcahbL3kp/kDrgkjuBYpVYANiqyNpBq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tNfSC/dJMcahbL3kp/kDrgkjuBYpVYANiqyNpBq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tNfSC/dJMcahbL3kp/kDrgkjuBYpVYANiqyNpBq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtNfSC%2FdJMcahbL3kp%2FkDrgkjuBYpVYANiqyNpBq1%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;605&quot; height=&quot;166&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;pd.crosstab(diabetes['BPStatus'], diabetes['Outcome'], normalize='columns')&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;pd.crosstab(diabetes['BPStatus'], diabetes['Outcome'], normalize='index')&lt;/span&gt; 보통 이걸 씀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;pd.crosstab(diabetes['BPStatus'], diabetes['Outcome'], normalize='all')&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;시각화&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(크로스탭 만들고, 노말라이즈 인덱스 준 다음, 시각화)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;100% Stacked Bar Plot&lt;/li&gt;
&lt;li&gt;Mosaic Plot&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;100% Stacked Bar&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;normalize='index'&lt;/b&gt;&amp;nbsp;를 설정한 교차표 작성&lt;/li&gt;
&lt;li&gt;normalize='index'를 지정했으므로 각 행의 합은 1&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;table = pd.crosstab(diabetes['BPStatus'], diabetes['Outcome'], normalize='index')
display(table)

table.plot(kind='bar', stacked=True)
plt.axhline(1-diabetes['Outcome'].mean(), color='r')
plt.xticks(rotation=0)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;mosaic plot&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;100% Stacked Bar는 비율만 비교하므로 양에 대한 비교는 할 수 없음&lt;/li&gt;
&lt;li&gt;Mosaic Plot으로&amp;nbsp;&lt;b&gt;양에 대한 비교&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;statsmodels.graphics.mosaicplot&lt;/b&gt;의&amp;nbsp;&lt;b&gt;mosaic()&lt;/b&gt;&amp;nbsp;함수로 Mosaic Plot을 그린다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;mosaic(diabetes, ['BMIStatus', 'Outcome'])
plt.axhline(1-diabetes['Outcome'].mean(), color='r')
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;시각화 결과를 분석하는 방법&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;귀무가설이 참일 때 나올 그래프의 모양(아래 그림)&lt;/li&gt;
&lt;li&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;982&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mqHcV/dJMcaaKt7VP/CUoGSmtnM4OCjZYY9W16iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mqHcV/dJMcaaKt7VP/CUoGSmtnM4OCjZYY9W16iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mqHcV/dJMcaaKt7VP/CUoGSmtnM4OCjZYY9W16iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmqHcV%2FdJMcaaKt7VP%2FCUoGSmtnM4OCjZYY9W16iK%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;613&quot; height=&quot;203&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;325&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;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;수치화&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;카이제곱검정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;범주형 변수들 사이에 관련이 있는지(연관이 있는지) 수치화 하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 , &amp;ldquo;두 변수 사이에 관계가 있나, 그냥 우연인가?&amp;rdquo; 를 보는 검사&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;scipy.stats&lt;/b&gt;&amp;nbsp;라이브러리의&amp;nbsp;&lt;b&gt;chi2_contingency()&lt;/b&gt;&amp;nbsp;함수로 카이제곱검정을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;table = pd.crosstab(diabetes['BPStatus'], diabetes['Outcome'])

result = spst.chi2_contingency(table)
print('* 카이제곱통계량:', result[0])
print('* p-value:', result[1])
print('* 기대빈도:\\n',result[3])
&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;445&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R4eDb/dJMcab3HwvX/efcLjjZAtnUd91pbHsxGW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R4eDb/dJMcab3HwvX/efcLjjZAtnUd91pbHsxGW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R4eDb/dJMcab3HwvX/efcLjjZAtnUd91pbHsxGW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR4eDb%2FdJMcab3HwvX%2FefcLjjZAtnUd91pbHsxGW0%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;344&quot; height=&quot;139&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;180&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;h3 data-ke-size=&quot;size23&quot;&gt;  예시&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;흡연 여부(Yes/No)&amp;rdquo;와 &amp;ldquo;폐질환 발생 여부(Yes/No)&amp;rdquo;가 관련이 있을까?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;흡연자&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;비흡연자&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&amp;ldquo;흡연과 폐질환이 무관하다면 이런 비율이 나올 확률&amp;rdquo;을 계산&lt;/li&gt;
&lt;li&gt;그 확률(p-value)이 작으면 &amp;rarr; &amp;ldquo;우연이 아니라 관련이 있다!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⚙️ 작동 원리&lt;/h2&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;&amp;rarr; &amp;ldquo;두 변수에 아무 관계가 없다고 가정하면 이런 비율이 나올 거야.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실제값(관찰된 비율)&lt;/b&gt; 과 비교&lt;/li&gt;
&lt;li&gt;&amp;rarr; &amp;ldquo;실제 데이터가 예상과 얼마나 다른가?&amp;rdquo; 계산&lt;/li&gt;
&lt;li&gt;그 차이를 &lt;b&gt;&amp;chi;&amp;sup2;(카이제곱)&lt;/b&gt; 값으로 표현&lt;/li&gt;
&lt;li&gt;&amp;rarr; 값이 클수록 &amp;ldquo;예상과 너무 다르다 = 관련 있다&amp;rdquo;는 뜻!&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기대빈도&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 변수 사이에 &lt;b&gt;아무 관련이 없다고 가정했을 때&lt;/b&gt;, 각 칸(조합)에 &lt;b&gt;기대되는 값(빈도)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &amp;ldquo;만약 흡연과 폐질환이 진짜 아무 상관이 없다면, 각 칸에 몇 명쯤 들어가야 자연스러울까?&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&amp;ldquo;만약 흡연과 폐질환이 상관없다면 이렇게 나올 거야~&amp;rdquo;라는 예상 값)&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;기대빈도 = &amp;lsquo;관련이 없다면 나올 법한 예상 숫자&amp;rsquo;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 값이 이 예상과 많이 다르면 &amp;rarr; &amp;ldquo;관련이 있다!&amp;rdquo;&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>KT 에이블스쿨 8기/데이터분석</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/20</guid>
      <comments>https://daondakara.tistory.com/20#entry20comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:34:47 +0900</pubDate>
    </item>
    <item>
      <title>이변량 분석 ② - 범주형 &amp;rarr; 수치형</title>
      <link>https://daondakara.tistory.com/19</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;가설과 가설 검정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모집단(Population)과 표본(Sample)
&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;/li&gt;
&lt;li&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;가설은 보통 X와 Y의 관계를 표현 예1: X에 따라 Y가 차이가 있다. 예2: X와 Y는 관계가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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 = target)를 도출하고,&lt;/li&gt;
&lt;li&gt;y에 영향을 주는 요인(x)들을 뽑아서 초기 가설을 수립함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;귀무가설 - 당신 주장 = 내 주장을 반대하는 입장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매장지역( 2)과 수요량(y)은 아무런 관련이 없다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;대립가설 - 내 주장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매장지역( 2)과 수요량(y)은 관련이 있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWxbWM/dJMcaaX1wjw/Aly6gMYIRWZV6GmO4VTR30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWxbWM/dJMcaaX1wjw/Aly6gMYIRWZV6GmO4VTR30/img.png&quot; data-alt=&quot;양 끝단을 보면 2.5%가 있는데 그 영역 보다 작은 영역이면 귀무가설을 기가할 충분한 근거가 있음을 의미&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWxbWM/dJMcaaX1wjw/Aly6gMYIRWZV6GmO4VTR30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWxbWM%2FdJMcaaX1wjw%2FAly6gMYIRWZV6GmO4VTR30%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;484&quot; height=&quot;239&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;양 끝단을 보면 2.5%가 있는데 그 영역 보다 작은 영역이면 귀무가설을 기가할 충분한 근거가 있음을 의미&lt;/figcaption&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;b&gt;가설검정(hypothesis testing)&lt;/b&gt; 과 &lt;b&gt;유의확률(p-value)&lt;/b&gt; 개념을 설명하는 자료&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상황&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;A매장과 B매장의 수요량에 차이가 있는가?&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;두 집단의 평균이 같은지(차이가 없는지)&lt;/b&gt; 검정하는 상황&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;귀무가설(H₀)&lt;/b&gt; : 두 매장의 수요량에 차이가 없다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대립가설(H₁)&lt;/b&gt; : 두 매장의 수요량에 차이가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그래프 의미&lt;/h3&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;&amp;lsquo;차이가 얼마나 큰가(0을 기준으로)&amp;rsquo;를 나타낸다&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;0 근처&lt;/b&gt; &amp;rarr; 차이가 거의 없음 (귀무가설이 맞을 가능성 높음)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;0에서 멀수록&lt;/b&gt; &amp;rarr; 차이가 큼 (대립가설을 지지할 가능성 높음)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;노란색 영역 (유의수준 &amp;alpha; = 0.05)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프의 양쪽 끝 = 노란색 부분 약 5%(0.05)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 영역은 &amp;ldquo;귀무가설이 맞다고 생각했는데, 실제로는 틀린 경우의 확률&amp;rdquo; 즉 &lt;b&gt;유의수준(&amp;alpha;)&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;rarr; &lt;b&gt;귀무가설을 기각하고 대립가설을 채택&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rarr; &amp;ldquo;지금 관측된 데이터는 너무 극단적이어서 귀무가설이 맞다고 보기 어렵다&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &amp;ldquo;A와 B 매장의 수요량이 다르다&amp;rdquo;고 결론 내리는 거예요.&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;h1&gt;시각화 - Bar Plot, Box Plot&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bar Plot을 사용해 두 집단의 평균 비교&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;그럼 이 표본의 평균의 차이가 모집단에도 의미가 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이 평균 비교표만 봤을 땐 차이가 있어 보이지만 확실하지 않기에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수치화가 필요함(T 통계량)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bar Plot&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.barplot(x='Outcome', y='BMI', data=diabetes, palette='deep') 
# palette: deep, bright, pastel, dark, muted, colorblind
plt.show()
&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;박스플롯(분포를 확인)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.boxplot(x='Outcome', y='BMI', data=diabetes, palette='deep')
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;수치화&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;t-검정 (두 범주)&lt;/li&gt;
&lt;li&gt;ANOVA (세 범주 이상)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;t - 검정 : 두 집단 비교&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 그룹의 평균이 진짜로 다른지 확인하는 방법 예) 남학생 평균 키 : 170cm 여학생 평균 키 : 160cm &amp;ldquo;이 10cm 차이가 &lt;b&gt;진짜로 다른 건지&lt;/b&gt;, 아니면 &lt;b&gt;우연히 나온 건지&lt;/b&gt;&amp;rdquo;를 확인해주는 게 &lt;b&gt;t-검정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;평균 차이를 표준오차(Standard Error)와 비교하여 &quot;진짜 차이&quot;인지 검정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;scipy.stats&lt;/b&gt;&amp;nbsp;라이브러리의&amp;nbsp;&lt;b&gt;ttest_ind()&lt;/b&gt;&amp;nbsp;함수로 t-검정을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;표준 오차와 표준 편차&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;표준편차: 개별 데이터들이 평균에서 얼마나 흩어졌는지를 나타냄&lt;/li&gt;
&lt;li&gt;표준오차(SE): 표본 평균들이 모평균에서 얼마나 흩어졌는지를 나타냄&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;b&gt;표준편차&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;학생 한 명 한 명의 점수가 평균에서 얼마나 다른가&lt;/td&gt;
&lt;td&gt;같은 반 학생들끼리 점수 차이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;표준오차(SE)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;여러 반의 평균이 진짜 평균에서 얼마나 다른가&lt;/td&gt;
&lt;td&gt;각 반 평균 점수들의 차이&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;표준편차는 개인 차이&lt;/b&gt;, &lt;b&gt;표준오차는 평균의 흔들림&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;t-statistics, t-통계량, t-value&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 집단의 평균 차이를 표준오차(SE)로 나눈 값&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;354&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FA2ID/dJMb99LzZGK/2M8WYyD21W6KvCTOxaog11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FA2ID/dJMb99LzZGK/2M8WYyD21W6KvCTOxaog11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FA2ID/dJMb99LzZGK/2M8WYyD21W6KvCTOxaog11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFA2ID%2FdJMb99LzZGK%2F2M8WYyD21W6KvCTOxaog11%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;223&quot; height=&quot;61&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;97&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 값이 크면 평균 차이가 크고 우연일 가능성이 작다&lt;/li&gt;
&lt;li&gt;일반적으로 t-통계량 값이 -2보다 작거나 2보다 크면 차이가 있다고 봄 평균차이가 표준오차보다 충분히 크면 &lt;b&gt;&amp;lsquo;진짜 차이&amp;rsquo;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&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;범주 값이 3개 이상이면 t-통계량을 쓰기엔 너무 부담스러움 &amp;rarr; 분산분석&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;s1 = rd.sample(pop1, 200)
s2 = rd.sample(pop2, 200)
t_test = spst.ttest_ind(s1, s2)
t-통계량 호출 방법은 쉬움 ttset_ind(표본1, 표본2)

print('* t-statistic:', t_test[0])
print('* p-value:', t_test[1])
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;분산분석(ANOVA) - 여러 집단을 한꺼번에 비교하기 위해 필요한 방법&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세 집단 이상의 평균 분석(두 집단은 t 통계량으로)&lt;/li&gt;
&lt;li&gt;평균 비교를 하려면 보통 &lt;b&gt;t검정&lt;/b&gt;(두 집단 비교)을 쓰지만 예를 들어 3개라고 치면 3번이나 따로 검정해야함 &amp;rarr; 비교가 많아질수록 실수할 확률(오류)가 커진다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;f-statistics, f-통계량, f-value&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 개 이상의 집단 간 분산의 비율을 검정하는 데 사용되는 통계량&lt;/li&gt;
&lt;li&gt;각 집단 내에서의 분산과 각 집단 간의 분산의 비율을 계산&lt;/li&gt;
&lt;li&gt;f-통계량 값이 크다는 것은 각 집단 간 차이가 통계적으로 유의미하다는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;f-통계량 값이 2~3 이상이면 차이가 있다&lt;/b&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;951&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xJ6UO/dJMcachesjt/j5aUb8Qyi1r2bfjRMwGwMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xJ6UO/dJMcachesjt/j5aUb8Qyi1r2bfjRMwGwMK/img.png&quot; data-alt=&quot;집단 간 분산 : 집단끼리의 차이(분산) 집단 내 부산 : 각 집단 안의 흩어짐(분산)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xJ6UO/dJMcachesjt/j5aUb8Qyi1r2bfjRMwGwMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxJ6UO%2FdJMcachesjt%2Fj5aUb8Qyi1r2bfjRMwGwMK%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;557&quot; height=&quot;183&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;집단 간 분산 : 집단끼리의 차이(분산) 집단 내 부산 : 각 집단 안의 흩어짐(분산)&lt;/figcaption&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;집단 간 차이가 크면 &amp;rarr; 평균이 다르다 (대립가설 채택)&lt;/li&gt;
&lt;li&gt;집단 내 차이가 크면 &amp;rarr; 비슷하다 (귀무가설 유지)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림 A는 &lt;b&gt;집단간 분산은 크지만&lt;/b&gt; 집단 내 분산은 작음 = f 통계량 값이 크다(2보다 큼)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림 B는 집단간 분산과 집단 내 분산이 모두 큼 = f 통계량 값이 거의 1이 나옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림 C는 집단 간 분산은 차이가 크지 않지만 집단 내 분산은 큼 = f 통계량이 1보다도 작아짐 (분모가 커지니까)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vd55X/dJMcafygiDs/tkWZ95LJK2TKZRKeWnZX0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vd55X/dJMcafygiDs/tkWZ95LJK2TKZRKeWnZX0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vd55X/dJMcafygiDs/tkWZ95LJK2TKZRKeWnZX0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVd55X%2FdJMcafygiDs%2FtkWZ95LJK2TKZRKeWnZX0k%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;616&quot; height=&quot;74&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;temp = diabetes.loc[(diabetes['BPStatus'].notnull()) &amp;amp; (diabetes['Age'].notnull())]
low = temp.loc[temp['BPStatus']=='Low', 'Age']
normal = temp.loc[temp['BPStatus']=='Normal', 'Age']
high = temp.loc[temp['BPStatus']=='High', 'Age']

anova = spst.f_oneway(low, normal, high)
print('* f-statistic:', anova[0])
print('* p-value:', anova[1])
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>KT 에이블스쿨 8기/데이터분석</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/19</guid>
      <comments>https://daondakara.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:31:25 +0900</pubDate>
    </item>
    <item>
      <title>이변량 분석 ① - 수치형 &amp;rarr; 수치형</title>
      <link>https://daondakara.tistory.com/18</link>
      <description>&lt;h1&gt;시각화 - 산점도(Scatter Plot)&lt;/h1&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 class=&quot;routeros&quot;&gt;&lt;code&gt;Seaborn의 scatterplot() 함수로 산점도 그리기

sns.scatterplot(x='Wind', y='Ozone', data=air, s=30, ec=None)
 s=30 점 크기 ec=None 점 테두리 색
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Joint plot 으로도 표현 가능&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Seaborn&lt;/b&gt;의&amp;nbsp;&lt;b&gt;jointplot()&lt;/b&gt;&amp;nbsp;함수는 두 개의 변수 사이의 관계를 시각화하기 위한 유용한 도구&lt;/li&gt;
&lt;li&gt;기본적으로&amp;nbsp;&lt;b&gt;산점도&lt;/b&gt;를 그려주고,&amp;nbsp;&lt;b&gt;히스토그램&lt;/b&gt;으로 각 변수의 분포를 보여줌&lt;/li&gt;
&lt;li&gt;&lt;b&gt;KDE&lt;/b&gt;(Kernel Density Estimation) 그래프를 추가하여 밀도 추정 결과도 확인할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;kind&lt;/b&gt;&amp;nbsp;매개변수를 사용하여&amp;nbsp;&lt;b&gt;reg, hex, kde&lt;/b&gt;&amp;nbsp;등 다양한 형태의 그래프를 그릴 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.jointplot(x='Solar.R', y='Ozone', data=air, kind='hex'
, marginal_kws=dict(bins=20))
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;652&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vDdDJ/dJMcajtQpar/b3kHvSXKzxCKdY5eBBSUHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vDdDJ/dJMcajtQpar/b3kHvSXKzxCKdY5eBBSUHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vDdDJ/dJMcajtQpar/b3kHvSXKzxCKdY5eBBSUHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvDdDJ%2FdJMcajtQpar%2Fb3kHvSXKzxCKdY5eBBSUHk%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;385&quot; height=&quot;371&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과분석&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;산점도에서 또렷한 패턴이 보인다면, 강한 관계(특히, 직선의 패턴이 보인다면)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;수치화(분석) - 상관분석(Correlation Analysis)&lt;/h1&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;0에 가까울수록 상관관계가 없음을 나타냄&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;공분산으로 단순히 상관관계의 방향은 알 수 있으나 상관관계 정도는 알 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상관계수r (pearsonr 피어슨 r)&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;scipy 패키지
&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;결과: (상관계수, p-value)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;963&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1kl49/dJMcagKHK6j/9CoKhDQMNKIFPXXuClMG3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1kl49/dJMcagKHK6j/9CoKhDQMNKIFPXXuClMG3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1kl49/dJMcagKHK6j/9CoKhDQMNKIFPXXuClMG3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1kl49%2FdJMcagKHK6j%2F9CoKhDQMNKIFPXXuClMG3K%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;526&quot; height=&quot;189&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;346&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;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;강한: 0.5 &amp;lt;   &amp;le; 1 중간: 0.2 &amp;lt;   &amp;le; 0.5 약한: 0.1 &amp;lt;   &amp;le; 0.2 (거의)없음:   &amp;le; 0.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상관계수 0.68은 강하다고 볼 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상관계수가 강하다고 볼 수 있을까? 를 뒷받침해주는게 p-vlue&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value가 작을수록 귀무가설이 틀릴 수 있다(0.5 보다 작을 수록 더 강하다 우리 주장을 내세울 수 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;수치화(분석) - 상관분석(Correlation Analysis)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수치형 &amp;rarr; 수치형 관계를 수치화해 비교하고자 한다면&amp;nbsp;&lt;b&gt;상관분석&lt;/b&gt;을 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상관계수&lt;/b&gt;와&amp;nbsp;&lt;b&gt;p-value&lt;/b&gt;를 사용해 두 변수의 상관관계를 확인할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;scipy.stats&lt;/b&gt;&amp;nbsp;라이브러리의&amp;nbsp;&lt;b&gt;pearsonr()&lt;/b&gt;&amp;nbsp;함수로 상관계수를 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;result = spst.pearsonr(air['Temp'], air['Ozone'])

print(result)
print('* 상관계수:', result[0])
print('* p-value:', result[1])
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PearsonRResult(statistic=np.float64(0.6833717861490116)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, pvalue=np.float64(2.1977698002001854e-22))&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상관계수: 0.6833717861490116&lt;/li&gt;
&lt;li&gt;p-value: 2.1977698002001854e-22&lt;/li&gt;
&lt;/ul&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;b&gt;주의&lt;/b&gt;: 결측치가 있으면 계산되지 않습니다. 반드시 .notnull()로 제외하고 수행해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;air2 = air.loc[air['Solar.R'].notnull()] 결측치 제거
result = spst.pearsonr(air2['Solar.R'], air2['Ozone'])

print(result)
print('* 상관계수:', result[0])
print('* p-value:', result[1])
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PearsonRResult(statistic=np.float64(0.2800681334905376)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, pvalue=np.float64(0.000617587878856653))&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상관계수: 0.2800681334905376&lt;/li&gt;
&lt;li&gt;p-value: 0.000617587878856653&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value가 작음 = 상관관계가 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value 0.05로 봄(5퍼센트)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;상관계수확인 corr()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;air.corr(numeric_only=**True**)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numeric_only=&lt;b&gt;True 상관계수는&lt;/b&gt; 수치형 데이터니까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 : (배경색 표시하기) 히트맵처럼&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;air.corr(numeric_only=&lt;b&gt;True&lt;/b&gt;).style.background_gradient(cmap='Blues')&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvN27x/dJMcacO4kNp/k7rRbtJ7btkC3twOJ7BgNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvN27x/dJMcacO4kNp/k7rRbtJ7btkC3twOJ7BgNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvN27x/dJMcacO4kNp/k7rRbtJ7btkC3twOJ7BgNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvN27x%2FdJMcacO4kNp%2Fk7rRbtJ7btkC3twOJ7BgNk%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;412&quot; height=&quot;139&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;159&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;b&gt;Seaborn&lt;/b&gt;의&amp;nbsp;&lt;b&gt;heatmap()&lt;/b&gt;&amp;nbsp;함수로 상관계수를 시각화&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;plt.figure(figsize=(6, 6))
sns.heatmap(air.corr(numeric_only=True),
            annot=True, -&amp;gt; 숫자로 표현
            fmt='.3f', -&amp;gt; 소숫점 세자리까지
            cmap='Blues', -&amp;gt; 시원한 색깔
            vmin=-1, -&amp;gt; 색상을 -1부터 1까지
            vmax=1,
            square=True, -&amp;gt; 정사각형으로
            cbar=False) -&amp;gt; 위에 vmin어쩌고 그거 색상 바 없애기
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;상관계수의 한계&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CRISP-DM을 보며&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;가설수립&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설에 대한 추가 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 가지고 있는 표본(CSV)를 가지고 모집단을 예측해야해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 우린 가설을 세우지(모집단에 대한 가설)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X &amp;rarr; Y&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BMI &amp;rarr; Outcome (BMI가 Outcome에 영향이 있을 것이다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대립가설 - 상관계수 0.87 일때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vs&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;귀무가설 (영향이 없을 것이다) 0.87이 모집단에서 발생할 수 있는 확률이 0.0000003 (희귀)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정도면 우리가 귀무가설말고 대립가설을 선택해야하지 않을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대립가설의 뒷받침 근거가 되는 것이 p-value&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 모집단에 대한 가설이기 때문에 뭐가 좋다 나쁘다 우리가 정할 순 없지만&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;우리가 가지고 있는 표본(과거 데이터)&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;덴시티플롯 - 확률분포함수&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;그래프는 함수에 의해 그려지는 것&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>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/18</guid>
      <comments>https://daondakara.tistory.com/18#entry18comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:27:58 +0900</pubDate>
    </item>
    <item>
      <title>단변량 분석 ② - 범주형</title>
      <link>https://daondakara.tistory.com/17</link>
      <description>&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;nbsp;&lt;b&gt;빈도수&lt;/b&gt;와&amp;nbsp;&lt;b&gt;비율&lt;/b&gt;이 분석 대상이&amp;nbsp;된다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bar 플롯 = 두 범주의 개수를 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Seaborn의 Count Plot = 알아서 집계가 돼서 보여준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이차트는 잘 안씀&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;수치화&lt;/h2&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;b&gt;value_counts()&lt;/b&gt;&amp;nbsp;메소드는 범주형 변수에 포함된 범줏값 각각의 개수를 카운트 해 줌&lt;/li&gt;
&lt;li&gt;&lt;b&gt;normalize=True&lt;/b&gt;&amp;nbsp;옵션을 지정해 개수가 아닌 비율 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;print(diabetes['BMIStatus'].value_counts())
print('-' * 25)
print(diabetes['BMIStatus'].value_counts(normalize=True))
&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;435&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drpsKX/dJMcagcSaVN/46eTJnmtOXjr32fjHXrYh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drpsKX/dJMcagcSaVN/46eTJnmtOXjr32fjHXrYh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drpsKX/dJMcagcSaVN/46eTJnmtOXjr32fjHXrYh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrpsKX%2FdJMcagcSaVN%2F46eTJnmtOXjr32fjHXrYh1%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;235&quot; height=&quot;225&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;417&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;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;비만(Obese)이 전체에서 62.4%를 차지&lt;/li&gt;
&lt;li&gt;과체중(Overweight)이 23.6%, 정상(Normal)이 13.5%를 차지&lt;/li&gt;
&lt;li&gt;저체중(Underweight)은 0.5%로 매우 적은 비율&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;print(diabetes['Outcome'].value_counts())
print('-' * 25)
print(diabetes['Outcome'].value_counts(normalize=True))
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OZS4L/dJMcafkI6tt/aiiJvCpbw0BbqWcDC5NsHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OZS4L/dJMcafkI6tt/aiiJvCpbw0BbqWcDC5NsHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OZS4L/dJMcafkI6tt/aiiJvCpbw0BbqWcDC5NsHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOZS4L%2FdJMcafkI6tt%2FaiiJvCpbw0BbqWcDC5NsHk%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;264&quot; height=&quot;178&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  해석&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;당뇨가 아닌 사람이 65.1%&lt;/li&gt;
&lt;li&gt;당뇨인 사람 34.8%&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 범주값이 뭐가 있고 그게 몇개야 걔가 몇 퍼센트 차지하고 있어에 관심 있지(빈도)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Outcome의 평균이 뭐야? 이런거에 관심 없음&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;h2 data-ke-size=&quot;size26&quot;&gt;시각화&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Bar Plot&lt;/h2&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;nbsp;&lt;b&gt;value_counts()&lt;/b&gt;&amp;nbsp;를 사용하여 집계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;집계 결과의 index: 범줏값 이름&lt;/li&gt;
&lt;li&gt;집계 결과의 values: 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;집계 결과를&amp;nbsp;&lt;b&gt;Matplotlib&lt;/b&gt;의&amp;nbsp;&lt;b&gt;bar()&lt;/b&gt;&amp;nbsp;함수로 시각화&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;첫번째. 집계 과정

temp = diabetes['BMIStatus'].value_counts()
print(temp)
print('-'*25)
print(temp.index) # 바플롯 그릴때 이게 x축으로
print(temp.values) # 이게 y축으로 감
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/naeAg/dJMcac2yRha/JBGLi11pvF6hwfCr3XkQYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/naeAg/dJMcac2yRha/JBGLi11pvF6hwfCr3XkQYk/img.png&quot; data-alt=&quot;빨간색이 인덱스 노란색이 밸류즈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/naeAg/dJMcac2yRha/JBGLi11pvF6hwfCr3XkQYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnaeAg%2FdJMcac2yRha%2FJBGLi11pvF6hwfCr3XkQYk%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;633&quot; height=&quot;151&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;빨간색이 인덱스 노란색이 밸류즈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;두번째. 시각화

temp = diabetes['BMIStatus'].value_counts()

plt.bar(x=temp.index.astype(str), height=temp.values)
astype(str) 문자면 상관 없는데 그릴게 숫자라면 쓸데 없는 값들도 그려지게 됨
**숫자가 문자화 돼서 중간값이 출력되지 않게 해주는 역할**

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;729&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzLdGF/dJMcahJCDBb/gEHTJTRTh3NYI5MZsSea20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzLdGF/dJMcahJCDBb/gEHTJTRTh3NYI5MZsSea20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzLdGF/dJMcahJCDBb/gEHTJTRTh3NYI5MZsSea20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzLdGF%2FdJMcahJCDBb%2FgEHTJTRTh3NYI5MZsSea20%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;470&quot; height=&quot;202&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Seaborn의 countplot() 함수를 사용하면 집계 과정 없이도 Bar Plot을 그릴 수 있다

sns.countplot(x='BMIStatus', data=diabetes)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot; data-token-index=&quot;0&quot;&gt; 이게 좋다&amp;hellip; 위에 집계과정 없으니까는(첫번째 과정이 필요없음) &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;&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;h2 data-ke-size=&quot;size26&quot;&gt;Pie Chart _ 잘 안쓴다. 피하자 우리는 바플롯, 카운트플롯을 쓰자&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;범주별 값의 빈도수가 아닌 비율을 비교할 때는 Pie Chart를 사용&lt;/li&gt;
&lt;li&gt;Pie Chart 역시 집계를 먼저 해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;# 집계
temp = diabetes['BMIStatus'].value_counts()
print(temp.index)
print(temp.values)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 시각화
temp = diabetes['BMIStatus'].value_counts()

plt.pie(x=temp.values, labels=temp.index, autopct='%.2f%%')
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>KT 에이블스쿨 8기/데이터분석</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/17</guid>
      <comments>https://daondakara.tistory.com/17#entry17comment</comments>
      <pubDate>Tue, 25 Nov 2025 09:48:15 +0900</pubDate>
    </item>
    <item>
      <title>단변량 분석 ① - 수치형</title>
      <link>https://daondakara.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;EDA &amp;amp; CDA&lt;/h2&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;보통 다음의 순서대로 진행함 ① 개별 변수(feature + target)의 분포를 살펴봄 ② feature와 target 간의 관계를 살펴봄 (가설을 확인하는 단계) ③ feature들 간의 관계를 살펴봄&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;단변량 분석&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;수치형과 범주형&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnfUyv/dJMcacBxDrZ/ULOK1JM6WpIUS8KfwYthg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnfUyv/dJMcacBxDrZ/ULOK1JM6WpIUS8KfwYthg1/img.png&quot; data-alt=&quot;범주형 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnfUyv/dJMcacBxDrZ/ULOK1JM6WpIUS8KfwYthg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnfUyv%2FdJMcacBxDrZ%2FULOK1JM6WpIUS8KfwYthg1%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;622&quot; height=&quot;131&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;205&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;숫자로 저장된 자료지만 범주형 일 수 있음 - Outcome&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;수치화&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수치형 변수를 수치화해 분석할 때는 &lt;b&gt;평균, 중앙값, 최빈값, 4분위수&lt;/b&gt; 등 &lt;b&gt;대푯값&lt;/b&gt;을 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;describe()&lt;/b&gt;&amp;nbsp;메소드를 사용해 수치형 변수의 통계 정보를 쉽게 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대푯값 ( mean(), median(), mode(), describe()&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 평균&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;mean()&lt;/b&gt;&amp;nbsp;메소드로 평균을 구함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;diabetes['BMI'].mean()&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 중앙값(median)&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;median()&lt;/b&gt;&amp;nbsp;메소드로 중앙값을 구함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;diabetes['BMI'].median()&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 최빈값(데이터 중에서 가장 빈번하게 나타나는 값, 즉 빈도가 가장 높은 값을 최빈값이라고 함)&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;mode()&lt;/b&gt;&amp;nbsp;메소드로 최빈값을 확인&lt;/li&gt;
&lt;li&gt;같은 빈도의 값이 여럿 존재할 수 있으므로 최빈값은 여러 개 존재 할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;diabetes['BMIStatus'].mode()&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;0    Obese
Name: BMIStatus, dtype: object
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;diabetes['BMIStatus'].mode()[0]&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;scheme&quot;&gt;&lt;code&gt;'Obese'
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실제 최빈값은 다음과 같이 인덱스를 사용해 조회&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 4분위수&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;describe()&lt;/b&gt;&amp;nbsp;메소드로 4분위수를 확인할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;count    757.000000
mean      32.457464
std        6.924988
min       18.200000
25%       27.500000
50%       32.300000
75%       36.600000
max       67.100000
Name: BMI, dtype: float64
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기술통계 정보 - 수치형 데이터 확인 describe()&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수 하나에 대한 기술통계 정보를&amp;nbsp;&lt;b&gt;describe()&lt;/b&gt;&amp;nbsp;메소드로 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rQsiy/dJMcadmQ64u/iHgn5OBmILsERgBzJUI2bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rQsiy/dJMcadmQ64u/iHgn5OBmILsERgBzJUI2bk/img.png&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;415&quot; data-is-animation=&quot;false&quot; style=&quot;width: 58.391%; margin-right: 10px;&quot; data-widthpercent=&quot;59.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rQsiy/dJMcadmQ64u/iHgn5OBmILsERgBzJUI2bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrQsiy%2FdJMcadmQ64u%2FiHgn5OBmILsERgBzJUI2bk%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;489&quot; height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lieAW/dJMcafLNnBN/ra7OQPeYh4JbgV2Xkxt4Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lieAW/dJMcafLNnBN/ra7OQPeYh4JbgV2Xkxt4Pk/img.png&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;457&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.4462%;&quot; data-widthpercent=&quot;40.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lieAW/dJMcafLNnBN/ra7OQPeYh4JbgV2Xkxt4Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlieAW%2FdJMcafLNnBN%2Fra7OQPeYh4JbgV2Xkxt4Pk%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;373&quot; height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;(왼) 시리즈값으로 확인 (오) 대상 변수를 리스트 형태로 전달해 데이터프레임 형태로 결과를 표시 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yMXdi/dJMcafZku2O/Rh58W16KWcGK2Tlb2xLWPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yMXdi/dJMcafZku2O/Rh58W16KWcGK2Tlb2xLWPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yMXdi/dJMcafZku2O/Rh58W16KWcGK2Tlb2xLWPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyMXdi%2FdJMcafZku2O%2FRh58W16KWcGK2Tlb2xLWPk%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;582&quot; height=&quot;163&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  해석&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BMI는 체질량지수를 의미&lt;/li&gt;
&lt;li&gt;전체 데이터는 768건&lt;/li&gt;
&lt;li&gt;전체 768건 중 BMI 값이 확인된 것은 757건 / 나머지는 결측치 / 결측치 有&lt;/li&gt;
&lt;li&gt;BMI 범위는 최소 18.2에서 최대 67.1까지이며, 일부 이상치 존재&lt;/li&gt;
&lt;li&gt;평균 BMI는 32.46으로, WHO 기준상 &amp;lsquo;비만&amp;rsquo; 범주&lt;/li&gt;
&lt;li&gt;BMI의 25%, 50%, 75% 분위값은 각각 27.5, 32.3, 36.6&lt;/li&gt;
&lt;li&gt;BMI가 25 이상인 과체중/비만 인원이 전체의 상당 비율을 차지&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;874&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yl5eb/dJMcagjDoQr/iiKhWqjvDDLFmjNHzZw1jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yl5eb/dJMcagjDoQr/iiKhWqjvDDLFmjNHzZw1jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yl5eb/dJMcagjDoQr/iiKhWqjvDDLFmjNHzZw1jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyl5eb%2FdJMcagjDoQr%2FiiKhWqjvDDLFmjNHzZw1jk%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;534&quot; height=&quot;134&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  해석&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;768건 모두 나이 정보를 보유함 (결측치 없음)&lt;/li&gt;
&lt;li&gt;나이 범위는 최소 21세부터 최대 81세까지&lt;/li&gt;
&lt;li&gt;평균 나이는 약 33.24세로 비교적 젊은 연령대 중심&lt;/li&gt;
&lt;li&gt;표준편차가 약 11.76으로 연령 분포에 다양성이 있음&lt;/li&gt;
&lt;li&gt;나이 중앙값(50%)은 29세로 절반의 환자가 29세 이하&lt;/li&gt;
&lt;li&gt;사분위수 25%: 24세 이하, 75%: 41세 이하&lt;/li&gt;
&lt;li&gt;24세~41세 구간에 전체의 절반이 위치&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;h2 data-ke-size=&quot;size26&quot;&gt;수치형 데이터의 시각화&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제일 기본적인 시각화 방법 : Histogram&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Matplotlib&lt;/b&gt;의&amp;nbsp;&lt;b&gt;hist()&lt;/b&gt;&amp;nbsp;함수로 Histogram을 그린다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;plt.hist(x='BMI', data=diabetes)
plt.hist(x='BMI', data=diabetes, bins=20, 
alpha=0.7(투명도), edgecolor='k'(테두리색)) 이렇게 바꾸면 밑에 sns랑 비슷해 보임
plt.xlabel('BMI')
plt.ylabel('Frequency')
plt.show()
&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;&lt;b&gt;Seaborn&lt;/b&gt;의&amp;nbsp;&lt;b&gt;histplot()&lt;/b&gt;&amp;nbsp;함수로 Histogram을 그린다 [&lt;b&gt;bins&lt;/b&gt;&amp;nbsp;옵션을 사용해 구간 개수를 적절히 지정]&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.histplot(x='BMI', data=diabetes ,bins=20)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Seaborn은 알아서 예쁘게 되는데 Matplotlib은 필요하면 알아서 꾸며야함&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Density Plot(밀도 함수)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Histogram은 빈즈에 의해 모양이 바뀌지만 kde플롯은 바뀌지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;1. Pandas가 제공하는 plot() 메소드에 kind='kde' 를 지정해 
Density Plot을 쉽게 그릴 수 있음

diabetes['BMI'].plot(kind='kde')
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;2. Seaborn의 kdeplot() 함수를 사용해 Density Plot을 그림

sns.kdeplot(x='BMI', data=diabetes)
plt.show()
&lt;/code&gt;&lt;/pre&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;셀 수 있는 값의 분포, 즉&amp;nbsp;&lt;b&gt;이산 확률 분포&lt;/b&gt;는 표로 표현 할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예를 들면 주사위를 던져 1 ~ 6이 나올 수 있는 확률)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에 셀 수 없는 값의 분포, 즉&amp;nbsp;&lt;b&gt;연속 확률 분포&lt;/b&gt;는 대상 값이 너무 많아 표로 표현할 수 없다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 연속 확률 분포는&amp;nbsp;&lt;b&gt;함수(=그래프)&lt;/b&gt;, 즉&amp;nbsp;&lt;b&gt;그래프&lt;/b&gt;로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예 예를 들어 키가 140~180 사이인 학생들의 키 분포)&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;h2 data-ke-size=&quot;size26&quot;&gt;Box Plot (교안 / 질문이 중요하다고 했던 박스플롯 박사)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Box Plot은 이해하기가 다소 어렵지만, 데이터 분포를 확인하는 유익한 시각화 도구&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Matplotlib&lt;/b&gt;의&amp;nbsp;&lt;b&gt;boxplot()&lt;/b&gt;&amp;nbsp;함수를 사용해 Box Plot을 그린다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;plt.boxplot(x='BMI', data=diabetes[diabetes['BMI'].notna()]) 결측치는 제외하고
plt.show()
&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;&lt;b&gt;주의&lt;/b&gt;: 결측치가 있으면 그래프가 그려지지 않는다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Seaborn의 boxplot() 함수를 사용해 Box Plot 그리기

sns.boxplot(x='BMI', data=diabetes[diabetes['BMI'].notna()])
sns.boxplot(x='BMI', data=diabetes)**Seaborn**은 결측치가 있어도 그려짐
plt.show()
&lt;/code&gt;&lt;/pre&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;969&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okMyh/dJMcaaX1uc1/wmZtH37Xrr96XRUcb7P6c1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okMyh/dJMcaaX1uc1/wmZtH37Xrr96XRUcb7P6c1/img.png&quot; data-alt=&quot;★★ 박스플롯의 의미&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okMyh/dJMcaaX1uc1/wmZtH37Xrr96XRUcb7P6c1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokMyh%2FdJMcaaX1uc1%2FwmZtH37Xrr96XRUcb7P6c1%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;508&quot; height=&quot;181&quot; data-origin-width=&quot;969&quot; data-origin-height=&quot;345&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;IQR : 25%와 75% 사이의 차이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 75% 가 20이고 25% 가 5라면 IQR은 15&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;**Q3에서 IQR*1.5만큼 쭈욱 가보면 어느 경계가 나오지만 이 경계는 박스플롯에 나타나지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;**Q1에서 IQR*1.5만큼 쭈욱 가봐도 어느 경계가 나오지만 이 경계는 박스플롯에 나타나지 않음&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc5IYJ/dJMcaihr0Xu/qUfRkQVLXA3eLvGXSPLKb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc5IYJ/dJMcaihr0Xu/qUfRkQVLXA3eLvGXSPLKb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc5IYJ/dJMcaihr0Xu/qUfRkQVLXA3eLvGXSPLKb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc5IYJ%2FdJMcaihr0Xu%2FqUfRkQVLXA3eLvGXSPLKb1%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;465&quot; height=&quot;155&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;247&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;h2 data-ke-size=&quot;size26&quot;&gt;시계열 데이터 시각화&lt;/h2&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Matplotlib의 plot() 함수를 사용해 Line Plot

air['Date'] = pd.to_datetime(air['Date'])

plt.plot('Date', 'Ozone', data=air, label='Ozone')
plt.plot('Date', 'Temp', data=air, label='Temp')
plt.xlabel('Date')
plt.legend()
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Seaborn의 lineplot() 함수를 사용해 Line Plot

sns.lineplot(x='Date', y='Ozone', data=air, label='Ozone')
sns.lineplot(x='Date', y='Temp', data=air, label='Temp')
plt.legend()
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;
&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>KT 에이블스쿨 8기/데이터분석</category>
      <author>daondakara</author>
      <guid isPermaLink="true">https://daondakara.tistory.com/16</guid>
      <comments>https://daondakara.tistory.com/16#entry16comment</comments>
      <pubDate>Tue, 25 Nov 2025 09:45:08 +0900</pubDate>
    </item>
  </channel>
</rss>