실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
train.csv 는 세포 측정값 398건과 정답 target(1 = 악성, 0 = 양성)이고, test.csv 는 정답이 없는 171건이다.
texture_mean·smoothness_mean 에 결측이 있고, 범주형 clinic(A/B/C)에도 결측이 있다. 두 종류 모두 처리해야 한다.
test.csv 의 각 행에 대해 target 이 1일 확률을 예측한다.
id 와 pred 두 열만 가진 result.csv 를 현재 폴더에 저장한다. 행은 171개, pred 는 0 이상 1 이하의 숫자여야 하며, 이름 없는 index 열이 있으면 안 된다.
제출하면 앱이 파일의 열·행·값을 검사한 뒤 실제 ROC AUC 를 계산한다. 행 순서는 채점에 영향을 주지 않는다.
shape 와 isna().sum() 으로 어느 열에 결측이 있는지, 수치인지 범주인지 나눈다.get_dummies 를 두 자료에 따로 돌리면 범주 개수가 달라 열이 어긋난다. reindex(columns=학습열, fill_value=0) 으로 맞춘다.predict_proba(x)[:, 1] 이 "1일 확률" 이다. predict 는 0/1 라벨이라 이 문항의 지표에 맞지 않는다.to_csv('result.csv', index=False). index=False 를 빠뜨리는 것이 이 유형의 1번 실패다.import pandas as pd
from sklearn.ensemble import RandomForestClassifier
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
features = [column for column in test.columns if column != 'id']
numeric = [column for column in features if column != 'clinic']
# 채우는 값은 학습 자료에서만 얻는다
medians = train[numeric].median()
x_train = train[numeric].fillna(medians)
x_test = test[numeric].fillna(medians)
train_dummies = pd.get_dummies(train['clinic'].fillna('unknown'), prefix='clinic')
test_dummies = pd.get_dummies(test['clinic'].fillna('unknown'), prefix='clinic')
# 평가 자료에 없는 범주가 있어도 열 구성을 학습 자료에 맞춘다
test_dummies = test_dummies.reindex(columns=train_dummies.columns, fill_value=0)
x_train = pd.concat([x_train, train_dummies], axis=1)
x_test = pd.concat([x_test, test_dummies], axis=1)
model = RandomForestClassifier(n_estimators=200, random_state=42)
model.fit(x_train, train['target'])
proba = model.predict_proba(x_test)[:, 1]
pd.DataFrame({'id': test['id'], 'pred': proba}).to_csv('result.csv', index=False)결측을 채울 중앙값과 범주 열 구성을 모두 학습 자료에서 정한 뒤 평가 자료에 그대로 적용한다. 평가 자료로 중앙값을 구하거나 get_dummies 를 따로 돌리면 열이 어긋나 예측이 무너진다. to_csv 의 index=False 를 빠뜨리면 이름 없는 첫 열이 생겨 형식 검사에서 걸린다. 이 기준 풀이의 ROC AUC 는 약 0.983 이며, 다른 모형이라도 규격을 지키면 채점된다.
index=False 를 빠뜨렸다to_csv 는 기본적으로 DataFrame 의 index 를 이름 없는 첫 열로 함께 쓴다. 공식 가이드도 "자동 생성되는 index 칼럼 제거" 를 규격으로 적는다. 형식 검사에서 바로 걸린다.predict 는 라벨을, predict_proba 는 확률을 준다. 라벨만 내면 순위 정보가 사라져 ROC AUC 가 눈에 띄게 낮아진다 — 형식은 통과하므로 지표를 보기 전에는 모른다.