WIDA/DACON 분류-회귀

[DACON/최다예] 파이썬을 이용한 EDA

다예뻐 2023. 4. 7. 18:26

EDA

Exploratory Data Analysis : 탐색적 데이터 분석

  • 수집한 데이터를 다양한 각도에서 관찰하고 이해하는 과정

필요한 이유

  • 데이터의 분포 및 값을 검토 → 데이터가 표현하는 현상을 더 잘 이해하고 데이터에 대한 잠재적인 문제 발견 가능
  • 본격적인 분석에 들어가기 전, 데이터의 수집 결정 가능
  • 다양한 각도에서 살펴보는 과정 → 문제 정의 단계에서 발견하지 못한 다양한 패턴을 발견하고 이를 바탕으로 가설을 수정할 수 있음

과정

  1. 분석의 목적, 변수 확인
  2. 개별 변수의 이름이나 설명 확인
  3. 데이터에 문제가 있는지 전체적으로 살펴보기
    • head나 tail
    • 이상치, 결측치 확인 등 다양한 탐색
  4. 데이터의 개별 속성 값 관찰만약 그렇지 않다면, 이유 찾기
  5. 각 속성 값이 예측한 범위와 분포를 갖는지 확인
  6. 속성 간의 관계에 초점을 맞추어, 개별 속성 관찰에서 찾아내지 못했던 패턴을 발견 (상관관계, 시각화 등)

최적의 K값 찾기

# 필요한 패키지 import
import pandas as pd
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 데이터 로드
train_data = pd.read_csv("C:/Users/allye/Desktop/DSOB/WIDA Dacon/DCSTree/train.csv")

# type과 나머지 데이터들을 분리해줌
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]

# 데이터셋 분할 (학습용 데이터와 검증용 데이터)
# training과 test의 비율은 0.3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# K-fold Cross Validation을 이용하여 최적의 k 값을 찾음
k_candidates = [1, 3, 5, 7, 9]
cv_scores = []
for k in k_candidates:
    knn = KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(knn, X_train, y_train, cv=10, scoring='accuracy')
    cv_scores.append(scores.mean())
best_k = k_candidates[cv_scores.index(max(cv_scores))]
print("Best k value:", best_k)

# 최적의 k 값을 이용하여 모델 생성, 학습, 검증
model = KNeighborsClassifier(n_neighbors=best_k)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

K값이 5일 때 가장 높은 정확도를 가짐

이상치 찾기

  1. 개별 데이터 관찰데이터의 앞, 뒤 or 무작위로 표본을 추출해서 관찰해야 함.
  2. 단, 이상치들은 작은 크기의 표본에 나타나지 않을 수 있음
  3. 눈으로 쭉 훑어보면서 전체적인 추세와 특이사항 관찰
train_data.head()
train_data.tail()

train_data.isnull().sum()

  1. 통계 값 활용

적절한 요약 통계 지표(summary statistics)를 사용

  • 데이터의 중심 → 평균(mean), 중앙값(median), 최빈값(mode)
  • 데이터의 분산 → 범위(range), 분산(variance)

통계 지표를 이용할 때는 데이터의 특성에 주의해야 함

  • 평균에는 집합 내 모든 데이터 값이 반영되기 때문에, 이상치가 이에 영향을 미침
  • 중앙값에는 가운데 위치한 값 하나가 사용되기 때문에, 이상치가 존재해도 대표성이 있는 결과를 얻을 수 있음
train_data.describe()

count : null값을 제외한 데이터의 총 개수

mean : 평균

std : 표준편차

# 중앙값
train_data.median()

# 분산
train_data.var()

  1. 시각화 활용
  2. 일단은 시각적으로 표현이 되어있는 것을 보면, 분석에 도움이 많이 됩니다. 시각화를 통해 주어진 데이터의 개별 속성에 어떤 통계 지표가 적절한지 결정할 수 있습니다. 시각화 방법에는 확률밀도 함수, 히스토그램, 점 플롯(dotplot), 워드 클라우드, 시계열 차트, 지도 등이 있습니다.