특성 분포 및 목표값 분석
특성과 목표값의 관계를 분석하고 클래스 불균형과 상호 정보를 탐지합니다.
특성 분포 및 목표값 분석은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
특성을 타깃과 비교해 분석하는 이유
타깃은 예측하려는 변수입니다. 모델링을 위한 EDA의 목적은 어떤 특성이 실제로 타깃과 관련이 있는지 알아내는 것입니다.
이 레슨에서는 특성과 타깃을 비교하는 그래프, 상호 정보량을 이용한 정보성 측정, 클래스 불균형 탐지, 변환을 통한 왜도 보정을 다룹니다.
특성과 타깃 비교 — 수치형 타깃
수치형 타깃에서는 feature와 target의 산점도를 그려 특성이 예측 신호를 담고 있는지 확인할 수 있습니다.
뚜렷한 추세가 보이면 해당 특성이 예측에 유용하다는 뜻이고, 형태가 없는 구름처럼 보이면 유용하지 않을 가능성이 큽니다.
import seaborn as sns
import matplotlib.pyplot as plt
sns.scatterplot(x="rooms", y="price", data=df, alpha=0.4)
plt.show()특성과 타깃 비교 — 범주형 타깃
타깃이 클래스 레이블일 때는 각 클래스 안에서 특성의 분포를 비교합니다. 서로 겹치는 KDE는 해당 특성이 클래스를 잘 구분하지 못한다는 뜻이고, 곡선이 잘 분리되면 유용하다는 뜻입니다.
sns.kdeplot(data=df, x="balance", hue="churned", common_norm=False, fill=True)
plt.title("Balance by churn status")
plt.show()상자 그림으로 클래스 분포 비교하기
그룹별 상자 그림은 특성과 클래스의 관계를 확인하는 또 다른 방법입니다. x축에 타깃 클래스를, y축에 특성을 배치합니다.
클래스마다 중앙값이 다르면 해당 특성이 클래스를 구분하는 데 도움이 된다는 뜻입니다.
sns.boxplot(x="churned", y="tenure", data=df)
plt.show()클래스 불균형 탐지하기
클래스 불균형은 한 타깃 클래스가 다른 클래스보다 훨씬 많을 때 발생합니다(예: 사기가 아닌 거래 95%, 사기 거래 5%). 이는 정확도를 오해하게 만들고 모델을 다수 클래스 쪽으로 편향시킵니다.
타깃에 대해 간단한 값 개수 집계를 실행해 확인할 수 있습니다.
print(df["churned"].value_counts())
# 0 9200
# 1 800비율을 구하는 value_counts(normalize=True)
원시 개수만 보면 불균형이 얼마나 심각한지 알기 어려울 수 있습니다. normalize=True는 개수를 비율로 바꾸므로 결과를 백분율로 바로 읽을 수 있습니다.
print(df["churned"].value_counts(normalize=True))
# 0 0.92
# 1 0.08 -> only 8% positive class불균형이 중요한 이유
음성 클래스가 92%라면 항상 "아니요"라고 예측하는 모델도 정확도 92%를 기록하지만 실제로는 쓸모가 없습니다. 그래서 초기에 불균형을 확인해야 합니다.
해결 방법으로는 재표본 추출(소수 클래스 오버샘플링 / 다수 클래스 언더샘플링), 클래스 가중치 적용, 또는 정확도 대신 정밀도, 재현율, F1과 같은 평가지표 사용 등이 있습니다.
상호 정보량 — 정보성 측정하기
상호 정보량은 어떤 특성을 알고 있을 때 타깃에 대한 불확실성이 얼마나 줄어드는지를 측정합니다. 상관관계와 달리 비선형 관계도 포착합니다.
분류 타깃에는 사이킷런이 mutual_info_classif를 제공합니다.
from sklearn.feature_selection import mutual_info_classif
X = df[["balance", "tenure", "rooms"]]
y = df["churned"]
mi = mutual_info_classif(X, y, random_state=42)
print(dict(zip(X.columns, mi)))상호 정보량으로 특성 순위 매기기
MI 점수를 정렬된 Series에 넣으면 특성 중요도 순위를 빠르게 확인할 수 있습니다. MI가 높을수록 해당 특성이 타깃에 대해 더 많은 정보를 제공한다는 뜻입니다.
이는 어떤 모델이든 학습시키기 전에 사용할 수 있는 훌륭한 초기 필터입니다.
import pandas as pd
from sklearn.feature_selection import mutual_info_classif
mi = mutual_info_classif(X, y, random_state=42)
scores = pd.Series(mi, index=X.columns).sort_values(ascending=False)
print(scores)왜도가 큰 특성에 로그 변환 적용하기
오른쪽으로 치우친 특성(소득, 개수, 가격)은 긴 꼬리를 더 대칭적인 형태로 압축하는 로그 변환을 적용하면 더 잘 작동하는 경우가 많습니다.
0도 안전하게 처리할 수 있도록 np.log1p(1 + x의 로그)를 사용합니다.
import numpy as np
df["income_log"] = np.log1p(df["income"])
print(df["income"].skew(), "->", df["income_log"].skew())변환 전후 비교: 변환 시각화하기
변환이 도움이 되었는지 확인하려면 항상 변환 전후를 그래프로 그려 비교합니다. 로그를 적용한 버전은 대칭적인 종 모양에 더 가까워져야 합니다.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 2)
df["income"].hist(ax=ax[0]); ax[0].set_title("Raw")
np.log1p(df["income"]).hist(ax=ax[1]); ax[1].set_title("log1p")
plt.show()빠른 확인: 왜도가 큰 특성 수정하기
한 특성이 오른쪽으로 크게 치우쳐 있고 0인 값도 일부 포함하고 있습니다.
복습: 특성과 타깃 분석
특성을 예측 타깃과 연결하는 방법을 배웠습니다.
- 산점도 / KDE / 상자 그림으로 특성과 타깃 사이의 예측 신호 확인하기
value_counts(normalize=True)로 클래스 불균형을 탐지하고 정량화하기mutual_info_classif로 비선형 관계를 포함해 정보성에 따라 특성 순위 매기기np.log1p로 오른쪽으로 치우친 특성 완화하기
탐색적 데이터 분석을 모두 마쳤습니다. 다음 주제는 웹 API에서 데이터 수집하기입니다.
자주 묻는 질문
“특성 분포 및 목표값 분석” 강의는 무료인가요?
네 — “특성 분포 및 목표값 분석” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“특성 분포 및 목표값 분석”에서 뭘 배우나요?
특성과 목표값의 관계를 분석하고 클래스 불균형과 상호 정보를 탐지합니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“특성 분포 및 목표값 분석” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- EDA 작업 흐름과 데이터 프로파일링
- 단변량 분석
- 이변량 및 다변량 분석
- 특성 분포 및 목표값 분석