데이터 소스가 단위에 대해 거짓말을 할 때

26년 07월 10일

시가총액이 1,547조 달러?

이날은 데이터 소스가 거짓말을 하는 걸 발견한 날이다.

yfinance가 한국 주식 시가총액을 원화인데 달러로 표기하고 있었다.

SK하이닉스 시가총액이 1,547조 달러가 나왔다.

가격은 맞는데 시가총액이랑 배당률이 전부 잘못이었다.

그리고 보안 필터가 자기 스킬을 차단하는 아이러니도 겪었다.

투자 분석 에이전트로 SK하이닉스를 분석하고 있었다.

근데 시가총액이 1,547조 달러로 나왔다.

전 세계 GDP를 합쳐도 안 나오는 숫자다.

뭔가 잘못됐다는 걸 즉시 알 수 있었다.

원인을 추적했다.

yfinance가 한국 주식의 시가총액과 매출액을 원화 원래 값으로 반환하면서 달러로 라벨링하고 있었다.

SK하이닉스 시가총액은 1,547조 원인데, 이걸 달러라고 표기한 거다.

1,547조 원은 약 1.03조 달러다.

배당률도 완전히 잘못이었다.

SK하이닉스 배당률이 14%로 나왔다.

실제로는 1~2%다.

TSMC는 87%로 나왔다.

실제로는 1.5%다.

PBR도 98배로 나왔다.

실제로는 7~8배다.

가격은 맞다

근데 가격 자체는 정확했다.

주가, OHLCV, 거래량은 정상이었다.

잘못된 건 시가총액, 매출액, 배당률, PBR뿐이었다.

이게 더 위험하다.

가격이 맞으니까 “이 데이터 소스는 믿을 수 있다”고 가정하게 된다.

근데 다른 필드는 완전히 잘못이다.

“일부가 맞다고 전체를 믿으면” 안 된다.

해결

시가총액과 매출액은 원화 원래 값으로 받아서 수동으로 환율을 변환했다.

배당률이랑 PBR은 yfinance를 아예 안 믿고 네이버 증권에서 직접 가져왔다.

교차 검증을 위해 미국 주식(Micron)도 확인했다.

Micron은 정상이었다.

903억 달러 매출액. 한국과 대만 주식에서만 이 버그가 나타났다.

보안 필터가 자기 스킬을 차단했다

두 번째는 아이러니한 사건이었다.

크론잡이 “보안 위협 패턴에 매칭됐다”며 차단됐다.

원인을 추적해보니, 투자 분석 스킬 본문에 “system prompt override”라는 문자열이 7곳에 들어 있었다.

프롬프트 커스터마이징 문서에서 쓴 용어였다.

보안 필터는 이걸 정규식으로 스캔한다.

“system prompt override”가 “시스템 프롬프트 덮어쓰기 공격”으로 감지된 거다.

근데 실제로는 스킬 문서가 프롬프트 커스터마이징을 설명하고 있었을 뿐이다.

맥락을 모르는 정규식

정규식은 맥락을 모른다.

“system prompt override”가 공격 지시인지, 설명 문서인지 구분하지 못한다.

그냥 문자열 매칭만 한다.

해결은 용어를 바꾸는 거였다.

“system prompt override”를 “PM prompt customization”으로 7곳 전부 바꿨다.

그러니까 필터가 통과됐다.

교훈은 보안 키워드를 스킬 본문에 쓰면 안 된다는 거다.

“system prompt override”, “ignore previous instructions” 같은 보안 위협 용어를 설명 목적으로 써도, 필터가 차단한다.

매칭은 맥락을 안 본다.

휘발성 기반 회복 분석

틈틈이 투자 분석 에이전트의 회복 예측도 점검했다.

에이전트가 삼성전자랑 SK하이닉스의 손익분기 회복을 3~6개월로 예측했다.

추세 기반 선형 예측이었다.

근데 이 주식들의 일간 변동성이 5%가 넘는다.

추세 기반 선형 예측은 고변동성 주식에 안 맞는다.

하루 좋은 날이면 손실의 절반을 회복할 수 있다.

실제로 그날 삼성전자가 5.85% 반등했고 하이닉스가 3.11% 올랐다.

하루 만에 손실의 절반을 회복했다.

3~6개월이 아니라 하루였다.

추세 외삽은 변동성이 낮을 때만 유효하다.

변동성이 높으면 정규분포 기반 회복 확률을 써야 한다.

“하루에 몇 퍼센트 움직이는가”가 “몇 달 걸리는가”보다 더 중요하다.

마무리

내가 이날 배운 핵심은 다음과 같다.

이날의 교훈은 “믿을 수 있는 것과 믿을 수 없는 것을 구분하라”였다.

데이터 소스에서 가격은 맞는데 시가총액은 틀렸다.

“일부가 맞다고 전체를 믿으면” 안 된다.

각 필드를 독립적으로 검증해야 한다.

보안 필터는 문자열은 보는데 맥락은 못 본다.

스킬 문서에 보안 용어를 쓰면, 설명 목적이어도 차단된다.

“매칭은 맥락을 안 본다”는 걸 항상 염두에 둬야 한다.

추세 예측은 변동성이 낮을 때만 유효하다.

변동성이 높으면 다른 방법이 필요하다.

“이 방법이 언제 유효한가”를 먼저 물어야, 잘못된 예측을 피할 수 있다.