2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 32일차

mingdoremi 2025. 6. 26. 20:57

안녕하세요! 오늘은 본캠프 32일차입니다!!

 

오늘의 베이직 기초 문제!

 

1번. 추출된 데이터 제거

이름(name)과 생년월일(birth_date)이 모두 같은 행은 독창적인 고객으로 간주됩니다.
이 플러그인을 제거하여 고유한 사용자 정보만 입력하세요.

import pandas as pd

data = {
'이름': ['김철수', '이영희', '김철수', '최민수'],
'birth_date': ['1990-01-01', '1985-02-14', '1990-01-01', '1992-03-21'],
'email': [' a@example.com ', ' b@example.com ', ' c@example.com ', ' d@example.com ']
}

df = pd.DataFrame(data)

 

import pandas as pd

data = {
'name': ['김철수', '이영희', '김철수', '최민수'],
'birth_date': ['1990-01-01', '1985-02-14', '1990-01-01', '1992-03-21'],
'email': ['a@example.com', 'b@example.com', 'c@example.com', 'd@example.com']
}

df = pd.DataFrame(data)

df_unique = df.drop_duplicates(subset=['name', 'birth_date'])

print(df_unique)

2번. 이상치 처리

income 컬럼의 수입 데이터에서 IQR 방법을 사용하여 이상치를 제거하세요.

import pandas as pd

data = {
'name': ['김철수', '이영희', '최민수', '박지성', '정우성', '강호동'],
'income': [3000, 3500, 3200, 50000, 3100, 2000]
}

import pandas as pd

data = {
'name': ['김철수', '이영희', '최민수', '박지성', '정우성', '강호동'],
'income': [3000, 3500, 3200, 50000, 3100, 2000]
}

df = pd.DataFrame(data)

Q1 = df['income'].quantile(0.25)
Q3 = df['income'].quantile(0.75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

df_filtered = df[(df['income'] >= lower_bound) & (df['income'] <= upper_bound)]

print(df_filtered)

 

1번. 챌린지반 1일차 코드문제

'스마트팩토리 솔루션즈'는 공정 효율 개선을 위해 다양한 생산 라인에 센서를 설치하고 데이터를 수집합니다. 이번 과제는 CNC 머시닝 센터의 절삭유(Cutting Fluid) 온도 센서 데이터를 분석하는 것입니다. 절삭유 온도는 가공 정밀도와 공구 수명에 큰 영향을 미치므로, 온도 데이터의 특성을 정확히 이해하는 것이 중요합니다. 특정 시간 동안 수집된 절삭유 온도 데이터를 분석하여, 현재 공정의 온도 분포 상태를 파악하고자 합니다.
요구사항:
Temperature 데이터의 평균, 중앙값, 최빈값, 표준편차, 분산, 왜도, 첨도를 계산하여 출력하세요.
Temperature 데이터에 대한 박스플롯(Box Plot)을 그려 데이터의 분포와 이상치 존재 여부를 시각적으로 확인하세요.

import pandas as pd
import numpy as np

# CNC 머시닝 센터 절삭유 온도 데이터 (섭씨, ℃)
data= [
28.5, 29.1, 28.8, 29.5, 28.7, 29.2, 28.9, 29.3, 28.6, 29.0,
29.4, 28.7, 28.9, 29.2, 28.5, 29.0, 29.3, 28.8, 29.1, 28.6,
28.5, 29.1, 28.8, 29.5, 28.7, 29.2, 28.9, 29.3, 28.6, 29.0,
29.4, 28.7, 28.9, 29.2, 28.5, 29.0, 29.3, 28.8, 29.1, 28.6,
29.8, 28.3, 29.6, 28.4, 29.7, 28.2, 29.9, 28.1, 30.0, 28.0,
27.5, 30.5, 29.0, 29.1, 28.9, 29.2, 28.7, 29.3, 28.8, 29.0,
29.1, 28.9, 29.2, 28.7, 29.3, 28.8, 29.1, 28.6, 29.4, 28.5
]

df= pd.DataFrame(data, columns=['Temperature'])

print(f"평균: {}")
print(f"중앙값: {}")
print(f"최빈값: {}")
print(f"표준편차: {__________}")
print(f"분산: {_}")
print(f"왜도: {____}")
print(f"첨도: {_____}")

(소수점 둘째자리 까지 표시할 것)

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import skew, kurtosis

# CNC 머시닝 센터 절삭유 온도 데이터 (섭씨, ℃)
data= [
28.5, 29.1, 28.8, 29.5, 28.7, 29.2, 28.9, 29.3, 28.6, 29.0,
29.4, 28.7, 28.9, 29.2, 28.5, 29.0, 29.3, 28.8, 29.1, 28.6,
28.5, 29.1, 28.8, 29.5, 28.7, 29.2, 28.9, 29.3, 28.6, 29.0,
29.4, 28.7, 28.9, 29.2, 28.5, 29.0, 29.3, 28.8, 29.1, 28.6,
29.8, 28.3, 29.6, 28.4, 29.7, 28.2, 29.9, 28.1, 30.0, 28.0,
27.5, 30.5, 29.0, 29.1, 28.9, 29.2, 28.7, 29.3, 28.8, 29.0,
29.1, 28.9, 29.2, 28.7, 29.3, 28.8, 29.1, 28.6, 29.4, 28.5
]

df= pd.DataFrame(data, columns=['Temperature'])

mean = round(np.mean(df['Temperature']), 2)
median = round(np.median(df['Temperature']), 2)
mode = round(df['Temperature'].mode()[0],2)
std = round(np.std(df['Temperature'], ddof=1), 2)
var = round(np.var(df['Temperature'], ddof=1), 2)
skewness = round(skew(df['Temperature']), 2)
kurt = round(kurtosis(df['Temperature']), 2)

print(f"평균: {mean}")
print(f"중앙값: {median:.2f}")
print(f"최빈값: {mode:.2f}")
print(f"표준편차: {std}")
print(f"분산: {var}")
print(f"왜도: {skewness}")
print(f"첨도: {kurt}")

plt.figure(figsize=(6, 4))
plt.boxplot(df['Temperature'], vert=False)
plt.title("Cutting Fluid Temperature (Box Plot)")
plt.xlabel("Temperature (℃)")
plt.grid(True)
plt.show()

2번. 챌린지반 1일차 객관식문제

'전자 부품 조립 공장'에서는 인쇄회로기판(PCB)에 부품을 자동으로 실장하는 SMT(Surface Mount Technology) 라인을 운영합니다. 품질 관리팀은 주기적으로 생산된 PCB의 부품 실장 오차 거리 (mm)와 납땜 불량 유형을 기록하고 있습니다. 또한, 한 조립 라인에서 생산된 PCB 50개의 실장 오차 거리를 측정하여 분포 특성을 파악하고자 합니다.
위 시나리오에서 수집된 데이터에 대한 설명으로 가장 적절한 것은?

 

A. 부품 실장 오차 거리는 범주형 데이터이며, 납땜 불량 유형은 수치형 데이터이다.

B. 부품 실장 오차 거리 데이터의 평균은 이상치에 매우 민감하므로, 데이터 분포가 왜곡된 경우 중앙값이 데이터의 중심을 더 잘 대표한다.

C. 부품 실장 오차 거리 데이터의 표준편차가 0에 가깝다면, 이는 실장 오차가 공정 평균으로부터 넓게 퍼져 있음을 의미한다.

D. 납땜 불량 유형 데이터를 히스토그램으로 시각화하면 불량 유형별 빈도를 쉽게 파악할 수 있다.

 

해설

❌ A 오답: 부품 실장 오차 거리는 측정 가능한 연속적인 값이므로 수치형(연속형) 데이터입니다. 납땜 불량 유형("미납", "과납", "냉납" 등)은 분류 가능한 값이므로 범주형(명목형) 데이터입니다.

⭕️ B 정답: 평균은 모든 데이터 값에 영향을 받기 때문에 이상치에 민감합니다. 데이터 분포가 심하게 왜곡(skewed)되어 있거나 이상치가 존재하는 경우, 중앙값(Median)이 극단값의 영향을 덜 받아 데이터의 중심 경향을 더 잘 나타낼 수 있습니다.

C 오답: 표준편차는 데이터가 평균으로부터 얼마나 퍼져 있는지(산포도)를 나타냅니다. 표준편차가 0에 가깝다는 것은 데이터가 평균에 밀집되어 있다는 것을 의미합니다. 넓게 퍼져 있다면 표준편차는 커집니다.

D 오답: 히스토그램은 수치형 데이터의 분포를 계급별 빈도로 나타내는 데 사용됩니다. 범주형 데이터의 빈도는 막대 그래프(Bar Chart)로 시각화하는 것이 적절합니다.

문제 1. 다음 중 One-Hot Encoding에 대한 설명으로 옳은 것은?

인코딩중에서 원핫 인코딩에 대해서 알아보자.

 

A. 모든 범주형 변수는 무조건 One-Hot Encoding을 사용하는 것이 좋다.

B. One-Hot Encoding은 순서가 있는 범주형 변수에 적합하다.

C. One-Hot Encoding은 범주의 수만큼 새로운 열을 생성하며, 각 열은 0 또는 1로 표시된다.

D. One-Hot Encoding은 수치형 변수의 정규화를 위해 사용된다.

해설

A 오답: 범주의 수가 너무 많으면 차원이 급격히 증가하므로 항상 좋은 선택은 아니다.

B 오답: 순서가 있는 경우에는 Label Encoding이나 Ordinal Encoding이 적절하다.

⭕️ C 정답: One-Hot Encoding은 각 범주마다 새로운 열을 만들고, 해당 열만 1, 나머지는 0으로 표시한다.

D 오답: 정규화는 Scaling의 개념이다.

문제 2. StandardScaler에 대한 설명으로 틀린 것은?

스케일링 기법 중 StandardScaler에 대해서 알아보자.

 

A. 평균 0, 표준편차 1로 데이터를 변환한다.

B. 데이터가 정규분포를 따를 때 사용하면 좋다.

C. 이상치가 많아도 영향을 받지 않는다.

D. PCA와 함께 자주 사용된다.

 

해설

⭕️ A 정답: StandardScaler는 평균 0, 표준편차 1로 조정한다.

⭕️ B. 정답:데이터가 정규분포일 때 가장 효과적이다.

C. 오답: 이상치가 있으면 평균과 표준편차가 왜곡되므로 민감하다.

⭕️ D. 정답: PCA 적용 전 StandardScaler를 통해 데이터 크기를 맞추는 것이 일반적이다.

문제 3. 다중공선성(Multicollinearity)에 대한 설명 중 올바른 것은?

A. 모든 머신러닝 모델에서 반드시 제거해야 한다.

B. 다중공선성이 존재하면 항상 모델 성능이 향상된다.

C. VIF 값이 클수록 다른 변수와의 상관관계가 낮다는 의미이다.

D. 다중공선성이 심하면 해석력이 떨어질 수 있다.

해설

A 답: 트리 기반 모델에서는 큰 영향이 없으며 예측 목적이라면 제거하지 않아도 된다.

B 답: 오히려 모델이 불안정해지고 과적합이 생길 수 있다.

C 답: VIF가 크면 다른 변수와 상관관계가 높다는 뜻이다.

⭕️ D 정답: 변수 간 중복 정보로 인해 해석력이 낮아질 수 있다.

문제 4. 다음 중 오버샘플링(SMOTE 기법)에 대한 설명으로 적절한 것은?

A. 기존 데이터를 그대로 복제하여 수를 맞춘다.

B. 데이터 간 평균을 구해 새로운 데이터를 만든다.

C. 이웃 데이터를 기반으로 새로운 데이터를 생성한다.

D. 다수 클래스의 데이터를 제거하는 방법이다.

해설

A 답: 복제는 단순 오버샘플링(resampling), SMOTE는 가상의 데이터를 생성한다.

B 답: 평균이 아닌 선형 보간(interpolation) 을 사용한다.

⭕️ C 정답: SMOTE는 이웃 데이터를 기준으로 새로운 샘플을 생성한다.

D 답: 이는 언더샘플링(TomekLinks 등)에 해당한다.

문제 5. 데이터 분할(train/test split)의 목적에 대해 바르게 설명한 것은?

A. 훈련 데이터를 많이 쓰기 위해 테스트 데이터는 최대한 줄인다.

B. 모델의 정확도를 높이기 위해 분할한다.

C. 모델의 일반화 성능을 평가하기 위해 데이터를 나눈다.

D. 모든 데이터를 훈련에 사용한 후, 다시 테스트 데이터를 생성한다.

해설

 A 답: 테스트 데이터는 적절히 확보해야 일반화 성능을 신뢰할 수 있다.

 B 정답: 분할 자체가 정확도를 높이는 건 아니다.

⭕️ C 답: 테스트 데이터는 모델이 새로운 데이터를 잘 예측하는지 확인하는 용도다.

 D 답: 훈련 전에 데이터를 미리 나누어야 한다.

 

머신러닝 기초에 대한 강의도 듣고 채용공고도 찾아보고 정말 바쁜 하루네요 😅

 

오늘도 수고하셨습니다!!