주제
파일 정보
파일 및 필드 설명
train.csv
Id
AB - GL
Class
test.csv
greeks.csv
Alpha
A
BDG
Beta,Gamma,Delta
라이브러리 및 패키지 설치
pip install coloramaimport os
import shutil
import subprocess
from collections import defaultdict
from copy import copy
from functools import partial
from itertools import product
from pathlib import Path
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.figure_factory as ff
import plotly.graph_objects as go
import scipy.stats as stats
from colorama import Fore
from colorama import Style
from scipy.cluster.hierarchy import linkage
from scipy.spatial.distance import squareform
from scipy.stats import gaussian_kde
from scipy.stats import probplot
from IPython.core.display import HTML
from plotly.subplots import make_subplots
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.manifold import TSNE
from sklearn.model_selection import StratifiedKFold
from sklearn.pipeline import make_pipeline
from sklearn.svm import SVC
from sklearn.compose import make_column_selector
from sklearn.compose import make_column_transformer
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.feature_selection import f_classif
from sklearn.feature_selection import mutual_info_classif
from sklearn.impute import KNNImputer
from sklearn.impute import SimpleImputer
from sklearn.metrics import accuracy_score
from sklearn.metrics import brier_score_loss
from sklearn.metrics import confusion_matrix
from sklearn.metrics import f1_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve
from sklearn.preprocessing import Binarizer
from sklearn.preprocessing import FunctionTransformer
from sklearn.preprocessing import OrdinalEncoder
from sklearn.preprocessing import PowerTransformer
from sklearn.preprocessing import StandardScaler
# Kaggle 환경 설정, Colorama 라이브러리를 사용한 콘솔 색상 설정, 스타일 지정
ON_KAGGLE = os.getenv("KAGGLE_KERNEL_RUN_TYPE") is not None
# Colorama settings.
CLR = (Style.BRIGHT + Fore.BLACK) if ON_KAGGLE else (Style.BRIGHT + Fore.WHITE)
RED = Style.BRIGHT + Fore.RED
BLUE = Style.BRIGHT + Fore.BLUE
CYAN = Style.BRIGHT + Fore.CYAN
RESET = Style.RESET_ALL
FONT_COLOR = "#010D36"
BACKGROUND_COLOR = "#F6F5F5"
CELL_HOVER = { # for row hover use <tr> instead of <td>
"selector": "td:hover",
"props": "background-color: #F6F5F5",
}
TEXT_HIGHLIGHT = {
"selector": "td",
"props": "color: #FF2079; font-weight: bold",
}
INDEX_NAMES = {
"selector": ".index_name",
"props": "font-style: italic; background-color: #010D36; color: #F2F2F0;",
}
HEADERS = {
"selector": "th:not(.index_name)",
"props": "font-style: italic; background-color: #010D36; color: #F2F2F0;",
}
DF_STYLE = (INDEX_NAMES, HEADERS, TEXT_HIGHLIGHT)
# Utility functions.
def download_dataset_from_kaggle(user, dataset, directory):
command = "kaggle datasets download -d "
filepath = directory / (dataset + ".zip")
if not filepath.is_file():
subprocess.run((command + user + "/" + dataset).split())
filepath.parent.mkdir(parents=True, exist_ok=True)
shutil.unpack_archive(dataset + ".zip", "data")
shutil.move(dataset + ".zip", "data")
def download_competition_from_kaggle(competition):
command = "kaggle competitions download -c "
filepath = Path("data/" + competition + ".zip")
if not filepath.is_file():
subprocess.run((command + competition).split())
Path("data").mkdir(parents=True, exist_ok=True)
shutil.unpack_archive(competition + ".zip", "data")
shutil.move(competition + ".zip", "data")
# Html `code` block highlight.
HTML(
"""
<style>
code {
background: rgba(58, 90, 129, 0.5) !important;
border-radius: 4px !important;
color: #f2f2f0 !important;
}
</style>
"""
)
데이터로드
import pandas as pd
train_path = "/content/train.csv"
test_path = "/content/test.csv"
greeks_path = "/content/greeks.csv"
train = pd.read_csv(train_path, index_col="Id").rename(columns=str.strip)
test = pd.read_csv(test_path, index_col="Id").rename(columns=str.strip)
greeks = pd.read_csv(greeks_path, index_col="Id").rename(columns=str.strip)
간단하게 데이터 살펴보기
DF_STYLE = [
{'selector': 'th', 'props': [('background-color', 'lightblue')]},
{'selector': 'td', 'props': [('border', '1px solid black')]}
]
train.head().style.set_table_styles(DF_STYLE).format(precision=3)# 소수점 3자리까지

train.info()
# EJ는 범주형이라서 다른 형태로 데이터가 나타나고 있음





EDA



2.Pair Plots & Kernel Density Estimation
Pair Plot: 피쳐 간 상관관계

Kernal Density Estimation: 커널 밀도 추정

정규분포와 비교


전처리
표준화 처리 : Robust Scaler
불균형 데이터 셋: SMOTE 방법 이용
정규성 개선: Box-Cox
개선전

개선후

변환 결과가 특히 좋지 않은 변수

데이터 분석

중복된 행에서는 Class 0가 압도적으로 많고 Class 1은 거의 존재하지 않지만, 중복되지 않은 행에서는 Class 1의 비율이 크게 증가합니다. 이는 중복된 데이터가 Class 0에 매우 편향되어 있다는 것을 의미하며, 모델의 성능이나 데이터 분석 시 주의
AR, BZ, DV는 거의 동일한 값을 가지므로 제거
AY와 DF는 다른 변수들과 약한 상관관계를 가지므로, 이진화 등 다른 방식으로 처리하거나 유지
범주형 EJ 데이터 분석



t-SNE (t-Distributed Stochastic Neighbor Embedding)



성능평가


모델

랜덤 포레스트(RandomForestClassifier), 서포트 벡터 머신(SVC), LightGBM(LGBMClassifier) 를 사용해 특성 중요도(Feature Importance)를 평가하는 Permutation Test를 구현한 것입니다. 이 과정의 주요 목적은 balanced log loss를 평가 지표로 삼아, 각 분류기 모델이 특정 특성(피처)을 섞어(shuffle) 학습했을 때 성능에 미치는 영향을 평가하는 것

x축: Balanced Log Loss
y축: 각 특성의 이름
범주형 Greeks 메타데이터를 분석하고, 병렬 좌표 그래프를 통해 범주 간의 연결성을 시각적으로 탐구



모델 평가


| XGBoost | LightGBM | SVC | RandomForest | |
|---|---|---|---|---|
| 가중치 | 0.35 | 0.35 | 0.15 | 0.15 |
| 원저자 | 0.45 | 0.45 | 0.1 |


