코딩관계론

IPO 인사이트 자동화 구축 프로세스 구축기: 뉴스 수집부터 Insights까지 본문

개발/Hot-Stock

IPO 인사이트 자동화 구축 프로세스 구축기: 뉴스 수집부터 Insights까지

개발자_티모 2025. 4. 4. 12:40
반응형

왜 대어 IPO 자동화 프로세스가 필요할까?

IPO(기업공개) 프로세스는 예비심사부터 승인, 청약, 상장까지 여러 단계를 거치며, 중요한 이벤트마다 투자자들의 관심이 쏟아집니다. 특히 시장에서 ‘대어(大魚)’라고 불릴 정도로 규모가 큰 종목은 더욱 주목받죠.
하지만 이런 대어 IPO 종목을 찾고, 그 종목에 연관된 주주나 관련주를 빠르게 파악하며, 시점별로 쏟아지는 뉴스를 정리하기란 쉽지 않습니다.

그래서 저는 대어 IPO에 관한 정보를 자동으로 추적하고, 해당 종목들의 단계별 소식을 인사이트 형태로 바로바로 뽑아내는 자동화 프로세스를 만들어보자는 아이디어를 떠올렸습니다.

이를 위해선 다음 세 가지가 필수적이었습니다.

  1. 대어 종목 식별
  2. 관련주 파악
  3. 뉴스/공시 모니터링 및 반응 평가

처음에는 단순한 키워드 검색과 규칙 기반 파이프라인을 구상했는데, 생각처럼 정확하지 않았고 놓치는 종목도 많았습니다. 결국 저는 **LLM(대형 언어 모델)**을 활용해 문맥과 규모 정보를 함께 분석하고, DART(전자공시) 데이터를 결합해 더 정교한 필터링을 구현해나갔습니다.


1. 대어 IPO 종목을 어떻게 가려낼까?

1) 초기에 맞닥뜨린 문제

가장 먼저 부딪힌 건, **“대어인지 아닌지”**를 어떻게 판별하느냐였습니다.

  • 단순히 “상장예비심사”라는 키워드를 쓰면 수많은 예비심사 종목이 한꺼번에 몰립니다.
  • 기사마다 “대어”라고 쓸 수도, 안 쓸 수도 있고, 다른 표현으로 언급될 수도 있지요.
  • 공모 예정금액을 기준으로 필터링해보려 했는데, 기사나 리포트마다 정보가 누락되거나 잘못된 경우도 있었습니다.

2) LLM 모델로 문맥 추론

해결책LLM(대형 언어 모델)을 활용해 기사의 본문을 분석하고, “이 종목이 실제로 대형 IPO로 주목받고 있는가?”를 묻는 방식이었습니다.

  • 기사 전체 본문을 넘겨 **“이 기사에서 언급되는 종목이 대어인지 여부”**를 참/거짓으로 판단하게 했습니다.
  • 동시에 “현재 IPO 단계가 예비심사인지, 청약 직전인지, 혹은 상장 직후인지” 같은 맥락 정보를 모델에게 추가로 요구했습니다.

이 방식을 도입하자, 단순 키워드만 사용할 때보다 훨씬 정확하게 대형 IPO 종목을 걸러낼 수 있었습니다. 물론 LLM 호출 비용이 걱정되긴 했지만, 정확도가 우선이었기 때문에 초기에 적극적으로 적용해보았죠.


2. 주주명부 조회 & 필터링: 다트 크롤링의 난관

1) 다트(DART)에서 주주명부 뽑아내기

“대어” 후보를 어느 정도 가려낸 뒤에는, 해당 회사의 주주가 누구인지 파악하는 단계가 있었습니다.

  • 다트 전자공시시스템에서 문서를 다운로드해, 주주명부 테이블을 추출하는데 생각보다 까다로웠습니다.
  • 보고서 서식이 조금씩 달라, 주주 명부가 정확히 파싱되지 않는 오류가 나타나곤 했습니다.

문제 해법은 보고서의 표(테이블)를 인식해 “주주명”과 “지분율”을 구분하는 것이었습니다.

  • 보고서마다 미묘한 차이는 있었지만, 대부분의 주주명부가 표 헤더(열 제목) 형태로 되어있어 이 부분만 정확히 잡으면 안정적으로 주주 정보를 가져올 수 있었죠.

3. “스톤브릿지벤처스” 문제: 문자열 매칭의 함정

1) 실패 사례: “스톤브릿지벤처스” vs “스톤브릿지투자사모펀드”

IPO 종목의 주주 회사 이름이 문자열만 다르게 기재되어 매칭이 불가능한 상황이 발생했습니다.

  • 실제로는 동일 회사임에도 불구하고, “스톤브릿지벤처스”와 “스톤브릿지투자사모펀드”처럼 조금씩 달라진 표현이 공시에 등장합니다.
  • 단순히 “포함 문자열”로 찾는 로직이면 “벤처스”와 “투자사모펀드”가 전혀 다르다고 인식해 매칭에 실패하죠.

2) JaroWinklerSimilarity의 도입

여기서 고려한 것이 Levenshtein distanceJaroWinklerSimilarity였는데,

  • 편집 거리는 결과값 범위가 불규칙해 필터링 기준을 세우기 까다로웠습니다.
  • 반면 JaroWinklerSimilarity는 두 문자열의 유사도를 0~1 사이로 계산해주기 때문에 특정 기준점(예: 0.6 이상)을 두고 필터링하기가 편리했습니다.

추가적으로 공통 Prefix 길이가 3자 이상이면 비슷한 기업으로 간주하는 2차 로직도 적용하여, “스톤브릿지벤처스”와 “스톤브릿지투자사모펀드”를 정확히 연관 짓게 만들었습니다.

결과적으로 “스톤브릿지벤처스” 같은 변형 표현이 누락되지 않고 제대로 검색될 수 있었습니다.


4. 이벤트 시점 트래킹과 뉴스 합치기: GPT 비용 최적화

1) 모든 기사를 별도로 GPT에 보내면 생기는 문제

IPO 이벤트가 발생할 때마다 관련 기사가 한꺼번에 몰려옵니다.

  • 예를 들어, 공모가 확정 소식이 뜨면 비슷한 내용의 기사 10~20개가 동시에 나오기도 하죠.
  • 이를 하나하나 GPT 분석에 보내면, 호출 비용이 기하급수적으로 늘어나는 문제가 생깁니다.
 

2) 뉴스 묶음 트래킹으로 비용 줄이기

이 문제를 해결하기 위해, ‘비슷한 기사’ 2~3개를 하나의 뉴스 본문으로 합쳐 GPT에 넘기도록 설계했습니다.

  • 기사 내용이 거의 중복이라면 합쳐서 한 번만 GPT를 호출해도 충분히 문맥이 전달됩니다.
  • 이렇게 하면 GPT 호출 횟수가 대폭 줄어들어 비용을 절감하면서, 여전히 내용 분석의 정확도를 유지할 수 있었습니다.

5. 마무리하며: 도전은 계속된다

이번 대어 IPO 자동화 프로세스를 구축하면서 마주한 핵심 도전은 크게 다음과 같았습니다.

  1. 대어 식별: LLM을 통한 문맥 분석으로, 단순 키워드만으론 해결이 안 되는 종목 ‘가치 판단’을 수행
  2. 주주/관련주 매칭: 다트 주주명부의 불규칙한 문서 구조, 그리고 “스톤브릿지벤처스”처럼 다른 표기를 쓰는 회사를 잡아내는 문제
  3. GPT 비용 최적화: 이벤트 시점마다 쏟아지는 기사를 효율적으로 묶어 분석

이 과정을 통해, 자동화된 프로세스로 대어 종목만 정확히 걸러내고, 연관주 목록을 함께 파악하며, 시점별 뉴스 분석(긍정/부정 이슈 파악 등)까지 한 번에 이뤄낼 수 있었습니다.

 

앞으로는 랭그래프를 통해서 LLM이 자동으로 반복되는 이벤트를 식별하여 매매 프로세스를 구축할 수 있게 만들 것 입니다,

 

지금까지 읽어주셔서 감사드리며, 혹시 궁금하신 점이나 함께 논의하고 싶은 부분이 있다면 언제든 자유롭게 댓글이나 문의로 알려주세요. 앞으로도 더 흥미롭고 유익한 기술 스토리를 전해드리도록 하겠습니다!

참고: Next Stock

더 많은 주식 시장 정보를 한눈에 보고 싶다면, 아래 사이트도 참고해보세요.

https://next-stock.com/

 

Next Stock - 주식 시장을 한눈에!

마켓맵에서 인기 검색어, 핫이슈, 시장 트리 차트까지 모아보세요.

next-stock.com

 

개발 단계부터 실제 운영까지, 모두에게 도움이 되는 투자 정보를 쉽고 빠르게 확인할 수 있는 환경을 만들기 위해, 저 역시 끊임없이 노력 중입니다. 감사합니다!

반응형