Forge Fate
퀀트·데이터 연구

LLM과 함께 퀀트 리서치하는 안전한 방법: 질문부터 검증과 연구 기록까지

약 11분

근거와 검증 범위 — 연구 절차·기록 방식

질문 설정부터 원자료 대조·코드 검증·연구 기록까지의 절차를 설명합니다. LLM의 제안은 검증 결과와 구분하며, 실주문 구현이나 이 절차의 생산성 향상을 측정한 실험은 다루지 않습니다.

10편에서는 LLM을 투자 판단의 대리인이 아니라 원문·원자료와 대조할 수 있는 초안과 검증 보조로 두는 경계를 다뤘다. 이번 글에서는 그 경계를 실제 연구 순서로 바꾼다.

이 글은 교육·연구 목적의 절차 설명이며, 투자 조언이나 종목 추천이 아니다. 실주문 구현도 다루지 않는다.

이 글에서는 LLM에게 질문을 나눠 조사 항목·반증 조건·코드 테스트 후보의 초안을 맡기고, 사람은 이를 검토해 확정한다. 하지만 제안 자체가 근거나 검증 결과는 아니다. AI의 역할, 사람의 감독, 검증 결과와 남은 위험을 문서화하는 방식은 AI 위험관리의 기본 원칙과 맞닿아 있다. [S1] [S2]

핵심은 다음 세 축이다.

질문과 근거 → 코드와 시간 검증 → 실행과 기록

이 흐름에서 LLM은 초안을 만들고, 사람은 사실·수치·코드·출처를 확정한다.

연구의 전체 흐름을 먼저 고정하기

안전한 리서치는 좋은 결과를 빨리 찾는 과정보다, 각 단계의 입력과 통과 조건을 분명히 하는 과정에 가깝다.

단계주 담당자입력산출물다음 단계로 갈 조건검증 실패 시
질문 정의사람관찰 대상, 기간, 제약완성된 질문·반증 조건시점·대상·비용·판정 기준이 문장으로 정해짐질문 정의로 돌아감
조사 항목 제안LLM, 사람 검토질문과 제약원문·변수·반증 후보 목록사람이 확인 목록을 확정함질문 또는 조사 항목 수정
자료 확보사람확인 목록원문 위치, 원자료, 접근일, 데이터 설명출처·기간·가격 정의를 대조함자료 확보로 돌아감
코드 초안LLM, 사람 검토확정 규칙과 데이터 사전계산 함수·테스트 초안규칙과 코드의 대응을 사람이 읽어 확인함규칙 또는 코드 수정
시간·작은 표본 검증사람코드와 소규모 예테스트 결과·시점 대조신호·레이블·거래 시점이 분리됨코드 또는 자료 단계로 돌아감
백테스트 실행사람고정한 규칙·기간·비용결과와 중간 산출물사전 규칙대로 실행됐음실행 설정 또는 이전 단계 재검토
이상 징후 검토LLM 후보 제시, 사람 판정결과표·로그·코드 일부재확인 후보사람이 원자료·코드·출처로 대조함원인 단계로 돌아감
기록·결론 보류사람성공·실패·중단을 포함한 실행실험 일지한계와 변경 이력이 함께 적힘변경을 새 실험으로 등록

이 구조는 LLM의 유창한 설명이 검증 단계를 건너뛰지 못하게 한다. 특히 시간적 누수, 전처리 누수, 학습·테스트의 비독립성은 낙관적인 결론과 재현 실패로 이어질 수 있으므로 별도 점검이 필요하다. [S3]

가상 사례: “수익이 날까?”보다 “시간 규칙이 맞는가?”

아래는 실제 ETF, 시장 데이터, 실행 결과가 아닌 가상 교육용 사례다. 가상 ETF 6개의 일별 종가와 시가가 있고, 거래일 (t) 종가까지 계산한 5거래일 수익률 신호를 다음 거래일 시가에 가상 적용한다고 가정한다. 비용 가정은 실행 전에 정하고, 결과를 본 뒤 바꾸지 않는다.

연구 질문은 다음처럼 빈칸 없이 쓴다.

“가상 ETF 6개에서 각 거래일 종가까지 계산한 5거래일 수익률 신호로 다음 거래일 시가에 가상 포지션을 정할 때, 신호 확정 시각·보유 수익률 구간·비용 가정이 서로 섞이지 않도록 계산할 수 있는가?”

반증 조건도 질문과 함께 둔다.

  1. 신호 계산에 다음 거래일 시가나 그 이후 가격이 들어가면 규칙을 기각한다.
  2. 신호가 확정되기 전 가격으로 체결한 것처럼 계산되면 규칙을 기각한다.
  3. 비용, 가격 정의, 결측값 처리 기준을 실행 전에 고정하지 못하면 결과 해석을 중단한다.
  4. 테스트 구간을 본 뒤 규칙·전처리·파라미터를 바꾸면 기존 결론을 유지하지 않고 새 실험으로 기록한다.

좋은 질문은 기대 수익을 단정하는 문장이 아니다. 어떤 정보를 언제 썼는지와 무엇이 틀렸음을 뜻하는지를 함께 적은 문장이다. [S3]

질문과 근거: LLM은 조사 목록을 만들고, 사람은 원문을 확보한다

사람은 먼저 대상, 관측 단위, 가격 정의, 데이터 기간, 접근일, 비용 가정, 기준선과 기각 조건을 확정한다. 가상 사례라면 “종가로 신호를 계산하고 다음 거래일 시가를 가상 체결 시점으로 쓴다”까지 명시해야 한다.

LLM에는 전략 추천을 요청하기보다 다음처럼 요청한다.

“아래 질문을 검증하려면 필요한 데이터 열, 원문에서 확인할 정의, 누수 가능성, 반증 조건을 구분해 제안하라. 확인할 수 없는 내용은 ‘확인 불가’로 표시하라.”

그 뒤 사람은 외부 사실을 직접 출처와 원문 위치에서 확인하고, 숫자를 원자료와 계산 코드로 대조한다. 발표·거시 자료는 수정·갱신될 수 있으므로 당시 이용 가능했던 데이터 빈티지와 접근일을 함께 보존해야 한다. [S5] 일반 입력의 스냅샷·접근일·기간·가격 정의를 남기는 일은 계산 연구의 재현성을 위한 보수적 기록 절차다. [S5] [S6]

자료 정의가 모호하거나 원문 위치를 찾지 못했다면 백테스트로 넘어가지 않는다. 이때는 LLM 답변을 보완하는 것이 아니라 자료 확보 단계로 되돌아간다.

코드와 시간 검증: 성과보다 한 행 이동을 먼저 확인한다

LLM에는 확정한 데이터 사전과 시간 규칙을 주고 코드 초안을 요청한다. 첫 목적은 성과를 보이는 것이 아니라, 신호와 포지션의 시점이 한 행 이동했는지 확인하는 것이다.

python
import pandas as pdsignal = pd.Series(    [False, True],    index=pd.to_datetime(["2026-01-05", "2026-01-06"]))position_at_open = signal.shift(1)assert position_at_open.loc["2026-01-06"] == False

이 예에서 1월 6일 시가의 포지션은 1월 5일 종가까지 확정된 신호만 사용한다. 다만 이 테스트는 한 행 이동 규칙 하나만 검사한다. 통과했다고 해서 전체 코드에 미래 정보가 없다고 결론 내릴 수는 없다.

확인 대상가상 사례의 시점확인 질문
신호 확정거래일 (t) 종가 이후계산에 (t) 이후 가격이 들어가지 않았는가?
레이블(이후 결과값)·보유 수익률(t+1) 시가 이후의 정의된 구간신호와 결과값이 같은 미래 정보를 공유하지 않는가?
가상 체결(t+1) 시가신호 확정 전 체결로 처리하지 않았는가?
전처리 적합학습 구간 안표준화·결측값 처리·특성 선택이 테스트 구간을 보지 않았는가?
분할날짜 단위같은 날짜의 ETF 행이 학습·테스트에 흩어지지 않았는가?

첫 행 결측값, 마지막 행의 미실현 수익률, 날짜 오름차순, 휴장일과 결측값 처리도 별도 테스트 대상이다. 여기서 레이블은 신호가 나온 뒤 실제로 관측되는 결과값을 뜻하므로, 신호와 같은 시점의 정보로 만들면 안 된다. 전처리는 학습창에서만 적합하고, 테스트 구간은 최초 평가 뒤 규칙을 고치는 근거로 재사용하지 않는다. 이런 정보 경계가 무너지면 누수가 생길 수 있다. [S3]

같은 날짜의 ETF 패널을 날짜 단위로 함께 분할하는 것은 시간적 누수와 비독립성 원칙을 ETF 패널에 보수적으로 적용한 실무적 추론이다. 이 규칙을 ETF 패널에서 직접 검증한 원 논문 근거는 이번 연구 범위에서 확인하지 못했다.

실행과 기록: 백테스트는 결과를 고르는 단계가 아니다

백테스트 직전에는 데이터 스냅샷과 해시, 접근일과 기간, 종가·시가·수정주가 같은 가격 정의, 비용 가정을 고정한다. 이어 코드 버전, 패키지 버전, 파라미터, 중간 산출물, 난수 시드도 남긴다. 계산 연구에서는 입력·파라미터·코드·외부 프로그램 버전·중간 결과·시드를 기록해야 결과가 만들어진 과정을 다시 검토할 수 있다. [S6]

LLM을 다시 쓴다면 결과 해석을 맡기기보다 이상 징후 후보를 좁히는 역할이 적절하다.

“아래 결과표와 실행 로그에서 재확인이 필요한 날짜, 결측값 처리 차이, 비용 적용 누락 가능성, 예상 밖의 급변 구간을 후보로만 표시하라. 원인을 확정하거나 성과를 해석하지 말라.”

사람은 후보별로 결과표 수치를 원자료와 코드로 재계산하고, 해당 날짜의 가격 정의와 결측값 처리를 확인한다. 이어 코드 버전과 실행 환경이 일지와 같은지, 채택한 사실이 원문에서 어떤 맥락에 있었는지 다시 확인한다.

탐색한 전략·파라미터·프롬프트 후보가 많았다면 가장 좋아 보이는 결과만 남기지 않는다. 여러 전략·파라미터 조합을 반복 탐색한 뒤 가장 좋아 보이는 결과만 채택하면 선택 편향과 백테스트 과적합 위험이 생길 수 있다. [S4] 프롬프트 후보, 후보 수·탐색 횟수, 실패한 시도와 중단 이유의 보존은 [S4] [S6] [S7]에 근거한 보수적 기록 설계다.

실패도 남기고, 바꾸면 새 실험으로 등록한다

연구 일지에는 질문과 반증 조건, 데이터 스냅샷·해시·접근일·기간·가격 정의, 코드·패키지 버전·파라미터·중간 산출물·시드를 남긴다. LLM을 사용했다면 모델 식별자, 프롬프트, 요청 설정, 실제 입출력, 실행 시각도 함께 보존한다.

모델과 시드를 고정해도 LLM 응답이 완전히 재현된다고 보장할 수는 없다. 계산 환경과 연산 순서 등의 영향으로 비결정성이 나타날 수 있으므로, 실제 입출력과 실행 맥락까지 기록하는 편이 안전하다. [S7]

질문, 데이터, 가격 정의, 분할, 전처리, 비용, 파라미터, 프롬프트 중 하나라도 바꾸면 수정본으로 덮어쓰지 않고 새 실험으로 기록한다. 데이터 해시, 프롬프트 전문, 후보·탐색 횟수, 실패 사유를 모두 요구하는 단일 표준이 이번 연구 범위에서 확인된 것은 아니다. 이는 선택 편향, 재현성 부족, LLM 비결정성에 대응하기 위한 보수적 기록 설계다. [S4] [S6] [S7]

연구 환경과 주문 환경을 분리한다

이 글의 가상 사례와 백테스트는 연구 환경에만 머문다. 브로커 연결, 주문 구현, 자동 주문 코드는 범위에서 제외한다.

실제 주문이 별도로 존재한다면, 근거·수치·코드·출처를 사람이 검토한 뒤 명시적으로 승인하는 절차를 교육용 안전 경계로 둘 수 있다. 시장접근 주문의 자동화 오류는 빠르게 누적·전파될 수 있어 위험 통제와 검토가 중요하다는 규제 맥락이 있다. [S8] 다만 이 자료는 미국 브로커딜러 규칙의 직원 해석이며, 개인 투자자에게 사람 승인을 법적으로 의무화하는 근거는 아니다. [S8]

작은 연구 질문 하나를 골라 질문, 반증 조건, 데이터 정의, 한 행 이동 테스트, 중단 이유를 같은 기록에 남겨 보자. LLM이 실제 연구 시간을 줄였는지, 오류를 더 잘 발견했는지, 수익률을 높였는지는 이번 연구 범위에서 측정하지 않았다. 다음 12편에서는 생산성, 오류 발견, 시간순 검증, 비용 후 경제성, 재현성이라는 조건으로 AI의 효용을 어떻게 평가할지 살핀다.

Sources

오류 제보·의견 보내기

글 제목과 주소가 포함된 메일 초안을 엽니다. 내용과 받는 사람을 확인한 뒤 보내주세요.

받는 사람: [email protected]

메일 앱에서 작성

메일 앱이 열리지 않으면 아래 내용을 복사해 평소 쓰는 이메일에 붙여 넣으세요.

문의 안내