-
데이터 수집과 EDA 전략 시리즈 – 4화. 변수의 유형과 분석 전략: 수치형과 범주형, 처리 방식이 다르다기술과 산업/AI 2025. 5. 9. 15:31728x90
데이터를 분석할 때 가장 먼저 해야 할 일은 무엇일까?
데이터셋을 불러오는 일? 결측치를 확인하는 일? 시각화를 그리는 일?물론 이 모든 작업은 필요하지만,
그 전에 반드시 거쳐야 할 단계가 있다.
바로 각 변수(피처)가 어떤 '유형'인지 정확히 파악하는 것이다.수치형(numerical) 변수와 범주형(categorical) 변수는
처리 방식도, 시각화 방식도, 모델에 주는 영향도 다르다.
심지어 변수의 겉모습만 보고 판단할 경우, 분석 전제가 무너질 수도 있다.이번 글에서는 변수의 데이터 타입에 따라 달라지는 분석 전략을 실전 예제와 함께 깊이 있게 살펴본다.
1. 왜 변수의 ‘유형’을 구분하는 것이 중요한가?
데이터셋에는 다양한 변수들이 존재한다.
이 변수들을 올바르게 분류하지 않으면 다음과 같은 문제가 발생할 수 있다:- 수치형처럼 보이지만 사실은 범주형인 경우
예: 지역 코드, 상품 등급, 학년 (1, 2, 3, 4…) - 범주형처럼 보이지만 사실은 순서형 변수인 경우
예: 만족도(불만족, 보통, 만족), 교육 수준(중졸, 고졸, 대졸) - 범주형 변수인데 원-핫 인코딩 없이 모델에 사용한 경우
→ 모델이 잘못된 수치 해석을 할 수 있음
따라서 분석가가 먼저 변수의 정체를 정확히 이해하고,
그에 맞는 탐색, 전처리, 변환 전략을 수립해야 한다.
2. 변수 유형의 4가지 주요 구분
EDA에서 가장 일반적인 변수 분류 기준은 다음과 같다:
변수 유형 설명 예시
수치형 (연속형) 실수 기반, 값 간 간격이 의미 있음 나이, 소득, 온도 수치형 (이산형) 정수 기반, 카운트형 데이터 자녀 수, 방문 횟수 범주형 (명목형) 순서 없음, 라벨 역할 성별, 지역, 혈액형 범주형 (순서형) 값 간 순서 존재, 간격은 무의미 학년, 만족도, 직급 → 이 네 가지 분류는 시각화, 통계분석, 머신러닝 모델 적용 방식까지 결정짓는다.
3. 수치형 변수 분석 전략
(1) 기초 통계 요약
df['income'].describe()
→ 평균, 중앙값, 최대/최소값, 표준편차 등 확인
(2) 분포 확인
import seaborn as sns sns.histplot(df['income'], kde=True)
→ 왼쪽으로 치우친가? 오른쪽으로 긴 꼬리가 있는가?
→ 로그 변환이 필요한 분포인가?(3) 이상치 처리
sns.boxplot(x=df['income'])
→ 박스 외 점들은 IQR 기준 이상치일 수 있음
→ 제거, 변환, 구간화 처리 여부 결정
4. 범주형 변수 분석 전략
(1) 빈도 분포 확인
df['region'].value_counts(normalize=True)
→ 주요 클래스, 희귀 클래스 파악
→ 클래스 불균형 여부 확인 (예: 특정 성별이 과도하게 많은 경우)(2) 범주 시각화
sns.countplot(x='region', data=df)
→ 비교 대상이 있을 경우, hue='Survived' 등으로 조건부 분포 확인
(3) 인코딩 전략
범주형 변수를 머신러닝 모델에 넣기 위해선 숫자형으로 변환해야 한다.
이때 가장 흔한 방법은 원-핫 인코딩이다.df_encoded = pd.get_dummies(df, columns=['region'], drop_first=True)
→ ‘region’ 변수는 여러 개의 이진 컬럼으로 분리됨
단, 트리 기반 모델(XGBoost, RandomForest)은 라벨 인코딩도 가능
5. 순서형 변수는 따로 다뤄야 한다
순서형 변수는 일반 범주형처럼 인코딩하면 순서 정보가 사라진다.
예: 만족도 변수 ['불만족', '보통', '만족']
from sklearn.preprocessing import OrdinalEncoder encoder = OrdinalEncoder(categories=[['불만족', '보통', '만족']]) df['satisfaction_encoded'] = encoder.fit_transform(df[['satisfaction']])
→ 이제 모델은 이 변수의 순서를 이해할 수 있게 된다.
6. 변수 유형 탐색 자동화 팁
데이터셋이 수십, 수백 개의 변수를 포함할 경우
변수 유형을 수작업으로 분류하기 어렵다.다음은 Python에서 간단히 변수 타입을 확인하는 방법이다:
# 수치형 변수 리스트 num_cols = df.select_dtypes(include=['int64', 'float64']).columns.tolist() # 범주형 변수 리스트 cat_cols = df.select_dtypes(include=['object']).columns.tolist()
단, 이 방식은 '의미'가 아닌 '자료형' 기준이므로
변수 의미까지 고려한 추가 검토가 필요하다.
7. 실전 예제: 타이타닉 변수 분류와 처리
# 수치형 sns.histplot(df['Age'], kde=True) # 범주형 sns.countplot(x='Sex', hue='Survived', data=df) # 순서형 처리 예시 (Pclass: 1등석, 2등석, 3등석) df['Pclass'] = df['Pclass'].astype('category')
→ 타이타닉 데이터에서 ‘Pclass’는 숫자형처럼 보이지만 사실은 순서형 범주형이다.
이처럼 변수의 의미를 정확히 해석하지 않으면 잘못된 모델이 생성된다.
8. 결론: 분석의 절반은 변수 이해에서 시작된다
변수는 단순한 열(column)이 아니다.
그 자체로 '데이터의 구조'이자, 분석의 단서이며,
EDA에서 반드시 먼저 정리되어야 할 핵심 단위다.수치형과 범주형의 구분, 순서형의 존재, 인코딩 방식의 선택은
분석 결과에 절대적인 영향을 미친다.“변수를 잘 이해한 분석가는
데이터를 반쯤 정복한 셈이다.”
다음 편 예고
데이터 수집과 EDA 전략 시리즈 – 5화. 변수 간 관계 분석: 상관관계, 다중공선성, 그리고 인사이트
변수는 혼자 움직이지 않는다. 변수 간의 관계, 상관성, 중복 여부를 파악하는 것은
모델의 성능과 해석력 모두에 영향을 준다.
시각화, 통계, 다중공선성 제거 등 실전 전략을 소개한다.728x90'기술과 산업 > AI' 카테고리의 다른 글
Apache NiFi 시리즈 3회 - FlowFile과 Processor를 활용한 데이터 흐름 설계 실습 (0) 2025.05.09 분야별 데이터 수집 전략 가이드 시리즈 - 4화. 기상청 API로 날씨 데이터를 수집하고 시계열 분석에 활용하는 전략 (1) 2025.05.09 AI/ML 기반 데이터 분석 시리즈 7화 - 분류(Classification) 모델의 구조와 실전 구현 전략 (3) 2025.05.09 AI 모델 만들기 시리즈 7화 – 모델을 더 똑똑하게: 하이퍼파라미터 튜닝과 교차검증 실습 (0) 2025.05.09 Whisper 시리즈 12화 – Whisper와 GPT로 만드는 자동 회의록 생성 시스템 (0) 2025.05.09 - 수치형처럼 보이지만 사실은 범주형인 경우