๐ ์ค์ต ๋ด์ฉ ์์ฝ
- 0501
- ๋จธ์ ๋ฌ๋์ ์ง๋ํ์ต์ ๋ถ๋ฅ๋ฅผ ์ฌ์ฉํ๋ Scikit-learn API ๊ธฐ์ด
- DecisionTree ๋ฅผ ์ค์ต(์์น๋ฐ์ดํฐ๋ง ์ฌ์ฉ)
- 0502
- ๋ฒ์ฃผํ ๋ฐ์ดํฐ๋ฅผ ์ธ์ฝ๋ฉ(์์น๋ฐ์ดํฐ๋ก ๋ณํ)
- One-Hot-Encoding(
pd.get_dummies
)
- RamdomForest
- 0503
- One-Hot-Encoding(scikit-learn)
- ์ธ๋ํผํ
, ์ค๋ฒํผํ
์ ํ๊ฐํ ๋ train, test ๋ ๊ฐ์ง ๋ฐ์ดํฐ์ ๋ํ ์ ์๋ฅผ ๋น๊ต
- ๊ธฐ์กด์๋ test๋ฐ์ดํฐ์ ๋ํด์๋ง ํ๊ฐํ๋๋ฐ train ๋ฐ์ดํฐ๋ก ํ๊ฐํด๋ณผ ์์
- cross validation ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ ํ๊ฐ
๐ ์ค๋ฒํผํ
, ์ธ๋ํผํ
- ์ธ๋ํผํ
์ ๋ชจ๋ธ์ด ํ์ต ์ค๋ฅ๋ฅผ ์ค์ด์ง ๋ชปํ๋ ์ํฉ
- ์ค๋ฒํผํ
์ ๋ชจ๋ธ ํ์ต ์ค๋ฅ๊ฐ ํ
์คํธ ๋ฐ์ดํฐ์ ์ค๋ฅ๋ณด๋ค ํจ์ฌ ์์ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธ
- ๋ ๊ทธ๋ํ์ ์ฐจ์ด : y์ถ์ด loss, accuracy
๐ loss?
- ์์ธกํ ๊ฐ๊ณผ ์ค์ ๊ฐ ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๋ํ๋ด๋ ์งํ
๐๏ธ ์ํธ๋กํผ?
๐งโ๐ ํ์ต, ์์ธก ๋ฐ์ดํฐ์
๋๋๊ธฐ(์ค์ต)
-
์ ๋ต๊ฐ์ด์ ์์ธก ํด์ผํ ๊ฐ = Churn
-
๋ฌธ์ ์ ๋ต์ ๋๋๊ธฐ
- X(๋ฌธ์ ) : ๋
๋ฆฝ๋ณ์, 2์ฐจ์ ํ๋ ฌ
- y(์ ๋ต) : ์ข
์๋ณ์, 1์ฐจ์ ๋ฒกํฐ
- X, y ํ์ ์๊ฐ ๊ฐ์์ง ํ์ธ(์ค์!!!!!)
-
ํ์ต๊ณผ ์์ธก์ผ๋ก ๋๋๊ธฐ
- X_train : ์ํ์ ๊ธฐ์ถ๋ฌธ์
- y_train : ๊ธฐ์ถ๋ฌธ์ ์ ๋ต
- X_test : ์ค์ ๋ฌธ์
- y_test : ์ค์ ๋ฌธ์ ์ ๋ต
-
train_test_split
๋ฌด์์๋ก ๋ฐ์ดํฐ์
์ train๊ณผ test๋ก ๋๋
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
stratify
: ๋ณดํต ๋ฒ์ญํ ๋ ์ธตํํ์ง์ผ๋ก ๋ฒ์ญํ๊ธฐ๋ ํจ
sklearn.model_selection.StratifiedKFold
๐๏ธ Training ๋ฐ์ดํฐ๋ฅผ ๋๋ ๋ ์กฐ์ฌํด์ผํ ๊ฒ
- ํ์ต ๋ชจ๋ธ์ ๋ง๋ค์๋๋ฐ ์ ํ๋๊ฐ 99%๊ฐ ๋์ฌ ๊ฒฝ์ฐ? (์ค์๋๋ฌธ์ด๋ผ๋ฉด)
- ์ ๋ต์ ํ์ต ๋ฐ์ดํฐ์ ํฌํจ์ํค๋ฉด ์ ๋๋ก ํ์ตํ๊ธฐ ์ด๋ ค์
- ๋ฐ์ดํฐ ๋์! (Data Leakage)
- ๋ฏธ๋์ ๋ํ ์ ํ ์ ์ ์๋ ์ ๋ณด๊ฐ ๋ชจ๋ธ ํ์ต์์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ
- test๋ฐ์ดํฐ๊ฐ ํ์ต์ ์ด์ฉ๋ ๊ฒฝ์ฐ
- ๋์๊ฐ ๋ฐ์ โ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ ๊น์ง๋ ๋ชจ๋ธ์ด ์ ํํด๋ณด์ But ๊ทธ ์ดํ์๋ ๋ชจ๋ธ์ด ๋งค์ฐ ๋ถ์ ํ
- ํด์ปคํค(๊ฒฝ์ง๋ํ) ํน์ฑ ์, ๋ฆฌ๋๋ณด๋ ์ ์ถ์ ์ํด ์ถ๋ก ์ ์ฌ์ฉ๋ test๋ฐ์ดํฐ ๋ค์ด ์ฌ์ ์ ์ฃผ์ด์ง์ง๋ง, ์ค์ ๋ชจ๋ธ์ ์๋น์คํ๋ ํ๊ฒฝ์์๋ test ๋ฐ์ดํฐ๋ค์ด ์ด๋ ํ ๋ฐ์ดํฐ๋ค์ด ๋ช ๊ฐ๊ฐ ์
๋ ฅ์ผ๋ก ๋ค์ด์ฌ์ง ๋ชจ๋ฅธ๋ค.
๐ฅ One-Hot-Encoding
-
Ordinal encoding = ๋ฒ์ฃผํ ๋ณ์์ ์ ํด์ง ์์๋ ๋ฑ๊ธ์ด ์์ ๋ ์ฌ์ฉ
-
One hot encoding = ๋ฒ์ฃผํ ๋ณ์์ ๋ชจ๋ ๊ฐ์ ์ด์ง์(binary)๋ก ํํํ๋ ๋ฐฉ๋ฒ
-
์ฅ๋จ์
|
์ฅ์ |
๋จ์ |
Ordinal encoding |
๋ฒ์ฃผํ ๋ณ์์ ์์๋ ๋ฑ๊ธ์ ๋ฐ์ํ์ฌ ์ ๋ณด๋ฅผ ์ ์ง |
๋ณ์์ ํฌ๊ธฐ๊ฐ ์์์ ์๊ด ์์ด ์ซ์๋ก ํํ๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ ํ์ต์ ๋ฌธ์ ๊ฐ ๋ฐ์ |
One hot encoding |
๋ฒ์ฃผํ ๋ณ์์ ๋ชจ๋ ๊ฐ์ ๊ณ ๋ คํ์ฌ ์ ๋ณด๋ฅผ ์ ์ง |
๋ณ์๊ฐ ๋ง์์ง์๋ก ๋ณํ๋ ๋ณ์์ ์ฐจ์์ด ๋์ด๋๊ฒ ๋์ด ๋ชจ๋ธ ํ์ต์ ํ์ํ ๋ฐ์ดํฐ์ ์์ด ์ฆ๊ฐ |
- ์ฅ์
- ๋ชจ๋ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉ๊ฐ๋ฅ
- ๋ฒ์ฃผํ ๋ณ์๋ฅผ ์ซ์ํ ๋ณ์๋ก ๋ณํํ๋ฉด์, ๋ชจ๋ธ์ด ๋ณ์์ ์๊ด๊ด๊ณ๋ฅผ ์ดํดํ ์ ์๋ค.
- ๋ฒ์ฃผํ ๋ณ์์ ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ง์์ ธ๋ ์ ์ฉํ ์ ์๋ค.
- ๋จ์
- ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ง์ ๊ฒฝ์ฐ, ๋ณ์์ ์ฐจ์์ด ๋์ด๋จ
- ๋ฒ์ฃผํ ๋ณ์์ ์นดํ
๊ณ ๋ฆฌ ์๊ฐ ์ ์ ๊ฒฝ์ฐ, ํฌ์ ํ๋ ฌ์ด ์์ฑ
- ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ์๋์ ๋ถ๋ด๋ ์ ์๋ค.
-
๋์์ฃผ๋ ํจ์ pd.get_dummies
๐ฅ pd.get_dummies
pandas.get_dummies โ pandas 1.5.3 documentation
-
One-hot-encoding
-
X_raw์ ์ปฌ๋ผ InternetService
์์ DSL์ผ ๋ 1์ธ ์ปฌ๋ผ์ ์์ฑํ๊ธฐ ์ํ ์ฝ๋
X_raw['InternetService_DSL'] = X_raw['InternetService'] == 'DSL'
-
์๋๋ ์ด๋ ๊ฒ ํ๋ํ๋ ํด์ค์ผํ์ง๋ง ๋~๋ฌด ๋ง์์ ๋ค ๋ชปํจ
-
train, test์ Feature๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค์ด์ฃผ์ผ ํ์ต๊ณผ ์์ธก์ ํ ๋ ์ค๋ฅ๊ฐ ์๊ธฐ์ง ์์
- train, test๋ฅผ ๊ฐ๊ฐ ๋ฐ๋ก ์ธ์ฝ๋ฉํ๋ฉด, ์ปฌ๋ผ ์์, ๊ฐ์๊ฐ ๋ฌ๋ผ์ง ์ ์์.
- ๋ค๋ฅธ feature๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ตํ์ ๋, ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ train์ผ๋ก ๋ง์ถฐ์ฃผ๋ ์์
์ด ํ์
- scikit-learn์์ fit, transform์ ํ ๋, train์๋ง fit์ ํด์ฃผ๋ ์ด์ ๋ ๊ฐ๋ค.
-
์์์ ์ปฌ๋ผ์ _
์ธ๋๋ฐ๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์ ์ถ๊ฐํด์ฃผ๊ณ ๋ฌธ์๋ฅผ ์์์ ๋ฐ๊ฟ์ค!
-
์์นํ ๋ณ์๋ ์ธ์ฝ๋ฉ์ด ๋ ์ ์์!!
์ซ์ํํ๋ก ๋ ๋ฌธ์์ด์ ์ซ์ํ์ผ๋ก ๋ฐ๊ฟ์ค๋๋ค.
df["TotalCharges"] = pd.to_numeric(df["TotalCharges"], errors="coerce")
-
One-hot-encoding์ ํ ๋ ๊ฒฐ์ธก์น๋ ๊ณ ๋ คํ์ง ์์.
- ๊ณ ๋ คํ๊ณ ์ ํ ๋ ๋ฌธ์๋ฐ์ดํฐ๋ก
NA
ํน์ ์์
์ผ๋ก ๋ง๋ค์ด์ค์ผํจ
๐ซ ๊ฒฐ์ธก์น๋ฅผ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
๐ค ํฌ์ํ๋ ฌ?
- ํ๋ ฌ์ ์์ ์ค์ ๋ง์ ํญ์ด
0
์ธ ํ๋ ฌ
- ์ค์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ์๊น
๐ฒ ๊ฒฐ์ ํธ๋ฆฌ ํ์ต๋ฒ
๊ฒฐ์ ํธ๋ฆฌ ํ์ต๋ฒ
-
์ฅ์
- ํธ๋ฆฌ๋ฅผ ํ๋๋ง ๋ง๋ค์ด์ ์๋๊ฐ ๋น ๋ฆ
- ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค
- ์๋ฃ๋ฅผ ๊ฐ๊ณตํ ํ์๊ฐ ๊ฑฐ์ ์๋ค
- ํ์ดํธ ๋ฐ์ค ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค
- ์์น์๋ฃ์ ๋ฒ์ฃผ ์๋ฃ ๋ชจ๋์ ์ ์ฉํ ์ ์๋ค.
- ์์ ์ ์ด๋ค.
-
๋จ์
- ๋ฐ์ดํฐ๊ฐ ์กฐ๊ธ ๋ณํด๋ ์์ ํ ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์
- Overfitting : ํธ๋ฆฌ๋ฅผ ๋๋ฌด ๋ง์ด ๋ง๋ค๋ฉด ๊ณผ์ ํฉ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ ํ๊ตฌ์กฐ ๋ฐ์ดํฐ๋ฅผ ์์ธกํ ๋ ๋ณต์กํ๋ค.
- ๋ณ์์ ์ค์๋๋ฅผ
๐ฒ RandomForest