In [1]데이터 불러오기
import pandas as pd
df = pd.read_csv('./data/standard_scaler_clear_difference.csv')
df.head()
| 항목 | 값 |
|---|---|
| 베이스 모델 | 직접 구현 (처음부터 학습) |
| 크기 · 변형 | KNeighborsClassifier(n_neighbors=5), 나머지 기본값 (유클리드 거리, uniform 가중치) |
| 리비전 | scikit-learn 1.9.0 (uv.lock 기준) |
| 아키텍처 | 학습 샘플을 저장해 두고, 새 샘플과 가장 가까운 5개의 다수결로 0/1 예측 |
| 학습 방식 | 처음부터 학습 (지도학습) |
| 프롬프트 · 에이전트 구성 | 해당 없음 |
| 항목 | 값 |
|---|---|
| 확보 방식 | 공개 데이터셋 그대로 (수업 제공 합성 데이터로 보임 [미확인]) |
| 출처 | 수업 자료 data/standard_scaler_clear_difference.csv |
| 직접 수집 내용 | 해당 없음 |
| 이용 조건 확인 | 해당 없음 (수업 자료) |
| 규모 | 500행 × 8열 (employee_id, age, annual_salary_krw, satisfaction_score, overtime_hours_month, commute_distance_km, tenure_years, left_company) |
| 분할 | train 400 / test 100 (8:2, stratify, 시드 20) |
| 레이블·클래스 분포 | 퇴사(1) 252 / 잔류(0) 248 (CSV를 세어 확인) |
| 전처리 | employee_id, tenure_years 제거. r2는 StandardScaler (train으로 fit, test는 transform만) |
| 개인정보·민감정보 처리 | 해당 없음 (가상의 직원 데이터) |
| 항목 | 값 |
|---|---|
| 하이퍼파라미터 | n_neighbors=5 |
| 에폭 / 스텝 | 해당 없음 |
| 학습 시간 | [미확인] (노트북에 시간 측정이 없음) |
| 하드웨어 | CPU (scikit-learn). 장비 이름 [미확인] |
| 프레임워크 | scikit-learn 1.9.0, pandas 3.0.5 |
| 시드 · 재현 방법 | train_test_split(test_size=0.2, random_state=20, stratify=y) |
| 지표 | 값 | 테스트셋 | 비교 대상 (baseline 등) |
|---|---|---|---|
| accuracy (r1, 스케일링 없음) | 0.46 | test 100 | - |
| accuracy (r2, StandardScaler) | 1.00 | test 100 | r1 |
X = df.drop(columns=["employee_id", "tenure_years"])에 정답 열 left_company가 그대로 남아 있습니다(노트북 출력의 X 표에 left_company 열이 보임). 스케일링 후에는 이 열의 거리 차이가 다른 열과 비슷한 크기가 되어, 사실상 정답을 보고 맞힌 셈입니다.annual_salary_krw(수천만~1억대)가 거리 계산을 거의 독차지해서 다른 피처(정답 열 포함)가 무시되었기 때문으로 보입니다.측정 안 함.
| 장비 | 장비 이름 | 배치 크기 | 지연 시간 (샘플당, p50 / p95) | 처리량 (샘플/초) | 메모리 사용 |
|---|---|---|---|---|---|
| CPU | [미확인] | - | 측정 안 함 | 측정 안 함 | 측정 안 함 |
| GPU | 해당 없음 (scikit-learn은 CPU 전용) | - | - | - | - |
같은 모델을 설정·분류기를 바꿔 2번 측정한 기록입니다. ★ r2이(가) 대표 결과(맨 위 수치)입니다.
| 실행 | 날짜 | 바뀐 점 | scaler | n_neighbors | split_seed | accuracy | 학습 시간 |
|---|---|---|---|---|---|---|---|
| r1 스케일링 없음 | 2026-08-25 | 기준: 원본 값 그대로 입력 | none | 5 | 20 | 46.0% | - |
| ★ r2 StandardScaler | 2026-08-25 | train으로 fit한 StandardScaler를 train·test에 적용 | StandardScaler | 5 | 20 | 100.0% | - |
fit하고 test에는 transform만 적용 (노트북 주석)left_company를 X에서 빼고 r1·r2를 다시 측정하기. 그래야 스케일링 효과만 따로 볼 수 있음import pandas as pd
df = pd.read_csv('./data/standard_scaler_clear_difference.csv')
df.head()
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
X = df.drop(columns=["employee_id", "tenure_years"])
y = df["left_company"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=20, stratify=y)
print(X_train.shape)
print(X_test.shape)
(400, 6) (100, 6)
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)
result = model.predict(X_test)
accuracy = accuracy_score(result, y_test)
accuracy
0.46
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train_scaled, y_train)
result = model.predict(X_test_scaled)
accuracy = accuracy_score(result, y_test)
accuracy
1.0
같은 과제·데이터셋으로 학습한 모델이 생기면 여기에서 비교됩니다.