๊ณผ์
1. EDA ๋ฐ ์ ์ฒ๋ฆฌ
2. ๋ชจ๋ธ๋ง ๋ฐ ๊ฒฐ๊ณผ
3. ์ธ์ฌ์ดํธ ๋์ถ
1. EDA ๋ฐ ์ ์ฒ๋ฆฌ
Training set์ ๊ฒฝ์ฐ ์ด 23๊ฐ์ column์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ๋ฐ์ดํฐ๋ ์ฝ 20๋ง๊ฑด์ด ์กด์ฌํ๋ค.
Test set์ ๊ฒฝ์ฐ ์ด 22๊ฐ์ column์ผ๋ก Training set๊ณผ๋ ๋ค๋ฅด๊ฒ 'type' column์ด ์กด์ฌํ์ง ์๋๋ค.
์ด๋ Test set์ ์ด์ฉํด ์์ธก ํ submission ํ์ผ์ ๋ง๋ค์ด ์ ์ถํ๋ ์ฉ๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Submission file์ ๊ฒฝ์ฐ column์ test set์ ๋ฐ์ดํฐ id, ๋ณ๋ค์ type๋ค์ด ์กด์ฌํ๋ค.
๊ฐ type์ ์ด๋์ ๋์ ํ๋ฅ ๋ก ์์ธกํ๋์ง ๊ธฐ๋ก ํ ์ ์ถํ๋ ํํ์ด๋ค.
ํ๊ฐ ๋ฐฉ๋ฒ์ log_loss๋ฅผ ์ด์ฉํ๋ผ๊ณ ํ์ผ๋, ์ผ๋จ์ ์ ํ๋์ ์ ๋ฐ์ ์ธ ์์ธก ํ๋ฅ ์์ฃผ๋ก ํ์ธํ๊ณ ์ ํ๋ค.
1) ์์น, ํ ์คํธ ํด์
์ ๋ฐ์ ์ธ ๊ธฐ์ดํต๊ณ๋์ ํ์ธํด๋ณธ ๊ฒฐ๊ณผ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ ์ฌ์ด์ ๊ฐญ์ด ๊ต์ฅํ ํฌ๋ค.
์ ๊ทํ์ ๊ณผ์ ์ ๊ฑฐ์น๊ฑฐ๋ outlier๋ฅผ ์ ๊ฑฐํด์ผํ ๋ฏ ํ๋ค.
column๋ค์ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋์ด์์ผ๋ฉฐ ๊ฐ column๋ณ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. id
์ธ๋ฑ์ค์ ์ ์ฌํ ์กด์ฌ์ด๋ค.
2. type
์ฐ๋ฆฌ๊ฐ ์์ธกํ๊ณ ์ ํ๋ ๋ณ์ ์ข ๋ฅ์ด๋ค.
๊ต์ฅํ ๋ค์ํ ์ข ๋ฅ๊ฐ ์์ผ๋ฉฐ, ์ด์ ๋ํด์๋ ์ถํ์ ์ถ๊ฐํ๋๋ก ํ๋ค.
3. fiberID
๋ณ์ ์ธก์ ํ ๋ ์ฌ์ฉํ ๊ด์ฌ์ ์ ID์ด๋ค.
4. psfMag_u, g, r, i, z
๋ค์ ๋ถ์ด์๋ u, g, r, i, z๋ ๊ฐ๊ฐ ํ์ฅ์ ์๋ฏธํ๋ค.
psfMag๋ ์ ํ์ฐํจ์๋ฅผ ์ด์ฉํด ์ธก์ ํ ๋ณ์ ๊ด๋๋ฅผ ์๋ฏธํ๋ ๋ฏ ํ๋ค.
5. fiberMag_u, g, r, i, z
๋ง์ฐฌ๊ฐ์ง๋ก '_' ๋ค์ ๋ถ์ด์๋ ์ํ๋ฒณ์ ๊ฐ๊ฐ ํ์ฅ์ ์๋ฏธํ๋ค.
fiberMag์ ๊ฒฝ์ฐ ๊ด๋๋ฅผ ์ธก์ ํ ๊ด์ฌ์ ๊ธฐ์ค์ ๊ด๋๋ฅผ ์๋ฏธํ๋ ๋ฏ ํ๋ค.
6. petroMag_u, g, r, i, z
petrosian์ด๋ผ๋ ์ธก์ ์์คํ ์ด ์๋๋ฐ, ์ด๋ฅผ ์ด์ฉํด ์ธก์ ํ ๊ด๋๋ฅผ ์๋ฏธํ๋ ๋ฏ ํ๋ค.
7. modelMag_u, g, r, i, z
๋ชจ๋ธํจ์๋ฅผ ์ด์ฉํด ์ธก์ ๋ ๊ด๋๋ฅผ ์๋ฏธํ๋ค.
์ฌ๊ธฐ์ ๋ชจ๋ธ ํจ์๋ผ๋ ๊ฒ์ด ๊ตฌ์ฒด์ ์ผ๋ก ๋ฌด์์ธ์ง๋ ์์๋ด์ง ๋ชปํ๋ค.
๊ฐ column๋ค์ type์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ์์นํ์ด์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด type์ ์์นํํ์ฌ ์์ธกํด์ผ ํจ์ ์ ์ ์์๋ค.
๊ฒฐ์ธก์น๋ ์กด์ฌํ์ง ์์์ผ๋ฉฐ, type์ ๊ฐ์๋ ์ด 19๊ฐ์๋ค.
๊ฐ type์ ๊ฐ์๋ฅผ ์์๋ณธ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์๊ณ , ์ด๋ฅผ ์๊ฐํํ์ ๋ ๋ช ํํ๊ฒ ํด๋์ค์ ๋ถ๊ท ํ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
2) ๊ทธ๋ํ ํด์
๊ฐ type๊ณผ ๋ค๋ฅธ ๋ณ์๋ค๊ฐ์ ๊ด๊ณ๋ฅผ ์์๋ณด์.
์ด 19๊ฐ์ ํ์ ๋ค ์ค QSO๊ฐ ๊ฐ์ฅ ํญ๋๊ฒ fiberID๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋๋จธ์ง ํ์ ๋ค์ 600์ด๋ฐ์ ๋์ ๊ด์ฌ์ ๋ฅผ ์ด์ฉํ ๊ฒ์ผ๋ก ํ์ ๋๋ค.
* ...์ด๋ถ๋ถ ์ง์ ๋ชปํด๋จน๊ฒ ์ด์ ๋ฏธ์น ์ง์ง ์ผ์ฃผ์ผ ๋ด๋ด ์ด๋ถ๋ถ๋ง ๊ฐ์ง๊ณ ๊ณ ๋ฏผํ๋๋ฐ ๋จธ๋ฆฌ ํ๋๋ ์๋์๊ฐ์ EDA ๋๋ฌด ์ด๋ ต๋ค ์ฐจ๋ผ๋ฆฌ ๋ชจ๋ธ๋ง๋ง ํ ๋์ ์ง์ง ์ฌ๋ฌ๋ถ ์ง๋จ์ง์ฑ plz
2. ๋ชจ๋ธ๋ง ๋ฐ ๊ฒฐ๊ณผ
# type์ ์ซ์๋ก ๋ณํ
column_number = {}
for i, column in enumerate(submission_df.columns):
column_number[column] = i
def to_number(x, dic):
return dic[x]
train_df['type_num'] = train_df['type'].apply(lambda x: to_number(x, column_number))
๋ฒ ์ด์ค๋ผ์ธ ์ฝ๋์์ ์ ๊ณตํด์ค ์ฝ๋๋ฅผ ์ด์ฉํด type์ ์ซ์๋ก ๋ณํํด์ค๋ค.
# train set์ ์ด์ฉํด validation set์ ๋ง๋ค์ด test set์ ์ด์ฉํด ํ๊ฐ ์ ๊ฒ์ฆ์ ํด๋ณด๊ณ ์ ํจ
X = train_df.drop(columns=['type_num', 'type'], axis=1)
y = train_df['type_num']
X_test = test_df
์ฃผ์ด์ง testset์๋ type์ด ์๊ธฐ์ trainset์ ์ต๋ํ ์ด์ฉํ์ฌ ํ์ต์ ์ํค๊ณ ๊ฒ์ฆํด๋ณด๋ ค๊ณ ํ๋ค.
from lightgbm import LGBMClassifier
from sklearn.metrics import log_loss, accuracy_score
from sklearn.model_selection import train_test_split
์ฌ์ฉํ ๋ชจ๋ธ์ ํธ๋ฆฌ ๊ธฐ๋ฐ LightGBM์ผ๋ก GBM ๋ชจ๋ธ๋ณด๋ค ํ์ต ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
train_test_split์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํด์ฃผ๋ฉฐ, ์ด๋ ํด๋์ค๋ณ๋ก ์ ์ ํ ๋น์จ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋๋๊ธฐ ์ํด stratify๋ผ๋ ๊ฐ์ ์ด์ฉํ๋ค. ์ด๋ฅผ ํตํด ํด๋์ค ๋ถ๊ท ํ์ ์กฐ๊ธ์ด๋๋ง ๋ง์ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=100, stratify=y)
model = LGBMClassifier(n_estimators=500,
learning_rate=0.01,
boosting_type='gbdt',
num_leaves=20,
max_depth=15)
model.fit(X_train, y_train)
y_pred_proba = model.predict_proba(X_val)
y_pred_acc = model.predict(X_val)
์ฒซ๋ฒ์งธ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ผ๋ก ํ์ต์ํค๊ณ ๊ฒ์ฆํ์๋ค. ์ ํ๋๋ ์ฝ 87%์ด๋ค.
์ด๋ ๋ถ์คํ ํ์ ์ dart๋ก ๋ณ๊ฒฝํ๊ณ , learning_rate์ 0.005๋ก ๋ฎ์ถ์๋ค. ๋ํ max_depth=18๋ก ์ค์ ํ์๊ณ , ๊ณผ์ ํฉ์ ๋ง๊ธฐ ์ํด n_estimators=400์ผ๋ก ๋ฎ์ถ์๋ค.
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=100, stratify=y)
model = LGBMClassifier(n_estimators=400,
learning_rate=0.005,
boosting_type='dart', # traditional gradient boosting decision tree
num_leaves=20,
max_depth=18)
model.fit(X_train, y_train)
y_pred_proba = model.predict_proba(X_val)
y_pred_acc = model.predict(X_val)
print(accuracy_score(y_val, y_pred_acc))
์ ํ๋๊ฐ ๋ฎ์์ง ๊ฒ์ ํตํด ๊ณผ์ ํฉ์ด ์๊ธธ ๊ฐ๋ฅ ์ฑ์ด ๋งค์ฐ ๋์ ์ํฉ์ด๋ฉฐ, ์ด์ ๊ณผ ๊ฐ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก ๋ค์ํ๋ฒ ํ์ตํด๋ณธ๋ค. boosting_type๋ง dart๋ก ๋ณ๊ฒฝํ์ฌ ํ์ต์ํจ ๊ฒฐ๊ณผ ์ฒ์๋ณด๋ค๋ ๋์ง ์์ ์ ํ๋๋ฅผ ๋ณด์ธ๋ค.
์๋ฌด๋๋ ์ด์์น์ ์ํฅ์ด ๊ฝค ํฐ ๋ฏ ํ๋ค. ์ด์์น๋ฅผ ์ ๊ฑฐํ๊ธฐ์๋ ๋ถ์ํจ์ด ์์ผ๋ ์ ๊ทํ ํ ํ์ต์ ์์ผ๋ณด๋๋ก ํ๊ฒ ๋ค.
์ ๊ทํ์ ๊ฒฝ์ฐ 0~1์ฌ์ด์ ๊ฐ์ผ๋ก ์ ๊ทํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ, log๋ฅผ ์์ ์ ๊ทํํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์๋๋ฐ, ์ผ๋จ 0~1์ฌ์ด ๊ฐ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ๋ง ์ฌ์ฉํด๋ณด๋๋ก ํ๊ฒ ๋ค.
- Standard Scaler
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ๊ทํ ๋ฐฉ์์ผ๋ก ์ ๊ท๋ถํฌ๋ก ๋ณํํด์ฃผ๋ ์ค์ผ์ผ๋ฌ์ด๋ค.
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# ์ ๊ทํ๋ฅผ ํด๋ณด์.
X = train_df.drop(columns=['type_num', 'type'], axis=1)
y = train_df['type_num']
X_test = test_df
# StandardScaler
std = StandardScaler()
std.fit(X)
# # MinMaxScaler
# mm = MinMaxScaler()
# mm.fit(X)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=100, stratify=y)
model = LGBMClassifier(n_estimators=800,
learning_rate=0.005,
boosting_type='gbdt',
num_leaves=20,
max_depth=15)
model.fit(X_train, y_train)
y_pred_proba = model.predict_proba(X_val)
y_pred_acc = model.predict(X_val)
print(accuracy_score(y_val, y_pred_acc))
ํ์ดํผํ๋ผ๋ฏธํฐ๋ ์กฐ๊ธ ์กฐ์ ํด ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค. ๊ทธ๋ฅ ์ ๋์ค์ง ์๋๋ค.
- MinMaxScaler
์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ด์ฉํ ์ค์ผ์ผ๋ฌ๋ก ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ๊ณ ํ์.
sklearn.preprocessing.MinMaxScaler
Examples using sklearn.preprocessing.MinMaxScaler: Release Highlights for scikit-learn 0.24 Release Highlights for scikit-learn 0.24 Image denoising using kernel PCA Image denoising using kernel PC...
scikit-learn.org
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# ์ ๊ทํ๋ฅผ ํด๋ณด์.
X = train_df.drop(columns=['type_num', 'type'], axis=1)
y = train_df['type_num']
X_test = test_df
# # StandardScaler
# std = StandardScaler()
# std.fit(X)
# MinMaxScaler
mm = MinMaxScaler()
mm.fit(X)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=100, stratify=y)
model = LGBMClassifier(n_estimators=1000,
learning_rate=0.005,
boosting_type='gbdt',
num_leaves=20,
max_depth=18)
model.fit(X_train, y_train)
y_pred_proba = model.predict_proba(X_val)
y_pred_acc = model.predict(X_val)
print(accuracy_score(y_val, y_pred_acc))
๋๋ฒ์งธ๋ MinMaxScaler๋ฅผ ์ด์ฉํ์ผ๋ฉฐ, ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ข ๋ ์กฐ์ ํด๋ณด์๋๋ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์๋ค.
์๋ฌด๋๋ ์ค์ผ์ผ์ด ๋ฌธ์ ๊ฐ ์๋๋ผ ํด๋์ค ๋ถ๊ท ํ์ ๋ฌธ์ ๊ฐ ๊ฐ์ฅ ํฐ ๋ฏ ํ๋ค.
์ด ๋ถ๋ถ์ ์ข ๋ ๊ณต๋ถ๋ฅผ ํด๋ณผ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
3. ์ธ์ฌ์ดํธ ๋์ถ
๋ฐ์ดํฐ ํด๋์ค ๋ถ๊ท ํ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ค๋ฒ์ํ๋ง ํน์ ์ธ๋์ํ๋ง ๋ฐฉ์์ ์ด์ฉํด์ผ ํ ๊ฒ์ผ๋ก ํ๋จ๋๋ค.
์ด๋ ํน์ ํด๋์ค๋ง ์ธ๋์ํ๋ง ํ ๊ณผํ๊ฒ ์ ์ ํด๋์ค๋ ์ญ์ ํด ํ์ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ํ์ตํ ํด๋์ค๊ฐ ์๋๋ผ๋ฉด ์ญ์ ๋ ๊ทธ ํด๋์ค๋ก ์์ธกํ ์ ์๋๋ก ํ๋ฉด ์ด๋จ๊น ์ถ๋ค. ๋ค๋ง ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ ์ง๋ ์์ง ๋ ์์๋ด์ผํ ๊ฒ ๊ฐ๋ค.
4. ์์ฌ์ด์
EDA ๋๋ฌด ์ด๋ ต๋ค. ์ ๋ด๊ฐ ์ํ๋ ํํ๋ก๋ ๊ทธ๋ํ๊ฐ ๋์ค์ง ์๋๊ฑธ๊น?
log_loss ํจ์๋ฅผ ์ด์ฉํ๋ ค๋๋ฐ ํํํ์ ๋ฐ์ง ์์ ์ด ๊ฐ์ ๊ตฌํ์ง ๋ชปํ๋๋ฐ, ์ด ๋ถ๋ถ์ ํด๊ฒฐํ ๋ฐฉ์์ ์ฐพ์๋ด์ผํ ๊ฒ ๊ฐ๋ค.
ํ์ดํผํ๋ผ๋ฏธํฐ ์ต์ ํ ํ๋ ค๊ณ ํ๋๋ฐ 2์๊ฐ์ ๋๋ ธ๋๋ฐ๋ ํ์ต์ด ์๋๋ ๊ทธ๋ฅ ์์ผ๋ก ํ๋ํ๋ ์์ ํ๋ ๊ฒ์ด ๋น ๋ฅผ ๋ฏ ํ๋ค.
ํด๋์ค ๋ถ๊ท ํ...
์์๋ผ์ด์ด๋ณด๋ค ์ฌ์ค ํด๋์ค ๋ถ๊ท ํ์ ์ํฅ์ด ์ ์ผ ํฐ ๋ฏ ํ๋ค. ์ด ๊ธฐํ๋ก ์ค๋ฒ์ํ๋ง, ์ธ๋ ์ํ๋ง์ ๋ํด ๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ ์ ์ฉํด๋ด์ผ๊ฒ ๋ค.
์ด๋ ต๋ค.
ํผ์ํ๋ ค๋ ๋จธ๋ฆฌ ํฐ์ง ๊ฒ ๊ฐ๋ค.
์์ผ๋ก์ ๊ณํ์...... ์ข ์์ ํด๋ด์ผ๊ฒ ๋ค. ํ๊ท๋ฅผ ๋๊ฐ๋ ๊ฒ์ด ๋ง๋๊ฐ?
๊ทธ๋๋ ์ ๋ฐ์ ์ผ๋ก ํ๋๊ฒ ์ข์ง ์์๊ฐ? vs ๋ถ๋ฅ ํ๋๋ผ๋ ์ ๋๋ก ํด๋ณด์
์ฌ๋ฌ๋ถ๋ค์ ์ ํ์?
์ ๊ณผ์ ์ ๋ํ ํผ๋๋ฐฑ๊ณผ ์ฝ ๋๋ฌ ๋ฐ์ ๋์ ํ์ต์ ํตํ ์ฌ๋ฌ๋ถ๋ค์ ์๊ฒฌ๋ ์ฃผ์ญ์ผ.
๊ฐ์ฌํฉ๋๋ค.
๋ค๋ง. ๊ณผ์ ๊ฐ ๋ง๋ค๋ ๊ฒ์ ์ฌ๊ณ ํ์ง ์์ ์์ ์ ๋๋ค..
'๐ก WIDA > DACON ๋ถ๋ฅ-ํ๊ท' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DACON/์กฐ์์] ์ฒ์ฒด ๋ถ๋ฅ ๊ฒฝ์ง๋ํ ๋๋ฉ์ธ ๋ ๋ฏ์ด๋ณด๊ธฐ: Type (1) | 2023.05.26 |
---|---|
[DACON/๊น๋ฏผํ] ์ฒ์ฒด ๋ถ๋ฅ ๊ฒฝ์ง๋ํ (5) | 2023.05.06 |
[DACON/์ต๋ค์] ํ๋ก์ ํธ ์์ธ์ด (5) | 2023.05.05 |
[DACON/๊น๊ฒฝ์] ํ๋ก์ ํธ ์์ธ์ด (4) | 2023.05.05 |
[DACON/๊น์ธ์ฐ] ํ๋ก์ ํธ ์์ธ์ด (4) | 2023.05.05 |