import pandas as pd
#dir์ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์ ํ์ธ
print(dir(pd))
print(dir(pd.DataFrame))
import sklearn
print(sklearn.__all__)
# ์ ์ฒ๋ฆฌ ๋ฌด์์ ํ ์ ์์ง?
import sklearn.preprocessing
print(sklearn.preprocessing.__all__)
๋ฐ์ดํฐ ์ค์์ ๋๋ฌด ํฌ๊ฑฐ๋ ์์ ๊ฐ(์ด์์น) ๋ค์ ๊ฑธ๋ฌ๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
Q1 = df[col].quantile(0.25) # 1์ฌ๋ถ์์ (ํ์ 25%)
Q3 = df[col].quantile(0.75) # 3์ฌ๋ถ์์ (์์ 25%)
IQR = Q3 - Q1 # IQR: ์ค๊ฐ 50% ๋ฒ์
# ์ด์์น ๊ธฐ์ค ๋ฒ์
ํํ = Q1 - 1.5 * IQR
์ํ = Q3 + 1.5 * IQR
quantile()
: ๋ฐ์ดํฐ์ ๋ถ์์๋ฅผ ๊ณ์ฐํ ๋ ์ฌ์ฉํ๋ ํจ์print(train.info())
print(X_train.shape)
axis = 0
: ์๋๋ก ๋ด๋ ค๊ฐ๋ฉด์ ๊ณ์ฐ โ ์ด(์ธ๋ก)์ ๋ฐ๋ผ ๊ณ์ฐaxis = 1
: ์์ผ๋ก ๊ฐ๋ฉด์ ๊ณ์ฐ โ ํ(๊ฐ๋ก)์ ๋ฐ๋ผ ๊ณ์ฐํ์ ๊ฐ๋ก = ํ๊ฑฐ๋ ๊ฐ๋ก
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
print(df)
'''
A B
0 1 4
1 2 5
2 3 6
'''
print(df.sum(axis=0)) # โ ๊ฐ ์ด์ ํฉ
print(df.sum(axis=1)) # โ ๊ฐ ํ์ ํฉ
'''
A 6
B 15
0 5
1 7
2 9
'''
fillna()
# ํ๋ถ๊ธ์ก์ ๊ฒฐ์ธก์น๊ฐ ์๋ค๋ ๊ฑด ํ๋ถ์ ํ์ง ์์๋ค๋ ์๋ฏธ๋ก ๋ณผ ์ ์์
X_trian['ํ๋ถ๊ธ์ก'] = X_trian['ํ๋ถ๊ธ์ก'].fillna(0)
X_test['ํ๋ถ๊ธ์ก'] = X_test['ํ๋ถ๊ธ์ก'].fillna(0)
print(X_trian.isna().sum())
print(X_test.isna().sum())
Why? ๊ฐ์๋ ๊ฐ์ด ํฌ๋ค๊ณ ํด์ ์ค์ํ๋ค๋ ๋ป์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ค์ผ์ผ๋ก ๋ฐ๊ฟ์ผํ๋ค.
Min-Max Scaling(์ต์-์ต๋ ์ ๊ทํ) : 0~1 ์ฌ์ด๋ก ์ ๊ทํ
# ๐ง scikit-learn
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
num_columns = X_trian.select_dtypes(exclude='object').columns # ๋ฒ์ฃผํ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์์นํ ๋ณ์๋ง ๊ฐ์ ธ์ด
X_trian[num_columns] = scaler.fit_transform(X_trian[num_columns]) # fit_transform(): ํ์ต โ ์ ์ฉ
X_test[num_columns] = scaler.transform(X_test[num_columns]) # transform(): ์ ์ฉ
0 ~ 1
/ -1 ~ 1
Standard Scaling(ํ์คํ, Z-score ์ ๊ทํ): ์ ๊ท๋ถํฌ ๊ธฐ๋ฐ
(ํ๊ท : ฮผ, ํ์คํธ์ฐจ: ฯ)
# ๐ง scikit-lear
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
ํ๊ท 0, ํ์คํธ์ฐจ 1
why? "Sunny", "Rainy"๊ฐ ๊ฐ์ ๋ฌธ์์ด์ ์ปดํจํฐ๊ฐ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ซ์๋ฅผ ๋ถ์ฌํ ํ์๊ฐ ์์.
Label Encoding(๋ผ๋ฒจ ์ธ์ฝ๋ฉ):
['ํผ์', '์นํจ', '์ฝ๋ผ'] โ [0, 1, 2]
# ๐ง scikit-lear
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
X_trian['encoded'] = le.fit_transform(X_trian['food'])
X_test['encoded'] = le.fit_transform(X_test['food'])
One-Hot Encoding(์-ํซ ์ธ์ฝ๋ฉ):
'ํผ์' โ [1, 0, 0]
'์นํจ' โ [0, 1, 0]
'์ฝ๋ผ' โ [0, 0, 1]
pd.get_dummies(df['food'])
# ๐ง scikit-lear
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse_output=False)
cat_cols = ['C1', 'C2', 'C3', 'C4']
ohe.fit(X_trian[cat_cols])
# DataFrame = get_feature_names_out() : ์ด ์ด๋ฆ ๋ณต์
X_train_ohe = pd.DataFrame(ohe.transform(X_trian[cat_cols]), columns=ohe.get_feature_names_out(cat_cols), index=X_trian.index)
X_test_ohe = pd.DataFrame(ohe.transform(X_test[cat_cols]), columns=ohe.get_feature_names_out(cat_cols), index=X_test.index)
# ๊ธฐ์กด ๋ฒ์ฃผํ ๋ณ์ ์ ๊ฑฐํ๊ณ ์ธ์ฝ๋ฉ๋ ๊ฒ ์ถ๊ฐ
X_trian = pd.concat([X_trian.drop(columns=cat_cols), X_train_ohe], axis=1)
X_test = pd.concat([X_test.drop(columns=cat_cols), X_test_ohe], axis=1)
train_test_split()
X_trian
, y_train
์ผ๋ก ์งํํ๊ณ ,X_val
, y_val
์์ ํ๊ฐ์์ | ์ค๋ช |
---|---|
X_trian | ํ๋ จ์ฉ ์ ๋ ฅ ๋ฐ์ดํฐ (๋ ๋ฆฝ ๋ณ์) |
X_val | ๊ฒ์ฆ์ฉ ์ ๋ ฅ ๋ฐ์ดํฐ |
y_train | ํ๋ จ์ฉ ํ๊น ๊ฐ (์ข ์ ๋ณ์, ์: ์งํ์ฒ ์ด์ฉ์ ์) |
y_val | ๊ฒ์ฆ์ฉ ํ๊น ๊ฐ |
from sklearn.model_selection import train_test_split
X_trian, X_val, y_train, y_val = train_test_split(X_trian, y, test_size=0.2)
print(X_trian.shape, X_val.shape, y_train.shape, y_val.shape)
train_test_split(X_trian, y, test_size=0.2)
:X_trian
: ๋
๋ฆฝ ๋ณ์ ๋ฐ์ดํฐ (ํน์ง ๋ณ์)y
: ์ข
์ ๋ณ์ (๋ชฉํ๊ฐ, ์: ์งํ์ฒ ์ด์ฉ์ ์)test_size=0.2
: ์ ์ฒด ๋ฐ์ดํฐ ์ค 20%๋ฅผ ๊ฒ์ฆ์ฉ(validation)์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธfrom sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train) # ๋ชจ๋ธ ํ์ต
y_val_pred = model.predict(X_val)
LabelEncoder
โ A B C D E โ 0 1 2 3 4 โ inverser_transform
โ A B C D Efrom sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(X_trian, y_train)
y_val_pred = model.predict(X_val)
import statsmodels.api as sm
X = sm.add_constant(X) # ์์ํญ ์ถ๊ฐ
model =
print(f"ํ๊ท๊ณ์: {model.params[]}")
sm.Logit(y, X).fit()
sm.OLS(y, X).fit()
๊ธฐ์ค | ํ๊ท (Regression) | ๋ถ๋ฅ (Classification) |
---|---|---|
Y ๊ฐ์ ํํ | ์ฐ์ํ ์ซ์ (์ค์, ์ ์) | ๋ฒ์ฃผํ (ํด๋์ค, ๋ผ๋ฒจ) |
์: | ์ง๊ฐ, ์จ๋, ๋งค์ถ์ก, ์น๊ฐ ์ | ์คํธ/ํ, ์ง๋ณ ์ ๋ฌด, ์ซ์ 0~9 |
์์ธก ๊ฒฐ๊ณผ | ์ค์ ๊ฐ ์ถ๋ ฅ | ํด๋์ค(๋ฒ์ฃผ) ์ถ๋ ฅ |
ํ๊ฐ์งํ | MAE, MSE, RMSE, Rยฒ ๋ฑ | ์ ํ๋, F1-score, ROC-AUC ๋ฑ |
from sklearn.metrics import roc_auc_score, accuracy_score
auc_score = roc_auc_score(y_val, y_val_pred)
acc = accuracy_score(y_val, y_val_pred)
print(f'auc_score: {auc_score}, acc: {acc}')
from sklearn.metrics import root_mean_squared_error, r2_score
rmse = root_mean_squared_error(y_val, y_val_pred)
r2 = r2_score(y_val, y_val_pred)
print(rmse, r2)
y_pred = model.predict(X_test)
result = pd.DataFrame(y_pred, columns=['pred'])
result.to_csv('result.csv', index=False)
result = pd.read_csv('result.csv')
print(result)
correlations = df.corr(numeric_only=True)['Traget'].drop('Traget') # ์๊ธฐ์์ ์ ์ธ
# ๊ฐ์ฅ ๋์ ์๊ด๊ณ์์ ๋ณ์ ์ด๋ฆ
max_corr_var = correlations.abs().idxmax()
max_corr_value = correlations[max_corr_var]
print(f"๐ Target๊ณผ ๊ฐ์ฅ ์ ํ๊ด๊ณ๊ฐ ํฐ ๋ณ์: {max_corr_var}")
print(f"๐ข ์๊ด๊ณ์: {max_corr_value:.3f}")
๐ ์ด ๊ฐ์ F๋ถํฌ๋ฅผ ๋ฐ๋ฆ (์์ ๋๋ ๊ฐ ์ง๋จ์ ํ๋ณธ ์ โ 1
)
ฯโยฒ = ฯโยฒ
ฯโยฒ โ ฯโยฒ
var1 = group1.var()
var2 = group2.var()
# ๋ฐ์ดํฐ์ ๊ฐ์ -1 = ์์ ๋
dof_1 = len(group1) -1
dof_2 = len(group2) -1
print(dof_1, dof_2) # 51 63 โ group2: ๋ถ์, group1: ๋ถ๋ชจ
f_stat = var2/var1
print(round(f_stat,3))
var1 = group1.var()
var2 = group2.var()
n1 = len(group1)
n2 = len(group2)
pooled_var = ((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2)
print(round(pooled_var, 3))
mean1 = group1.mean()
mean2 = group2.mean()
t_stat = (mean1 - mean2) / np.sqrt(pooled_var * (1/n1 + 1/n2))
ttest_ind()
ttest_rel()
ttest_1samp()
model.pvalues.max()
from scipy import stats
ttest_result = stats.ttest_ind(group1, group2, equal_var=True)
์ด๋ค ์ฌ๊ฑด์ด ๋ฐ์ํ ํ๋ฅ ๊ณผ ๋ฐ์ํ์ง ์์ ํ๋ฅ ์ ๋น์จ์ ๋น๊ตํ๋ ๊ฐ์ด๋ค.
import numpy as np
coef = model.params['age']
# ์ค์ฆ๋น (odds ratio) = exp(ํ๊ท๊ณ์)
print(np.exp(coef))
"์ค์ฆ๋น๊ฐ ๋ช ๋ฐฐ๋ก ๋ณํํ๋๊ฐ?" โ ์ค์ฆ๋น๋ ๊ณ์์ ์ง์ํจ์:
5๋จ์๋ก ์ฆ๊ฐํ๋ฉด:
residual_deviance = -2 * model.llf
= model.deviance
print(model.llf)
ํ๊ท ๊ณ์๋ ๊ฐ ๋ ๋ฆฝ๋ณ์๊ฐ ์ข ์๋ณ์์ ๋ฏธ์น๋ ์ํฅ๋ ฅ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ธ๋ค.
ฮฒโ
: ์์ํญ (์ ํธ)ฮฒโ
: Brain์ ํ๊ท ๊ณ์ฮฒโ
: Height์ ํ๊ท ๊ณ์ฮฒโ = 1.2
์ด๋ฉด โ Brain ๊ฐ์ด 1 ๋จ์ ์ฆ๊ฐํ ๋, PIQ๋ ํ๊ท ์ ์ผ๋ก 1.2 ์ฆ๊ฐ.ฮฒโ = -3.5
์ด๋ฉด โ Height๊ฐ 1 ์ฆ๊ฐํ๋ฉด PIQ๋ ํ๊ท ์ ์ผ๋ก 3.5 ๊ฐ์.๋ชจ๋ธ์ด (0, 0)
์ ๋ฐ๋์ ์ง๋์ผ ํ๋ค๋ ์ ์ฝ์ด ์๊ธด๋ค. ์ฆ,
โ ๋ ๋ฆฝ๋ณ์๊ฐ ๋ชจ๋ 0์ผ ๋ ์ข ์๋ณ์๋ ๋ฌด์กฐ๊ฑด 0์ด์ด์ผ ํจ.
โ ๋ฐ์ดํฐ์ ๋ ์ ๋ง๋ ์ ์ฐํ ๋ชจ๋ธ์ ๋ง๋ค ์ ์๊ณ , ์ค์ ๋ฐ์ดํฐ ๋ถํฌ์๋ ๋ ์ ํฉํจ.
statsmodels
๋ scikit-learn
์์ ํ๊ท ๋ถ์ํ ๋, ๋ฐ๋์ ์์ํญ์ ํฌํจ์ํค๋ ๊ฒ ์ผ๋ฐ์ .statsmodels
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ํญ์ ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์, sm.add_constant(X)
๋ก ๋ช
์์ ์ผ๋ก ์ถ๊ฐํด์ค์ผ ํจ.