실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
wine-logit.csv 는 포도주 600개에서 alcohol·volatile_acidity·sulphates 와 고품질 여부 high_quality(품질 7 이상이면 1)를 뽑은 자료다.
high_quality 를 반응변수로, 세 변수를 설명변수로 하는 로지스틱 회귀를 절편을 포함해 적합한다.
(1) alcohol 의 회귀계수를 소수점 넷째 자리까지, (2) alcohol 의 오즈비를 소수점 넷째 자리까지, (3) volatile_acidity 계수의 p-value 를 소수점 여섯째 자리까지 반올림해 각각 답안에 적는다.
value_counts() 로 1 이 몇 개인지 본다. 600 중 115 라 한쪽으로 치우친 자료다.sm.add_constant(X) 가 상수열을 만든다.sm.Logit(y, X).fit(disp=0) — disp=0 은 수렴 로그를 끄는 것뿐이고 결과에는 영향이 없다.model.pvalues[이름]. 발문이 여섯째 자리를 요구했으므로 0.000478 까지 적는다.import pandas as pd
import numpy as np
import statsmodels.api as sm
df = pd.read_csv('wine-logit.csv')
x = sm.add_constant(df[['alcohol', 'volatile_acidity', 'sulphates']])
model = sm.Logit(df['high_quality'], x).fit(disp=0)
print(round(model.params['alcohol'], 4))
print(round(float(np.exp(model.params['alcohol'])), 4))
print(round(model.pvalues['volatile_acidity'], 6))add_constant 를 빼면 절편 없는 모형이 되어 계수가 전부 달라진다. 오즈비는 계수의 지수 exp(coef) 이며, alcohol 이 1 늘 때 고품질의 오즈가 약 2.19배가 된다는 뜻이다. 같은 모형에서 sulphates 의 p-value 는 0.18 로 유의하지 않은데, 설명변수를 빼면 남은 계수도 함께 움직인다.
add_constant 를 빼먹었다statsmodels 는 절편을 자동으로 넣지 않는다. 절편 없는 모형은 원점을 지나도록 강제되므로 세 계수가 모두 달라지고, 오류 없이 돌아가기 때문에 알아차리기 어렵다.