# 금융데이터분석전문가 과정 · 0교시
# AI가 짠 코드를 읽고, 고치고, 검증하기

저자 조봉수 · 봉수 SSGlobal(주) · ΦΡΥΚΤΩΡΙΑ ΠΛΗΡΟΦΟΡΙΩΝ · 2026-10-16 v1.0 (첫 수강생 대표의 실습 결과 반영)

> AI 이용 고지: 이 교재와 실습 코드는 AI(Claude)와 함께 만들었다. 실습 결과는 원자료와 코드로 누구나 다시 계산할 수 있다.

## 목차
0. 수업 전에 실제로 일어난 일 — 깨진 폴더 이름
1. 왜 0교시인가
2. 준비물
3. 실습 ① 그대로 돌려 보기
4. 실습 ② 한 줄 고치기 — 이동평균 기간
5. 실습 ③ 일부러 틀려 보기 — 구글 주가 '폭락' 두 번
6. 오늘 배운 검증 습관 세 가지
7. 면접 대비 / 현업 적용 체크리스트
8. 숙제

---

## 0. 수업 전에 실제로 일어난 일 — 깨진 폴더 이름
2026-10-16 첫 수업에서 버디(AI)가 만든 압축 파일을 대표가 윈도우에서 풀자, `0교시` 폴더가 `0援먯떆`로 깨져 보였다. 원인은 **인코딩**(글자를 숫자로 바꾸는 약속)의 차이였다. 버디의 작업 공간(리눅스)은 UTF-8로 이름을 썼고, 윈도우 압축 풀기는 CP949로 읽었다. **이 문제를 먼저 알아챈 것은 사람(대표)이었다.** AI가 만든 결과물도 사람이 직접 열어 봐야 문제가 보인다. 이것이 0교시 전체의 주제다.[^5]

## 1. 왜 0교시인가
자산운용사 AI 개발자 채용공고에는 이런 자격요건이 있다. "AI 코딩 도구를 적극 활용하되, **코드와 결과물을 스스로 이해하고 검증할 수 있는 자**."[^1] AI가 코드를 써 주는 시대에 사람에게 남는 일은 **읽고, 고치고, 맞는지 확인하는 것**이다. 0교시는 그 습관을 만든다.

## 2. 준비물
- 파이썬(3.10 이상). 설치는 1부 1강에서 다룬다.
- `lesson00.py` 파일과 `data/GOOGL_weekly_adjusted.csv`
- GOOGL 주간 시세 1,156주(2004-08-27 ~ 2026-10-15). Alpha Vantage에서 받은 실제 자료다.[^2] 홈페이지 수강생은 `get_data.py`로 직접 받는다.[^7]

## 3. 실습 ① 그대로 돌려 보기
명령 창에서 `python lesson00.py`를 실행한다. 결과는 다음과 같다.

| 항목 | 결과 |
|---|---|
| 읽은 주 수 | 1,156주 |
| 한 주 -30% 이하 폭락 | **0건** |
| 20주 이동평균보다 높았던 주 | 751/1,137주 (66%) |

코드는 네 덩어리로 되어 있다. ① 파일 읽기 → ② 날짜순 정렬 → ③ 폭락 찾기 → ④ 이동평균. 각 덩어리 위의 `# 주석`만 읽어도 무엇을 하는지 알 수 있다. **AI가 짠 코드는 먼저 주석과 덩어리 단위로 읽는다.**

## 4. 실습 ② 한 줄 고치기 — 이동평균 기간
맨 위 설정에서 `WINDOW = 20`을 `WINDOW = 5`로 바꾸고 다시 실행한다.

| 기간 | 이동평균보다 높았던 주 |
|---|---|
| 20주 | 751/1,137주 (66%) |
| 5주 | 678/1,152주 (59%) |

> **실제 수업에서 드러난 AI의 실수.** 버디가 교재를 만들며 시험할 때는 5주 결과가 675건이었다. 대표의 PC에서는 678건이 나왔다. 따져 보니 버디가 시험할 때 `WINDOW`와 `COLUMN` **두 설정을 한꺼번에** 바꿨기 때문이었다. 대표의 678건이 맞다. → **한 번에 하나만 바꾼다.**

숫자 하나를 고치면 결과가 바뀐다. 1부에서 배울 이동평균·볼린저밴드·RSI도 모두 이런 '기간' 숫자를 가지고 있다. **그 숫자를 누가, 왜 정했는지 묻는 것이 검증의 시작이다.**

## 5. 실습 ③ 일부러 틀려 보기 — 구글 주가 '폭락' 두 번
이번에는 `COLUMN = "adjusted close"`(수정주가)를 `COLUMN = "close"`(원주가)로 바꾼다.

| 쓴 가격 | 폭락 주 |
|---|---|
| 수정주가 | 0건 |
| 원주가 | **2건**: 2014-04-04 **-51.3%**, 2022-07-22 **-95.2%** |

구글 주가가 한 주에 95% 떨어졌을까? **아니다.** 두 날짜는 모두 주식분할이다.
- 2014년 4월: 의결권 없는 C주를 1주씩 나눠 준 분할[^3]
- 2022년 7월: 1주를 20주로 나눈 20대 1 분할[^4]

주식 수가 늘어나면 1주 가격은 그만큼 내려가지만, 주주의 재산은 그대로다. 원주가로 계산한 코드는 **오류 없이 돌아가면서 틀린 답을 낸다.** 이것이 2부 1강 '기업행사와 수정주가'의 출발점이다.

## 6. 오늘 배운 검증 습관 다섯 가지
1. **덩어리로 읽는다**: 주석을 따라 '무엇을 하는가'부터 본다.
2. **재현한다**: 다른 컴퓨터에서 돌려도 같은 숫자가 나오는지 본다. 대표 PC와 버디 결과는 1,156주·751건·349.22/348.83까지 같았다.
3. **한 번에 하나만 바꾼다**: 두 개를 같이 바꾸면 무엇 때문에 변했는지 모른다(위 675 대 678 사례).
4. **에러 메시지는 끝까지 읽는다**: `notepad`를 `noted`로 잘못 치자 "'noted'은(는) … 명령이 아닙니다"가 나왔다. 답이 메시지 안에 있다.
5. **이상한 결과는 실제 사건과 대조한다**: -95%는 '폭락'이 아니라 '분할'이었다. 코드가 에러 없이 돌았다고 맞는 답은 아니다.

> 덤: 20주 이동평균이 수정주가로는 348.83, 원주가로는 348.99로 조금 다르다. 수정주가에는 분할뿐 아니라 배당도 반영되기 때문이다(원자료의 dividend 열).

## 7. 면접 대비 / 현업 적용 체크리스트
**면접용 한 문장**: "AI가 짠 코드가 원주가를 쓰는 바람에 구글 분할 두 번이 -51%, -95% 폭락으로 잡히는 것을 직접 찾아냈고, 수정주가로 바꿔 0건이 되는 것을 확인했습니다."

**현업 적용 체크리스트**
- [ ] 우리 시스템의 수익률 계산은 원주가인가, 수정주가인가?
- [ ] 한 주(또는 하루) ±30% 넘는 변동을 기업행사 목록과 자동 대조하는가?
- [ ] AI가 만든 코드에 설정값(기간·기준)이 맨 위에 모여 있는가?

## 8. 숙제
`COLUMN`을 수정주가로 되돌린 뒤 `DROP_ALERT = -0.30`을 `-0.15`로 바꿔 돌려 보고, 새로 잡힌 주가 실제 사건인지 분할인지 찾아 적는다.

**첫 수강생(대표)의 답 — 2026-10-16 10:47**
| 날짜 | 수정주가 기준 하락 | 정체 |
|---|---|---|
| 2008-11-21 | **-15.4%** | **실제 사건.** 원주가 종가 310.02 → 262.43달러, 주중 최저 247.30달러. 다음 주 +11.6% 반등. 글로벌 금융위기 기간[^6] |

같은 '폭락'이라도 -95.2%(2022)·-51.3%(2014)는 가짜(분할), -15.4%(2008)는 진짜다. 가짜와 진짜를 가려내는 것이 금융 데이터 분석가의 '근본 원인 분석'이다.

---
[^1]: 마이다스에셋자산운용(주) AI팀 AI Agent 개발자 채용공고(2026-10) 지원자격. 대표가 공유한 화면 기준. [사실]
[^2]: Alpha Vantage TIME_SERIES_WEEKLY_ADJUSTED, 종목 GOOGL, 2026-10-16 수신. 실습 결과는 lesson00.py 실행값. [사실·계산]
[^3]: 2014-04-02 Class C 주식 배당 방식 분할(Zacks 2014-04-04, Motley Fool 2014-03-28). 원주가 -51.3%는 코드 계산값. [사실·계산]
[^4]: 2022-07-15 기준 20대 1 주식분할(Alphabet 2022년 2월 발표). 원주가 -95.2%는 코드 계산값. [사실·계산]
[^5]: 상생기록_20261016_금융데이터과정.md (00_업무일지). [사실]
[^6]: 수치는 원자료 2008-11-14·21·28 주간 행에서 직접 확인. '금융위기 기간'이라는 해석은 시기에 근거한 것이며, 그 주의 개별 사건과의 연결은 2부 2강에서 출처와 함께 다룬다. [사실·해석]
[^7]: 원자료 공개 방침: Alpha Vantage 이용약관의 재배포 범위를 확인하기 전까지 홈페이지에는 원자료 파일을 올리지 않고, 수강생이 무료 API 키로 직접 받는 get_data.py를 제공한다. [방침]
