취업

[데이터분석 과제테스트] 데이터 분석 과제테스트 정리

potato_pizza 2024. 11. 8. 20:46
728x90

데이터 분석 과제테스트의 일반적인 특징과 준비 방법

  • 보통 두 가지 유형의 문제로 구성됩니다. 첫 번째는 데이터를 가공하는 것, 두 번째는 머신러닝 모델링입니다.
  • 데이터 가공 문제의 경우, 기본적인 데이터 처리부터 텍스트 형태로 주어진 데이터에서 특정 정보를 추출하는 등 다양한 유형이 나오니 최대한 많은 유형을 경험해보는게 좋은 것 같습니다.
  • 모델링 문제는 Kaggle이나 Dacon과 같은 데이터 분석 경진대회와 유사한 형태로 나옵니다. 정형 데이터 분류/회귀 경진대회를 연습해보면 많은 도움이 됩니다.
  • 데이터 전처리부터 모델링, csv 파일 형태로 제출까지 모든 과정을 알고 있어야합니다. 여기에 모델 튜닝, EDA를 통한 변수 선택/제거 등 성능 개선 방법을 잘 알고 있으면 좋습니다.
  • 라이브러리도 기본적으로 암기하고 들어가는 것이 시간 절약에 도움이 됩니다! 회사마다 다르지만 검색을 허용하는 곳, 하지 않는 곳들이 있기 때문에 그냥 외우는게 마음이 편합니다.
  • 일반적으로 환경은 JupyterNotbook으로 colab에서 사용하는 것과 동일합니다.
  • EDA를 통해서 성능을 개선하고, 결측치, 이상치 처리할 때 기본적인 평균값, 중앙값 등인 방법 외에도 알고리즘을 활용한 방법 등 성능을 높일 수 있는 방법은 최대한 알고 가는게 좋습니다.

모델링 문제 기본 구성

1. 데이터 불러오기

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

# 데이터 로드
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

2. 타겟 변수 분리

# 타겟 변수 분리
X = train.drop('target', axis=1)
y = train['target']

3. 데이터 전처리

  • 평균, 최빈값, 중앙값 모든 경우를 알고 있으면 좋아요.
# 결측치 처리
# 수치형 변수는 평균값으로 대체
numeric_columns = X.select_dtypes(include=['int64', 'float64']).columns
for col in numeric_columns:
    X[col] = X[col].fillna(X[col].mean())
    test[col] = test[col].fillna(test[col].mean())

# 범주형 변수는 최빈값으로 대체
categorical_columns = X.select_dtypes(include=['object']).columns
for col in categorical_columns:
    X[col] = X[col].fillna(X[col].mode()[0])
    test[col] = test[col].fillna(test[col].mode()[0])

# 이상치 처리 (IQR 방식)
for col in numeric_columns:
    Q1 = X[col].quantile(0.25)
    Q3 = X[col].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR

    X[col] = np.clip(X[col], lower_bound, upper_bound)
    test[col] = np.clip(test[col], lower_bound, upper_bound)

# 범주형 변수 인코딩
le = LabelEncoder()
for col in categorical_columns:
    X[col] = le.fit_transform(X[col])
    test[col] = le.transform(test[col])

4.모델링 및 튜닝

분류 문제

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

# 모델 학습 및 튜닝
rf = RandomForestClassifier()
param_grid = {
   'n_estimators': [100, 200],
   'max_depth': [10, 20],
   'min_samples_split': [2, 5],
   'min_samples_leaf': [1, 2]
}

# GridSearchCV로 최적 파라미터 탐색
grid_search = GridSearchCV(rf, param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)

# 최적 모델 선택
best_model = grid_search.best_estimator_

# 예측 및 성능 평가
val_pred = best_model.predict(X_val)
test_pred = best_model.predict(test)

회귀 경우

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# 모델 학습 및 튜닝
rf = RandomForestRegressor()
param_grid = {
   'n_estimators': [100, 200],
   'max_depth': [10, 20],
   'min_samples_split': [2, 5],
   'min_samples_leaf': [1, 2]
}

# GridSearchCV로 최적 파라미터 탐색
grid_search = GridSearchCV(rf, param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# 최적 모델 선택
best_model = grid_search.best_estimator_

# 예측 및 성능 평가
val_pred = best_model.predict(X_val)
test_pred = best_model.predict(test)

5. Submission 파일 생성

submission = pd.DataFrame({
    'id': range(len(test_pred)),
    'target': test_pred
})
submission.to_csv('submission.csv', index=False)
728x90
반응형