실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
train.csv 는 하루 한 줄인 자전거 대여 기록 585건과 그날의 총 대여량 total 이고, test.csv 는 total 이 없는 146건이다.
season·holiday·workingday·weather 는 범주를 나타내는 정수이고, temp_c·feel_c·humidity·windspeed 는 실제 단위로 바꾼 측정값이다. 결측은 없다.
test.csv 의 각 행에 대해 total 을 예측한다.
예측 결과를 pred 열 하나만 가진 result.csv 로 현재 폴더에 저장한다. 행은 test.csv 와 같은 순서로 146개이며, 자동 생성되는 index 열이 있으면 안 된다.
제출하면 앱이 형식을 검사한 뒤 RMSE 를 계산한다. 낮을수록 좋은 지표다. 공식 체험환경의 2유형 예시문제도 같은 지표를 쓴다.
train['total'].describe() 로 값의 크기를 안다. RMSE 는 원래 단위라서, 평균이 4,500 인 값에서 RMSE 1,200 이 어느 정도인지 바로 감이 온다.id 는 행에 붙인 번호다. 넣으면 모형이 그 번호와 정답 사이의 우연한 관계를 외워 버린다.model.predict(test[features]) — 학습에 쓴 것과 같은 열, 같은 순서 여야 한다.pd.DataFrame({'pred': pred}).to_csv('result.csv', index=False). 행을 정렬하거나 섞으면 순서 대응이 깨져 점수가 무너진다.import pandas as pd
from sklearn.ensemble import RandomForestRegressor
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
# id 는 설명변수가 아니다 — 행에 붙은 번호일 뿐이다
features = [column for column in test.columns if column != 'id']
model = RandomForestRegressor(n_estimators=200, random_state=42)
model.fit(train[features], train['total'])
pred = model.predict(test[features])
pd.DataFrame({'pred': pred}).to_csv('result.csv', index=False)분류가 아니라 회귀이므로 RandomForestClassifier 가 아닌 RandomForestRegressor 를 쓴다. RMSE 는 낮을수록 좋고 단위가 원래 값과 같다 — 이 기준 풀이의 RMSE 는 약 1229 이며, 하루 평균 대여량이 4,500 쯤이니 대략 27% 규모의 오차다. id 를 설명변수에 넣으면 모형이 행 번호에서 패턴을 찾아 학습 자료에만 맞는 규칙을 만든다. 제출 파일은 pred 한 열이고 행 순서가 평가 자료의 순서와 같아야 한다.
id 를 설명변수로 넣었다test.columns 를 그대로 쓰면 id 가 딸려 들어간다. 학습 자료에서는 id 가 정답과 우연히 맞아떨어져 성능이 좋아 보이지만, 평가 자료에서는 그 관계가 없어 RMSE 가 달라진다.