실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
bike-weather-rentals.csv 는 일별 날씨와 총 대여량 731행이다. temp_c 는 섭씨 기온, humidity 는 습도(%), windspeed 는 풍속이다.
total 을 반응변수로, temp_c·humidity·windspeed 세 변수를 설명변수로 하는 선형회귀를 절편을 포함해 적합한다.
(1) temp_c 의 회귀계수를 소수점 넷째 자리까지, (2) 결정계수 R² 를 소수점 넷째 자리까지, (3) humidity 의 회귀계수를 소수점 넷째 자리까지 반올림해 각각 답안에 적는다.
describe() 로 기온·습도·풍속의 범위를 확인한다. 계수의 크기를 해석하려면 단위를 알아야 한다.sm.add_constant(X) 가 const 열을 만든다.sm.OLS(y, X).fit(). 인자 순서가 (반응변수, 설명변수) 로, sklearn 의 fit(X, y) 와 반대 다.model.params[이름]·model.rsquared. model.summary() 를 찍어 표에서 눈으로 옮겨 적는 것보다 이름으로 꺼내는 쪽이 안전하다.import pandas as pd
import statsmodels.api as sm
df = pd.read_csv('bike-weather-rentals.csv')
x = sm.add_constant(df[['temp_c', 'humidity', 'windspeed']])
model = sm.OLS(df['total'], x).fit()
print(round(model.params['temp_c'], 4))
print(round(model.rsquared, 4))
print(round(model.params['humidity'], 4))계수 161.5955 는 "습도와 풍속이 같을 때 기온이 1℃ 오르면 그날 대여가 약 162건 는다" 는 뜻이다. humidity 계수가 음수(−30.9967)인 것은 습할수록 덜 탄다는 방향이다. R² 0.4609 는 세 날씨 변수로 대여량 변동의 약 46% 를 설명한다는 뜻이며, 나머지는 요일·계절·추세 같은 다른 요인이다. add_constant 를 빼면 절편 없는 모형이 되어 계수가 197.6243 으로, R² 는 0.899 로 뛴다 — 절편 없는 모형의 R² 는 정의 자체가 달라 높아 보일 뿐 좋아진 것이 아니다.
add_constant 없이 적합했다절편이 없으면 회귀선이 원점을 지나도록 강제된다. 계수가 161.5955 에서 197.6243 으로 바뀌고, R² 는 0.4609 에서 0.899 로 올라간다 — 절편 없는 모형의 R² 는 계산식 자체가 달라 서로 비교할 수 없는 값이다. 숫자가 좋아 보여서 더 위험하다.summary() 표에는 R-squared 와 Adj. R-squared 가 나란히 있어 옮겨 적다 헷갈린다. 설명변수가 적으면 둘의 차이가 작아 더 잘 속는다 — 여기서는 0.4609 와 0.4587 이다.