진단은 입학시험보다 길 찾기에 가깝다
프로그램을 작성할 수 있어도 로봇용 실행 환경·단위 변환·제어 오차 부호·평가 자료 분리에서 막힐 수 있다. 반대로 행렬 계산에 익숙해도 모델이 기대하는 배열 축이나 실제 import 위치를 아직 확인해 보지 않았을 수 있다. 일반 코딩 경험은 이 교재의 출발점이며 변수·반복문 문법을 다시 시험하는 것이 목적은 아니다. 자신이 이미 할 수 있는 것과 필요한 도구·도메인 보충을 나누는 데 진단을 사용한다.
짧은 진단은 적은 문항에서 얻는 잠정 관찰이다. 한 문제의 정답이 한 분야의 숙달을 증명하지 않고, 낯선 도구 출력 때문에 틀렸다고 그 분야를 배울 수 없다는 뜻도 아니다. 결과·이유·도움의 종류를 남기고 입력을 바꿔 다시 확인한다. 숫자는 맞았지만 단위를 설명하지 못했다면 계산과 물리량 해석을 따로 기록하는 편이 다음 학습에 유용하다.
개발환경 진단은 실행과 자료의 계약을 본다
인터프리터는 Python 프로그램을 실행하는 실제 프로그램이고 패키지는 그 실행이 불러 쓰는 코드다. 합성 기록에서 실행은 /envA/bin/python인데 패키지 설치는 /envB/lib/python3.12/site-packages에 이루어졌다고 하자. 설치 성공 문구만으로 실행 A가 그 패키지를 사용한다고 볼 수 없다. 실행 경로·버전, 같은 인터프리터의 설치 도구와 실제 import 파일 위치를 연결해 확인한다. IDE나 notebook 실행기에서도 실제 선택을 확인해야 한다.
Python venv 공식 설명처럼 가상환경은 기존 Python을 기반으로 패키지 환경을 분리한다. 새 Python 버전을 자동 설치하거나 운영체제·장치까지 복제하는 수단은 아니다. 여기서는 환경을 실제 변경하지 않고 두 경로의 불일치와 추가 확인을 설명하면 된다. 패키지를 다시 설치하는 명령을 외운 것이 아니라 실패 지점을 좁힐 수 있는지 관찰한다.
배열의 shape는 축마다 원소가 몇 개인지 나타낸다. AI의 tensor도 다차원 수치 자료를 표현하지만 축의 물리적 의미까지 자동으로 정하지는 않는다. 두 시점의 x/y/z 위치를 저장한 (2,3)은 행=시간, 열=좌표라고 약속할 수 있다. 입력이 mm이고 소비자가 m를 요구하면 100 mm를 0.100 m로 바꾸는 변환도 필요하다. shape만 (2,3)으로 맞췄다고 단위가 바뀌지 않는다.
생산자가 좌표×시간인 (3,2)를 제공하면 같은 여섯 값이어도 소비자의 시간×좌표 계약과 다르다. 축을 실제 의미에 맞게 바꿔야 하며 원소 개수만 같게 재배치하면 된다고 추측하지 않는다. 데이터의 수치 표현인 dtype과 CPU/가속기 등 위치인 device, 채널 순서·단위도 후속 도구 단위에서 함께 확인한다. NumPy 배열 설명은 shape와 dtype을 구분한다. 이 진단은 NumPy 설치나 모델 실행 없이 축 이름과 필요한 단위 변환을 적는 활동이다.
수학·제어·ML은 서로 다른 실패를 드러낸다
수학 진단은 단위가 같은지와 계산의 의미를 본다. 지연 0.12 s를 ms로 쓰려면 1 s=1000 ms이므로 0.12×1000=120 ms다. 숫자 120만 쓰면 길이인지 시간인지 구분되지 않는다. 로봇 수학을 배우기 전에 복잡한 행렬부터 요구하지는 않지만 어떤 양을 계산하는지 설명하는 습관은 지금부터 필요하다. 단위를 반대로 변환하면 같은 물리량을 표현했다는 조건부터 깨진다.
제어 진단은 목표와 관측을 연결하는 방향을 본다. 가상 일차원 위치에서 목표 2, 관측 3이면 오차를 목표−관측으로 정의했을 때 -1이다. 양의 이동은 위치를 증가시키고 음의 이동은 감소시킨다고 가정한다. 따라서 목표 쪽은 감소 방향이다. 이는 힘이나 실제 모터 명령을 결정한 것이 아니다. 관측의 최신성·제한·모형 적용 조건은 별도로 확인해야 한다. 다른 오차 정의를 사용할 수는 있지만 이번 문제 도중 정의를 몰래 바꾸면 부호를 비교할 수 없다.
ML 진단은 평가가 어떤 새 조건을 확인하는지 본다. 한 번의 시연에서 연속 프레임 100장을 뽑으면 이웃 프레임은 장면·동작이 비슷할 수 있다. 이를 무작위로 나눠 학습과 평가에 함께 넣은 결과를 새 시연의 성능으로 해석하면 평가 목표와 분할이 어긋날 수 있다. 새 시연을 보려면 동일 시연이 양쪽에 섞이지 않도록 그룹을 생각한다. 새 사람·물체·시간·환경 중 무엇에 일반화할지에 따라 분할도 달라진다.
scikit-learn 그룹 교차검증 안내는 관련 표본을 묶어 나누는 도구와 조건을 설명한다. 그룹 분리 하나가 모든 환경 차이를 해결하거나 충분한 시연 수를 만들어 주지는 않는다. 어떤 자료로 전처리 통계를 정했는지 등 평가 정보 누수도 별도다. 이 진단은 실제 모델 성능을 측정하는 것이 아니라 평가 주장의 범위를 판정하는 활동이다.
답·도움·다음 확인을 나누어 기록한다
각 분야에 처음 답과 이유, 사용한 도움, 수정 뒤 설명의 세 칸을 만든다. 도움은 단위표 보기·풀이 한 단계 보기·전체 해설 읽기처럼 구체적으로 쓴다. 해설 뒤 이해한 것도 성과지만 처음부터 독립 수행했다고 바꾸지는 않는다. 권장 기록은 독립 수행, 도움 후 설명 가능, 다시 학습 필요다. 독립 수행도 그 문항의 범위라는 조건을 붙인다.
세 분야가 맞고 한 분야가 미해결이라면 총점 3/4로 공백을 덮지 말고 약한 분야와 다음 보충을 적는다. 같은 답을 외워 맞힌 상태와 이유를 설명한 상태도 구분한다. 이 표는 자격 인증이나 사람 전체를 평가하는 점수가 아니다. 낮은 기록 때문에 후속 단위를 강제로 잠그거나 모든 내용을 처음부터 다시 들을 필요도 없다. 해당 과제에 필요한 부분을 근거에 따라 보충한다.
선행학습은 진단 근거와 연결한다
실행/패키지 경로는 M01.01 실행 환경과 M01.02 Python 환경·배열·로그, native 빌드 문제는 같은 모듈의 ABI·CMake 단위를 보충한다. 단위·벡터 해석은 M02.01 수학 기초, 오차와 피드백은 M07.03 PID, 자료 분리는 M11.03 학습/검증/시험 분리·데이터 누수와 연결한다. 각 단위의 선수 안내를 읽고 필요한 범위를 고른다.
보충 뒤에는 같은 숫자 답을 재현하는 대신 경로·축/단위, 물리량 숫자, 목표/관측 위치, 평가 그룹을 바꿔 이유를 설명한다. 아직 어렵다면 도움을 더 받아도 된다. 중요한 것은 합계가 아니라 무엇을 어떤 근거로 할 수 있고 다음에는 무엇을 확인할지를 쓰는 것이다. 한 번의 변형 통과도 전체 분야나 실제 장비 프로젝트의 완성을 의미하지 않는다.