[Python] 파이썬_타이타닉 데이터셋 EDA(Feature Engineering) 및 모델 적용하여 성능 확인

2025. 5. 3. 22:53·Python/데이터 분석을 위한 Python

 

 


 

 

데이터 분석을 위한 Python

 

✔️ Feature Engineering(특징 공학)

✔️ 모델에 적용하여 모델 성능 확인

 

 


 

 

✔️ Feature Engineering(특징 공학)

 

 

 

 

Feature Engineering

불필요한 변수 삭제
분석/예측에 사용되지 않거나 중복된 컬럼 제거

필요한 변수만 선택
종속 변수에 유의미한 연관이 있는 변수 선택

새로운 변수 생성(파생변수)
기존의 변수를 합치거나 필요한 부분만 추출하여 새로운 변수로 생성
(도메인 지식이나 통계를 기반으로 생성)

범주형 데이터를 수치형 데이터로 인코딩 
label encoding : 범주 간 순서(ordinal) 정보가 있는 경우 범주형 데이터 값을 정수로 매핑(mapping)하는 방식
one-hot encoding : 범주 간 순서가 없는 경우 각 범주를 0/1 컬럼으로 분리하는 방식(카테고리 많을수록 컬럼의 수 급증)

 

 

 

 

의미 있는 컬럼으로 구성된 데이터셋을 Feature Engineering 수행

data.info()

 

 

# 불필요한 변수 삭제
data = data.drop(['PassengerId', 'Name', 'Ticket'], axis=1)

# 변수명 변경
data.rename(columns={'Age_cat': 'Age_cut'}, inplace=True)

# 새로운 변수 생성
# SibSp(형제/자매의 수)와 Parch(부모/자식의 수)는 +0.41(양의 상관관계)를 가지는 것을 확인
# 도메인 지식을 포함하여 Family(가족의 수)라고 합칠 수 있음
data['Family'] = data['SibSp'] + data['Parch']
data.head()

 

 

 

 

범주형 데이터를 수치형 데이터로 인코딩
문자로 되어있는 범주형 자료를 숫자로 변환
1. 조건문을 이용해 숫자로 변환
2. label encoding을 이용해서 변환(조건문과 차이는 없음) -> 숫자에서 문자로 복원 가능
3. one-hot encoding : unique value의 개수만큼 새로운 컬럼을 만들어서 0/1 구분 벡터 / 예) male(1/0), female(1/0)
# 불필요한 변수 제거
data = data.drop(['SibSp', 'Parch'], axis=1)

# Sex 컬럼의 데이터 구성 확인
print(data['Sex'].unique())

# Sex 컬럼의 데이터 구성 확인
print(data['Sex'].unique())
print()

# Sex 컬럼의 데이터 인코딩 진행
# 반복문 활용하여 변환
data['Sex2'] = data['Sex'].apply(lambda x: 0 if x == 'male' else 1)

# replace() 통해 변환도 가능
data['Sex_trans'] = data['Sex'].replace('female', '1').str.replace('male', '0')
data['Sex_trans'] = data['Sex_trans'].astype(int)

# label encoder를 이용해 변환
# female을 female = 0, male = 1로 변환
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
sex_le = le.fit_transform(data['Sex'])
data['sex_le'] = sex_le
# 불필요한 컬럼 제거 및 인코딩으로 변환
data = data.drop(['Sex2','Sex_trans','sex_le'], axis=1)
data['Sex'] = data['Sex'].apply(lambda x: 0 if x == 'male' else 1)

# 결과 확인
data.head()

 

 

 

 

One-hot Encoding
value의 개수만큼 새로운 컬럼(변수)를 만들어서 0/1로 표시
자료의 서열이 사라짐
더미변수 생성 : get_dummies()

value가 너무 많으면 변수의 수가 너무 많아 문제 발생
변수가 너무 많이 늘어나면 다중공산성 문제 발생
get_dummies(df, drop_first=True)
# 불필요한 변수 제거
# 연관있는 변수는 Age_cut, Fare_cut 이기 때문에
data = data.drop(['Age','Fare'], axis=1)

# 범주형 데이터를 수치형 데이터로 인코딩
# 원핫 인코딩 활용 -> 최종 데이터셋 확인
final_data = pd.get_dummies(data, drop_first=True)
final_data.head()

표시된 데이터 중 일부 확인

 

 


 

 

✔️ 모델에 적용하여 모델 성능 확인

 

 

 

 

Decision Tree(의사결정 모델)에 적용

Decision Tree(의사결정 모델)
트리 모양으로 질문에 대해 True / False를 거쳐 최종적으로 답(분류나 예측)을 내리는 모델

의사결정 모델 과정
1. 가장 구분이 잘 되는 특성(변수) 선택하여 해당 값 기준으로 데이터를 2 그룹으로 나눔
2. 각 그룹에서 다시 가장 구분이 잘되는 변수를 선택하여 다시 2 그룹으로 나눔
3. 반복하여 최대 깊이(max_depth)에 도달하면 해당 결과로 예측

Train Data : 모델을 학습에 사용하는 데이터(모델 학습에만 사용됨)
-> Train Data에 너무 적합한 모델은 Overfitting(과적합) 문제 발생(Test Data를 Train Data만큼 잘 분류/예측하지 못함)
Test Data : 학습된 모델의 일반화 성능을 평가하기 위해서 사용되는 데이터
# 필요한 라이브러리 불러오기
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt

# 입력 데이터의 독립변수와 종속변수(타겟변수)를 구분
X = final_data.drop('Survived', axis=1)
y = final_data['Survived']

# X, y를 train 데이터와 test 데이터로 나누어 할당
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=10)

# 맞는 비율로 할당되었는지 확인
print(len(X_train), len(X_test))
print(len(y_train), len(y_test))

 

 

# DecisionTreeClassifer : 의사결정크리 분류 모델 적용
# random_state는 일정한 결과를 확인하기 위해 필요
dtc = DecisionTreeClassifier(random_state=10)
dtc.fit(X_train, y_train)
pred = dtc.predict(X_test)

# 모델의 정확도와 성능 확인
print('의사결정 모델의 정확도 =', accuracy_score(y_test, pred), end='\n\n')
print('의사결정 모델의 상세 성능')
print(classification_report(y_test, pred))

 

 


 

 

이번 내용에서는 타이타닉 데이터셋 EDA(Feature Engineering) 및 모델 적용하여 성능 확인에 대해 알아보았습니다.

데이터 분석을 하기 위해서는 가장 꾸준히 공부해야 하는 언어는 파이썬(Python)이라고 생각합니다.

앞으로 꾸준히 파이썬(Python) 내용을 공부하고 정리할테니 파이썬 코딩에 도움이 되었으면 좋겠습니다.

 

 

데이터 분석과 관련된 다양한 정보들이 확인하고 싶다면

관심 있는 분들은 방문해서 좋은 정보 얻어가시길 바랍니다.

 

ECODATALIST

데이터 분석 공부 열심히 하는 중😁

everyonelove.tistory.com

반응형

'Python > 데이터 분석을 위한 Python' 카테고리의 다른 글

[Python] 파이썬_타이타닉 데이터셋 EDA(연관 있는 컬럼과 생존율 관계 파악)  (0) 2025.05.03
[Python] 파이썬_타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)  (0) 2025.05.03
[Python] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리  (5) 2025.04.30
[Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체  (0) 2025.04.24
[Python] 파이썬_데이터 분석 과정의 결측치 처리  (0) 2025.04.22
'Python/데이터 분석을 위한 Python' 카테고리의 다른 글
  • [Python] 파이썬_타이타닉 데이터셋 EDA(연관 있는 컬럼과 생존율 관계 파악)
  • [Python] 파이썬_타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)
  • [Python] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리
  • [Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체
DAILYSEEKER
DAILYSEEKER
데이터 분석 공부 열심히 하는 중😁
  • DAILYSEEKER
    ECODATALIST
    DAILYSEEKER
  • 전체
    오늘
    어제
  • 글쓰기 관리자
    • DATA (224)
      • SQL (18)
        • SQLD (3)
        • 데이터 분석을 위한 MySQL (5)
        • 혼자 공부하는 SQL (10)
      • Python (39)
        • 데이터 분석을 위한 Python (32)
        • 데이터 분석을 위한 데이터 스크래핑 (4)
        • 데이터 분석 프로젝트 (3)
      • 기획 (3)
        • 서비스 기획 (1)
        • 기업 분석 (2)
      • Frontend(프론트엔드) (22)
        • 데이터 분석을 위한 웹 개발 언어 (9)
        • 자바스크립트 (13)
        • 타입스크립트 (0)
      • 코딩 테스트 (86)
        • 프로그래머스_MySQL (86)
      • Data Driven (12)
        • 코드 없이 배우는 데이터 분석 (6)
        • Excel (5)
      • UI & UX (24)
        • 피그마(Figma) (24)
      • BDA 학회 (20)
        • BDA학회_8기 (4)
        • BDA학회_9기 (16)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
DAILYSEEKER
[Python] 파이썬_타이타닉 데이터셋 EDA(Feature Engineering) 및 모델 적용하여 성능 확인
상단으로

티스토리툴바