종마다 크기와 체형의 분포를 직접 정해 물고기 데이터를 만들고, 규칙 기반부터 딥러닝까지 여덟 모델에 넣어 봅니다. 같은 데이터에서 모델마다 경계를 긋는 방식과 점수가 어떻게 다른지 바로 비교할 수 있습니다.
자로 잴 때 생기는 오차입니다. 크게 하면 비율 특성(꼬리 비율 등)이 먼저 흐려집니다.
설정은 이 브라우저에 자동 저장됩니다.
가상의 물고기를 만들면 학습한 모델이 바로 판정합니다. 결과 그림의 과녁이 이 물고기입니다.
데이터 CSV는 ①의 "CSV 받기"로 받습니다. 코드는 지금 고른 모델과 특성을 scikit-learn으로 옮긴 것입니다.
대각선(테두리 칸)이 맞힌 수, 나머지가 틀린 수입니다. 재현율 = 그 종을 실제로 몇 %나 찾았는지.
실험실이 무엇을 계산하는지, 결과를 어떻게 읽는지 정리했습니다.
물고기 한 마리마다 종의 분포에서 모양을 뽑고, 그 모양으로 나머지 크기를 계산합니다.
비율들도 종마다 작은 편차로 흔들고, 마지막에 모든 측정값에 측정 잡음(%)을 곱합니다. 기본값 "7종 전체"는 실제 데이터와 같은 규모(1,554마리)와 종별 마리 수를 쓰고, 종별 평균과 편차는 Kaggle Fish Market 데이터(https://www.kaggle.com/datasets/vipullrathod/fish-market) 원본 158마리에서 구했습니다.
내려받은 코드를 내 데이터로 바꾸거나 다른 모델로 바꾸고 싶을 때, 아래 프롬프트를 복사해 AI 도우미에게 붙여 넣으세요. [ ] 칸을 채우고, 해당하지 않는 항목은 지우면 됩니다.
# 역할 너는 파이썬(pandas, scikit-learn)으로 분류 모델을 가르치는 친절한 데이터 과학 튜터이자 코드 리뷰어다. # 배경 나는 "물고기 분류" 해설 페이지(또는 실험실)에서 코드를 내려받았다. 이 코드를 [데이터 변환 / 모델 변환 / 둘 다] 하고 싶다. - 지금 데이터: [파일 이름], 행 수 [ ] - 기본 열: species(정답), weight_g, length1_cm, length2_cm, length3_cm, height_cm, width_cm, source, seed_id - 내 데이터라면 열 이름과 뜻을 여기에 적는다: [ ] - 실행 환경: [코랩 / 주피터 / 로컬 파이썬 3.x], scikit-learn 버전 [ ](모르면 "모름") - 내 수준: [입문 / 중급 / 실무] # 하고 싶은 일 (해당하는 번호만 남기고 [ ]를 채운다) ## A. 데이터 변환 A1. 다른 데이터로 바꾸기: 파일 [경로], 정답 열 [ ], 특성 열 [ ] A2. 정리: 결측치 [삭제 / 평균 대체 / 중앙값 대체], 이상치 [예: 무게 0인 행 삭제], 완전히 같은 행 [삭제 / 유지] A3. 새 특성 만들기: [예: 체형 비율 = height_cm / length2_cm, 꼬리 비율 = (length3_cm - length2_cm) / length2_cm] A4. 변환: 범주형 [원-핫 / 순서형], 스케일링 [표준화 / 최소-최대 / 없음], 로그 변환할 열 [ ] A5. 데이터 증강: 원본마다 복제본 [n]개, 크기 배율 ~ 정규분포(평균 1, 표준편차 [0.12]), 무게는 배율의 세제곱에 비례, 모양 비율에는 표준편차 [3%]의 잡음. 원본 ID 열(seed_id)을 반드시 만든다. A6. 클래스 고르기·합치기: [예: 농어와 로치 두 종만 / 흰송어와 로치를 한 클래스로] ## B. 모델 변환 B1. 모델 바꾸기: 지금 [ ] → [KNN / 의사결정나무 / 로지스틱 회귀 / 선형 SVM / 커널 SVC / MLP / 랜덤 포레스트 / 그래디언트 부스팅] B2. 하이퍼파라미터: 직접 지정 [ ] 또는 탐색 [GridSearchCV / RandomizedSearchCV], 탐색 범위 [ ] B3. 학습 과정: 학습률 [ ], 에포크 [ ], 배치 크기 [ ], 조기 종료 [사용 / 안 함] B4. 규제: [L1 / L2], 강도 [C 또는 alpha 값] B5. 앙상블: [보팅(모델 목록) / 배깅(기본 모델, 개수) / 부스팅(종류, 단계 수)] B6. 여러 모델 비교표: [비교할 모델 목록] # 반드시 지킬 것 1. 분할: 층화(stratify)로 나눈다. 증강·복제 데이터라면 원본 ID(seed_id) 단위로 나눈다(StratifiedGroupKFold 또는 GroupShuffleSplit). 이유를 주석 한 줄로 적는다. 2. 누수 방지: 스케일링, 특성 선택, 결측치 처리는 Pipeline 안에서 학습 데이터로만 fit한다. 시험 세트는 모든 선택이 끝난 뒤 한 번만 쓴다. 3. 재현성: random_state=0처럼 난수를 고정한다. 4. 기준선: 가장 많은 클래스만 답할 때의 정확도를 함께 출력한다. 5. 출력: 교차검증 정확도(평균 ± 표준편차), 시험 정확도, 혼동행렬, classification_report(클래스별 정밀도·재현율·F1). 6. 원래 코드에서 바뀐 줄에는 "# [변경]" 주석을 단다. 7. 주석과 설명은 한국어로, 입문자도 따라올 수 있게 쓴다. 8. 코랩에서 바로 실행되도록 import를 모두 넣고, 필요하면 파일 올리기 칸(google.colab.files.upload)을 포함한다. # 답변 형식 1. 무엇을 왜 바꿨는지 3~5줄 요약 2. 그대로 실행되는 전체 코드 한 덩어리 (주피터 칸으로 나눌 곳에 "# %%" 표시) 3. 결과를 읽는 법과 주의할 점 (과적합·누수·클래스 불균형 신호) 4. 다음에 해 볼 만한 실험 2~3가지 # 코드 [여기에 내려받은 .py 코드나 노트북 코드를 붙여 넣는다]
프롬프트의 "반드시 지킬 것"은 이 자료에서 다룬 원칙(층화 분할, 원본 단위 분할, 누수 방지, 기준선 비교)을 그대로 옮긴 것입니다. AI가 만든 코드도 이 원칙을 지켰는지 확인하세요.
코드를 직접 실행하려면 물고기 데이터 CSV(fish_market_x10.csv)를 받아 코드와 같은 폴더(또는 Colab)에 올리세요. 강사·튜터라면: 확인 문제의 채점 기준과 과제 예시 답안은 교육자용 정답 페이지 (3)에서 볼 수 있다.
「3 물고기 분류 실험실 ① 모델 바꿔 보기」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.