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

[DACON/์ตœ๋‹ค์˜ˆ] ํ”„๋กœ์ ํŠธ ์—์„ธ์ด

๋‹ค์˜ˆ๋ป 2023. 5. 5. 23:40

๋ชฉํ‘œ

    ์Šฌ๋ก  ๋””์ง€ํ„ธ ์ฒœ์ฒด ๊ด€์ธก ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ฒœ์ฒด์˜ ํƒ€์ž…์„ ๋ถ„๋ฅ˜ํ•ด๋‚ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

    ์ด๋ฅผ ์œ„ํ•ด์„œ train data๋กœ ํ•™์Šต์„ ํ•˜๊ณ  test data๋กœ ํ™•์ธ์„ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.


EDA (Exploratory Data Analysis : ํƒ์ƒ‰์  ๋ฐ์ดํ„ฐ ๋ถ„์„)

    ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ๊ฐ๋„์—์„œ ๊ด€์ฐฐํ•˜๊ณ  ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

# ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
import seaborn as sns

# ๋ฐ์ดํ„ฐ ๋กœ๋“œ
train_data = pd.read_csv("train.csv")
train_data.shape

19776ํ–‰, 23์—ด

train_data.head()

train_data.tail()

train_data.info()

23๊ฐœ์˜ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

train_data.isnull().sum()

null๊ฐ’ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    fiberMag_g ๋ถ€ํ„ฐ modelMag_z๊นŒ์ง€ null ๊ฐ’์ด ํ•˜๋‚˜์”ฉ ์กด์žฌํ•œ๋‹ค.

train_data.describe()

object ํƒ€์ž…์„ ์ œ์™ธํ•œ 22๊ฐœ์˜ ์ปฌ๋Ÿผ๋“ค์˜ ๊ธฐ์ดˆ ํ†ต๊ณ„๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

train_data.median()

๊ฐ ์ปฌ๋Ÿผ์˜ ์ค‘์•™๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    id์™€ fiberID๋ฅผ ์ œ์™ธํ•œ ์ปฌ๋Ÿผ์—์„œ์˜ ์ค‘์•™๊ฐ’์ด ์„œ๋กœ ๋น„์Šทํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

train_data.var()

๊ฐ ์ปฌ๋Ÿผ์˜ ๋ถ„์‚ฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    psfMag_g์™€ fiberMag_r์˜ ๋ถ„์‚ฐ์ด ํฐ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

train_data['type'].unique()

type ์ปฌ๋Ÿผ์— ์žˆ๋Š” ๊ฒƒ๋“ค์˜ ์ข…๋ฅ˜๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

train_data['type'].value_counts()

type ์š”์†Œ๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ค€๋‹ค.

    QSO์˜ ์ข…๋ฅ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ๊ณ  SERENDIPITY_MANUAL์˜ ์ข…๋ฅ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

sns.countplot(y='type', data=train_data)

์œ„์—์„œ ๊ตฌํ•œ type๋ณ„ ๊ฐœ์ˆ˜๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•˜์˜€๋‹ค.

# ์ด์ƒ์น˜ ํ™•์ธ
train_data.boxplot(figsize=(30,10))

์ด์ƒ์น˜๊ฐ€ ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

→ ์ด์ƒ์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด๋ณด์•„์•ผ ํ•œ๋‹ค.


๋ชจ๋ธ๋ง

[ KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜ ]

    ์ฒœ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด์„œ KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

    K-Nearest Neighbors(KNN) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ง€๋„ํ•™์Šต(Supervised Learning)์˜ ์ผ์ข…์œผ๋กœ, ๋ถ„๋ฅ˜(Classification)์™€ ํšŒ๊ท€(Regression) ๋ฌธ์ œ์— ๋ชจ๋‘ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ฐ์ดํ„ฐ ์ ๋“ค ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด์›ƒ๋“ค์„ ์ฐพ์•„๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐพ์•„๋‚ธ ์ด์›ƒ๋“ค์˜ ๋ ˆ์ด๋ธ”์„ ๋ถ„๋ฅ˜ ๋ฌธ์ œ(Classification)์—์„œ๋Š” ๋‹ค์ˆ˜๊ฒฐ ํˆฌํ‘œ๋ฅผ ํ†ตํ•ด, ํšŒ๊ท€ ๋ฌธ์ œ(Regression)์—์„œ๋Š” ์ด์›ƒ๋“ค์˜ ํ‰๊ท ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์˜ˆ์ธกํ•œ๋‹ค.

    KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ๋ถ„๋ฅ˜ ๋ฌธ์ œ์—์„œ ๋†’์€ ์ •ํ™•๋„๋ฅผ ๋ณด์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ฐจ์›์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๊ณ„์‚ฐ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์ด์ƒ์น˜(Outlier)์— ๋ฏผ๊ฐํ•ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

KNN์€ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๊ณผ์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ธกํ•˜๋Š” ๋ฐ์— ์ ํ•ฉํ•˜๋‹ค.

 

[ KNN์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ„์„ ]

    ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ž€ ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ ์–ด๋– ํ•œ ์ž„์˜์˜ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ฌ ๋•Œ, ์‚ฌ๋žŒ์ด ์ง์ ‘ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ๋ชจ๋ธ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

1. KNN์—์„œ ์ œ์ผ ์ค‘์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” K์ด๋‹ค. K๋Š” ์ด์›ƒ์˜ ์ˆ˜๋ฅผ ๋งํ•˜๋Š”๋ฐ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

  • K๊ฐ’์ด ์ž‘์„์ˆ˜๋ก, ๊ฒฝ๊ณ„์„ ์ด ๋ฏผ๊ฐํ•ด์ง€๋ฉฐ ๋” ์ •ํ™•ํ•œ ์˜ˆ์ธก์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค. ๋ฐ˜๋ฉด, train ๋ฐ์ดํ„ฐ์— ๊ณผ๋„ํ•˜๊ฒŒ ๋งž์ถ”์–ด์ ธ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ฐ˜ํ™”(generalization)๊ฐ€ ์ €ํ•˜๋˜๋Š” ๊ณผ์ ํ•ฉ(overfitting)์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ๋˜ํ•œ, ์ด์ƒ์น˜(outlier) ๋ฐ์ดํ„ฐ์˜ ์˜ํ–ฅ์„ ํฌ๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • K๊ฐ’์ด ํด์ˆ˜๋ก, ๋ชจ๋ธ์˜ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์•„์ ธ ๋” ์ผ๋ฐ˜ํ™”๋œ ๋ชจ๋ธ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด์ƒ์น˜ ๋ฐ์ดํ„ฐ์˜ ์˜ํ–ฅ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, ์ž‘์€ ๊ตฐ์ง‘(cluster)์„ ๋ถ„๋ฅ˜ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณผ์†Œ์ ํ•ฉ (underfitting)์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ K๊ฐ’์„ ์ฐพ์„ ๋•Œ์—๋Š” ๊ต์ฐจ ๊ฒ€์ฆ(Cross-validation)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ์˜ K ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

2. ๋‹ค์Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ฑฐ๋ฆฌ(Distance)์ด๋‹ค. ๊ฑฐ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค. ์ฃผ๋กœ ์œ ํด๋ฆฌ๋“œ ๊ฑฐ๋ฆฌ(Euclidean distance)์™€ ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ(Manhattan distance)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ๋ฆฌ๋กœ, n์ฐจ์›์—์„œ์˜ ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐํ•œ๋‹ค. ํ”ํžˆ ํ”ผํƒ€๊ณ ๋ผ์Šค ์ •๋ฆฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•˜์ง€๋งŒ, ์ฐจ์›์ด ๋†’์•„์ง€๊ฑฐ๋‚˜ ์ด์ƒ์น˜(outlier)๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ฑฐ๋ฆฌ ์ธก์ •์ด ์™œ๊ณก๋  ์ˆ˜ ์žˆ๋‹ค.

  • ๋งจํ—ˆํŠผ ๊ฑฐ๋ฆฌ๋Š” ๋‘ ์  ์‚ฌ์ด์˜ ๊ฐ€๋กœ์ถ•๊ณผ ์„ธ๋กœ์ถ•์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฑฐ๋ฆฌ๋กœ ์ œํ•œ๋œ ์กฐ๊ฑด ํ•˜์—์„œ ์ •ํ•ด์ง„ ๋ฃจํŠธ๋ฅผ ํ†ตํ•ด ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์œ ํด๋ฆฌ๋””์–ธ ๊ฑฐ๋ฆฌ๋ณด๋‹ค ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋‚ฎ๊ณ , ํŠนํžˆ ์ฐจ์›์ด ๋งค์šฐ ํฐ ๊ฒฝ์šฐ์— ๋” ํšจ์œจ์ ์ด๋‹ค. ๋˜ํ•œ, ์œ ํด๋ฆฌ๋””์–ธ ๊ฑฐ๋ฆฌ๋ณด๋‹ค ์ด์ƒ์น˜(Outlier)์— ๋œ ๋ฏผ๊ฐํ•˜๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ฐจ์›์ด ํฌ๊ฑฐ๋‚˜ ์ด์ƒ์น˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” ๋งจํ•˜ํŠผ ๊ฑฐ๋ฆฌ๊ฐ€ ์ ํ•ฉํ•˜๊ณ , ์ฐจ์›์ด ์ž‘๊ณ  ์ด์ƒ์น˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ์—๋Š” ์œ ํด๋ฆฌ๋””์–ธ ๊ฑฐ๋ฆฌ๊ฐ€ ์ ํ•ฉํ•˜๋‹ค. ์ด ์™ธ์—๋„ ํ‘œ์ค€ํ™” ๊ฑฐ๋ฆฌ, ๋งˆํ• ๋ผ๋…ธ๋น„์Šค ๊ฑฐ๋ฆฌ, ์ฒด๋น„์…ฐํ”„ ๊ฑฐ๋ฆฌ, ๋ฏผ์ฝฅ์Šคํ‚ค ๊ฑฐ๋ฆฌ, ์บ”๋ฒ„๋ผ ๊ฑฐ๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฑฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

[ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ]

    KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ตœ์ ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ทธ๋ฆฌ๋“œ ํƒ์ƒ‰(Grid Search)์ด๋‚˜ ๋žœ๋ค ํƒ์ƒ‰(Random Search)๊ณผ ๊ฐ™์€ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

    ๊ทธ๋ฆฌ๋“œ ํƒ์ƒ‰์€ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด์„œ ์กฐํ•ฉ๋“ค์„ ์‹œ๋„ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ k ๊ฐ’์ด 1, 3, 5, 7์ด๊ณ , ๊ฑฐ๋ฆฌ ์ธก์ • ๋ฐฉ๋ฒ•์ด ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ์™€ ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ•ด๋ณด๋ฉด์„œ ์ตœ์ ์˜ ์กฐํ•ฉ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ๋‹ค ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋†’์€ ์ •ํ™•๋„๋ฅผ ๋ณด์žฅํ•˜์ง€๋งŒ, ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋งค์šฐ ๋†’์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

    ๋ฐ˜๋ฉด์—, ๋žœ๋ค ํƒ์ƒ‰์€ ์ฃผ์–ด์ง„ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋žœ๋ค์œผ๋กœ ์กฐํ•ฉ์„ ์„ ํƒํ•ด์„œ ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๊ณ , ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ k ๊ฐ’์ด 1์—์„œ 10 ์‚ฌ์ด์˜ ์ •์ˆ˜ ์ค‘ ๋žœ๋คํ•˜๊ฒŒ ์„ ํƒ๋˜๊ณ , ๊ฑฐ๋ฆฌ ์ธก์ • ๋ฐฉ๋ฒ•๋„ ๋žœ๋คํ•˜๊ฒŒ ์„ ํƒ๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๊ทธ๋ฆฌ๋“œ ํƒ์ƒ‰์— ๋น„ํ•ด ๋” ๋น ๋ฅด๊ฒŒ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต๊ฐ„์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋žœ๋ค ํƒ์ƒ‰์€ ์ตœ์ ์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

    ๋”ฐ๋ผ์„œ, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต๊ฐ„์ด ๋งค์šฐ ํฐ ๊ฒฝ์šฐ ๋žœ๋ค ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ฆฌ๋“œ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

[ KNN ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ ]

null ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ๋ชจ๋ธ๋ง ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ null ๊ฐ’์„ ์ฑ„์›Œ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์•„์ง ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ null ๊ฐ’์„ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ์ง€ ์ฐพ์ง€ ๋ชปํ•˜์—ฌ ์ผ๋‹จ์€ null ๊ฐ’์„ ์‚ญ์ œํ•œ ์ƒํƒœ๋กœ ๋ชจ๋ธ๋ง์„ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค.

# null ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ๋ชจ๋ธ๋ง ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
train_data = train_data.dropna()
# 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)

    train_test_split()์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ›ˆ๋ จ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ 75:25์˜ ๋น„์œจ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด ๋น„์œจ์„ test_size ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ…Œ์ŠคํŠธ ์„ธํŠธ์˜ ๋น„์œจ์„ ์ „๋‹ฌํ•˜์—ฌ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ 30%๋ฅผ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด 0.3์„ ์ „๋‹ฌํ–ˆ๋‹ค.

    train_test_split()๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์„ž์€ ๋’ค, ๋ฐ์ดํ„ฐ ์…‹์„ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋กœ ๋ถ„ํ• ์ด ๋œ๋‹ค. ์ด๋•Œ random_state๋ฅผ ํŠน์ • ์ˆซ์ž๋กœ ์ง€์ •ํ•˜๋ฉด ํ•ญ์ƒ ๋™์ผํ•˜๊ฒŒ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ ์ƒํ™ฉ์—์„œ๋Š” ๊ฑฐ์˜ ํ•„์š” ์—†์ง€๋งŒ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ๋˜‘๊ฐ™์ด ์žฌํ˜„ํ•ด์•ผ ํ•  ๋•Œ๋Š” ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.

 

[ ์ตœ์ ์˜ K๊ฐ’ ์ฐพ๊ธฐ ]

# ์ตœ์ ์˜ k๊ฐ’ ์ฐพ๊ธฐ
k_values = []
accuracy_values = []

for k in range(1, 11):
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    score = knn.score(X_test, y_test)
    k_values.append(k)
    accuracy_values.append(score)

    n_neighbors๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด์›ƒ์„ ๋ช‡ ๊ฐœ ๊ณ ๋ฅผ์ง€์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค.

# KNN ์‹œ๊ฐํ™”
plt.plot(k_values, accuracy_values, 'o-')  # ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์— ์ (o)๊ณผ ์„ (-)์ด ํ•จ๊ป˜ ํ‘œ์‹œ
plt.xlabel('k')
plt.ylabel('Accuracy')
plt.title('Accuracy for Different Values of k')
plt.xticks(k_values)  # ๋ˆˆ๊ธˆ ์„ค์ •
plt.show()

    ์‹œ๊ฐํ™”๋ฅผ ํ†ตํ•ด k๊ฐ€ 5์ผ ๋•Œ ์ •ํ™•๋„๊ฐ€ ๊ฐ€์žฅ ๋†’๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ตœ์ ์˜ k ๊ฐ’์€ 5๊ฐ€ ๋œ๋‹ค.

# ์ตœ์ ์˜ k ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ ์ƒ์„ฑ, ํ•™์Šต, ๊ฒ€์ฆ
best_k = 5

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)

    ๋ฐ์ดํ„ฐ์—์„œ ์ด์ƒ์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€, null ๊ฐ’์„ ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•˜๋Š”๊ฐ€, ์–ด๋–ค ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์•ผ ํ• ๊นŒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ†ตํ•ด ํ˜„์žฌ์˜ ์ •ํ™•๋„๋ณด๋‹ค ๋” ๋†’์€ ํ™•๋ฅ ์ด ๋‚˜์˜ค๋„๋ก ํ•ด์•ผํ•œ๋‹ค.