5-2. 일변량 & 다변량 EDA

Fri, 10 Oct 2025 11:28:22 GMT

---

> 실습 파일

Kaggle의 Titanic Dataset

*Kaggel(캐글)

데이터 과학과 머신러닝 분야 최대의 온라인 플랫폼으로, 전 세계 사용자가 데이터 경진대회에 참가하고, 실제 데이터를 활용해 다양한 분석·예측 모델을 만들고 공유할 수 있는 커뮤니티임.

구글(Google) 산하에서 운영되며, 대회(Competition), 데이터셋, 실습 노트북, 토론 포럼 등 데이터 사이언스 학습과 실력 검증에 필요한 모든 리소스를 무료로 제공함.

[Titanic - Machine Learning from Disaster](https://www.kaggle.com/competitions/titanic/data)

- 라이언 드라이브에서 다운로드

[https://drive.google.com/file/d/1p0NMUr3GyNyMIYsFQV_n4fOwxPTxuWUA/view?usp=drive_link](https://drive.google.com/file/d/1p0NMUr3GyNyMIYsFQV_n4fOwxPTxuWUA/view?usp=drive_link)

## Data Dictionary

| Variable | Definition | Key |
| --- | --- | --- |
| survival | Survival | 0 = No, 1 = Yes |
| pclass | Ticket class | 1 = 1st, 2 = 2nd, 3 = 3rd |
| sex | Sex | |
| Age | Age in years | |
| sibsp | # of siblings / spouses aboard the Titanic (sister+brother+spouse) | |
| parch | # of parents / children aboard the Titanic (parent + chile) | |
| ticket | Ticket number | |
| fare | Passenger fare | |
| cabin | Cabin number | |
| embarked | Port of Embarkation | C = Cherbourg, Q = Queenstown, S = Southampton |

---

### 5-2-1. 일변량 EDA

```
일변량 EDA 진행해줘.
```

> gpt

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/204927_esV4aw4xwF65GK7HAp?q=80&s=1280x180&t=outside&f=webp)

주요 해석 요약

- Age: 약 30세 전후의 분포 중심, 약간 오른쪽으로 치우침(양의 왜도).

- Fare: 대부분 저가 운임 구간에 몰림, 극단적인 이상치 존재.

- SibSp/Parch: 대부분 0, 가족 없이 탑승한 경우가 많음.

- Sex/Pclass/Embarked: 남성·3등석·Southampton 탑승이 주를 이룸.

```
범주형, 수치형 변수들의 기술통계량을 테이블로 정리해줘.
기술통계량에는 첨도와 왜도를 포함해줘.
```

> gpt

| 통계량 | Age | Fare | SibSp | Parch | Sex | Pclass | Embarked |
| --- | --- | --- | --- | --- | --- | --- | --- |
| **count** | 714 | 891 | 891 | 891 | 891 | 891 | 889 |
| **missing_count** | 177 | 0 | 0 | 0 | 0 | 0 | 2 |
| **unique_values** | – | – | – | – | 2 | 3 | 3 |
| **mean** | 29.70 | 32.20 | 0.52 | 0.38 | – | – | – |
| **std** | 14.53 | 49.69 | 1.10 | 0.81 | – | – | – |
| **min** | 0.42 | 0.00 | 0.00 | 0.00 | – | – | – |
| **25%** | 20.12 | 7.91 | 0.00 | 0.00 | – | – | – |
| **50%** | 28.00 | 14.45 | 0.00 | 0.00 | – | – | – |
| **75%** | 38.00 | 31.00 | 1.00 | 0.00 | – | – | – |
| **max** | 80.00 | 512.33 | 8.00 | 6.00 | – | – | – |
| **skewness (왜도)** | 0.39 | 4.79 | 3.69 | 2.75 | – | – | – |
| **kurtosis (첨도)** | 0.18 | 33.20 | 17.73 | 9.80 | – | – | – |
| **top (최빈값)** | – | – | – | – | male | 3 | S |
| **freq (최빈값 빈도)** | – | – | – | – | 577 | 491 | 644 |

해석 요약

- 수치형 변수

- Age: 결측 177개, 평균 약 29.7세

- Fare: 극단적 이상치 존재 (512.33), 높은 왜도·첨도

- SibSp, Parch: 가족 동반 적음, 대부분 0

- 범주형 변수

- Sex: 남성 577명(65%)

- Pclass: 3등석 승객 491명(55%)

- Embarked: S항(Southampton) 탑승자 644명(72%)

- [참고용] 테이블(표)의 X축과 Y축을 변경하고 싶을 때, 프롬프트

```
기술통계표를 Transpose 해줘
```

---

### 5-2-2. 다변량 EDA

```
다변량 EDA를 진행하려고 해.
어떻게 진행하면 좋을 지 제안해줘.
```

> gpt

---

## 🔍 다변량 EDA 진행 방향 제안

다변량 EDA(Multivariate Analysis)는
**변수 간 관계(상관성, 패턴, 영향력)**를 탐색하는 단계입니다.

Titanic 데이터에서는 `Survived`를 중심으로 다른 변수와의 관계를 보는 것이 핵심입니다.

---

### ✅ (1) 주요 변수 간 관계 분석

| 관계 유형 | 분석 방법 | 목적 |
| --- | --- | --- |
| **범주형 vs 범주형** | `pd.crosstab`, `sns.countplot` | 성별·등급별 생존률 비교 |
| **수치형 vs 이진형(Survived)** | `sns.boxplot`, `sns.violinplot`, `sns.histplot` | 운임, 나이 분포 차이 확인 |
| **수치형 vs 수치형** | `sns.scatterplot`, `sns.heatmap` | 운임–나이 관계, 상관성 탐색 |
| **다중 범주 조합** | `sns.catplot` (hue, col 옵션 활용) | 예: 성별별·등급별 생존률 교차 비교 |

---

### ✅ (2) 상관분석 (Correlation Analysis)

- **수치형 변수 간의 상관계수 계산**

```
corr = df[["Age", "Fare", "SibSp", "Parch", "Survived"]].corr()
sns.heatmap(corr, annot=True, cmap="coolwarm")
```

- → 생존률과 가장 연관된 수치형 변수 파악

---

### ✅ (3) 주요 변수별 생존률 요약표

- 성별, 등급, 탑승항 등에 따른 생존률 평균 계산

```
df.groupby("Sex")["Survived"].mean()
df.groupby("Pclass")["Survived"].mean()
df.groupby("Embarked")["Survived"].mean()
```

- → 단순 시각화 전, 데이터 요약으로 인사이트 확인

---

### ✅ (4) 다차원 시각화 (고급)

- `sns.pairplot` 또는 `sns.FacetGrid` 활용

- 예: 성별별 나이–운임 관계를 생존 여부에 따라 시각화

```
sns.pairplot(df, vars=["Age", "Fare"], hue="Survived", palette="Set2")
```

---

### 🧩 (5) 이상치 및 분포 점검

- Boxplot으로 운임, 나이의 극단값 확인

- Age–Fare 등에서 **생존자/사망자 간 분포 차이**를 통해 모델링용 feature insight 확보

---

## 📈 3. 추천 분석 플로우 요약

1️⃣ **Survived vs 범주형 변수 관계**

- (성별, 등급, 탑승항)별 생존률 비교

2️⃣ **Survived vs 수치형 변수 관계**

- (나이, 운임, 가족 수)별 분포 및 평균 차이

3️⃣ **수치형 변수 간 상관분석**

- `heatmap`으로 시각화

4️⃣ **다중 변수 조합 분석**

- `catplot`, `pairplot`으로 교차 패턴 탐색

---

원하신다면 제가 위 제안 중 **자동 다변량 EDA 파이프라인 코드**를 만들어드릴 수 있습니다.

즉, `Titanic` 데이터를 넣으면 위 분석(그래프 + 요약표)이 한 번에 나오는 형태로요.

➡️ 그렇게 진행해드릴까요?

```
1번, 2번, 3번을 단계별로 진행하자
```

> gpt

---

완료! 요청하신 대로

1. 프로젝트 업로드 라이브러리 설치

2. Matplotlib 한글 환경을 **NanumBarunGothic.ttf**로 설정

3. **다변량 EDA – 1, 2, 3단계**를 모두 실행했습니다.

### 진행 내용 요약

- **Step 1 — 범주형 변수 vs 생존률**

- 성별·등급·탑승항별 생존률 테이블을 제공했고, 각 항목별 막대그래프를 생성함.

- 관찰: 여성 ≫ 남성, 1등급 > 2등급 > 3등급, C항 > Q항 > S항.

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/234748_OpTg1r7qkYPep2xqbo?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/234839_mdzEgqvdv1aHvWJxxA?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/234834_14rytDhKxOD3Aass3j?q=80&s=1280x180&t=outside&f=webp)

- **Step 2 — 수치형 변수 vs 생존**

- `Age`, `Fare`, `FamilySize`의 생존/사망 분포 히스토그램과 Boxplot을 생성함.

- 관찰: 운임이 높고 가족 규모가 작을수록 생존자 쪽 분포가 우세. 나이는 유아층이 상대적으로 유리.

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/235149_ee3eNSOcMR7aPpuafS?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/235153_7zWTL6wUoWKf3QNNP7?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/235230_o4lPMzSjtwNv5PHleP?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/235247_na5TBwm0iFHlhgpjRl?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/235252_L8ePL9rsRWtbTx2scM?q=80&s=1280x180&t=outside&f=webp)

- **Step 3 — 상관분석(피어슨)**

- `Survived, Age, Fare, SibSp, Parch, FamilySize` 상관행렬 표와 히트맵을 생성함.

- 관찰: `Survived`와 **Fare(≈0.26)** 가 가장 양의 상관. `FamilySize`는 `SibSp/Parch`와 매우 높은 상관(파생변수이므로 당연).

![Image](https://upload.cafenono.com/image/slashpageHome/20251010/235452_WQs11cmuVYFijIEEfB?q=80&s=1280x180&t=outside&f=webp)

필요하시면

- "성별×등급×탑승항" 같이 **교차그룹 생존률 표/그래프**,

- 모델 준비를 위한 **피처 엔지니어링 & 전처리 제안**,

- 분석 결과를 하나의 파일로 정리한 **리포트(export)**
- 까지 바로 만들어드릴게요.

---

### **챗GPT를 활용한 타이타닉 데이터 EDA 요약**

- **분석 목표**: 생존 여부(`Survived`) 변수를 중심으로 다른 변수들과의 관계 탐색.

- **데이터 구분**:

- **수치형 변수**: 나이, 운임, 친척, 직계가족 등 산술 연산이 가능한 연속적 숫자 값.

- **범주형 변수**: 성별, 선실 등급 등 특정 그룹으로 구분되는 값 (숫자여도 산술 연산 무의미).

---

### **다변량 EDA 분석 결과**

- **핵심 분석**: 범주형 변수와 **생존율**의 관계를 시각화하여 비교.

- **주요 발견**:

- **성별**: 여성(74.2%)이 남성(18.9%)보다 생존율이 압도적으로 높음.

- **객실 등급**: 1등급(62.9%) > 2등급(47.3%) > 3등급(24.2%) 순으로 생존율이 높음.

- **탑승 항구**: 셰르부르(Cherbourg)항 탑승객의 생존율이 55.4%로 가장 높음.

---

### **결론**

- **분석 과정**: **일변량 분석**으로 개별 변수 특성을 파악한 후, **다변량 분석**으로 변수 간 상호작용 및 생존율과의 관계를 규명.

- **챗GPT 활용**: 코드 작성부터 결과 해석까지 전 과정을 지원하여 효과적인 데이터 탐색 및 분석 수행 가능.