24๋ 6์ 22์ผ์ ๋น ๋ถ๊ธฐ 8ํ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค!
์๋๋ ๋ฌธ์ ๊น๋จน๊ธฐ ์ ์ ๊ธฐ๋กํด์ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋๋ฐ
๊ธ์์ผ๋ ๋ฐค์์ ๋ง์ง๋ง์ผ๋ก ์ฝ๋ ๋ณต์ตํ๊ณ ํ ์์ผ์ ์ํ๋ณด๊ณ ์์ ์ฐ๋ฌ์ ธ ์๋๋ผ ์ด์ ์ผ ์ฌ๋ฆฌ๋ค์

์ฌ์ง ์ค๋ช ์ ์ ๋ ฅํ์ธ์.
ํ๊ธฐ๋ถํฐ ๋งํ์๋ฉด ์ ๋ ์ฌ์ ์ต๋๋ค! ๋ชจ๋ฅด๋ ๋ฌธ์ ํ๋๋ ์์ด ์ ๋ถ ํ์์ต๋๋ค!
๊ทผ๋ฐ ๊ฐ์ฑ์ ํด๋ณด๋ 3์ ํ์ ์๋ฌธ์ ํ๋ ํ๋ฆฐ๊ฑฐ ๊ฐ์์, ๊ทธ๋๋ 1์ ํ 2์ ํ ๋ค ๋ง์์ 70์ ์ผ๋ก ํฉ๊ฒฉ์ ๋ณด์ฅ๋ ๊ฒ ๊ฐ์ต๋๋ค
๋ฐ์ดํฐ ๋ง๋ ๊ธฐ์ถ ๋ณต์์ ๋นํ๋ฉด ์ง~~์ง ์ฌ์ ์ด์ ใ ใ ใ ..
๊ณต๋ถ๊ธฐ๊ฐ์ ๋ฑ 7์ผ์ด์์ต๋๋ค
7์ผ ๊ณต๋ถํ๊ฒ์น๊ณค ์ ๋ง ์ฝ๊ฒ ๋์์ต๋๋ค ์๋? ์ผ๋จ 1์ ํ์ ์๊ฐ๋ฌธ์ ์ ๋์ค๊ธธ ๋น์๋๋ฐ ์ ๋์์ต๋๋ค ์ด๊ฒ ์ ์ผ ๊น๋ค๋ก์ ๊ฑฐ๋ ์...
7์ 5์ผ์ ๊ฐ์ฑ์ ๊ฒฐ๊ณผ ๋์ค๋๋ฐ ํฉ๊ฒฉํ๋ฉด 7์ผ๋ง์ ํฉ๊ฒฉํ๋ ๋ฒ ๊ธ์ฐ๋ฌ ์ค๊ฒ ์ต๋๋ค!
๋ค์์ ์ค๊ธฐ ๋ณด์๋ ๋ถ๋ค ๋ฒผ๋ฝ์น๊ธฐ ํฌ๊ธฐ ํ์ง๋ง์ญ์ผ 7์ผ์ด๋ฉด ๋ฉ๋๋ค..
๋ฐ์ดํฐ ๋ง๋๊ณผ ์ ๊ฐ ๋ธ๋ก๊ทธ์ ๊ธฐ๋กํ ๊ฒ๋ง ๋ณต์ตํ์๋ฉด 8ํ๋ ํธ๋๋ฐ ์ง์ฅ ์์ผ์ค ๊ฒ ๊ฐ์ต๋๋ค.
์ง์ง๋ก ์ ๋ธ๋ก๊ทธ์ ์ด๋ ต๋ค๊ณ ์ฝ๋ ์ค๋ช ํด๋์ ๋ถ๋ถ์ด 8ํ ๊ธฐ์ถ๋ณด๋ค ํจ์ฌ ์ด๋ ค์์
์ ๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์์ ์ํ ํ๊ธฐ๋ค์ ๋ณด๊ณ ๋ง์ ๋์ ๋ฐ์๊ธฐ์ ๋ค์ ํ์ฐจ์ ์ํ ๋ณด์ค ๋ถ๋ค์ ์ํด ๊ธ์ ๋จ๊ธฐ๊ฒ ์ต๋๋ค
์ ๊ฐ ์ํ์ฅ์์ ์จ์ ํ์๋ ์ฝ๋์ ๋๋ค!
์ํ์์ ์ด ์ ์ถ ๋ต์์ 6/11๋ก ์ ์ถ๋๋ฉด ๋ฉ๋๋ค! 5๊ฐ๋ ๋ฌธ์ ๋ผ์ 6๊ฐ๊ฐ ๋ต์์ ๋๋ค
๊ธฐ์ต์ด ๊ฐ๋ฌผ๊ฐ๋ฌผํด์ ์ซ์๊ฐ ๊ฐ์ ๊ฑด ์ ํํ์ง ์์ ์๋ ์์ต๋๋ค
<1์ ํ>
# 1๋ฒ ๋ฌธ์
1) ๋๋ฅ๋ณ ํ๊ท ๋งฅ์ฃผ์๋น๋์ด ๋ง์ ๊ณณ์ ๊ตฌํ์์ค
2) ์์์ ๊ตฌํ ๋๋ฅ์์ ๋ค์ฏ๋ฒ์งธ๋ก ๋งฅ์ฃผ ์๋น๋์ด ๋ง์ ๋๋ผ๋ฅผ ๊ตฌํ์์ค
3) 2๋ฒ์ ํด๋นํ๋ ๋๋ผ์ ๋งฅ์ฃผ ์๋น๋์ ์ ์๋ก ์์ฑํ์์ค
# 1๋ฒ ์ ๋ต
313
(์์ผ๋๋ ๋งฅ์ฃผ ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ )
**1๋ฒ ์๋ฌธ์ ๋ฅผ ์๋ชป ์ฝ๊ณ ํท๊ฐ๋ฆฌ์ ๋ถ๋ค์ด ์กฐ๊ธ ๊ณ์๋๋ผ๊ตฌ์
ํ๊ท ๋งฅ์ฃผ ์๋น๋์ด ๊ฐ์ฅ ํฐ ๋๋ผ๊ฐ ์ํ ๋๋ฅ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋๋ค >> ์ด๋ ๊ฒ AF๋ฅผ ๊ณ ๋ฅด์ ๋ถ์ด ๊ฝค ๋์๋ ใ ใ
๋๋ฅ๋ณ๋ก ๋ฌถ์ด์ ๊ทธ ๋๋ฅ ๋งฅ์ฃผ์ ์๋น๋์ ํ๊ท ์ ๊ตฌํ ๋ค์์ ๊ฐ์ฅ ํฐ ๋๋ฅ์ ๊ณจ๋ผ์์ผ ํฉ๋๋ค
๋๋ฅ๋ผ๋ฆฌ 'Groupby'๋ฅผ ๋จผ์ ํ์ด์ผ ํด์!!
์๋ ํ์ผ์ ์ค์ ์ํ์์ ๋์จ ๋งฅ์ฃผ ํ์ผ๊ณผ ๋์ผํฉ๋๋ค!
์ฝ๋ฉ์์ ์ค์ ๋ก ํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค
df.groupby('continent')['beer_servings'].mean().sort.values(ascending=False)
cond=df['continent'=='EU']
df2=df[cond].sort_values('beer_servings', ascending=Falase).reset_index
df2.iloc[4]
# index๊ฐ 0๋ฒ๋ถํฐ ์์ํ๋๊น 0,1,2,3,4์ผ๋ก 4๋ฒ ์ธ๋ฑ์ค์ ๊ฐ์ด 5๋ฒ์งธ๋ก ๋งฅ์ฃผ ์๋น๋์ด ๋ง์ ๋๋ผ๋ผ๊ณ ์๊ฐ ๋์ด์ 4๋ฒ ๊ฐ์ ธ์์ต๋๋ค.
df2=df[cond].sort_values('beer_servings', ascending=Falase)
# ์ฌ๊ธฐ๊น์ง๋ง ์น์
๋ 5๋ฒ์งธ ๊ฐ๊น์ง๋ ๋ณด์ด๋ 5๋ฒ์งธ ์์์ธ๊ฑฐ ํ์ธํด์ Ireland๋ก ์ฐพ์๋ ๋ฉ๋๋ค
# 2๋ฒ ๋ฌธ์
๊ด๊ด๊ฐ ๋น์จ = ๊ด๊ด์ ๊ตญ ์ธ์ / (๊ด๊ด+๊ณต๋ฌด ์ ๊ตญ์ธ์)
(์ด๊ฑด ๋ง๋์ง ๊ธด๊ฐ๋ฏผ๊ฐํด์ ๊ด๊ด๊ฐ ๋น์จ ์ ์๊ฐ ๊ธฐ์ต์๋จ.. ์ํผ ์ด๋ฐ์์ผ๋ก ์๊ฒผ์์)
1. ๊ด๊ด๊ฐ ๋น์จ์ด ๋๋ฒ์งธ๋ก ๋์ ๋๋ผ์ '๊ด๊ด' ์๋ฅผ a๋ผ๊ณ ์ ์ํ์์ค
2. ๊ด๊ด๊ฐ ์๊ฐ ๋๋ฒ์งธ๋ก ๋์ ๋๋ผ์ '๊ณต๋ฌด' ์๋ฅผ b๋ผ๊ณ ์ ์ํ์์ค
3. a+b์ ๊ฐ์ ๊ตฌํ์์ค
#2๋ฒ ์ ๋ต
239
(ํ์ฝฉ ๊ด๊ด+์ผ๋ณธ ๊ณต๋ฌด)
df['๊ด๊ด๊ฐ๋น์จ']=df['๊ด๊ด์
๊ตญ']/(df['๊ด๊ด์
๊ตญ']+df['๊ณต๋ฌด์
๊ตญ'])
df2=df.sort_values('๊ด๊ด๊ฐ๋น์จ', ascending=False).iloc[:1,]
print(df2['๊ด๊ด'])
# 'ํ์ฝฉ'์ด ๋๋ฒ์งธ๋ก ๋์๊ณ ๊ทธ ๋๋ผ์ ๊ด๊ด์ 74
df3=df.sort_values('๊ด๊ด์
๊ตญ', ascending=False).iloc[:1,]
print(df3['๊ณต๋ฌด'])
# '์ผ๋ณธ'์ด ๋๋ฒ์งธ๋ก ๋์๊ณ ๊ทธ ๋๋ผ์ ๊ณต๋ฌด ์ 165
print(a+b)
# ์ ๋ต 239
# 3๋ฒ ๋ฌธ์
Co ์นผ๋ผ๊ณผ Nmch ์นผ๋ผ์ ์ต๋-์ต์ scaler ๋ฅผ ์ํํ ๋ค์ ๊ฐ ์นผ๋ผ์ ํ์ค ํธ์ฐจ๋ฅผ ๊ตฌํ์์ค
co ์นผ๋ผ์ ํ์ค ํธ์ฐจ = a, Nmch ์นผ๋ผ์ ํ์คํธ์ฐจ = b
a-b๊ฐ์ ๊ตฌํ์์ค
์ต๋์ต์ ์ ๊ทํ๋ ๋ฌธ์ ์ ์ ์ํด์คฌ์ต๋๋ค
=( Xn - Xmin ) / (Xmax - Xmin)
# 3๋ฒ ์ ๋ต
-0.026
(๋ฌธ์ ์์ a-b ๋ผ๊ณ ์์ ์ ์ํด์คฌ์ด์ ๊ผญ ๋ง์ด๋์ค๊ฐ ๋ถ์ด์ผ ํฉ๋๋ค. '์ฐจ์ด'๋ผ๊ณ ์๊ฐํด์ ์ ๋๊ฐ ๋ถ์ฌ์ ํ๋ฆฌ์ ๋ถ๋ค์ด ๊ฝค ๋์์)
sklearn.preprocessing import MinMaxScalerํด๋ ๋ต์ ๊ฐ๊ฒ ๋์จ๋ค๊ณ ํฉ๋๋ค!
co_min=df['co'].min()
co_max=df['co'].max()
nmch_min=df['nmch'].min()
nmch_max=df['nmch'].max()
df['co_scaler']= (df['co']-co_min) / (co_max-co_min)
df['nmch_scaler']= (df['nmch']-nmch_min) / (nmch_max-nmch_min)
a=df['co_scaler'].std()
b=df['nmch_sclaer'].std()
print(a-b)
## ๋ต -0.026
## sklearn ์ฌ์ฉ ์์
from sklearn.preprocessing import MinMaxScaler
mscaler = MinMaxScaler()
df['co']=mscaler.fit_transform(df[['co']])
df['nmch']=mscaler.fit_transform(df[['nmch']])
<2์ ํ>
์ข ์๋ณ์: ์งํ์ฒ ์ญ ์ธ์์, ํ๊ฐ์งํ: mae
์ข ์๋ณ์๊ฐ ์ธ์์์ฌ์ ์ฐ์์ด๋ฏ๋ก ํ๊ท๋ฌธ์ ์๊ณ ๋ฒ์ฃผํ ์นผ๋ผ๋ค์ด ์์ด์ ์ํซ ์ธ์ฝ๋ฉ ์ฌ์ฉํ์ต๋๋ค
mae=104 ์ ๋ ๋์์ต๋๋ค
name ์นผ๋ผ์ ์ถ๊ฐํ ์ง ๋ง์ง ๊ณ ๋ฏผํ๋๋ฐ ์ด๊ฑฐ ๋นผ๋ฉด x_test ๊ฐ์๊ฐ 2064๊ฐ ์ ๋์์ ํฌํจ์์ผ์ ํ์ต๋๋ค
name ๋นผ๊ณ ๊ตฌํ์ ๋ถ๋ค์ mae๊ฐ 400๋๊ฐ ๋์๋ค๋ค์ ๋ฃ๊ณ ํ๊ฒ ๋ง๋๋ฏ
(๋ฌธ์ ์์ ์ต์ข ์ ์ถ๋ ์นผ๋ผ์ ํฌ๊ธฐ๊ฐ 2064๋ผ๊ณ ๊ณ ์งํด์คฌ์.. ์ซ์๋ ์ ํํ์ง ์๋ค๋ง)
์ถ๋ ฅํ๋ค์์ ์ ์ถ ๋ฒํผ ๊ผญ ๋๋ฌ์ผํฉ๋๋ค!!
x_train=train.drop(columns=['์ธ์์'])
y_train=train['์ธ์์']
x_test=test
# ํ,์ด ๊ฐ์ ๋ง๋์ง ํ์ธ
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
# info > category๋ object ์๋์ง ํ์ธ > object ์์ > ์ํซ ์ธ์ฝ๋ฉ ํ์
print(x_train.info())
print(x_test.info())
print(y_train.info())
# describe ์ด์์น ํ์ธ > min, max ๋น๊ตํด์ ์ด์์น ์์ผ๋ฉด ๋์ฒด > ์ด์์น ์์
print(x_train.describe())
print(x_test.describe())
#๊ฒฐ์ธก์น ํ์ธ > ๊ฒฐ์ธก์น ์์
print(x_train.isnull().sum())
print(x_test.isnull().sum())
print(y_train.isnull().sum())
#๋ณ์์ฒ๋ฆฌ(์ํซ ์ธ์ฝ๋ฉ)
x_train=pd.get_dummies(x_train)
x_test=pd.get_dummies(x_test)
#์ํซ ์ธ์ฝ๋ฉ ์ ๋๋ก ๋๋์ง ํ์ธ
print(x_train.info())
print(x_test.info())
# ํ๋ จ,๊ฒ์ฆ ๋ฐ์ดํฐ ๋ถํ
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(x_train,
y_train,
test_size=0.2)
#์ ๋๋ก ๋ถํ ๋๋์ง ๊ฐ์ ํ์ธ
print(x_train.shape)
print(x_val.shape)
print(y_train.shape)
print(y_val.shape)
# ํ์ต ์ํค๊ธฐ
from sklearn.ensemble import RandomForestRegressor
model=RandomForestRegressor()
model.fit(x_train,y_train)
# ํ๋ จ ๋ฐ์ดํฐ ๊ฒ์ฆ
y_pred=model.predict(x_val)
from sklearn.metrics import mean_absolute_error
mae=mean_absolute_error(y_val, y_pred)
print(mae)
# x_test๊ฐ ๋ฃ๊ธฐ
y_result=model.predict(x_test)
#๋ฐ์ดํฐ ์ ์ถ
pd.DataFrame({'pred':y_result}).to_csv('result.csv',index=False)
#์ ๋๋ก ์ ์ถ ๋๋์ง ๋ถ๋ฌ์ ์ฝ์ด๋ณด๊ธฐ
df2=pd.read_csv("result.csv")
print(df2.head())
print(len(df2)) = 2064
<3์ ํ>
## 3-1-1๋ฒ ๋ฌธ์
๋ก์ง์คํฑ ํ๊ท๋ฅผ ์ ์ฉํ์ฌ ์ ์ํ์ง ์์ ๋ณ์์ ๊ฐ์๋ฅผ ์ฐ์์ค
์์ํญ์ ์ถ๊ฐํด์ผ ํจ.
์ข ์๋ณ์:๊ณ ๊ฐ์ดํ์ง์
## 3-1-1 ์ ๋ต
12
statsmodels ๋ฐฉ์์ผ๋ก ํ์ด์ 0.05๋ณด๋ค ํฐ ๊ฐ์ ๊ณ ๋ฅด๋ฉด ๋๋ ๋ฌธ์ ์์ต๋๋ค
ํ๊ท์์์๋ ๊ท๋ฌด๊ฐ์ค:ํ๊ท์์ ํด๋น ๋ณ์๊ฐ ์ํฅ๋ ฅ์ด ์๋ค vs ๋๋ฆฝ๊ฐ์ค:ํ๊ท์์ ํด๋น๋ณ์๊ฐ ์ํฅ๋ ฅ์ด ์๋ค ์ ๋๋ค
๊ทธ๋ฌ๋ฏ๋ก 0.05 ๋ณด๋ค ์์ผ๋ฉด ๋๋ฆฝ๊ฐ์ค ์ฑํ,
0.05๋ณด๋ค ํฌ๋ฉด ๊ท๋ฌด๊ฐ์ค ์ฑํ(=ํด๋น ๋ณ์๊ฐ ์ํฅ๋ ฅ์ด ์๋ค=์ ์ํ์ง ์๋ค) ์ ๋๋ค.
x=df.drop(columns=['์ดํ์ง์']
y=df['์ดํ์ง์']
# ๋ก์ง์คํฑ ํ๊ท๋ชจํ ์ ํฉ
x=sm.add_constant(x)
model = sm.Logit(y, x).fit()
summary=model.summary()
print(summary)
## 3-1-2๋ฒ ๋ฌธ์
์ ์๋ฏธํ ๋ณ์๋ง์ ๋ ๋ฆฝ๋ณ์๋ก ํ์ฌ ๋ก์ง์คํฑ ํ๊ท๋ฅผ ๋ค์ ์ ์ฉํ๋ผ
๊ทธ ํ ํ๊ท๊ณ์์ ํ๊ท ์ ๊ตฌํ์์ค
## 3-1-2 ์ ๋ต
-0.456
(๊ทผ๋ฐ ์ ๋ 0.111๋ฅผ ์ด ๊ฒ ๊ฐ์ต๋๋ค.. ์์ง..? 3๊ฐ๋ง ๊ณจ๋ผ์ ๋ก์ง์คํฑ ํ๊ท ์ ํฉ์ํจ ๊ฒ ๊ฐ์๋ฐ.. ๊ธฐ์ต์ด ๊ฐ๋ฌผ๊ฐ๋ฌผ..)
+ ์ถ๊ฐ
๋ค์ ์๊ฐ๋ฌ๋๋ฐ ํ๊ท๊ณ์ ํ๊ท ์ ๊ตฌํ ๋ ์ ๋ ์์ํญ์ ๋นผ๊ณ ๊ตฌํ ๊ฒ ๊ฐ์ต๋๋ค b1+b2+b3 ์ ํ๊ท
๊ทผ๋ฐ bo+b1+b2+b3 ๊น์ง ํด์ ๊ตฌํด์ผ ํด์ -0.456์ด ๋ง์ ๊ฒ๋๋ค
## 3-1-3 ๋ฌธ์
3-1-2์์ ์ ์ฉํ ํ๊ท์์์ calls ๋ณ์๊ฐ 5์ฆ๊ฐํ๋ฉด ์ค์ฆ๋น๋ ๋ช๋ฐฐ ์ฆ๊ฐํ๋๊ฐ?
## 3-1-3 ์ ๋ต
7.919
# age์ weight ์ค์ฆ๋น ๊ณ์ฐ
odds_ratios = np.exp((model.params['calls'])*5)
print(odds_ratios)
np.exp(5*call ๋ณ์์ ํ๊ท๊ณ์ ๊ฐ) =7.919= ์ ๋ต
5 * np.exp(call ๋ณ์์ ํ๊ท๊ณ์๊ฐ) =7.563= ์ค๋ต
# 3-2-1 ๋ฌธ์
๋ค์ค์ ํ ํ๊ท๋ฅผ ์ ์ฉํ์ฌ ๊ฐ์ฅ ์ ์๋ฏธํ ๋ณ์์ ํ๊ท๊ณ์๋ฅผ ์ฐ์์ค
์ข ์๋ณ์:piq
๋ ๋ฆฝ๋ณ์:brain, height, weight
#3-2-1 ์ ๋ต
2.129
(brain์ ํ๊ท๊ณ์์ p value๊ฐ์ด ๊ฐ์ฅ ์์์ต๋๋ค > p value๊ฐ์ด ์์ผ๋ฉด ๊ท๋ฌด๊ฐ์ค ๊ธฐ๊ฐ, ๋๋ฆฝ๊ฐ์ค ์ฑํ)
# ๋ชจ๋ธ๋ง
x=df.drop(columns=['PIQ']
y=df['PIQ']
import statsmodels.api as sm
x = sm.add_constant(x)
model = sm.OLS(y, x).fit()
# y_pred = model.predict(x)
summary = model.summary()
print(summary)
# 3-2-2๋ฌธ์
๊ฒฐ์ ๊ณ์ ๊ฐ์ ๊ตฌํ์์ค
# 3-2-2์ ๋ต
0.313
(์ ๋ ์์ํจ ํฌํจํด์ ๊ฒฐ์ ๊ณ์ ๊ตฌํ์ต๋๋ค ๊ทผ๋ฐ ์์ํญ ์ถ๊ฐ ํ๋ฉด ์๋๋ค๋ ๋ง๋ค๋ ์๋ค์)
#3-3-3 ๋ฌธ์
์์์ ์ ํฉํ์ฌ ๋์จ ๋ค์ค์ ํํ๊ท์์์ ํค:70, ๋ชธ๋ฌด๊ฒ:150, ๋ํฌ๊ธฐ:90 ์ผ๋์ PIQ ๊ฐ์ ๊ตฌํ์์ค
#3-3-3 ์ ๋ต
PIQ= brain*90 + height*70 + weight*150 = 104.873
์ฝ๋๋ ์ ๊ฐ ์ง์ ํผ๊ฑฐ๋ผ ํ๋ฆด ์๋ ์๋ค๋ ์ ์ ์ํด์ฃผ์ธ์
๋ง์ ๋์์ด ๋์ จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค!
์ฝ๋๋ฅผ ๋ณต์ฌํ์ ์ ์ฐ๊ณ ์ถ์ผ์ ๋ถ์
๋ฌธ์ + ์์๋ต์์ ํ์ด์ฌ ํ์ผ๋ก ๋ง๋ค์ด์ ์ฒจ๋ถํ์ต๋๋ค!
๋น๋ฐ๋ฒํธ๊ฐ ๊ฑธ๋ ค์์ด์ ํ์ํ์ ๋ถ์
๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ :)