<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>min0jun 님의 블로그</title>
    <link>https://min0jun.tistory.com/</link>
    <description>min0jun 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 28 Jun 2026 11:49:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>min0jun</managingEditor>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 33일차</title>
      <link>https://min0jun.tistory.com/43</link>
      <description>&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/bHSqRS/dJMcaaeLv9t/MM2eBtMJEuJdtyx5qgOA1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHSqRS/dJMcaaeLv9t/MM2eBtMJEuJdtyx5qgOA1k/img.png&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;348&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;51.26&quot; style=&quot;width: 50.6618%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHSqRS/dJMcaaeLv9t/MM2eBtMJEuJdtyx5qgOA1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHSqRS%2FdJMcaaeLv9t%2FMM2eBtMJEuJdtyx5qgOA1k%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;558&quot; height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zB0bi/dJMcabLyMLz/ZTQkWlFjnzeTrvDZ6w6vTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zB0bi/dJMcabLyMLz/ZTQkWlFjnzeTrvDZ6w6vTK/img.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;404&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.1754%;&quot; data-widthpercent=&quot;48.74&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zB0bi/dJMcabLyMLz/ZTQkWlFjnzeTrvDZ6w6vTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzB0bi%2FdJMcabLyMLz%2FZTQkWlFjnzeTrvDZ6w6vTK%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;404&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 오늘의 학습 목표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 머신러닝 모델을 만들 때 &lt;span&gt;&lt;b&gt;데이터를 어떻게 나누고, 어떻게 평가해야 하는지&lt;/b&gt;&lt;/span&gt;를 중심으로 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에는 데이터 수집, EDA, 이상치, 결측치, 인코딩, 스케일링처럼 모델링 전에 필요한 전처리 과정을 정리했다면, 오늘은 그 다음 단계인 &lt;span&gt;&lt;b&gt;데이터 분리와 모델 검증 과정&lt;/b&gt;&lt;/span&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;두 번째는 train/test 데이터를 분리해서 모델을 평가하는 흐름을 익히는 것이다. 모델을 학습하는 데이터와 평가하는 데이터를 나눠야 실제 예측 성능을 조금 더 객관적으로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째는 교차 검증과 GridSearch의 개념을 정리하는 것이다. 단순히 한 번 데이터를 나누는 것에서 끝나는 것이 아니라, 여러 번 나누어 검증하고 하이퍼파라미터를 자동으로 탐색하는 방법까지 학습했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;머신러닝&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;과적합이란 무엇인가&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;span&gt;&lt;b&gt;새로운 데이터에도 어느 정도 잘 맞는 모델을 만드는 것&lt;/b&gt;&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;train/test 데이터 분리&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.3,
    shuffle=True,
    random_state=42
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 test_size는 테스트 데이터 비율을 의미한다. test_size=0.3이면 전체 데이터 중 30%를 테스트 데이터로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shuffle=True는 데이터를 섞어서 나누겠다는 의미이고, random_state=42는 실행할 때마다 같은 방식으로 데이터가 나뉘도록 난수 값을 고정하는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 random_state가 왜 필요한지 크게 와닿지 않았는데, 실습을 하다 보면 같은 코드를 실행해도 데이터가 다르게 나뉘면 결과가 계속 달라질 수 있다. 그래서 비교나 재현을 위해 고정값을 주는 것이 중요하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;타이타닉 데이터 전체 실습 흐름&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;rarr; 데이터 분리 &amp;rarr; EDA &amp;rarr; 데이터 전처리 &amp;rarr; 모델 수립 &amp;rarr; 평가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이타닉 데이터는 생존 여부를 예측하는 분류 문제다. 즉, 종속변수는 Survived이고, 생존했는지 아닌지를 예측하는 것이 목표다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 데이터를 불러오고 기본 정보를 확인한다.&lt;/p&gt;
&lt;pre class=&quot;xl&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

train_df = pd.read_csv(&quot;train.csv&quot;)
test_df = pd.read_csv(&quot;test.csv&quot;)

train_df.info()
train_df.describe(include='all')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;info()를 통해 결측치와 데이터 타입을 확인할 수 있고, describe(include='all')을 통해 수치형과 범주형 변수의 기본 통계를 함께 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EDA에서는 Age&lt;span&gt;, &lt;/span&gt;Fare&lt;span&gt;, &lt;/span&gt;Family&lt;span&gt; 같은 변수를 살펴보았다. 특히 &lt;/span&gt;SibSp&lt;span&gt;와 &lt;/span&gt;Parch&lt;span&gt;를 더해서 가족 수를 나타내는 &lt;/span&gt;Family&lt;span&gt; 변수를 만드는 방식이 나왔다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;def get_family(df):
    df['Family'] = df['SibSp'] + df['Parch'] + 1
    return df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 기존 변수만 사용하는 것이 아니라, 기존 변수를 조합해서 새로운 변수를 만드는 과정도 모델 성능에 영향을 줄 수 있다. 이 부분은 피처 엔지니어링의 시작처럼 느껴졌다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;이상치와 결측치 처리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이타닉 실습에서는 Fare의 이상치를 처리했다.&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;train_df_2 = train_df_2[train_df_2['Fare'] &amp;lt; 512]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fare가 지나치게 큰 데이터는 전체 분포에 영향을 줄 수 있기 때문에 조건을 걸어 제거했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결측치는 Age, Fare, Embarked 등을 중심으로 처리했다. 수치형 변수는 평균값으로 채우고, 범주형 변수는 최빈값이나 별도 방식으로 처리할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;def get_non_missing(df):
    Age_mean = train_df_2['Age'].mean()
    Fare_mean = train_df_2['Fare'].mean()

    df['Age'] = df['Age'].fillna(Age_mean)
    df['Fare'] = df['Fare'].fillna(Fare_mean)

    return df&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;인코딩과 스케일링&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 모델은 숫자를 기반으로 학습하기 때문에 문자열 데이터는 숫자로 바꿔야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이타닉 데이터에서는 Sex&lt;span&gt;, &lt;/span&gt;Pclass&lt;span&gt;, &lt;/span&gt;Embarked&lt;span&gt; 같은 범주형 변수를 처리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sex처럼 남자/여자 형태로 나뉘는 변수는 레이블 인코딩을 사용할 수 있다. Embarked처럼 항구 정보는 원-핫 인코딩을 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;from sklearn.preprocessing import LabelEncoder, OneHotEncoder

le = LabelEncoder()
df['Sex_le'] = le.fit_transform(df['Sex'])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원-핫 인코딩은 범주를 각각의 열로 분리해서 0과 1로 표현한다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;embarked_dummies = pd.get_dummies(df['Embarked'])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수치형 변수는 스케일링을 적용했다. Age, Fare, Family처럼 단위나 범위가 다른 변수들은 모델이 특정 변수에 지나치게 영향을 받지 않도록 값을 조정해줄 수 있다.&lt;/p&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;from sklearn.preprocessing import StandardScaler, MinMaxScaler

sd_sc = StandardScaler()
mm_sc = MinMaxScaler()

df['Fare_sd_sc'] = sd_sc.fit_transform(df[['Fare']])
df['Age_mm_sc'] = mm_sc.fit_transform(df[['Age']])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케일링은 단순히 값의 모양만 바꾸는 것이 아니라, 모델이 변수들을 더 공정하게 비교할 수 있게 만드는 과정이라고 볼 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;로지스틱 회귀 모델 학습&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이타닉 생존 여부는 분류 문제이기 때문에 로지스틱 회귀 모델을 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

X = df[['Age_mm_sc', 'Fare_sd_sc', 'Family_mm_sc', 'Pclass_le', 'Sex_le']]
y = df['Survived']

model.fit(X, y)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 학습한 뒤에는 예측값을 만들고, 정확도나 F1-score로 성능을 평가할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;from sklearn.metrics import accuracy_score, f1_score

y_pred = model.predict(X)

accuracy = accuracy_score(y, y_pred)
f1 = f1_score(y, y_pred)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확도는 전체 예측 중 맞춘 비율을 의미하고, F1-score는 정밀도와 재현율을 함께 고려한 지표다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 문제에서는 데이터 불균형이 있을 수 있기 때문에 정확도만 보는 것이 항상 충분하지 않다. 그래서 F1-score도 함께 확인하는 것이 중요하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;테스트 데이터에 모델 적용하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kaggle 제출 실습에서는 train 데이터로 만든 전처리 함수를 test 데이터에도 동일하게 적용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분이 중요했다. train 데이터와 test 데이터에 서로 다른 기준의 전처리를 적용하면 모델 입력 구조가 달라질 수 있다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;test_df_2 = get_family(test_df)
test_df_2 = get_non_missing(test_df_2)
test_df_2 = get_numeric_sc(test_df_2)
test_df_2 = get_category(test_df_2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 학습된 모델로 test 데이터를 예측하고, 제출 파일의 Survived 컬럼에 예측 결과를 넣는다.&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;test_X = test_df_2[['Age_mm_sc', 'Fare_sd_sc', 'Family_mm_sc', 'Pclass_le', 'Sex_le']]

y_test_pred = model.predict(test_X)

sub_df = pd.read_csv('gender_submission.csv')
sub_df['Survived'] = y_test_pred
sub_df.to_csv('./result.csv', index=False)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정은 실제 머신러닝 프로젝트의 흐름과 꽤 비슷하게 느껴졌다. train 데이터로 모델을 만들고, test 데이터에 같은 전처리 흐름을 적용한 뒤, 예측 결과를 파일로 저장하는 방식이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;교차 검증&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;train/test 분리는 기본적인 평가 방법이지만, 한 번만 나눈 테스트 데이터에 성능이 의존할 수 있다는 한계가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 보완하기 위해 교차 검증을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;교차 검증은 Train Data를 여러 개의 하위 집합으로 나누고, 각 하위 집합을 돌아가면서 검증 데이터로 사용하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 K-Fold 방식이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 데이터를 5개로 나누면, 1번째 fold를 검증용으로 쓰고 나머지를 학습용으로 사용한다. 그 다음에는 2번째 fold를 검증용으로 사용하고, 이런 식으로 5번 반복한다.&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;from sklearn.model_selection import KFold

kfold = KFold(n_splits=5)
scores = []&lt;/code&gt;&lt;/pre&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;또한 분류 문제에서 레이블 불균형이 있는 경우에는 StratifiedKFold를 사용할 수 있다. 이는 각 fold에 클래스 비율이 최대한 비슷하게 유지되도록 나누는 방식이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;GridSearch&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GridSearch는 여러 하이퍼파라미터 조합을 자동으로 실험해보는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이퍼파라미터는 모델 학습 전에 사람이 직접 정해야 하는 값이다. 예를 들어 로지스틱 회귀에서는 solver나 max_iter 같은 값이 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from sklearn.model_selection import GridSearchCV

params = {
    'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],
    'max_iter': [100, 200]
}

grid_model = GridSearchCV(
    model,
    param_grid=params,
    scoring='accuracy',
    cv=5
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GridSearch는 지정한 조합을 하나씩 실험하면서 가장 좋은 성능을 내는 조합을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 모든 조합을 하나하나 돌려보는 것보다 훨씬 효율적이고, 교차 검증과 함께 사용할 수 있어서 모델 튜닝 과정에서 자주 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 GridSearch도 무작정 많이 돌리면 시간이 오래 걸릴 수 있다. 그래서 어떤 파라미터를 어느 범위에서 탐색할지 정하는 것도 중요하다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 나의 간단 소감&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이타닉 실습은 전체 흐름을 다시 연결해볼 수 있어서 좋았다. 데이터 로드부터 EDA, 이상치 처리, 결측치 처리, 인코딩, 스케일링, 모델 학습, 예측, 제출 파일 생성까지 이어지니 이전에 배운 내용들이 따로따로 있는 게 아니라 하나의 과정으로 이어진다는 느낌이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 train 데이터와 test 데이터에 같은 전처리 흐름을 적용해야 한다는 점이 기억에 남았다. train에서는 Age를 채우고, Sex를 인코딩하고, Fare를 스케일링했는데 test에는 다르게 처리하면 모델이 제대로 예측할 수 없다. 전처리는 그냥 데이터를 예쁘게 정리하는 단계가 아니라, 모델 입력을 일관되게 만드는 과정이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;교차 검증은 처음에는 조금 복잡해 보였지만, 결국 여러 번 나눠서 더 안정적으로 평가하자는 개념이었다. 한 번의 train/test split 결과만 보고 모델이 좋다고 판단하면 위험할 수 있기 때문에, 여러 fold를 돌려보는 방식이 더 신뢰도 있는 평가로 이어진다는 점이 이해됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GridSearch는 모델 튜닝을 자동화하는 도구처럼 느껴졌다. 사람이 직접 여러 설정을 바꿔가며 실험할 수도 있지만, GridSearch를 쓰면 후보 조합을 정해두고 자동으로 비교할 수 있다. 모델을 잘 만드는 것도 중요하지만, 좋은 설정을 찾는 과정도 모델링의 일부라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 내용은 화려한 알고리즘을 새로 배우는 느낌보다는, 머신러닝 프로젝트의 기본 뼈대를 다지는 느낌이었다. &lt;span&gt;&lt;b&gt;데이터를 나누고, 검증하고, 튜닝하는 과정이 있어야 모델 성능을 더 믿을 수 있다&lt;/b&gt;&lt;/span&gt;는 점이 오늘 가장 크게 남았다.&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/43</guid>
      <comments>https://min0jun.tistory.com/43#entry43comment</comments>
      <pubDate>Fri, 26 Jun 2026 20:46:46 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 32일차</title>
      <link>https://min0jun.tistory.com/42</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 오늘의 학습 목표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 머신러닝 모델을 만들기 전에 필요한 전체 흐름을 다시 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전까지는 모델을 학습하고 평가하는 부분을 중심으로 봤다면, 오늘은 그 앞단에 있는 &lt;span&gt;&lt;b&gt;데이터 수집, EDA, 데이터 전처리 과정&lt;/b&gt;&lt;/span&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;첫 번째는 예측 모델링 프로세스가 어떤 순서로 진행되는지 이해하는 것이다. 데이터 수집부터 전처리, EDA, 모델링과 평가, 배포까지 이어지는 전체 흐름을 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째는 EDA를 통해 데이터를 어떻게 이해하는지 보는 것이다. 기술통계와 시각화를 활용해서 데이터의 분포, 관계, 이상치, 범주별 차이를 확인하는 방법을 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째는 머신러닝에 들어가기 전 데이터를 어떻게 다듬는지 정리하는 것이다. 이상치, 결측치, 인코딩, 스케일링처럼 모델 학습 전에 반드시 확인해야 하는 전처리 개념을 학습했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;머신러닝&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;예측 모델링 전체 프로세스&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;rarr; 데이터 전처리 &amp;rarr; EDA &amp;rarr; 모델링 및 평가 &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;데이터 수집 단계에서는 회사 내부에 이미 존재하는 데이터를 SQL이나 Python으로 추출할 수도 있고, 외부 데이터를 CSV, Excel, API, 크롤링 방식으로 가져올 수도 있다. 여기서 중요한 점은 데이터 분석가가 항상 데이터를 직접 생성하는 것은 아니라는 점이다.&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;이라고 하면 그냥 파일 하나 다운로드하는 정도로 생각했는데, 실제로는 Data Source, Data Lake, Data Warehouse, Data Mart처럼 데이터가 저장되고 가공되는 구조까지 이어지는 큰 흐름이었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;데이터 수집 구조&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터는 여러 출처에서 들어올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OLTP Database는 온라인 쇼핑, 뱅킹, 주문 입력처럼 실시간으로 발생하는 트랜잭션 데이터를 처리하는 데이터베이스다. 회사 내부 시스템에서 생성되는 고객 관계 데이터나 마케팅, 세일즈 데이터도 중요한 데이터 소스가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 데이터로는 Google Analytics 같은 Third-Party 데이터가 있고, 사용자의 행동을 기록한 Web/Log 데이터도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 다양한 데이터는 원시 형태로 Data Lake에 저장될 수 있고, 더 구조화된 형태로 정리되면 Data Warehouse에 저장된다. 이후 특정 부서나 목적에 맞게 가공된 데이터는 Data Mart 형태로 활용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면, 데이터 분석은 단순히 주어진 CSV 파일을 여는 것에서 끝나는 것이 아니라 &lt;span&gt;&lt;b&gt;데이터가 어디서 오고, 어떤 구조로 저장되고, 어떤 목적에 맞게 가공되는지 이해하는 것&lt;/b&gt;&lt;/span&gt;에서 시작한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;EDA란 무엇인가&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EDA는 Exploratory Data Analysis의 약자로, 탐색적 데이터 분석을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EDA는 데이터를 시각화하거나 기술통계를 확인하면서 데이터를 이해하고 탐구하는 과정이다. 모델링을 하기 전에 데이터가 어떤 구조를 가지고 있는지, 변수들이 어떤 분포를 가지는지, 이상치는 없는지, 변수 간 관계는 어떤지 확인하는 단계라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측 모델링을 하지 않더라도 EDA는 데이터 분석에서 거의 항상 필요하다. 데이터를 제대로 이해하지 못한 상태에서 모델부터 만들면, 결과가 나와도 그 결과를 해석하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술통계에서는 describe()를 활용할 수 있다. 기본적으로 수치형 변수의 개수, 평균, 표준편차, 최솟값, 사분위수, 최댓값 등을 확인할 수 있고, include='all' 옵션을 사용하면 범주형 변수까지 함께 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;tips.describe(include='all')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 한 줄만으로도 데이터의 기본 구조를 빠르게 볼 수 있다. 물론 이것만으로 모든 것을 알 수는 없지만, EDA의 출발점으로는 꽤 유용하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;시각화를 활용한 EDA&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 EDA에서 자주 사용하는 시각화 방법도 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;countplot은 범주형 데이터의 빈도수를 확인할 때 사용한다. 예를 들어 요일별 데이터 개수, 성별 데이터 개수처럼 각 카테고리에 데이터가 얼마나 있는지 보고 싶을 때 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sns.countplot(x='day', data=tips)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;barplot은 범주형 변수에 따라 수치형 값의 평균을 비교할 때 사용한다. 예를 들어 성별에 따른 평균 팁 금액이나 요일별 평균 결제 금액을 비교할 때 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;boxplot은 데이터의 분포, 중앙값, 사분위수, 이상치를 한 번에 볼 수 있는 그래프다. 여러 그룹의 분포를 비교할 때 특히 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;histogram은 수치형 데이터의 분포를 확인할 때 사용한다. 데이터가 어느 구간에 많이 몰려 있는지, 한쪽으로 치우쳐 있는지 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scatterplot은 두 수치형 변수 사이의 관계를 확인할 때 사용한다. 예를 들어 total_bill과 tip처럼 한 변수가 증가할 때 다른 변수도 같이 증가하는지 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pairplot은 여러 변수 간 관계를 한 번에 확인할 수 있는 시각화다. 대각선에는 각 변수의 분포가 나타나고, 나머지 영역에는 변수 간 관계가 나타난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 그래프 종류가 많아서 헷갈렸는데, 기준을 단순하게 잡으니 조금 정리됐다. &lt;span&gt;&lt;b&gt;범주별 개수를 보려면 countplot, 범주별 평균 비교는 barplot, 분포와 이상치는 boxplot, 수치형 분포는 histogram, 두 수치형 관계는 scatterplot&lt;/b&gt;&lt;/span&gt;으로 생각하면 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;데이터 전처리의 중요성&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;이상치 처리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상치는 관측된 데이터 범위에서 크게 벗어난 아주 작은 값이나 큰 값을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상치를 찾는 기준에는 여러 방법이 있지만, 오늘은 ESD와 IQR 기준을 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESD는 데이터가 정규분포를 따른다고 가정할 때 평균에서 표준편차의 3배 이상 떨어진 값을 이상치로 보는 방식이다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;import numpy as np

mean = np.mean(data)
std = np.std(data)

upper_limit = mean + 3 * std
lower_limit = mean - 3 * std&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 모든 데이터가 정규분포를 따르는 것은 아니다. 데이터가 비대칭이거나 샘플 크기가 작으면 ESD 기준이 적절하지 않을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IQR은 사분위수를 이용해 이상치를 판단하는 방식이다. Q1은 25%, Q3는 75% 지점이고, IQR은 Q3에서 Q1을 뺀 값이다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)

IQR = Q3 - Q1

upper_limit = Q3 + 1.5 * IQR
lower_limit = Q1 - 1.5 * IQR&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;결측치 처리&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;pre class=&quot;routeros&quot;&gt;&lt;code&gt;df.dropna(axis=0)
df.dropna(axis=1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값을 채우는 방식도 있다. 수치형 데이터는 평균이나 중앙값으로 대치할 수 있고, 범주형 데이터는 최빈값으로 대치할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot;&gt;&lt;code&gt;df.fillna(value)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 평균이 항상 좋은 대표값은 아니다. 이상치가 많은 데이터에서는 평균이 쉽게 흔들릴 수 있기 때문에 중앙값이 더 적절할 수 있다. 이 부분은 이상치와도 연결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sklearn에서는 SimpleImputer를 활용해 평균, 중앙값, 최빈값으로 결측치를 대치할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 나아가 IterativeImputer나 KNNImputer처럼 알고리즘을 이용한 대치 방법도 있다. 결측치 처리가 생각보다 단순한 빈칸 채우기가 아니라 하나의 방법론으로 발전해 있다는 점이 인상적이었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;인코딩&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;예를 들어 1등급, 2등급, 3등급을 각각 0, 1, 2로 바꿀 수 있다.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()
encoded = encoder.fit_transform(data)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이블 인코딩은 간단하지만, 모델이 숫자의 크기에 의미가 있다고 잘못 해석할 수 있다. 실제로는 순서가 없는 범주인데 0보다 2가 더 크다고 받아들일 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원-핫 인코딩은 각 범주를 0과 1로 이루어진 벡터로 바꾸는 방식이다. 예를 들어 빨강, 파랑, 초록을 각각 독립된 열로 만들어 표현한다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;pd.get_dummies(df)&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;스케일링&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케일링은 수치형 데이터의 단위를 맞추는 전처리 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터마다 단위가 다르면 모델이 특정 변수의 크기에 더 큰 영향을 받을 수 있다. 예를 들어 나이는 20~80 사이인데 소득은 수천만 단위라면, 단순히 숫자 크기만 보고 소득 변수가 더 중요하게 반영될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 스케일링 방법은 표준화, 정규화, 로버스트 스케일링이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준화는 평균을 0, 표준편차를 1로 맞추는 방법이다.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규화는 데이터를 0과 1 사이 값으로 바꾸는 방법이다.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로버스트 스케일링은 중앙값과 IQR을 기준으로 스케일링한다. 이상치의 영향을 덜 받는다는 장점이 있다.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()
scaled_data = scaler.fit_transform(data)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 표준화는 평균과 표준편차를 기준으로 하고, 정규화는 최소값과 최대값을 기준으로 하며, 로버스트 스케일링은 중앙값과 IQR을 기준으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 방법마다 장단점이 있기 때문에 데이터에 이상치가 있는지, 값의 범위가 중요한지에 따라 선택해야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 나의 간단 소감&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 머신러닝 모델을 만들기 전에 필요한 과정들을 전체적으로 정리했다. 모델을 학습시키고 성능을 보는 과정만 생각하면 머신러닝이 꽤 단순해 보이지만, 막상 앞단을 보니 데이터 수집부터 전처리까지 해야 할 일이 훨씬 많았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 데이터 수집 부분은 생각보다 범위가 넓었다. 그냥 CSV 파일을 불러오는 정도가 아니라, 데이터가 어디서 생성되고 어떻게 저장되며 어떤 형태로 분석가에게 전달되는지까지 이어졌다. Data Lake, Data Warehouse, Data Mart 같은 구조를 보면서 데이터 분석이 단순히 분석 코드만 작성하는 일이 아니라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EDA는 이전에도 몇 번 봤던 내용이지만, 오늘은 그래프별 사용 목적을 다시 정리할 수 있었다. countplot, barplot, boxplot, histogram, scatterplot, pairplot이 각각 언제 쓰이는지 구분하니까 조금 덜 헷갈렸다. 그래프는 예쁘게 그리는 것도 중요하지만, 결국 어떤 질문에 답하기 위해 그리는지가 더 중요해 보였다.&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;span&gt;&lt;b&gt;모델을 잘 만드는 것보다 먼저 데이터를 제대로 이해하고 정리하는 것이 중요하다&lt;/b&gt;&lt;/span&gt;는 걸 다시 느낀 하루였다.&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/42</guid>
      <comments>https://min0jun.tistory.com/42#entry42comment</comments>
      <pubDate>Thu, 25 Jun 2026 20:45:26 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 31일차</title>
      <link>https://min0jun.tistory.com/41</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 오늘의 학습 목표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 머신러닝과 통계학을 나누어 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 &lt;span&gt;&lt;b&gt;로지스틱 회귀를 마무리하고, 회귀와 분류 모델의 차이를 다시 정리하는 것&lt;/b&gt;&lt;/span&gt;이 목표였다. 선형회귀와 로지스틱 회귀가 어떤 점에서 비슷하고, 어떤 문제에서 다르게 사용되는지 확인했다. 특히 로지스틱 회귀는 분류 문제에서 사용되며, 정확도와 F1-score 같은 평가 지표로 모델을 판단한다는 점을 다시 짚었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계학에서는 &lt;span&gt;&lt;b&gt;가설검정을 사용할 때 조심해야 할 부분들&lt;/b&gt;&lt;/span&gt;을 학습했다. 단순히 p-value가 0.05보다 작다고 해서 바로 의미 있는 결과라고 받아들이면 안 되고, 분석 과정에서 결과를 왜곡할 수 있는 여러 상황을 함께 봐야 한다는 점이 핵심이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;머신러닝&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;로지스틱 회귀 정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀는 이름에 &amp;ldquo;회귀&amp;rdquo;가 들어가지만, 실제로는 &lt;span&gt;&lt;b&gt;분류 문제에 사용되는 모델&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀가 연속적인 숫자 값을 예측한다면, 로지스틱 회귀는 어떤 데이터가 특정 범주에 속할 확률을 예측한다. 예를 들어 타이타닉 데이터에서는 승객이 생존했는지, 생존하지 못했는지처럼 0 또는 1로 나뉘는 값을 예측할 수 있다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;선형회귀와 로지스틱 회귀 비교&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 선형회귀와 로지스틱 회귀의 공통점과 차이점도 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통점은 둘 다 모델을 만들기 쉽고, 변수의 계수를 통해 결과를 해석하기 쉽다는 점이다. 또한 입력 변수 X에는 수치형 변수와 범주형 변수를 모두 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차이점은 예측하려는 Y값의 형태에서 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀는 수치형 값을 예측한다. 예를 들어 가격, 점수, 매출처럼 연속적인 값을 예측할 때 사용한다. 이때는 MSE, R&amp;sup2; 같은 지표로 모델 성능을 평가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 로지스틱 회귀는 범주형 값을 예측한다. 예를 들어 생존 여부, 합격 여부, 구매 여부처럼 결과가 범주로 나뉘는 문제에 사용한다. 이때는 Accuracy, F1-score 같은 지표로 모델을 평가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 &lt;span&gt;&lt;b&gt;숫자를 예측하면 회귀, 범주를 예측하면 분류&lt;/b&gt;&lt;/span&gt;&lt;span&gt;라고 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;로지스틱 회귀 실습 흐름&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀 실습에서는 데이터를 준비하고, 모델을 학습시킨 뒤, 예측 결과를 평가하는 흐름을 다시 확인했다.&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 흐름 자체는 단순해 보이지만, 실제로 중요한 부분은 어떤 변수를 넣고 뺄지 결정하는 과정이다. 같은 모델을 사용하더라도 어떤 변수를 사용하느냐에 따라 성능이 달라질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 타이타닉 데이터처럼 여러 변수가 있는 데이터에서는 다양한 조합을 시도하면서 F1-score를 높이는 방식으로 모델을 개선할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 여기서도 무작정 성능이 좋은 조합만 찾는 것이 아니라, 왜 그 변수가 의미가 있는지 함께 생각하는 것이 중요하다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;통계학&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;재현 가능성&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;분석 결과가 재현되지 않는다면 그 결과의 신뢰도는 낮아진다. 특히 가설검정에서는 p-value가 기준보다 작게 나왔다고 해서 항상 믿을 수 있는 결과라고 볼 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value가 0.05보다 작다는 것은 통계적으로 유의하다고 판단할 수 있는 기준이지만, 그 자체가 결과의 절대적인 진실을 보장하는 것은 아니다. 우연히 유의미한 결과가 나올 수도 있고, 분석 과정에서 잘못된 방식이 들어가면 재현성이 떨어질 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 통계 분석에서는 &amp;ldquo;한 번 유의미하게 나왔는가&amp;rdquo;보다 &amp;ldquo;반복해도 신뢰할 수 있는가&amp;rdquo;가 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;p-해킹&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-해킹은 원하는 결과를 얻기 위해 데이터를 반복적으로 분석하거나 변수를 계속 바꿔가며 p-value를 인위적으로 낮추는 행위다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 분석을 많이 해보는 것이 좋은 것처럼 느껴질 수 있다. 하지만 결과를 보면서 계속 조건을 바꾸고, p-value가 0.05보다 작게 나오는 순간만 골라서 보고한다면 분석 결과는 왜곡될 수 있다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;선택적 보고&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;예를 들어 20개의 분석을 했는데 그중 1개만 유의미하게 나왔다면, 그 1개만 보고하는 것은 문제가 될 수 있다. 전체 결과를 함께 봐야 그 결과가 우연인지, 실제 의미가 있는지 판단할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택적 보고는 p-해킹과도 연결된다. 둘 다 결과를 있는 그대로 보는 것이 아니라, 원하는 방향으로 보이게 만드는 문제를 가지고 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;자료수집 중단 시점 결정&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;예를 들어 처음에는 50명의 데이터를 수집하기로 했는데 결과가 마음에 들지 않아 100명, 200명까지 계속 늘린다면, 어느 순간 우연히 p-value가 낮아질 수도 있다. 그리고 그 순간을 기준으로 결과를 보고하면 실제보다 의미 있는 결과처럼 보일 수 있다.&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;span&gt;&lt;b&gt;데이터 탐색과 검증 분리&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;그래서 탐색용 데이터와 검증용 데이터를 분리해야 한다. 머신러닝에서 train/test 데이터를 나누는 것과 비슷한 흐름이라고 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 나의 간단 소감&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;통계학에서는 가설검정의 주의점을 배웠는데, 생각보다 현실적인 내용이 많았다. p-value가 0.05보다 작으면 끝이라고 생각하기 쉬운데, 실제로는 그 결과가 어떻게 나왔는지, 분석 과정에서 유리한 결과만 고른 것은 아닌지, 데이터를 언제까지 수집했는지까지 봐야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-해킹이나 선택적 보고는 처음 들으면 일부러 속이는 행동처럼 느껴지지만, 실제 분석 과정에서는 무심코 그렇게 될 수도 있겠다는 생각이 들었다. 결과가 마음에 들지 않아서 변수를 조금 더 바꿔보고, 데이터도 조금 더 모아보고, 유의미한 결과만 강조하다 보면 분석의 신뢰성이 무너질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 내용은 통계와 머신러닝이 따로 떨어진 느낌이라기보다, 둘 다 결국 &lt;span&gt;&lt;b&gt;결과를 얼마나 믿을 수 있는가&lt;/b&gt;&lt;/span&gt;를 다룬다는 점에서 연결되어 보였다. 모델을 만들고 점수를 보는 것도 중요하지만, 그 결과가 우연인지, 과적합인지, 검증 가능한 결과인지까지 함께 봐야 한다는 점이 오늘 가장 크게 남았다.&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/41</guid>
      <comments>https://min0jun.tistory.com/41#entry41comment</comments>
      <pubDate>Wed, 24 Jun 2026 20:51:43 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 30일차</title>
      <link>https://min0jun.tistory.com/40</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 오늘의 학습 목표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘도 크게 &lt;span&gt;&lt;b&gt;통계&lt;/b&gt;&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;&lt;b&gt;머신러닝&lt;/b&gt;&lt;/span&gt;&lt;span&gt; 내용을 나누어 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계에서는 회귀분석의 기본 개념과 상관관계를 중심으로 배웠다.&lt;br /&gt;단순선형회귀, 다중선형회귀, 범주형 변수 처리, 다항회귀, 스플라인 회귀를 정리했고, 이어서 피어슨 상관계수, 스피어만 상관계수, 켄달의 타우, 상호정보까지 함께 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 선형회귀를 실제 데이터에 적용하는 방법과 로지스틱 회귀를 중심으로 학습했다.&lt;br /&gt;선형회귀 모델을 훈련하고 평가하는 과정, 범주형 데이터를 다루는 방법, 로지스틱 회귀의 개념, 그리고 분류 모델을 평가하는 정확도와 F1-score까지 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘의 목표는 단순히 공식이나 코드를 외우는 것보다는, &lt;span&gt;&lt;b&gt;각 개념이 어떤 문제를 해결하기 위해 사용되는지 이해하는 것&lt;/b&gt;&lt;/span&gt;이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;통계&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;1. 단순선형회귀&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순선형회귀는 하나의 독립 변수 X와 하나의 종속 변수 Y 사이의 관계를 직선으로 표현하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하면, 하나의 원인이 결과에 어떤 영향을 주는지 확인하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 광고비와 매출의 관계를 생각해볼 수 있다.&lt;br /&gt;광고비가 증가할수록 매출이 함께 증가하는 경향이 있다면, 광고비를 독립 변수 X로 두고 매출을 종속 변수 Y로 두어 회귀분석을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀식은 다음과 같은 형태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = &amp;beta;0 + &amp;beta;1X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &amp;beta;0는 절편이고, &amp;beta;1은 기울기이다.&lt;br /&gt;중학교 때 배웠던 1차 함수와 비슷하게 생각하면 조금 더 편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 회귀식에 &amp;beta; 같은 기호가 들어가서 조금 딱딱하게 느껴졌는데,&lt;br /&gt;막상 보면 결국 &lt;span&gt;&lt;b&gt;하나의 변수로 결과를 예측하는 직선식&lt;/b&gt;&lt;/span&gt;이라고 볼 수 있었다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

np.random.seed(0)

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

model = LinearRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

print(&quot;MSE:&quot;, mean_squared_error(y_test, y_pred))
print(&quot;R2:&quot;, r2_score(y_test, y_pred))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순선형회귀는 구조가 간단해서 해석하기 쉽다.&lt;br /&gt;하지만 데이터가 직선 형태를 따르지 않는다면 좋은 결과를 내기 어렵다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;2. 다중선형회귀&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중선형회귀는 두 개 이상의 독립 변수를 사용해서 하나의 종속 변수를 예측하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순선형회귀가 X 하나만 가지고 Y를 예측했다면,&lt;br /&gt;다중선형회귀는 X1, X2, X3처럼 여러 변수를 함께 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀식은 다음과 같은 형태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = &amp;beta;0 + &amp;beta;1X1 + &amp;beta;2X2 + &amp;hellip; + &amp;beta;nXn&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 집값을 예측한다고 할 때, 면적 하나만으로 집값을 예측하기에는 부족할 수 있다.&lt;br /&gt;면적, 방 개수, 위치, 건축 연도 같은 여러 변수를 함께 사용하면 더 현실적인 예측이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 변수가 많아지면 무조건 좋은 것은 아니다.&lt;br /&gt;변수들끼리 너무 강하게 관련되어 있으면 다중공선성 문제가 생길 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다중선형회귀는 여러 요인을 동시에 고려할 수 있지만, 변수 선택과 해석에 더 신경을 써야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;3. 범주형 변수&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀분석에서 범주형 변수는 바로 사용하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;범주형 변수는 숫자가 아니라 문자나 그룹으로 나뉘는 데이터이다.&lt;br /&gt;예를 들면 성별, 지역, 요일, 등급 같은 데이터가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;범주형 변수는 크게 순서가 있는 경우와 순서가 없는 경우로 나눌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서가 있는 범주형 변수는 크고 작음의 의미가 있다.&lt;br /&gt;예를 들어 옷 사이즈나 등급 같은 데이터는 순서가 있기 때문에 숫자로 변환해도 어느 정도 의미가 유지된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 순서가 없는 범주형 변수는 숫자로 단순 변환하면 문제가 생길 수 있다.&lt;br /&gt;예를 들어 지역을 부산=1, 대전=2, 대구=3처럼 바꾸면, 모델이 숫자의 크기에 의미가 있다고 착각할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이런 경우에는 원-핫 인코딩을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;import pandas as pd

data = {
    'Gender': ['Male', 'Female', 'Female', 'Male', 'Male'],
    'Experience': [5, 7, 10, 3, 8],
    'Salary': [50, 60, 65, 40, 55]
}

df = pd.DataFrame(data)

df = pd.get_dummies(df, columns=['Gender'], drop_first=True)

print(df)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 문자를 숫자로 바꾸면 되는 거 아닌가 싶었는데,&lt;br /&gt;순서가 없는 변수에 숫자를 부여하면 모델이 잘못 해석할 수 있다는 점이 중요했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;4. 다항회귀와 스플라인 회귀&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다항회귀는 독립 변수와 종속 변수의 관계가 직선이 아닐 때 사용하는 회귀 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순선형회귀는 직선으로 관계를 표현하지만, 실제 데이터는 항상 직선 형태로 움직이지 않는다.&lt;br /&gt;이럴 때 독립 변수의 제곱, 세제곱 같은 항을 추가해서 곡선 형태로 데이터를 설명할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 면적이 커질수록 집값이 증가하긴 하지만, 증가 폭이 일정하지 않을 수 있다.&lt;br /&gt;이런 경우 단순한 직선보다 곡선이 더 잘 맞을 수 있다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np

np.random.seed(0)

X = 2 - 3 * np.random.normal(0, 1, 100)
y = X - 2 * (X ** 2) + np.random.normal(-3, 3, 100)

X = X[:, np.newaxis]

poly_features = PolynomialFeatures(degree=2)
X_poly = poly_features.fit_transform(X)

model = LinearRegression()
model.fit(X_poly, y)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스플라인 회귀는 데이터를 여러 구간으로 나누고, 각 구간마다 다른 회귀식을 적용하는 방법이다.&lt;br /&gt;구간별로 다른 패턴을 반영할 수 있기 때문에 복잡한 비선형 관계를 더 유연하게 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 다항회귀나 스플라인 회귀는 너무 복잡하게 만들면 과적합이 발생할 수 있다.&lt;br /&gt;이 부분은 성능을 높이려다가 오히려 새로운 데이터에 약해질 수 있다는 점이 조금 인상적이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;5. 피어슨 상관계수&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피어슨 상관계수는 두 연속형 변수 사이의 선형 관계를 측정하는 지표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값은 -1에서 1 사이를 가진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1에 가까우면 강한 양의 선형 관계&lt;/li&gt;
&lt;li&gt;-1에 가까우면 강한 음의 선형 관계&lt;/li&gt;
&lt;li&gt;0에 가까우면 선형 관계가 거의 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 공부 시간과 시험 점수 사이에 직선적인 관계가 있는지 확인할 때 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;import numpy as np
import pandas as pd
from scipy.stats import pearsonr

np.random.seed(0)

study_hours = np.random.rand(100) * 10
exam_scores = 3 * study_hours + np.random.randn(100) * 5

corr, p_value = pearsonr(study_hours, exam_scores)

print(&quot;피어슨 상관계수:&quot;, corr)
print(&quot;p-value:&quot;, p_value)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피어슨 상관계수는 가장 대표적으로 많이 사용하는 상관계수이지만,&lt;br /&gt;비선형 관계에는 적합하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;피어슨 상관계수는 두 변수가 직선적으로 함께 움직이는지를 볼 때 유용하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;6. 비모수 상관계수&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;br /&gt;예를 들어 값이 정확히 직선 형태는 아니더라도, 한 변수가 커질 때 다른 변수도 함께 커지는 경향이 있다면 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;켄달의 타우는 순위의 일치 쌍과 불일치 쌍을 기준으로 관계를 측정한다.&lt;br /&gt;스피어만보다 조금 더 보수적인 느낌으로 순위 관계를 판단한다고 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;from scipy.stats import spearmanr, kendalltau
import numpy as np

np.random.seed(0)

customer_satisfaction = np.random.rand(100)
repurchase_intent = 3 * customer_satisfaction + np.random.randn(100) * 0.5

spearman_corr, spearman_p = spearmanr(customer_satisfaction, repurchase_intent)
kendall_corr, kendall_p = kendalltau(customer_satisfaction, repurchase_intent)

print(&quot;스피어만 상관계수:&quot;, spearman_corr)
print(&quot;켄달의 타우:&quot;, kendall_corr)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 상관계수면 다 비슷한 줄 알았는데,&lt;br /&gt;데이터의 형태나 분포에 따라 사용하는 방식이 다르다는 점이 중요했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;7. 상호정보&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상호정보는 두 변수 사이의 정보 의존성을 측정하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 상관계수처럼 -1에서 1 사이로 표현되는 방식은 아니다.&lt;br /&gt;상호정보는 한 변수를 알았을 때 다른 변수에 대한 불확실성이 얼마나 줄어드는지를 기준으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 비선형 관계나 범주형 데이터에서 사용할 수 있다는 점이 특징이다.&lt;/p&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;import numpy as np
from sklearn.metrics import mutual_info_score

X = np.array(['cat', 'dog', 'cat', 'cat', 'dog', 'dog', 'cat', 'dog'])
Y = np.array(['high', 'low', 'high', 'high', 'low', 'low', 'high', 'low'])

mi = mutual_info_score(X, Y)

print(&quot;상호정보:&quot;, mi)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피어슨 상관계수는 선형 관계를 보는 데 강하고,&lt;br /&gt;상호정보는 조금 더 복잡한 관계나 범주형 변수 사이의 의존성을 볼 때 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 &amp;ldquo;상관계수랑 뭐가 다른 거지?&amp;rdquo; 싶었는데,&lt;br /&gt;상호정보는 단순히 직선 관계를 보는 것이 아니라 &lt;span&gt;&lt;b&gt;정보가 얼마나 연결되어 있는지 보는 개념&lt;/b&gt;&lt;/span&gt;에 가깝다고 느꼈다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;머신러닝&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;1. 선형회귀 적용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 선형회귀를 실제 데이터에 적용하는 과정을 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시로 tips 데이터를 사용했다.&lt;br /&gt;tips 데이터는 식당에서 결제한 전체 금액, 팁, 성별, 흡연 여부, 요일, 식사 시간, 인원 수 등의 컬럼을 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 전체 지불 금액을 X로 두고, 팁을 Y로 두어 회귀분석을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 전체 금액이 커질수록 팁도 커지는지 확인하고,&lt;br /&gt;전체 금액을 바탕으로 예상 팁을 예측하는 흐름이다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

tips_df = sns.load_dataset('tips')

X = tips_df[['total_bill']]
y = tips_df['tip']

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

model = LinearRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

print(&quot;MSE:&quot;, mean_squared_error(y_test, y_pred))
print(&quot;R2:&quot;, r2_score(y_test, y_pred))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습으로 보니까 선형회귀가 조금 더 현실적으로 느껴졌다.&lt;br /&gt;그냥 수식으로만 볼 때보다, 실제 데이터에서 X와 Y를 정하고 모델을 훈련하는 흐름이 더 와닿았다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;2. 선형회귀 심화&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀 심화에서는 다중선형회귀와 범주형 데이터 사용을 다시 다뤘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 데이터는 독립 변수 하나만으로 설명하기 어려운 경우가 많다.&lt;br /&gt;그래서 여러 변수를 함께 사용하거나, 변수를 변형해서 더 좋은 모델을 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 데이터 안에는 숫자형 변수뿐만 아니라 문자형 변수도 자주 등장한다.&lt;br /&gt;예를 들어 성별, 요일, 식사 시간 같은 데이터는 그대로 모델에 넣을 수 없기 때문에 적절한 변환이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 머신러닝에서 전처리가 왜 중요한지 다시 느끼게 해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델을 만드는 것만큼, 모델이 이해할 수 있는 형태로 데이터를 바꾸는 과정도 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;3. 선형회귀의 가정&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;br /&gt;즉, X가 변할 때 Y도 일정한 방향과 형태로 변해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등분산성은 오차의 분산이 일정해야 한다는 의미이다.&lt;br /&gt;오차가 특정 구간에서만 커지거나 작아지는 패턴을 보이면 모델이 안정적이라고 보기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 이런 가정들이 조금 이론적인 내용처럼 느껴졌는데,&lt;br /&gt;결국 모델이 제대로 작동하기 위해 확인해야 하는 기본 조건이라고 볼 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀는 단순해서 편하지만,&lt;br /&gt;데이터가 선형 관계를 잘 따르지 않으면 성능이 좋지 않을 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;4. 로지스틱 회귀&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀는 이름에는 회귀가 들어가지만, 실제로는 분류 문제에 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 예시로 타이타닉 생존 예측 문제가 있다.&lt;br /&gt;승객의 티켓 등급, 성별, 나이, 요금 등의 정보를 바탕으로 생존 여부를 예측하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 종속 변수 Y는 생존 여부이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사망: 0&lt;/li&gt;
&lt;li&gt;생존: 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 숫자를 예측하는 회귀 문제가 아니라 0 또는 1 중 하나를 맞히는 분류 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 로지스틱 &amp;ldquo;회귀&amp;rdquo;라는 이름 때문에 회귀분석과 헷갈렸는데,&lt;br /&gt;결과적으로는 &lt;span&gt;&lt;b&gt;범주형 결과를 예측하는 분류 모델&lt;/b&gt;&lt;/span&gt;이라고 이해하면 된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;5. 로짓과 오즈비&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀에서는 확률을 그대로 직선으로 설명하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률은 0과 1 사이의 값을 가져야 하는데,&lt;br /&gt;선형회귀처럼 직선으로 예측하면 0보다 작거나 1보다 큰 값이 나올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 S자 형태의 시그모이드 함수를 사용한다.&lt;br /&gt;이 함수는 어떤 값이 들어와도 결과를 0과 1 사이의 확률로 바꿔준다.&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;예를 들어 성공 확률이 80%라면 실패 확률은 20%이고,&lt;br /&gt;오즈비는 80% / 20% = 4가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로짓은 이 오즈비에 로그를 씌운 값이다.&lt;br /&gt;로짓을 사용하면 선형회귀의 형태를 활용하면서도 분류 문제를 다룰 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 처음에 확실히 조금 어렵게 느껴졌다.&lt;br /&gt;오즈비, 로짓, 시그모이드가 한 번에 나오니까 살짝 복잡했는데,&lt;br /&gt;정리해보면 결국 &lt;span&gt;&lt;b&gt;확률을 모델이 다루기 좋은 형태로 바꾸는 과정&lt;/b&gt;&lt;/span&gt;이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;6. 분류 평가 지표&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 모델을 평가할 때는 단순히 정확도만 보면 안 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확도는 전체 데이터 중 모델이 맞춘 비율이다.&lt;br /&gt;겉으로 보기에는 가장 직관적인 지표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 정확도에는 한계가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 암 환자 5명과 정상인 95명이 있는 데이터에서,&lt;br /&gt;모델이 모든 사람을 정상이라고 예측하면 정확도는 95%가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;겉으로는 성능이 좋아 보이지만, 실제 암 환자는 한 명도 찾지 못한 모델이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 혼동 행렬과 F1-score 같은 지표가 필요하다.&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;TP: 실제 양성을 양성으로 맞춘 경우&lt;/li&gt;
&lt;li&gt;FP: 실제 음성을 양성으로 잘못 예측한 경우&lt;/li&gt;
&lt;li&gt;FN: 실제 양성을 음성으로 잘못 예측한 경우&lt;/li&gt;
&lt;li&gt;TN: 실제 음성을 음성으로 맞춘 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F1-score는 정밀도와 재현율을 함께 고려한 지표이다.&lt;br /&gt;특히 데이터가 불균형할 때 정확도보다 더 유용하게 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;분류 모델에서는 단순히 많이 맞췄는지보다, 중요한 대상을 제대로 찾았는지가 더 중요할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;7. 로지스틱 회귀 실습&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀 실습에서는 sklearn의 LogisticRegression을 사용했다.&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;fit: 모델 학습&lt;/li&gt;
&lt;li&gt;predict: 클래스 예측&lt;/li&gt;
&lt;li&gt;predict_proba: 각 클래스에 속할 확률 예측&lt;/li&gt;
&lt;li&gt;coef_: 가중치&lt;/li&gt;
&lt;li&gt;intercept_: 절편&lt;/li&gt;
&lt;li&gt;classes_: 클래스 종류&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이타닉 데이터에서는 Fare만 사용한 1차 모델과,&lt;br /&gt;Pclass, Sex, Fare를 함께 사용한 2차 모델을 비교했다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

print(&quot;accuracy:&quot;, accuracy_score(y_test, y_pred))
print(&quot;f1_score:&quot;, f1_score(y_test, y_pred))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습을 통해 로지스틱 회귀가 단순히 0과 1을 맞히는 모델이 아니라,&lt;br /&gt;각 클래스에 속할 확률을 바탕으로 판단하는 모델이라는 점을 이해할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 나의 간단 소감&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 통계와 머신러닝 내용을 나누어서 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 &lt;b&gt;통계&lt;/b&gt;에서는 회귀분석과 상관관계를 중심으로 정리했다.&lt;br /&gt;단순선형회귀와 다중선형회귀는 어느 정도 이해가 됐지만, 다항회귀와 스플라인 회귀는 처음 봤을 때 조금 복잡하게 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 직선으로 설명하기 어려운 데이터를 곡선이나 구간별 함수로 표현한다고 생각하니 조금 정리됐다.&lt;br /&gt;현실 데이터가 항상 깔끔한 직선으로 움직이지 않는다는 점을 생각하면, 왜 이런 방법들이 필요한지도 이해됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상관계수도 처음에는 피어슨만 알면 되는 줄 알았는데,&lt;br /&gt;데이터가 정규분포를 따르는지, 순위형 데이터인지, 비선형 관계인지에 따라 다른 방법을 사용할 수 있다는 점이 중요했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 상호정보는 조금 생소했다.&lt;br /&gt;단순히 같이 증가하거나 감소하는 관계가 아니라, 한 변수가 다른 변수의 정보를 얼마나 설명해주는지 보는 느낌이라서 기존 상관계수와는 결이 다르게 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;선형회귀는 수식으로만 보면 딱딱한 느낌이 있는데, tips 데이터처럼 실제 데이터를 넣어서 실습하니까 훨씬 이해가 쉬웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 X와 Y를 정하고, train/test로 나누고, 모델을 학습한 뒤 평가하는 흐름이 머신러닝의 기본 구조처럼 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀는 이름 때문에 처음에는 회귀 문제라고 생각하기 쉬웠는데, 실제로는 0과 1 같은 범주를 예측하는 분류 모델이라는 점이 중요했다. 오즈비와 로짓 개념은 솔직히 한 번에 완전히 편해지지는 않았다.&lt;br /&gt;그래도 확률을 0과 1 사이로 다루기 위해 시그모이드 함수를 사용하고, 그 과정에서 로짓이 등장한다고 생각하니 큰 흐름은 잡힌 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 평가 지표에서는 정확도만 믿으면 안 된다는 점이 가장 기억에 남았다.&lt;br /&gt;정확도가 높아도 실제로 중요한 대상을 하나도 못 찾는 모델이 될 수 있다는 예시가 꽤 직관적이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 내용은 통계와 머신러닝이 각각 따로 정리되는 느낌이었다.&lt;br /&gt;통계에서는 &lt;span&gt;&lt;b&gt;데이터의 관계를 어떻게 설명할 것인지&lt;/b&gt;&lt;/span&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 &lt;span&gt;&lt;b&gt;데이터를 어떻게 준비하고 모델 결과를 어떤 기준으로 평가할 것인지&lt;/b&gt;&lt;/span&gt;가 핵심이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 로짓이나 상호정보 같은 개념은 더 익숙해질 필요가 있지만,&lt;br /&gt;오늘은 적어도 각 개념이 어떤 상황에서 쓰이는지 조금씩 감을 잡은 하루였다.&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/40</guid>
      <comments>https://min0jun.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 23 Jun 2026 21:00:43 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 29일차</title>
      <link>https://min0jun.tistory.com/39</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 오늘의 학습 목표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;29-1.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xy32B/dJMcahEPqXO/IPrh0QWeNEq7kkkTHsVxLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xy32B/dJMcahEPqXO/IPrh0QWeNEq7kkkTHsVxLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xy32B/dJMcahEPqXO/IPrh0QWeNEq7kkkTHsVxLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxy32B%2FdJMcahEPqXO%2FIPrh0QWeNEq7kkkTHsVxLk%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;1280&quot; height=&quot;720&quot; data-filename=&quot;29-1.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 크게 &lt;span&gt;&lt;b&gt;통계학 개념과 머신러닝 기초 개념&lt;/b&gt;&lt;/span&gt;&lt;span&gt;을 함께 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계학에서는 여러 확률분포와 가설검정을 중심으로 배웠고,&lt;br /&gt;머신러닝에서는 회귀분석 평가 지표와 모델 성능을 어떻게 판단하는지에 대해 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 분포, 검정, 회귀 평가 지표가 한 번에 나와서 조금 복잡하게 느껴졌다.&lt;br /&gt;특히 통계학은 이름부터 어려운 개념이 많아서 처음 볼 때는 괜히 더 멀게 느껴지는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 오늘 학습의 목표는 모든 공식을 완벽하게 외우는 것보다는,&lt;br /&gt;&lt;span&gt;&lt;b&gt;각 개념이 어떤 상황에서 사용되는지 이해하는 것&lt;/b&gt;&lt;/span&gt;에 두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘의 학습 목표는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회귀분석 모델의 평가 지표를 이해한다.&lt;/li&gt;
&lt;li&gt;정규분포, t분포, 카이제곱분포, 이항분포, 푸아송분포의 특징을 구분한다.&lt;/li&gt;
&lt;li&gt;A/B 테스트와 가설검정의 기본 흐름을 이해한다.&lt;/li&gt;
&lt;li&gt;p-value, 유의수준, 귀무가설, 대립가설의 의미를 정리한다.&lt;/li&gt;
&lt;li&gt;제 1종 오류와 제 2종 오류의 차이를 이해한다.&lt;/li&gt;
&lt;li&gt;통계학 개념이 머신러닝 모델 평가와 어떻게 연결되는지 생각해본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h1&gt;&lt;span&gt;&lt;b&gt;통계학&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-1. 확률분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계학에서 분포는 데이터를 이해하는 기본적인 기준이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 정규분포, t분포, 카이제곱분포, 이항분포, 푸아송분포처럼 이름이 많이 나와서 조금 헷갈렸다.&lt;br /&gt;그런데 하나씩 정리해보니, 결국 핵심은 &lt;span&gt;&lt;b&gt;데이터가 어떤 형태로 나타나는지 파악하는 것&lt;/b&gt;&lt;/span&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분포를 이해하면 데이터가 평균 근처에 몰려 있는지, 한쪽으로 치우쳐 있는지, 특정 사건이 몇 번 발생하는지 등을 설명할 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-2. 정규분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규분포는 평균을 중심으로 좌우가 대칭인 종 모양의 분포이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일상에서 많이 볼 수 있는 키, 몸무게, 시험 점수 같은 데이터가 정규분포 형태를 따르는 경우가 많다.&lt;br /&gt;대부분의 값은 평균 근처에 모이고, 평균에서 멀어질수록 데이터의 빈도는 줄어든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정규분포는 통계학에서 가장 기본이 되는 분포라고 볼 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 &amp;ldquo;정규분포가 왜 이렇게 중요하지?&amp;rdquo; 싶었는데,&lt;br /&gt;많은 통계 기법들이 정규분포를 기준으로 만들어져 있어서 기본 개념으로 계속 등장하는 느낌이었다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

normal_dist = np.random.normal(170, 10, 1000)

plt.hist(normal_dist, bins=30, density=True, alpha=0.6, color='g')

xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)

plt.plot(x, p, 'k', linewidth=2)
plt.title('normal distribution histogram')
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-3. 긴 꼬리 분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;br /&gt;대부분의 사람은 일정한 소득 구간에 몰려 있지만, 일부 고소득자는 매우 큰 값을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온라인 쇼핑몰에서도 비슷한 구조를 볼 수 있다.&lt;br /&gt;소수의 인기 상품이 대부분의 매출을 만들고, 나머지 많은 상품들은 조금씩 판매되는 형태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;긴 꼬리 분포는 일부 값이 전체에 큰 영향을 주는 상황을 설명할 때 유용하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-4. t분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t분포는 표본의 크기가 작고, 모집단의 표준편차를 모를 때 사용하는 분포이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규분포와 모양이 비슷하지만, t분포는 꼬리가 더 두껍다.&lt;br /&gt;이는 표본이 작을수록 불확실성이 크기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자유도가 커질수록 t분포는 정규분포에 가까워진다.&lt;br /&gt;즉, 표본 수가 충분히 많아지면 정규분포와 비슷하게 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 정규분포랑 비슷해 보여서 굳이 따로 배워야 하나 싶었는데,&lt;br /&gt;표본이 작을 때 더 조심스럽게 판단하기 위한 분포라고 생각하니 이해가 조금 쉬웠다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-5. 카이제곱분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카이제곱분포는 주로 범주형 데이터와 관련된 검정에서 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 독립성 검정과 적합도 검정에서 많이 사용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;독립성 검정: 두 범주형 변수가 서로 관련이 있는지 확인&lt;/li&gt;
&lt;li&gt;적합도 검정: 관찰된 데이터가 기대한 분포와 잘 맞는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 성별과 흡연 여부가 관련이 있는지 확인하거나,&lt;br /&gt;주사위가 각 면마다 동일한 확률로 나오는지 확인할 때 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카이제곱이라는 이름이 처음에는 꽤 부담스러웠는데,&lt;br /&gt;핵심은 &lt;span&gt;&lt;b&gt;범주별 빈도가 기대한 값과 얼마나 다른지 보는 것&lt;/b&gt;&lt;/span&gt;이라고 정리할 수 있었다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import numpy as np
import scipy.stats as stats

observed = [20, 30, 25, 25]
expected = [25, 25, 25, 25]

chi2_stat, p_value = stats.chisquare(observed, f_exp=expected)

print(f&quot;카이제곱 통계량: {chi2_stat}&quot;)
print(f&quot;p-value: {p_value}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;observed = np.array([[30, 10], [20, 40]])

chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)

print(f&quot;카이제곱 통계량: {chi2_stat}&quot;)
print(f&quot;p-value: {p_value}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-6. 이항분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;동전을 10번 던졌을 때 앞면이 몇 번 나오는지,&lt;br /&gt;광고를 본 고객 100명 중 몇 명이 구매하는지 같은 상황을 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이항분포는 연속적인 값이 아니라 특정 정수 값으로 나타난다.&lt;br /&gt;그래서 이산형 분포에 해당한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-7. 푸아송분포&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;푸아송분포는 일정 시간이나 공간 안에서 어떤 사건이 몇 번 발생하는지를 다룰 때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 한 시간 동안 콜센터에 전화가 몇 번 오는지,&lt;br /&gt;하루 동안 특정 웹페이지에서 오류가 몇 번 발생하는지 같은 상황이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;푸아송분포는 드물게 발생하는 사건의 횟수를 다룰 때 자주 사용된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이항분포와 마찬가지로 사건의 발생 횟수를 다루기 때문에 이산형 분포에 해당한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-8. 가설검정&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설검정은 표본 데이터를 바탕으로 모집단에 대한 주장을 검증하는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 귀무가설과 대립가설을 세운 뒤,&lt;br /&gt;p-value를 기준으로 귀무가설을 기각할지 판단한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;귀무가설 H0: 차이가 없다, 효과가 없다&lt;/li&gt;
&lt;li&gt;대립가설 H1: 차이가 있다, 효과가 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설검정의 흐름은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;귀무가설과 대립가설 설정&lt;/li&gt;
&lt;li&gt;유의수준 설정&lt;/li&gt;
&lt;li&gt;검정통계량 계산&lt;/li&gt;
&lt;li&gt;p-value 확인&lt;/li&gt;
&lt;li&gt;결론 도출&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value는 귀무가설이 참이라고 가정했을 때,&lt;br /&gt;현재 관찰된 결과 또는 그보다 더 극단적인 결과가 나올 확률이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 p-value가 0.05보다 작으면 귀무가설을 기각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 p-value 설명이 뭔가 말장난처럼 느껴졌는데,&lt;br /&gt;조금 쉽게 생각하면 **&amp;ldquo;이 결과가 우연히 나왔다고 보기엔 너무 드문 일인가?&amp;rdquo;**를 확인하는 과정이라고 볼 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-9. A/B 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A/B 테스트는 두 그룹을 비교해서 어떤 쪽이 더 효과적인지 확인하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 웹사이트 버튼 색상을 A안과 B안으로 나누어 보여주고,&lt;br /&gt;어떤 버튼이 더 높은 클릭률이나 구매 전환율을 만드는지 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A/B 테스트에서 중요한 점은 단순히 숫자가 더 높다고 바로 좋은 결과라고 판단하지 않는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B안의 전환율이 더 높게 나왔더라도,&lt;br /&gt;그 차이가 우연히 발생한 것인지 실제로 의미 있는 차이인지 확인해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 A/B 테스트에서도 통계적 검정이 필요하다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;import numpy as np
import scipy.stats as stats

group_a = np.random.binomial(1, 0.30, 100)
group_b = np.random.binomial(1, 0.45, 100)

t_stat, p_val = stats.ttest_ind(group_a, group_b)

print(f&quot;T-Statistic: {t_stat}, P-value: {p_val}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 처음엔 단순히 A와 B 중 숫자가 높은 쪽을 고르면 되는 줄 알았다.&lt;br /&gt;그런데 막상 배워보니, &lt;span&gt;&lt;b&gt;차이가 실제 의미 있는 차이인지 검정하는 과정이 훨씬 중요했다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-10. t검정&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t검정은 두 집단의 평균 차이가 통계적으로 유의미한지 확인하는 검정 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 독립표본 t검정과 대응표본 t검정이 있다.&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검정: 같은 그룹의 전후 평균 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 A반과 B반의 시험 점수를 비교할 때는 독립표본 t검정을 사용할 수 있다.&lt;br /&gt;반대로 운동 전후 몸무게처럼 같은 사람의 변화를 비교할 때는 대응표본 t검정을 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;import scipy.stats as stats

t_stat, p_value = stats.ttest_ind(group_a, group_b)

print(t_stat)
print(p_value)&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-11. 다중검정&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중검정은 여러 가설을 동시에 검정할 때 발생하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검정을 여러 번 반복하면, 우연히 유의미한 결과가 나올 가능성이 커진다.&lt;br /&gt;즉, 실제로는 차이가 없는데 차이가 있다고 판단하는 제 1종 오류가 증가할 수 있다.&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;processing&quot;&gt;&lt;code&gt;import numpy as np
import scipy.stats as stats

np.random.seed(42)

group_A = np.random.normal(10, 2, 30)
group_B = np.random.normal(12, 2, 30)
group_C = np.random.normal(11, 2, 30)

p_values = []
p_values.append(stats.ttest_ind(group_A, group_B).pvalue)
p_values.append(stats.ttest_ind(group_A, group_C).pvalue)
p_values.append(stats.ttest_ind(group_B, group_C).pvalue)

alpha = 0.05
adjusted_alpha = alpha / len(p_values)

print(f&quot;본페로니 보정된 유의수준: {adjusted_alpha:.4f}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 검정을 많이 하면 더 정확해지는 줄 알았는데,&lt;br /&gt;오히려 많이 할수록 우연히 걸리는 결과가 생길 수 있다는 점이 인상적이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-12. 제 1종 오류와 제 2종 오류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설검정에서는 오류를 완전히 피할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 제 1종 오류와 제 2종 오류를 구분해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 1종 오류는 귀무가설이 참인데도 기각하는 오류이다.&lt;br /&gt;즉, 실제로는 효과가 없는데 효과가 있다고 판단하는 경우이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 2종 오류는 귀무가설이 거짓인데도 기각하지 못하는 오류이다.&lt;br /&gt;즉, 실제로는 효과가 있는데 효과가 없다고 판단하는 경우이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 둘이 계속 헷갈렸는데,&lt;br /&gt;제 1종 오류는 &amp;ldquo;없는 효과를 있다고 착각하는 것&amp;rdquo;,&lt;br /&gt;제 2종 오류는 &amp;ldquo;있는 효과를 없다고 놓치는 것&amp;rdquo;으로 외우면 조금 편했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가설검정은 정답을 100% 맞히는 도구라기보다, 오류 가능성을 감수하면서 합리적인 판단을 내리는 과정이다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;&lt;span&gt;&lt;b&gt;머신러닝&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-13. 회귀분석 평가 지표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 회귀분석 모델의 성능을 평가하는 지표를 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀분석은 실제값과 예측값의 차이를 줄이는 것이 핵심이다.&lt;br /&gt;그래서 모델이 잘 예측했는지 확인하려면 오차를 어떻게 계산할지 알아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 회귀 평가 지표는 MSE, RMSE, MAE, R&amp;sup2;가 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-14. MSE&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSE는 평균 제곱 오차이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제값과 예측값의 차이를 구한 뒤, 그 값을 제곱하고 평균을 낸다.&lt;br /&gt;오차를 제곱하기 때문에 큰 오차에 더 민감하게 반응한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 왜 굳이 제곱을 하는지 헷갈렸는데,&lt;br /&gt;음수 오차와 양수 오차가 서로 상쇄되지 않게 만들기 위한 과정이라고 생각하니 이해가 쉬웠다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-15. RMSE&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RMSE는 MSE에 루트를 씌운 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSE는 오차를 제곱하기 때문에 원래 데이터와 단위가 달라진다.&lt;br /&gt;그래서 다시 루트를 씌워 원래 단위와 비슷하게 맞춰준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RMSE는 실제 오차 크기를 직관적으로 보고 싶을 때 유용하다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 집값 예측 모델에서 RMSE가 작다면,&lt;br /&gt;모델의 예측값이 실제 집값과 비교적 가깝다고 볼 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-16. MAE&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MAE는 평균 절대 오차이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제값과 예측값의 차이에 절댓값을 씌운 뒤 평균을 낸다.&lt;br /&gt;MSE처럼 제곱하지 않기 때문에 큰 오차에 대한 민감도는 상대적으로 낮다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 이상치의 영향을 조금 덜 받는 평가 지표라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSE는 큰 오차를 더 크게 벌주는 느낌이고,&lt;br /&gt;MAE는 전체적인 평균 오차를 비교적 담백하게 보는 느낌이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-17. R&amp;sup2;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R&amp;sup2;는 결정계수라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 데이터를 얼마나 잘 설명하는지를 나타내는 지표이다.&lt;br /&gt;값이 1에 가까울수록 모델이 데이터를 잘 설명한다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 R&amp;sup2;가 높다고 무조건 좋은 모델이라고 판단하면 안 된다.&lt;br /&gt;데이터 상황이나 모델의 복잡도도 함께 봐야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 회귀분석 모델의 설명력을 확인할 때 기본적으로 많이 사용되는 지표이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-18. 통계학과 머신러닝의 연결&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 학습하면서 통계학과 머신러닝이 완전히 따로 떨어진 개념은 아니라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계학에서는 표본을 바탕으로 모집단을 추론하고,&lt;br /&gt;머신러닝에서는 데이터를 바탕으로 새로운 값을 예측한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방향은 조금 다르지만 둘 다 데이터를 보고 판단한다는 점은 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 가설검정이나 p-value 같은 개념은 데이터 분석에서 결과를 해석할 때 필요하고,&lt;br /&gt;회귀 평가 지표는 머신러닝 모델이 얼마나 잘 예측하는지 판단할 때 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;통계학은 데이터를 해석하는 기준을 잡아주고, 머신러닝은 데이터를 바탕으로 예측하는 방법을 제공한다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 나의 간단 소감&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 통계학과 머신러닝 개념을 함께 학습해서 내용이 꽤 많았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 분포 이름도 많고 검정 방법도 많아서 조금 정신이 없었다.&lt;br /&gt;정규분포까지는 익숙한 느낌이 있었는데, t분포, 카이제곱분포, 푸아송분포까지 나오니까 머릿속에서 살짝 섞이는 느낌이었다.&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;b&gt;각 개념이 어떤 상황에서 쓰이는지 아는 것.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정규분포&lt;/b&gt;는 평균 중심의 데이터,&lt;br /&gt;&lt;b&gt;t분포&lt;/b&gt;는 표본이 작을 때의 평균 비교,&lt;br /&gt;&lt;b&gt;카이제곱검정&lt;/b&gt;은 범주형 데이터,&lt;br /&gt;&lt;b&gt;이항분포&lt;/b&gt;는 성공과 실패,&lt;br /&gt;&lt;b&gt;푸아송분포&lt;/b&gt;는 일정 시간 안의 사건 발생 횟수처럼 생각하니 훨씬 정리가 잘 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 쪽에서는 회귀 평가 지표가 인상적이었다.&lt;br /&gt;MSE, RMSE, MAE, R&amp;sup2;가 처음에는 다 비슷한 오차 지표처럼 보였는데,&lt;br /&gt;막상 비교해보니 각각 보는 관점이 조금씩 달랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 RMSE는 단위를 다시 맞춰준다는 점에서 실제 해석이 더 직관적으로 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 내용은 한 번에 완전히 익숙해지기는 어려운 내용이었다.&lt;br /&gt;그래도 직접 정리하면서 통계학과 머신러닝이 어떻게 연결되는지 조금은 보이기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 데이터 분석에서는 단순히 코드를 돌리는 것보다,&lt;br /&gt;&lt;span&gt;&lt;b&gt;결과를 어떤 기준으로 해석하고 판단할지 아는 것이 중요하다&lt;/b&gt;&lt;/span&gt;는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 p-value나 다중검정 같은 부분은 더 연습이 필요하지만,&lt;br /&gt;오늘은 적어도 통계학과 머신러닝을 각각 어떤 관점으로 봐야 하는지 감을 잡은 하루였다.&lt;/p&gt;</description>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/39</guid>
      <comments>https://min0jun.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 22 Jun 2026 20:03:17 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 28일차</title>
      <link>https://min0jun.tistory.com/38</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오늘 학습 목표&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;28-1.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pwhI6/dJMcabq8hik/9reOZ8OwSfllMAMi9S0YrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pwhI6/dJMcabq8hik/9reOZ8OwSfllMAMi9S0YrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pwhI6/dJMcabq8hik/9reOZ8OwSfllMAMi9S0YrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpwhI6%2FdJMcabq8hik%2F9reOZ8OwSfllMAMi9S0YrK%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;1280&quot; height=&quot;720&quot; data-filename=&quot;28-1.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 오늘 학습 한 내용&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 통계학에서 중요한 개념인 &lt;span&gt;&lt;b&gt;모집단과 표본&lt;/b&gt;&lt;/span&gt;&lt;span&gt;, 그리고 &lt;/span&gt;&lt;span&gt;&lt;b&gt;표본오차와 신뢰구간&lt;/b&gt;&lt;/span&gt;&lt;span&gt;에 대해 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 모집단과 표본이라는 단어가 그냥 통계에서 나오는 기본 용어 정도로 느껴졌는데, 내용을 보다 보니 데이터 분석에서 꽤 중요한 출발점이라는 생각이 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 우리가 데이터를 분석할 때 항상 전체 데이터를 다 가지고 있는 것은 아니다.&lt;br /&gt;그래서 전체를 전부 조사하지 못할 때, 일부 데이터를 뽑아서 전체를 추정하는 방식이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모집단은 전체, 표본은 그 전체 중에서 뽑은 일부라고 생각하면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 모집단과 표본&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;모집단이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;표본이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;br /&gt;하지만 현실에서는 시간, 비용, 접근성 문제 때문에 모든 데이터를 수집하기가 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그래서 통계에서는 표본을 통해 모집단의 특성을 추정하는 방식을 많이 사용한다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 왜 표본을 사용할까?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본을 사용하는 이유는 크게 현실적인 제약, 대표성, 데이터 관리 측면에서 생각할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 전체 모집단을 모두 조사하는 것은 비용과 시간이 많이 든다.&lt;br /&gt;예를 들어 전국의 모든 사람을 대상으로 설문조사를 한다고 생각하면, 현실적으로 조사 비용도 크고 시간도 오래 걸린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 모든 데이터를 수집하는 것이 물리적으로 불가능한 경우도 많다.&lt;br /&gt;특정 질병에 걸린 모든 환자의 데이터를 수집하거나, 모든 소비자의 구매 성향을 직접 조사하는 것은 쉽지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 모집단 전체를 조사하는 대신, 일부 표본을 뽑아 분석한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 아무 표본이나 뽑으면 안 된다.&lt;br /&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;표본이 모집단을 잘 대표하지 못하면, 표본을 분석해도 전체를 제대로 설명하기 어렵다.&lt;br /&gt;그래서 무작위 추출처럼 편향을 줄일 수 있는 방법이 중요하다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 전수조사와 표본조사&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전수조사는 모집단 전체를 조사하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체를 다 보기 때문에 가장 정확할 것 같지만, 모집단의 크기가 크면 비용과 시간이 많이 든다.&lt;br /&gt;그래서 현실에서는 전수조사가 항상 좋은 방법이라고 보기는 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본조사는 모집단 중 일부만 조사하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본조사는 전수조사보다 비용과 시간이 적게 들고, 데이터 처리도 비교적 쉽다.&lt;br /&gt;하지만 표본이 대표성을 가져야 한다는 조건이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하면 전수조사는 전체를 다 보는 방법이고, 표본조사는 일부를 보고 전체를 추정하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;현실적인 데이터 분석에서는 표본조사가 자주 사용된다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;4. 모집단과 표본 실습&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 실습에서는 정규분포를 따르는 모집단 데이터를 만들고, 그중 일부를 표본으로 추출했다.&lt;/p&gt;
&lt;pre id=&quot;code_1781867296155&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt

# 모집단 생성
population = np.random.normal(170, 10, 1000)

# 표본 추출
sample = np.random.choice(population, 100)

plt.hist(population, bins=50, alpha=0.5, label='population', color='blue')
plt.hist(sample, bins=50, alpha=0.5, label='sample', color='red')

plt.legend()
plt.title('population and sample distribution')
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;코드 설명&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;np.random.normal(170, 10, 1000)은 평균이 170이고 표준편차가 10인 정규분포 데이터를 1000개 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 모집단을 국가의 모든 성인 키 데이터처럼 가정한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;np.random.choice(population, 100)은 모집단에서 100개의 데이터를 무작위로 추출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 추출된 데이터가 표본이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;plt.hist()는 히스토그램을 그리는 함수다.&lt;br /&gt;여기서는 모집단과 표본의 분포를 한 그래프에 함께 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alpha는 투명도를 의미한다.&lt;br /&gt;두 히스토그램을 겹쳐서 볼 때 투명도를 주면 분포를 비교하기 쉽다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;실습 정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프를 보면 모집단은 데이터 수가 많기 때문에 더 넓고 부드러운 분포를 가진다.&lt;br /&gt;반면 표본은 일부 데이터만 뽑은 것이기 때문에 모집단과 완전히 똑같지는 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 표본이 잘 뽑히면 모집단의 전체적인 분포와 비슷한 모습을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분을 보면서 표본이 왜 중요한지 조금 더 이해된다.&lt;br /&gt;표본은 전체를 다 보지 않고도 전체의 특징을 추정하게 해주는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;표본은 작지만, 모집단을 잘 대표해야 의미가 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;5. 표본오차&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본오차는 표본에서 계산된 값과 모집단의 실제 값 사이의 차이를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 모집단의 실제 평균 키가 170cm인데, 표본에서 계산한 평균 키가 168cm라면 차이가 발생한다.&lt;br /&gt;이 차이가 표본오차라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본오차가 발생하는 이유는 표본이 모집단을 완벽하게 대표하지 못하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무리 표본을 잘 뽑아도 일부만 조사하기 때문에 모집단과 완전히 같을 수는 없다.&lt;br /&gt;그래서 표본을 이용해 분석할 때는 항상 오차 가능성을 생각해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본오차를 줄이는 방법은 크게 두 가지다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 표본 크기를 늘리는 것이다.&lt;br /&gt;표본이 많아질수록 모집단을 더 잘 대표할 가능성이 높아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째는 무작위 추출을 사용하는 것이다.&lt;br /&gt;모집단의 모든 대상이 뽑힐 가능성을 공정하게 가져야 편향을 줄일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;표본 크기가 커질수록 표본오차는 작아지는 경향이 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;6. 신뢰구간&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신뢰구간은 모집단의 평균이나 비율 같은 값을 추정할 때, 그 값이 포함될 것으로 기대되는 범위를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 어떤 표본을 조사했더니 평균 점수가 75점이라고 해보자.&lt;br /&gt;하지만 이 75점이 모집단의 진짜 평균이라고 단정할 수는 없다.&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;plusmn; z값 &amp;times; 표준오차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;95% 신뢰수준에서는 보통 z값으로 1.96을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 신뢰구간이라는 말이 조금 어렵게 느껴진다.&lt;br /&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;7. 신뢰구간 실습&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 실습에서는 표본 평균과 표본 표준편차를 계산하고, 이를 바탕으로 95% 신뢰구간을 구했다.&lt;/p&gt;
&lt;pre id=&quot;code_1781867314274&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import scipy.stats as stats

# 표본 평균과 표본 표준편차 계산
sample_mean = np.mean(sample)
sample_std = np.std(sample)

# 95% 신뢰구간 계산
conf_interval = stats.t.interval(
    0.95,
    len(sample) - 1,
    loc=sample_mean,
    scale=sample_std / np.sqrt(len(sample))
)

print(f&quot;표본 평균: {sample_mean}&quot;)
print(f&quot;95% 신뢰구간: {conf_interval}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;코드 설명&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;np.mean(sample)&lt;span&gt;은 표본의 평균을 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;np.std(sample)&lt;span&gt;은 표본의 표준편차를 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stats.t.interval()은 t분포를 이용해 신뢰구간을 계산하는 함수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.95&lt;span&gt;는 95% 신뢰수준을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;len(sample) - 1은 자유도다.&lt;br /&gt;보통 표본 크기에서 1을 뺀 값을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;loc=sample_mean은 신뢰구간의 중심을 표본 평균으로 설정한다는 의미다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scale=sample_std / np.sqrt(len(sample))은 표준오차를 의미한다.&lt;br /&gt;표본 표준편차를 표본 크기의 제곱근으로 나누어 계산한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;실습 정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;b&gt;표본 평균은 하나의 추정값이고, 신뢰구간은 그 추정값의 불확실성을 함께 보여준다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;오늘 학습 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;&lt;b&gt;오늘 내용의 핵심은 전체를 다 볼 수 없을 때, 일부 표본을 통해 전체 모집단을 추정하는 방법을 이해하는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나의 간단 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; 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;br /&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;또 신뢰구간을 배우면서 평균 하나만 보는 것이 항상 충분하지 않다는 것도 느껴진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균은 데이터를 대표하는 값이지만, 그 평균이 얼마나 믿을 만한지까지는 알려주지 않는다.&lt;br /&gt;그래서 신뢰구간처럼 추정값의 범위를 함께 보는 것이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 신뢰구간이라는 말이 어렵게 느껴졌지만, 결국 &amp;ldquo;진짜 값이 있을 만한 범위&amp;rdquo;라고 생각하니 조금 이해가 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 내용은 앞으로 가설검정이나 t검정 같은 내용을 배울 때도 계속 이어질 것 같다.&lt;br /&gt;통계는 단순히 계산하는 과목이라기보다, 불확실한 데이터를 가지고 얼마나 합리적으로 판단할 수 있는지를 배우는 과정에 가깝다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;앞으로 데이터를 분석할 때는 평균이나 결과값만 보는 것이 아니라, 그 값이 어떤 표본에서 나왔고 얼마나 신뢰할 수 있는지도 함께 생각해야겠다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/38</guid>
      <comments>https://min0jun.tistory.com/38#entry38comment</comments>
      <pubDate>Fri, 19 Jun 2026 20:48:07 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 26~27일차</title>
      <link>https://min0jun.tistory.com/37</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오늘 학습 목표&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd75yf/dJMcabq5MtD/qAk29g7kdhrFHHltMi9IV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd75yf/dJMcabq5MtD/qAk29g7kdhrFHHltMi9IV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd75yf/dJMcabq5MtD/qAk29g7kdhrFHHltMi9IV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd75yf%2FdJMcabq5MtD%2FqAk29g7kdhrFHHltMi9IV1%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;1536&quot; height=&quot;1024&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 오늘 학습 한 내용&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;오늘 학습한 내용&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 &lt;span&gt;&lt;b&gt;통계학 기초&lt;/b&gt;&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;&lt;b&gt;머신러닝 기초&lt;/b&gt;&lt;/span&gt;&lt;span&gt;를 함께 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 통계학과 머신러닝이 서로 다른 내용처럼 느껴졌는데, 정리해보니 두 개념은 자연스럽게 연결된다.&lt;br /&gt;통계학은 데이터를 이해하고 해석하기 위한 기본기이고, 머신러닝은 데이터를 바탕으로 패턴을 학습해 예측이나 분류를 수행하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 데이터 분석을 잘하려면 통계학으로 데이터를 이해하고, 머신러닝으로 데이터의 패턴을 활용할 수 있어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;&lt;span&gt;&lt;b&gt;1. 통계학 기초&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1-1. 데이터 분석에서 통계가 중요한 이유&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석에서 통계는 데이터를 이해하고 해석하는 데 중요한 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 단순히 모아두기만 하면 의미 있는 판단을 내리기 어렵다.&lt;br /&gt;하지만 통계를 활용하면 데이터를 요약하고, 패턴을 찾고, 이를 바탕으로 의사결정을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 고객 만족도 설문조사를 분석하면 고객의 불만 사항을 파악할 수 있다.&lt;br /&gt;또 고객을 유형별로 나누면 각 고객군에 맞는 상품 추천이나 마케팅 전략을 세울 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;통계는 데이터를 보고 &amp;ldquo;그래서 무엇을 해야 하는가?&amp;rdquo;를 판단할 수 있게 도와주는 도구다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1-2. 기술통계와 추론통계&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계는 크게 &lt;span&gt;&lt;b&gt;기술통계&lt;/b&gt;&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;&lt;b&gt;추론통계&lt;/b&gt;&lt;/span&gt;&lt;span&gt;로 나눌 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술통계는 현재 가지고 있는 데이터를 요약하고 설명하는 방법이다.&lt;br /&gt;대표적으로 평균, 중앙값, 분산, 표준편차 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균은 전체 데이터를 더한 뒤 데이터 개수로 나눈 값이다.&lt;br /&gt;중앙값은 데이터를 크기 순서대로 정렬했을 때 가운데에 위치한 값이다.&lt;br /&gt;분산과 표준편차는 데이터가 평균에서 얼마나 퍼져 있는지 확인할 때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 기술통계는 데이터를 한눈에 파악하기 위해 대표값으로 정리하는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 추론통계는 일부 데이터를 바탕으로 전체 모집단을 추정하는 방법이다.&lt;br /&gt;대표적으로 신뢰구간과 가설검정이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 데이터를 모두 확인하기 어려울 때, 표본 데이터를 이용해 전체의 특성을 추정하거나 어떤 가설이 맞는지 판단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기술통계는 데이터를 설명하는 데 초점이 있고, 추론통계는 일부 데이터를 바탕으로 전체를 추정하는 데 초점이 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1-3. 다양한 분석 방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계 분석에는 여러 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 &lt;span&gt;&lt;b&gt;위치추정&lt;/b&gt;&lt;/span&gt;은 데이터의 중심을 확인하는 방법이다.&lt;br /&gt;대표적으로 평균과 중앙값을 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1781782984092&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

data = [85, 90, 78, 92, 88, 76, 95, 89, 84, 91]

mean = np.mean(data)
median = np.median(data)

print(f&quot;평균: {mean}, 중앙값: {median}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 &lt;span&gt;&lt;b&gt;변이추정&lt;/b&gt;&lt;/span&gt;은 데이터가 얼마나 퍼져 있는지 확인하는 방법이다.&lt;br /&gt;대표적으로 분산, 표준편차, 범위가 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1781782996375&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;variance = np.var(data)
std_dev = np.std(data)
data_range = np.max(data) - np.min(data)

print(f&quot;분산: {variance}, 표준편차: {std_dev}, 범위: {data_range}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분포를 확인할 때는 히스토그램이나 박스플롯을 사용할 수 있다.&lt;br /&gt;히스토그램은 값들이 어느 구간에 많이 몰려 있는지 보여주고, 박스플롯은 중앙값, 사분위수, 이상치 등을 확인할 때 유용하다.&lt;/p&gt;
&lt;pre id=&quot;code_1781783026049&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import matplotlib.pyplot as plt

plt.hist(data, bins=5)
plt.title('histogram')
plt.show()

plt.boxplot(data)
plt.title('boxplot')
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 두 변수 사이의 관계를 보고 싶을 때는 &lt;span&gt;&lt;b&gt;상관관계&lt;/b&gt;&lt;/span&gt;를 확인한다.&lt;br /&gt;상관계수는 -1에서 1 사이의 값을 가지며, 1에 가까우면 양의 상관관계, -1에 가까우면 음의 상관관계가 강하다고 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1781783040053&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;study_hours = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
exam_scores = [95, 90, 85, 80, 75, 70, 65, 60, 55, 50]

correlation = np.corrcoef(study_hours, exam_scores)[0, 1]

print(f&quot;공부 시간과 시험 점수 간의 상관계수: {correlation}&quot;)

plt.scatter(study_hours, exam_scores)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 상관관계가 있다고 해서 무조건 인과관계가 있는 것은 아니다.&lt;br /&gt;예를 들어 아이스크림 판매량과 익사 사고 수가 함께 증가한다고 해서, 아이스크림이 익사 사고의 원인이라고 볼 수는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상관관계는 두 변수 사이의 관련성을 보여주지만, 원인과 결과를 바로 증명하는 것은 아니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;&lt;span&gt;&lt;b&gt;2. 머신러닝 기초&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-1. 머신러닝이란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 데이터를 기반으로 패턴을 학습하고, 그 패턴을 이용해 예측이나 분류를 수행하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝과 함께 자주 나오는 개념으로는 AI, 딥러닝, 데이터 사이언스, 데이터 분석이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI는 인간의 지능이 필요한 업무를 수행하기 위한 시스템이다.&lt;br /&gt;머신러닝은 관측된 패턴을 기반으로 의사결정을 하기 위한 알고리즘이다.&lt;br /&gt;딥러닝은 인공신경망을 이용한 머신러닝이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;범위로 보면 &lt;span&gt;&lt;b&gt;AI 안에 머신러닝이 있고, 머신러닝 안에 딥러닝이 포함된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝이 발전한 이유는 사람이 데이터를 기반으로 더 나은 의사결정을 내리고 싶어하기 때문이다.&lt;br /&gt;또한 데이터 저장 기술과 처리 기술이 발전하면서 대용량 데이터를 다룰 수 있게 된 것도 중요한 이유다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;머신러닝은 전체 데이터에서 패턴을 파악하고, 이를 바탕으로 예측과 분류를 수행하는 방법이다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-2. 머신러닝의 종류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 크게 &lt;span&gt;&lt;b&gt;지도학습, 비지도학습, 강화학습&lt;/b&gt;&lt;/span&gt;으로 나눌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도학습은 정답이 있는 데이터를 가지고 학습하는 방법이다.&lt;br /&gt;입력값과 정답을 함께 제공하고, 모델이 그 관계를 학습한다.&lt;br /&gt;예측이나 분류 문제에 많이 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 집값 예측, 스팸 메일 분류, 불량품 분류 등이 지도학습에 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비지도학습은 정답이 없는 데이터를 가지고 학습하는 방법이다.&lt;br /&gt;모델이 데이터 안에 숨어 있는 패턴이나 구조를 스스로 찾는다.&lt;br /&gt;대표적으로 군집화가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 고객 데이터를 보고 비슷한 구매 패턴을 가진 고객군을 나누는 작업이 비지도학습에 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강화학습은 보상을 통해 학습하는 방법이다.&lt;br /&gt;모델이 어떤 행동을 했을 때 보상을 받으면 그 방향으로 학습하고, 보상이 낮으면 다른 방향을 탐색한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 AI나 로봇 제어 같은 분야에서 자주 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지도학습은 정답을 보고 배우고, 비지도학습은 정답 없이 패턴을 찾고, 강화학습은 보상을 통해 더 나은 행동을 학습한다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2-3. 선형회귀&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀는 머신러닝에서 가장 기본이 되는 회귀분석 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀분석은 숫자를 예측하는 문제에 사용된다.&lt;br /&gt;예를 들어 몸무게를 보고 키를 예측하거나, 광고비를 보고 매출을 예측하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀는 데이터의 관계를 가장 잘 설명하는 직선을 찾는 과정이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 키와 몸무게 데이터가 있다고 가정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1781783057958&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;weights = [87, 81, 82, 92, 90, 61, 86, 66, 69, 69]
heights = [187, 174, 179, 192, 188, 160, 179, 168, 168, 174]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몸무게가 증가할수록 키도 어느 정도 증가하는 패턴이 있다면, 두 변수 사이에는 관계가 있다고 볼 수 있다.&lt;br /&gt;이때 선형회귀는 이 점들을 가장 잘 설명하는 직선을 찾으려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 직선은 실제 데이터와 예측값의 차이, 즉 오차가 작은 직선이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 데이터 값 - 직선의 예측 값 = Error&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 오차는 양수와 음수가 섞일 수 있다.&lt;br /&gt;그대로 더하면 서로 상쇄될 수 있기 때문에 보통 오차를 제곱해서 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;선형회귀는 결국 오차가 가장 작은 직선을 찾는 과정이다.&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;p data-ke-size=&quot;size16&quot;&gt;Y = &amp;beta;0 + &amp;beta;1X + &amp;epsilon;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 다음처럼 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = wX + b&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 X&lt;span&gt;는 독립 변수, &lt;/span&gt;Y&lt;span&gt;는 종속 변수다.&lt;br /&gt;&lt;/span&gt;w&lt;span&gt;는 가중치이고, &lt;/span&gt;b&lt;span&gt;는 편향이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 X값이 주어졌을 때 Y값을 예측하기 위해 가중치와 편향을 찾는 것이 선형회귀의 핵심이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 몸무게와 키 데이터를 이용해 다음과 같은 식이 나왔다고 하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;y = 0.86x + 109.37&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몸무게가 1kg 증가할 때 키가 약 0.86cm 증가한다고 해석할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 모든 데이터를 완벽하게 설명할 수는 없다.&lt;br /&gt;그래서 실제 값과 예측값 사이에는 항상 오차가 생길 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;머신러닝은 이 오차를 줄이는 방향으로 더 좋은 모델을 찾아가는 과정이라고 볼 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;오늘 학습 정리&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;b&gt;통계학은 데이터를 이해하는 기반이고, 머신러닝은 그 데이터를 활용해 예측하는 방법이라는 점이 가장 크게 정리된다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나의 간단 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 오늘은 통계학과 머신러닝의 기초를 함께 학습했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 통계학과 머신러닝이 따로 떨어진 내용처럼 느껴졌는데, 정리하다 보니 두 개념이 꽤 자연스럽게 이어진다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;통계학은 데이터를 요약하고 해석하는 데 필요한 기본 도구이고, 머신러닝은 그 데이터를 바탕으로 패턴을 학습하고 예측하는 방법이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 머신러닝을 제대로 이해하려면 통계학 기본기가 먼저 필요하다는 생각이 든다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특히 기술통계와 추론통계를 배우면서 데이터를 보는 관점이 조금 정리된다.&lt;br /&gt;평균이나 표준편차처럼 단순해 보이는 값들도 데이터를 이해하는 데 중요한 역할을 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또 상관관계와 인과관계의 차이도 중요하게 느껴진다.&lt;br /&gt;두 값이 같이 움직인다고 해서 무조건 원인과 결과로 판단하면 안 된다.&lt;br /&gt;데이터 분석을 할 때는 숫자가 보여주는 관계를 조심스럽게 해석해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 AI, 머신러닝, 딥러닝의 차이를 정리한 부분이 좋았다.&lt;br /&gt;평소에는 비슷하게 쓰이는 단어처럼 느껴졌는데, 실제로는 포함 관계가 다르다는 점이 명확해진다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;선형회귀는 생각보다 직관적인 개념이다.&lt;br /&gt;결국 여러 데이터 점을 가장 잘 설명하는 직선을 찾는 과정이고, 그 기준은 오차를 얼마나 줄이느냐에 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오늘 학습을 통해 통계학은 데이터를 이해하는 언어이고, 머신러닝은 그 데이터를 활용해 예측하는 방법이라는 흐름이 조금 잡힌다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아직은 수식이나 용어가 한 번에 익숙해지지는 않지만, 기본 개념을 잡고 나면 이후에 배우는 모델들도 조금 더 이해하기 쉬울 것 같다.&lt;br /&gt;앞으로는 단순히 코드를 따라 치는 것보다, 이 모델이 어떤 데이터를 보고 무엇을 예측하려는지 같이 생각하면서 학습해야겠다.&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/37</guid>
      <comments>https://min0jun.tistory.com/37#entry37comment</comments>
      <pubDate>Wed, 17 Jun 2026 20:52:51 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 25일차</title>
      <link>https://min0jun.tistory.com/36</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오늘 학습 목표&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPBKHE/dJMcaffXpJG/hJpjWi1xiHkfXEigPXTIzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPBKHE/dJMcaffXpJG/hJpjWi1xiHkfXEigPXTIzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPBKHE/dJMcaffXpJG/hJpjWi1xiHkfXEigPXTIzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPBKHE%2FdJMcaffXpJG%2FhJpjWi1xiHkfXEigPXTIzk%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;1536&quot; height=&quot;1024&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 오늘 학습 한 내용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 취업 방향과 이력서, 인턴 경험, 자격증 준비, AI면접 준비에 대한 개인 상담을 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담을 통해 느낀 핵심은 단순히 스펙을 많이 쌓는 것보다, &lt;span&gt;&lt;b&gt;내가 어떤 직무를 목표로 하고 있는지에 맞춰 경험과 키워드를 정리하는 것이 중요하다&lt;/b&gt;&lt;/span&gt;는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 요즘 채용에서는 이력서와 자기소개서가 단순히 사람이 읽는 문서가 아니라, AI 적합성 검사까지 고려해야 하는 자료라는 점이 인상 깊다.&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;span&gt;&lt;b&gt;1. 인턴 경험의 중요성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담에서 가장 먼저 강조된 부분은 &lt;span&gt;&lt;b&gt;인턴 경험&lt;/b&gt;&lt;/span&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대외활동도 의미가 있지만, 실제 취업에서는 대외활동보다 인턴 경험이 더 중요하게 평가될 수 있다.&lt;br /&gt;특히 단순히 아무 경험이나 쌓는 것보다, 가능하다면 &lt;span&gt;&lt;b&gt;네임드 기업에서의 인턴 경험&lt;/b&gt;&lt;/span&gt;이 더 강하게 작용할 수 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중소기업에서의 경험보다 이름이 알려진 기업의 인턴 경험이 이력서에서 더 눈에 띌 수 있고, 직무 적합성을 보여주는 데도 도움이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 자동차나 반도체 쪽은 인턴 기회가 많지 않을 수 있다.&lt;br /&gt;그래도 방향은 인턴 경험을 중심으로 잡고, 관련 직무와 산업에 맞는 경험을 계속 찾아보는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 기업은 &amp;ldquo;이 사람이 실제 현장에서 일해본 경험이 있는가&amp;rdquo;를 중요하게 보는 것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 요즘 이력서는 AI 적합성 검사를 고려해야 한다&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 이력서는 사람이 처음부터 하나하나 읽기보다, AI를 활용해 적합성을 먼저 확인하는 경우가 많다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 마이다스인 같은 HR AI 시스템을 활용해 지원자의 이력서와 자기소개서를 분석할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 예전처럼 자기소개서만 잘 쓰는 것보다, 이제는 &lt;span&gt;&lt;b&gt;이력서 자체의 완성도와 키워드 구성&lt;/b&gt;&lt;/span&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;프로젝트를 진행했다&amp;rdquo;라고 쓰는 것보다,&lt;br /&gt;어떤 프로그램을 사용했는지, 어떤 분석을 했는지, 어떤 결과를 냈는지 구체적으로 적는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시로는 다음과 같은 방식이 더 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python, Pandas, Matplotlib, 데이터 전처리, 공정 데이터 분석, 품질지표 분석, 결측치 처리, 이상치 탐지, 시각화, 대시보드, 공정관리, 설비관리, 생산성 개선, 불량률 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 &lt;span&gt;&lt;b&gt;직무와 연결되는 단어들이 이력서 안에 자연스럽게 들어가야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI가 이력서를 볼 때도 관련 키워드가 있어야 직무 적합성이 높게 판단될 가능성이 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;3. 자기소개서도 구체적인 키워드가 중요하다&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기소개서 역시 단순한 경험 나열보다는 &lt;span&gt;&lt;b&gt;구체적인 단어와 전문 용어&lt;/b&gt;&lt;/span&gt;가 중요하다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python을 활용해 제조 공정 데이터를 전처리하고, 결측치와 이상치를 처리한 뒤 Matplotlib과 Seaborn으로 불량률 추이와 변수 간 상관관계를 시각화했다.&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;b&gt;배운 내용을 작성할 때도 프로그램명, 분석 방법, 결과, 직무와의 연결성을 함께 적어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 자기소개서도 &amp;ldquo;열심히 했다&amp;rdquo;보다 &amp;ldquo;무엇을 어떻게 했고, 그 결과 무엇을 얻었는지&amp;rdquo;가 보여야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;4. 중견기업에서 보는 요소&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중견기업에서는 보통 다음과 같은 요소를 본다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학력&lt;br /&gt;학과&lt;br /&gt;자격증&lt;br /&gt;대외활동&lt;br /&gt;직무 관련 경험&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기계공학 전공자라면 학과 자체가 제조업, 설비, 공정, 품질, 생산기술 쪽과 연결될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 자격증이나 프로젝트 경험, 데이터 분석 경험을 잘 연결하면 직무 적합성을 더 잘 보여줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자격증은 필요한 자격증이라면 따서 마이너스가 되지는 않는다.&lt;br /&gt;오히려 직무 관련성을 보여주는 기본 조건이 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자격증은 엄청난 플러스라기보다, 부족하면 아쉬울 수 있는 기본 스펙에 가깝게 느껴진다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;5. 자격증, 토익스피킹, AI면접 준비&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 준비해야 할 부분도 정리할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 자격증은 직무와 관련된 것 위주로 준비하는 것이 좋다.&lt;br /&gt;기계, 생산, 품질, 안전, 공정 쪽과 연결되는 자격증은 이력서에서 기본적인 성실성과 직무 관심도를 보여줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토익스피킹도 준비하는 것이 좋다.&lt;br /&gt;요즘 기업에서 영어 점수를 필수로 보지 않더라도, 어학 성적이 있으면 지원할 수 있는 기업이나 직무의 폭이 넓어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI면접도 미리 연습해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI면접에서는 단순히 답변 내용만 보는 것이 아니라, 시선 처리, 말하는 속도, 자주 사용하는 단어, 답변 키워드 등을 볼 수 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 말을 너무 길게 이어가기보다, &lt;span&gt;&lt;b&gt;문장을 끊어서 말하는 연습&lt;/b&gt;&lt;/span&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;br /&gt;설비 유지보수&lt;br /&gt;생산성 개선&lt;br /&gt;불량률 감소&lt;br /&gt;품질 데이터 분석&lt;br /&gt;공정 조건 관리&lt;br /&gt;현장 문제 해결&lt;br /&gt;데이터 기반 의사결정&lt;br /&gt;제조업 이해도&lt;br /&gt;반도체 공정 이해&lt;br /&gt;자동차 제조 공정 이해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AI면접도 결국 내가 어떤 사람인지 보여주는 과정이므로, 직무와 관련된 키워드를 미리 잡아두는 것이 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;6. 학사 엔지니어의 현실적인 직무 방향&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담에서 현실적으로 중요했던 부분은 학사 엔지니어의 직무 방향이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학사 출신이 바로 설계 중심 업무를 맡는 경우는 많지 않을 수 있다.&lt;br /&gt;특히 제조업에서는 학사 엔지니어가 공정 시스템 관리, 설비 엔지니어링, 생산기술, 공정관리 쪽 업무를 맡는 경우가 많다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔지니어라고 해서 항상 직접 설계만 하는 것이 아니라, 실제로는 관리자에 가까운 역할도 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 다음과 같은 업무가 포함될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공정 조건 관리&lt;br /&gt;설비 유지보수&lt;br /&gt;공정 이상 대응&lt;br /&gt;생산라인 개선&lt;br /&gt;설비 수정 및 변경&lt;br /&gt;공정 안정화&lt;br /&gt;현장 문제 해결&lt;br /&gt;품질 이슈 대응&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;7. 산업과 세부 직무에 대한 이해도 어필&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;취업 준비를 할 때는 단순히 &amp;ldquo;제조업에 관심이 있습니다&amp;rdquo;라고 말하는 것보다, &lt;span&gt;&lt;b&gt;특정 산업과 세부 직무에 대한 관심&lt;/b&gt;&lt;/span&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;이렇게 작성하면 전공, 데이터 분석 경험, 직무 관심도가 자연스럽게 연결된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;8. 대외활동은 기업과 연결되는 경험이 좋다&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;br /&gt;중요한 것은 그 활동을 통해 어떤 경험을 했고, 직무와 어떻게 연결할 수 있는지다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대외활동 자체보다 그 경험을 이력서와 면접에서 어떻게 설명할 수 있는지가 더 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;9. 앞으로의 준비 방향&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 상담 내용을 바탕으로 앞으로 준비할 방향을 정리하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째, 인턴 경험을 가장 우선순위로 둔다.&lt;br /&gt;가능하면 네임드 기업이나 직무와 연결되는 인턴을 찾아본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째, 이력서에 들어갈 직무 키워드를 정리한다.&lt;br /&gt;공정관리, 설비 엔지니어링, 생산기술, 품질 데이터 분석, 공정 개선 같은 키워드를 중심으로 정리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셋째, 자격증과 토익스피킹을 준비한다.&lt;br /&gt;지원 가능한 기업의 폭을 넓히고, 기본 스펙에서 부족함이 없도록 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넷째, AI면접을 미리 연습한다.&lt;br /&gt;시선 처리, 말 끊기, 핵심 키워드 반복, 답변 구조를 연습한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다섯째, 산업과 세부 직무에 대한 이해도를 높인다.&lt;br /&gt;반도체, 자동차, 제조업 쪽에서 실제 엔지니어가 어떤 업무를 하는지 계속 찾아봐야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 취업 준비는 단순히 스펙을 쌓는 것이 아니라, 내가 가고 싶은 직무에 맞게 경험과 키워드를 정리하는 과정이다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나의 간단 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 오늘 상담을 하면서 취업 준비 방향을 조금 더 현실적으로 볼 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;막연하게 좋은 회사에 가고 싶다는 생각만으로는 부족하고, 어떤 산업에서 어떤 직무를 하고 싶은지 더 구체적으로 정리해야 한다는 걸 느낀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 인턴 경험의 중요성이 크게 와닿는다.&lt;br /&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;또 요즘은 이력서와 자기소개서도 AI 적합성 검사를 고려해야 한다는 점이 인상적이다.&lt;br /&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;앞으로는 이력서를 쓸 때 &amp;ldquo;내가 열심히 했다&amp;rdquo;보다 &amp;ldquo;무엇을 했고, 어떤 도구를 사용했고, 어떤 결과를 만들었는지&amp;rdquo;를 더 구체적으로 적어야겠다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학사 엔지니어의 업무 방향에 대해서도 다시 생각하게 된다.&lt;br /&gt;처음에는 엔지니어라고 하면 설계나 개발 쪽을 먼저 떠올리기 쉬운데, 실제 제조업에서는 공정관리, 설비관리, 생산기술처럼 현장을 안정적으로 운영하고 개선하는 역할도 크다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기계공학 전공과 데이터 분석 경험을 잘 연결하면 공정관리나 설비 엔지니어링 쪽에서도 충분히 어필할 수 있을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 상담을 통해 앞으로 해야 할 일이 조금 더 선명해졌다.&lt;br /&gt;인턴 준비, 자격증, 토익스피킹, AI면접, 이력서 키워드 정리를 하나씩 준비해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 중요한 건 방향 없이 이것저것 하는 것이 아니라, 내가 목표로 하는 직무에 맞게 경험을 쌓고 그 경험을 잘 설명할 수 있게 만드는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/36</guid>
      <comments>https://min0jun.tistory.com/36#entry36comment</comments>
      <pubDate>Tue, 16 Jun 2026 19:11:27 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 24일차</title>
      <link>https://min0jun.tistory.com/35</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오늘 학습 목표&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;- 기초프로젝트 발표의 날~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 오늘 학습 한 내용&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-01.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB3kwA/dJMcabq3de2/E8KZkrd0JtgvLfUOF3UyF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB3kwA/dJMcabq3de2/E8KZkrd0JtgvLfUOF3UyF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB3kwA/dJMcabq3de2/E8KZkrd0JtgvLfUOF3UyF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB3kwA%2FdJMcabq3de2%2FE8KZkrd0JtgvLfUOF3UyF0%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-01.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-02.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cucdih/dJMcabq3deT/dMoUGoIW9quVDXUvKdSyBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cucdih/dJMcabq3deT/dMoUGoIW9quVDXUvKdSyBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cucdih/dJMcabq3deT/dMoUGoIW9quVDXUvKdSyBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcucdih%2FdJMcabq3deT%2FdMoUGoIW9quVDXUvKdSyBk%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-02.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-03.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UsUGY/dJMcabq3de1/Ak78GzrFVTaKDKdAeoTeS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UsUGY/dJMcabq3de1/Ak78GzrFVTaKDKdAeoTeS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UsUGY/dJMcabq3de1/Ak78GzrFVTaKDKdAeoTeS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUsUGY%2FdJMcabq3de1%2FAk78GzrFVTaKDKdAeoTeS1%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-03.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-04.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YSQyt/dJMcahx12xz/SPlAt4L5ku48LEL30LKGO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YSQyt/dJMcahx12xz/SPlAt4L5ku48LEL30LKGO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YSQyt/dJMcahx12xz/SPlAt4L5ku48LEL30LKGO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYSQyt%2FdJMcahx12xz%2FSPlAt4L5ku48LEL30LKGO0%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-04.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-05.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTxCZK/dJMcaiXVvws/x6BizF60N91MZbDt5QfM10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTxCZK/dJMcaiXVvws/x6BizF60N91MZbDt5QfM10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTxCZK/dJMcaiXVvws/x6BizF60N91MZbDt5QfM10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTxCZK%2FdJMcaiXVvws%2Fx6BizF60N91MZbDt5QfM10%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-05.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-06.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmAtAN/dJMb9905HS1/goOJbUcy6gHorPoecjHurk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmAtAN/dJMb9905HS1/goOJbUcy6gHorPoecjHurk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmAtAN/dJMb9905HS1/goOJbUcy6gHorPoecjHurk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmAtAN%2FdJMb9905HS1%2FgoOJbUcy6gHorPoecjHurk%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-06.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-07.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjQnQA/dJMcabq3deY/KsPVdEdDinIfVQQjkootAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjQnQA/dJMcabq3deY/KsPVdEdDinIfVQQjkootAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjQnQA/dJMcabq3deY/KsPVdEdDinIfVQQjkootAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjQnQA%2FdJMcabq3deY%2FKsPVdEdDinIfVQQjkootAK%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-07.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-08.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c48GQB/dJMcaiXVvwt/53pEoN2GQ7ksc5ljsHYqOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c48GQB/dJMcaiXVvwt/53pEoN2GQ7ksc5ljsHYqOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c48GQB/dJMcaiXVvwt/53pEoN2GQ7ksc5ljsHYqOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc48GQB%2FdJMcaiXVvwt%2F53pEoN2GQ7ksc5ljsHYqOK%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-08.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-09.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kUbSb/dJMb9905HSX/9cB8IrjIqbfk8mtggAqnBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kUbSb/dJMb9905HSX/9cB8IrjIqbfk8mtggAqnBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kUbSb/dJMb9905HSX/9cB8IrjIqbfk8mtggAqnBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkUbSb%2FdJMb9905HSX%2F9cB8IrjIqbfk8mtggAqnBK%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-09.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-10.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs3lEk/dJMcabq3deW/LotrorPhhW1m970uQPu391/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs3lEk/dJMcabq3deW/LotrorPhhW1m970uQPu391/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs3lEk/dJMcabq3deW/LotrorPhhW1m970uQPu391/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs3lEk%2FdJMcabq3deW%2FLotrorPhhW1m970uQPu391%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-10.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-11.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciOEVD/dJMcabq3deZ/AEVbVqGP3DBb0PyiuoSf70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciOEVD/dJMcabq3deZ/AEVbVqGP3DBb0PyiuoSf70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciOEVD/dJMcabq3deZ/AEVbVqGP3DBb0PyiuoSf70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciOEVD%2FdJMcabq3deZ%2FAEVbVqGP3DBb0PyiuoSf70%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-11.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-12.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lPFJQ/dJMcabq3deV/AQzHPXNsg5kjBUkskS9fKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lPFJQ/dJMcabq3deV/AQzHPXNsg5kjBUkskS9fKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lPFJQ/dJMcabq3deV/AQzHPXNsg5kjBUkskS9fKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlPFJQ%2FdJMcabq3deV%2FAQzHPXNsg5kjBUkskS9fKk%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-12.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-13.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z7NAg/dJMb9905HSY/I7jCZj7usiNupZejtFZGA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z7NAg/dJMb9905HSY/I7jCZj7usiNupZejtFZGA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z7NAg/dJMb9905HSY/I7jCZj7usiNupZejtFZGA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ7NAg%2FdJMb9905HSY%2FI7jCZj7usiNupZejtFZGA0%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-13.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-14.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mghdQ/dJMcahx12xA/MYtRWPluCFwEJiZK4tCPG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mghdQ/dJMcahx12xA/MYtRWPluCFwEJiZK4tCPG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mghdQ/dJMcahx12xA/MYtRWPluCFwEJiZK4tCPG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmghdQ%2FdJMcahx12xA%2FMYtRWPluCFwEJiZK4tCPG0%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-14.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-15.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZRIbq/dJMb9905HSZ/z5bcDlzsX8o0BnVWizeta1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZRIbq/dJMb9905HSZ/z5bcDlzsX8o0BnVWizeta1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZRIbq/dJMb9905HSZ/z5bcDlzsX8o0BnVWizeta1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZRIbq%2FdJMb9905HSZ%2Fz5bcDlzsX8o0BnVWizeta1%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-15.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-16.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk94tj/dJMcahx12xB/4YZ7SxgYTxvd32NHKzQOrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk94tj/dJMcahx12xB/4YZ7SxgYTxvd32NHKzQOrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk94tj/dJMcahx12xB/4YZ7SxgYTxvd32NHKzQOrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk94tj%2FdJMcahx12xB%2F4YZ7SxgYTxvd32NHKzQOrk%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;4000&quot; height=&quot;2250&quot; data-filename=&quot;발표용 PPT 1조(가스 센서 데이터를 활용한 위험도 분석)-16.png&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나의 간단 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 오늘 드디어 발표를 마쳤다. 발표는 팀원분이 해주셨는데 너무 잘해주셔서 맘에 들었다. 피드백도 꽤 긍정적인 피드백을 받아서 좋았고, 다만 아쉬운점은 충분히 우리가 넣을 수 있는 내용이었음에도 분량상빼거나 안넣어도 될것같다고 판단한 내용들인데 그 자료들을 넣었으면 좋았겠다고 하셔서 좀 아쉽지만 다음이 있는거니까. 다음엔 좀 더 완벽에 가까운 피피티로 만들어 보겠다!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 오늘 다같이 미니게임을 했는데 생각보다 재밌었다ㅋㅋㅋㅋㅋㅋ 근데 나는 계속 광탈한게 웃음벨ㅋㅎㅋㅎㅋㅎㅋㅎ&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;난 mvp와 우수 프로젝트를 노려보겠다. 딱대 발롱도르,,,,, &lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/35</guid>
      <comments>https://min0jun.tistory.com/35#entry35comment</comments>
      <pubDate>Mon, 15 Jun 2026 20:47:29 +0900</pubDate>
    </item>
    <item>
      <title>[본캠프] 데이터기반 QA/QC 부트캠프 23일차</title>
      <link>https://min0jun.tistory.com/34</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오늘 학습 목표&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2MpK1/dJMb99Ufblf/qkBcDRx06xoj4HbgctcHwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2MpK1/dJMb99Ufblf/qkBcDRx06xoj4HbgctcHwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2MpK1/dJMb99Ufblf/qkBcDRx06xoj4HbgctcHwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2MpK1%2FdJMb99Ufblf%2FqkBcDRx06xoj4HbgctcHwk%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 오늘 학습 한 내용&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;오늘의 코드카타&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 코드카타 문제 2개를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서는 &lt;span&gt;&lt;b&gt;반복문을 이용해 같은 문자열을 여러 줄 출력하는 방법&lt;/b&gt;&lt;/span&gt;&lt;span&gt;과 &lt;/span&gt;&lt;span&gt;&lt;b&gt;최대공약수, 최소공배수를 구하는 방법&lt;/b&gt;&lt;/span&gt;&lt;span&gt;을 연습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 문제는 출력 형태를 정확히 맞추는 것이 중요하고, 두 번째 문제는 두 수의 관계를 이용해 계산하는 것이 핵심이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1. 직사각형 별찍기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 정수 n&lt;span&gt;, &lt;/span&gt;m&lt;span&gt;이 주어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 *&lt;span&gt; 문자를 이용해서 가로 길이가 &lt;/span&gt;n&lt;span&gt;, 세로 길이가 &lt;/span&gt;m&lt;span&gt;인 직사각형을 출력하는 문제다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 입력이 5 3이라면 가로로 별 5개를 출력하고, 이 줄을 총 3번 반복하면 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력&lt;/p&gt;
&lt;pre id=&quot;code_1781247164993&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;5 3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력&lt;/p&gt;
&lt;pre id=&quot;code_1781247177166&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;*****
*****
*****&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;문제 접근&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 별을 한 줄에 몇 개 출력할지, 그리고 그 줄을 몇 번 반복할지만 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가로 길이는 n&lt;span&gt;이고, 세로 길이는 &lt;/span&gt;m&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'*' * n을 사용하면 별을 n개 이어 붙인 문자열을 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 for&lt;span&gt;문을 이용해 이 문자열을 &lt;/span&gt;m&lt;span&gt;번 출력하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자열도 곱셈을 이용하면 같은 문자를 반복해서 만들 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;풀이 코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1781247192883&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b = map(int, input().strip().split(' '))

for i in range(b):
    print('*' * a)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;코드 설명&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input().strip().split(' ')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력받은 문자열의 앞뒤 공백을 제거하고, 공백을 기준으로 나눈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;map(int, ...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나누어진 값을 정수로 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a, b = ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 값은 가로 길이, 두 번째 값은 세로 길이로 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for i in range(b):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세로 길이만큼 반복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;print('*' * a)&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;span&gt;&lt;b&gt;풀이 정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 어렵게 생각할 필요 없이, 별 한 줄을 먼저 만든 뒤 그 줄을 여러 번 출력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'*' * a는 별을 a개만큼 반복한 문자열을 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음 range(b)로 b번 반복하면서 출력하면 직사각형 형태가 완성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 문제는 계산보다 원하는 모양을 정확히 만드는 것이 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;2. 최대공약수와 최소공배수&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 수 n&lt;span&gt;, &lt;/span&gt;m&lt;span&gt;을 입력받아 최대공약수와 최소공배수를 구하는 문제다.&lt;/span&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;예를 들어 n = 3&lt;span&gt;, &lt;/span&gt;m = 12&lt;span&gt;라면 최대공약수는 &lt;/span&gt;3&lt;span&gt;, 최소공배수는 &lt;/span&gt;12&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 [3, 12]&lt;span&gt;를 반환하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n = 3&lt;span&gt;&lt;br /&gt;m = &lt;/span&gt;12&lt;span&gt;&lt;br /&gt;return = &lt;/span&gt;[3, 12]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n = 2&lt;span&gt;&lt;br /&gt;m = &lt;/span&gt;5&lt;span&gt;&lt;br /&gt;return = &lt;/span&gt;[1, 10]&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;문제 접근&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 최대공약수를 구해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 수 중 더 작은 수부터 1까지 거꾸로 확인하면서, 두 수를 모두 나누어떨어지게 하는 수를 찾으면 된다.&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;최소공배수 = n * m // 최대공약수&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;span&gt;&lt;b&gt;풀이 코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1781247221840&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n, m):
    answer = []

    for i in range(min(n, m), 0, -1):
        if n % i == 0 and m % i == 0:
            GCD = i
            break

    LCM = n * m // GCD

    answer = [GCD, LCM]

    return answer


# solution(2, 5)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;코드 설명&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;answer = []&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대공약수와 최소공배수를 담을 리스트를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for i in range(min(n, m), 0, -1):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 수 중 더 작은 값부터 1까지 거꾸로 반복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if n % i == 0 and m % i == 0:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 값 i가 두 수를 모두 나누어떨어지게 하는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GCD = i&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건을 만족하면 해당 값이 최대공약수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;break&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 수부터 확인했기 때문에, 최대공약수를 찾으면 반복을 멈춘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LCM = n * m // GCD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대공약수를 이용해 최소공배수를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;answer = [GCD, LCM]&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;span&gt;&lt;b&gt;풀이 정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;b&gt;최대공약수만 정확히 구하면 최소공배수는 공식으로 바로 계산할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나의 간단 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; 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;직사각형 별찍기 문제는 코드 자체는 짧지만, 입력을 어떻게 받고 원하는 모양으로 어떻게 출력할지 생각해야 한다. 특히 문자열에 곱셈을 사용할 수 있다는 점이 중요하다. '*' * a처럼 작성하면 별을 원하는 개수만큼 반복해서 만들 수 있다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대공약수와 최소공배수 문제는 수학 개념이 들어가서 처음에는 조금 더 복잡하게 느껴진다. 그래도 최대공약수를 먼저 구하고, 그 값을 이용해 최소공배수를 계산한다고 생각하면 흐름이 정리된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 range(min(n, m), 0, -1)처럼 작은 수부터 거꾸로 확인하는 방식이 인상적이다. 가장 큰 약수부터 찾기 때문에 조건을 만족하는 값을 찾으면 바로 break로 멈출 수 있다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 문제들을 풀면서 출력 문제와 수학 문제는 접근 방식이 꽤 다르다는 걸 느낀다. 별찍기는 출력 형식을 맞추는 것이 중요하고, 최대공약수 문제는 계산 규칙을 코드로 옮기는 것이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직은 문제 유형마다 바로 풀이가 떠오르지는 않지만, 문제를 읽고 필요한 과정을 하나씩 나누는 연습은 계속 쌓이고 있다. 앞으로도 &lt;span&gt;&lt;b&gt;입력, 반복, 조건, 계산 과정을 먼저 정리한 뒤 코드로 옮기는 방식&lt;/b&gt;&lt;/span&gt;으로 연습해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+(프로젝트 후기) 오늘은 프로젝트 준비하는 마지막날이다. 다행히 미리미리 한 결과, 오늘 오후 4시 전에 끝낼수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 내가 일이 쌓이면 불안해서 미리미리 쳐내는 스타일이라 이번 프로젝트를 조금 밀어붙여서 진행을 했는데, 팀원분들이 불만없이 잘 따라와주고 굳이 말안해도 알아서 해주는 스타일이었어서 너무 좋았다.&lt;br /&gt;그래도 처음부터 속도를 붙여서 달리다보니 속도에 가속도가 붙는 느낌이었다. 완주까진 무사히 했으니 등수는 몇 등일지 기대가 된다.&lt;/p&gt;</description>
      <category>내일배움캠프</category>
      <category>Til</category>
      <category>내일배움캠프</category>
      <category>부트캠프</category>
      <author>min0jun</author>
      <guid isPermaLink="true">https://min0jun.tistory.com/34</guid>
      <comments>https://min0jun.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 12 Jun 2026 17:24:49 +0900</pubDate>
    </item>
  </channel>
</rss>