๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ข
๋ฅ๋ค์ ์์๋ณด์.

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
X = ๋ฐ์ดํฐํ๋ ์.drop('์ข
์๋ณ์ ์ด', axis=1)
y = ๋ฐ์ดํฐํ๋ ์['์ข
์๋ณ์ ์ด']
# ๋ชจ๋ ์ํฌํธ
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=ํ
์คํธ ๋ฐ์ดํฐ์
๋น์จ, random_state=๋๋ค ์๋๊ฐ)
๋ฐ์ดํฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ์ ์ค๋ช ํ ์ ์๋ ์ง์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
- ๋จ์ ์ ํ ํ๊ท ๋ถ์(๋จ์ผ ๋ ๋ฆฝ๋ณ์ ์ด์ฉ)
- ๋ค์ค ์ ํ ํ๊ท ๋ถ์(๋ค์ค ๋ ๋ฆฝ๋ณ์ ์ด์ฉ)
# ๋ชจ๋ ์ํฌํธ
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train) # ํ์ต
pred = lr.predict(X_test) # ์์ธก
- ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ํจํด์ ํ์ ํ์ฌ ๊ฒฐ์ ๊ท์น์ ๋๋ฌด ๊ตฌ์กฐ๋ก ๋ํ๋ธ ๊ธฐ๊ณํ์ต ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋จํ๊ณ ๊ฐ๋ ฅํ ๋ชจ๋ธ ์ค ํ๋๋ก, ๋ถ๋ฅ์ ํ๊ท ๋ฌธ์ ์ ๋ชจ๋ ์ฌ์ฉ
- ์ํธ๋กํผ: ๋ฐ์ดํฐ์ ๋ถํ์ค์ฑ์ ์ธก์ . ํน์ ์์ฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋์์ ๋ ์ํธ๋กํผ๊ฐ ์ผ๋ง๋ ๊ฐ์ํ๋์ง๋ฅผ ๊ณ์ฐํ์ฌ ์ ๋ณด๋ฅผ ์ป์. ์ ๋ณด ์ด๋์ด ๋์ ์์ฑ์ ์ ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋๋๊ฒ ๋จ
- ์ง๋๊ณ์: ๋ฐ์ดํฐ์ ๋ถ์๋๋ฅผ ์ธก์ ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ. ์์๋ก ์ ํ๋ ๋ ๊ฐ์ ์์๊ฐ ์๋ก ๋ค๋ฅธ ํด๋์ค์ ์ํ ํ๋ฅ ์ ๋ํ๋. ์ง๋ ๋ถ์๋๊ฐ ๋ฎ์์๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋ถ๋ฆฌ๋ ๊ฒ
- ์์ฌ ๊ฒฐ์ ๋๋ฌด๋ ์ค๋ฒํผํ ์ด ๋งค์ฐ ์ ์ผ์ด๋จ
- ์ค๋ฒํผํ (๊ณผ์ ํฉ): ํ์ต๋ฐ์ดํฐ์์๋ ์ ํํ๋ ํ ์คํธ๋ฐ์ดํฐ์์๋ ์ฑ๊ณผ๊ฐ ๋์ ํ์์ ๋งํจ.
- ์ค๋ฒํผํ ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ
- ์ฌ์ ๊ฐ์ง์น๊ธฐ: ๋๋ฌด๊ฐ ๋ค ์๋ผ๊ธฐ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ์ถ๋ ๋ฐฉ๋ฒ
- ์ฌํ ๊ฐ์ง์น๊ธฐ: ๋๋ฌด๋ฅผ ๋๊น์ง ๋ค ๋๋ฆฐ ํ์ ๋ฐ์์๋ถํฐ ๊ฐ์ง๋ฅผ ์ณ ๋๊ฐ๋ ๋ฐฉ๋ฒ
# ๋ชจ๋ ์ํฌํธ
from sklearn.tree import DecisionTreeRegressor
dtr = DecisionTreeRegressor()
dtr.fit(X_train, y_train) # ํ์ต
pred = dtr.predict(X_test) # ์์ธก
sns.scatterplot(x=y_test, y=pred) # ์์ธก ์๊ฐํ
# ํธ๋ฆฌ ์๊ฐํ
from sklearn.tree import plot_tree
plot.figure(dtr, max_depth=ํ๋ฉด์ ๋ณด์ฌ์ค ๊น์ด, font_size=ํฐํธ ์ฌ์ด์ฆ)
plt.show()
- ๋ ์ค์ ํ๋๋ฅผ ๊ฒฐ์ ํ๋ ๋ฌธ์ (์ด์ง ๋ถ๋ฅ)๋ฅผ ํ๊ธฐ ์ํ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
- ์ด์ง ๋ถ๋ฅ์ ์ ํฉํ์ง๋ง, ๋คํญ ๋ถ๋ฅ ๋ฌธ์ ์๋ ํ์ฅ๋ ์ ์์
- ์์ธก(x) ๋ถ๋ฅ(o)
- ์ข ์ ๋ณ์ Y๋ ๋ ๊ฐ์ง ๋ฒ์ฃผ ์ค ํ๋๋ฅผ ๊ฐ์ง(์: 0 ๋๋ 1)
- ํน์ ๋ฒ์ฃผ์ ์ํ ํ๋ฅ ์ ์์ธกํ๋ ๊ฒ์ด ๋ชฉํ
- ์ผ๋ฐํ ์ ํ ๋ชจ๋ธ์ ์ผ์ข ์ผ๋ก, ๋ ๋ฆฝ ๋ณ์์ ์ ํ ์กฐํฉ์ ๋ก์ง์คํฑ ํจ์(์๊ทธ๋ชจ์ด๋ ํจ์)๋ฅผ ์ฌ์ฉํ์ฌ ์ข ์ ๋ณ์์ ๋ํ ํ๋ฅ ์ ์๋ก ๋ณํ (0~1)
- ํ๋ฅ ์ ๋ฐ๋ผ 0๊ณผ 1๋ก ๋ถ๋ฅํ๋๋ฐ ์๊ณ๊ฐ ์ค์ ์ ํตํด 0๊ณผ 1๋ก ๋๋๋ ๊ธฐ์ค์ ์ ํด์ค ์ ์์
# ๋ชจ๋ ์ํฌํธ
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train, y_train) # ํ์ต
pred = lr.predict(X_test) # ์ํน
# ์ ํ๋ ๊ตฌํ๊ธฐ
from sklearn.metrics import accuracy_score
accuracy_score(y_test, pred)
# ๋ฐ์ดํฐ ์ ๋ฆผ ํ์ ๋ฑ์ ์ด์ ๋ก accuracy_score๋ง์ผ๋ก๋ ํ์ต์ด ์ ๋๋ก ๋๋ ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ํ์ธ ํ์
๋ฐ์ดํฐํ๋ ์[์ข
์๋ณ์].value_counts()
- ๋จธ์ ๋ฌ๋์์ ๋ง์ด ์ฌ์ฉ๋๋ ์์๋ธ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ฉฐ, ๊ฒฐ์ ๋๋ฌด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจ
- ํ์ต์ ํตํด ๊ตฌ์ฑํด ๋์ ๊ฒฐ์ ๋๋ฌด๋ก๋ถํฐ ๋ถ๋ฅ ๊ฒฐ๊ณผ๋ฅผ ์ทจํฉํด์ ๊ฒฐ๋ก ์ ์ป๋ ๋ฐฉ์
- ๋๋ค ํฌ๋ ์คํธ์ ํธ๋ฆฌ๋ ์๋ณธ ๋ฐ์ดํฐ์์ ๋ฌด์์๋ก ์ ํ๋ ์ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ตํจ
- ๊ฐ ํธ๋ฆฌ๊ฐ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ผ๋ก ํ์ต๋์ด ๋ค์ํ ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ฉฐ ๋ชจ๋ธ์ ๋ค์์ฑ์ด ์ฆ๊ฐํจ
- ๊ฐ๊ฐ์ ํธ๋ฆฌ๊ฐ ์์ธกํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์๊ฒฐ ๋๋ ํ๊ท ์ ์ด์ฉํ์ฌ ์ต์ข ์์ธก์ ์ํํจ
- ๋ถ๋ฅ์ ํ๊ท ๋ฌธ์ ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํนํ ๋ฐ์ดํฐ๊ฐ ๋ง๊ณ ๋ณต์กํ ๊ฒฝ์ฐ์ ๋งค์ฐ ํจ๊ณผ์ ์ธ ๋ชจ๋ธ
- ์ฑ๋ฅ์ ๊ฝค ์ฐ์ํ ํธ์ด๋ ์ค๋ฒํผํ ํ๋ ๊ฒฝํฅ์ด ์์
# ๋ชจ๋ ์ํฌํธ
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=2024)
rf.fit(X_train, y_train)
pred = rf.predict(X_test)
proba = rf.predict_proba(X_test)
# ์ฒซ๋ฒ์งธ ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํ ์์ธก ๊ฒฐ๊ณผ
proba[0]