๐Ÿ’ก WIDA/DACON ๋ถ„๋ฅ˜-ํšŒ๊ท€

[DACON/๊น€๊ฒฝ์€] ํŒŒ์ด์ฌ์„ ์ด์šฉํ•œ EDA

๊ฒฝ์€ 2023. 4. 7. 14:34

EDA ์ง„ํ–‰

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ 

train = pd.read_csv("C:/Users/twink/Documents/์นด์นด์˜คํ†ก ๋ฐ›์€ ํŒŒ์ผ/train.csv")
test = pd.read_csv("C:/Users/twink/Desktop/test.csv")
sub = pd.read_csv("C:/Users/twink/Desktop/sample_submission.csv")

 

๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์–ด๋–ค ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ธฐ

pandas ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•œ ๊ฐ„๋‹จํ•œ ํƒ์ƒ‰

  • .head() : ์ƒ์œ„ 5๊ฐœ, ๊ด„ํ˜ธ ์•ˆ์— ์ˆซ์ž๋กœ ๊ฐœ์ˆ˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
train_data.head()

๊ฐ feature ์— ๋Œ€ํ•œ ํ†ตํ•ฉ์ ์ธ ์ •๋ณด 2๊ฐ€์ง€

  • .info() 
  • .describe()
train.info()

๊ฐ feature์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋ช‡ ๊ฐœ์˜ null ์ด ์žˆ๊ณ , ๊ฐ ๋ฐ์ดํ„ฐ์˜ type์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

object ๋Š” ์ˆ˜์น˜ํ˜•์ด ์•„๋‹Œ ์ž๋ฃŒํ˜•์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ๋Œ€๋ถ€๋ถ„ string ์ด๋‹ค.

์ด๋•Œ object ์ธ feature ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์— ์ง์ ‘์ ์ธ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋‹ˆ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

 

train.describe()

describe ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ์˜ ํ†ต๊ณ„๊ฐ’์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๊ณ  ์ด์ƒ์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค.

  • count : ๊ฐœ์ˆ˜
  • mean : ํ‰๊ท 
  • std : ํ‘œ์ค€ ํŽธ์ฐจ
  • min : ์ตœ์†Ÿ๊ฐ’
  • 25% : ์ œ 1์‚ฌ๋ถ„์œ„๊ฐ’
  • 50% : ์ค‘์•™๊ฐ’, ์ค‘์œ„๊ฐ’
  • 75% : ์ œ 3์‚ฌ๋ถ„์œ„๊ฐ’
  • max : ์ตœ๋Œ€

 

๊ฒฐ์ธก์น˜ ํ™•์ธ

train.isna().sum()

  • ๊ฒฐ์ธก์น˜๊ฐ€ ์—†๋Š”๊ฒƒ์„  ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

fiberID ์‹œ๊ฐํ™”

  • fiberID ๊ฐ€ 630 ์ฏค์ด ๋˜๋ฉด์„œ ๋ถ€ํ„ฐ ๊ทธ ์ˆ˜๊ฐ€ ํ™•์—ฐํžˆ ์ค„์–ด๋“œ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

type ์‹œ๊ฐํ™”

  • seaborn ์‚ฌ์šฉํ•˜๊ธฐ
  • seaborn ์€ matplotlib ๊ธฐ๋ฐ˜์˜ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ†ต๊ณ„ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ณ ๊ธ‰ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
#๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ
import seaborn as sns
plt.figure(figsize=(10,8))
sns.countplot(y=train['type'], order=train['type'].value_counts().index)
plt.show()

type ์ปฌ๋Ÿผ์˜ ๊ฐ’๋“ค์„ count ํ•˜์—ฌ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์˜€๋‹ค. 

-> QSO ๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ๋น„ํ•ด ์›”๋“ฑํžˆ ๋†’์€ ์ˆ˜์น˜๋กœ ํด๋ž˜์Šค ๊ฐ„์˜ ์‹ฌํ•œ ๋ถˆ๊ท ํ˜• ํด๋ž˜์Šค๋ฅผ ๊ฐ€์กŒ๋‹ค.

 

 

๋ฐ์ดํ„ฐ ํด๋ž˜์Šค ๋ถˆ๊ท ํ˜• ํ•ด๊ฒฐํ•˜๊ธฐ

 

1. weight balancing

 

train ๋ฐ์ดํ„ฐ์—์„œ ๊ฐ loss ๋ฅผ ๊ณ„์‚ฐํ• ๋•Œ ํŠน์ • ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋Š” ๋”ํฐ loss ๋ฅผ ๊ณ„์‚ฐํ•ด์ค€๋‹ค.

๋” ํฐ ์ •ํ™•๋„๊ฐ€ ํ•„์š”ํ•œ ํด๋ž˜์Šค์—๋Š” ๋” ํฐ loss๋ฅผ ์ทจํ•ด์ฃผ๋Š”๊ฒƒ์ด๋‹ค. 

 

2. Oversampling and Undersampling

Undersamling ์˜ ๊ฒฝ์šฐ ํŒŒ๋ž€์ƒ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผํ™ฉ์ƒ‰ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ์–‘์ด ํ›จ์”ฌ ๋งŽ์€ ์ƒํƒœ์ด๋‹ค.

ํ˜„์ €ํžˆ ์–‘์ด ๋งŽ์€ ํŒŒ๋ž€์ƒ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์–‘์ด ์ ์€ ์ฃผํ™ฉ์ƒ‰ ๋ฐ์ดํ„ฐ์— ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ, ์–‘์„ ์ค„์—ฌ๋ฒ„๋ฆฐ ํŒŒ๋ž€์ƒ‰ ๋ฐ์ดํ„ฐ๋“ค์€ ์–‘์ด ๋งŽ์•˜๋˜ ์›๋ณธ ํŒŒ๋ž€์ƒ‰ ๋ฐ์ดํ„ฐ์˜ ๋Œ€ํ‘œ์„ฑ์„ ์ž˜ ์ง€๋‹ˆ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š”๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

Oversamling ์˜ ๊ฒฝ์šฐ ์–‘์ด ์ ์€ ์ฃผํ™ฉ์ƒ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์–‘์ด ๋งŽ์€ ํŒŒ๋ž€์ƒ‰ ๋ฐ์ดํ„ฐ์— ๋งž์ถฐ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ฃผํ™ฉ์ƒ‰ ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ๋Š˜๋ ค์ค„ ๋•Œ ์›๋ณธ ์ฃผํ™ฉ์ƒ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์–‘์ด ๋Š˜์–ด๋‚œ ์ฃผํ™ฉ์ƒ‰ ๋ฐ์ดํ„ฐ๋Š” ์–‘์ด ์ ์—ˆ๋˜ ์ฃผํ™ฉ์ƒ‰ ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ์„ฑ์งˆ๊ณผ ๋™์ผํ•˜๋‹ค. 

 

 

 

์ด์ƒ์น˜ ์ฐพ๊ธฐ

 

์Šค์ผ€์ผ๋ง์ด๋‚˜ feature engineering ์„ ์œ„ํ•ด train ๋ฐ์ดํ„ฐ์…‹๊ณผ test ๋ฐ์ดํ„ฐ์…‹์„ ํ•ฉ์ณ์„œ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋‚˜๋ˆ„์–ด ํฐ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ๋ณด์•˜์„๋•Œ ์ด์ƒ์น˜๋กœ ๋ณด์ด์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

๋”ฐ๋ผ์„œ ๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐ์…‹์„ ํ•ฉ์นœ๋’ค ๊ฒฐ์ธก์น˜,์ด์ƒ์น˜ ์ˆ˜์ • ๋ฐ ์ œ๊ฑฐ๋ฅผ ๊ฑฐ์น˜๊ณ  ๋‹ค์‹œ ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌํ•ด์ฃผ๊ธฐ

 

  • train ๋ฐ์ดํ„ฐ์…‹๊ณผ test ๋ฐ์ดํ„ฐ์…‹ ํ•ฉ์น˜๊ธฐ
total = pd.concat([train,test], axis=0)
  • psfMag_u ๊ณผ ๊ฐ™์ด ๊ทน๋‹จ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜์—์„œ ์ด์ƒ์น˜๋ฅผ ์ฐพ๊ธฐ์œ„ํ•œ box plot
fig, axes = plt.subplots(2, 1, figsize=(10, 7))
columns = total.filter(regex='psf').columns.tolist()[:2]
for i, column in enumerate(columns):
    sns.boxplot(y='type', x=column, data=total, ax=axes.flat[i])
    axes.flat[i].grid(axis='x', linestyle='--')
    axes.flat[i].set_xlim([-20, 50])

fig.tight_layout()
plt.show()

์ฝ”๋“œ์ถœ์ฒ˜ : ๋งค์šฐ ๊ฐ„๋‹จํ•œ SDSS ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” - DACON

 

์ •ํ™•ํ•˜๊ฒŒ ์ด์ƒ์น˜ ๊ฐ’์ด๋ผ๊ณ  ๋‹จ์ •์ง€์„ ์ˆ˜ ์—†์ง€๋งŒ ๋ฐ์ด์ฝ˜์— ์žˆ๋Š” train ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•œ box plot ๊ณผ ๋ฐ์ดํ„ฐ์…‹์„ ํ•ฉ์นœํ›„์˜ box plot  ํฌ๊ฒŒ ์ฐจ์ด๋‚˜์ง€ ์•Š๋Š”๊ฒƒ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

์ถœ์ฒ˜

https://eda-ai-lab.tistory.com/13

https://dacon.io/codeshare/4899

https://www.kaggle.com/code/subinium/kakr-eda/notebook

https://techblog-history-younghunjo1.tistory.com/74

https://www.codeit.kr/community/questions/UXVlc3Rpb246NjBlZTc0YzMyOGRjMDY2Y2ZlYWYwZGE0