그냥 신기한 인공지능 공부 시리즈
CNN이라는 개와 고양이, 파랑과 빨강, 그리고 자동차 번호판의 2,3,4,5 등 숫자와 같은 이미지를 판별하는 신기하고 궁금한 내용을 먼저 기획했지만, 오늘은 소위 말하는 "인공지능으로 주가를 예측한다"는 그 인공지능 중의 하나인 LSTM(Long Short-Term Memory, "장단기 기억")을 이용한 주가전망 기법에 대해 공부를 하려 합니다. 아래 그래프는 빨강 수직선이 그려지면서 거품이 폭발하고 주가가 하락하는 시점을 인공지능이 정확히 예측을 했고, 먼바다의 파도처럼 천천히 움직이던 파동이 빨간색 선 주변에서는 마치 하와이 해변에서 파도타기를 할 때의 파도와 같이 간격이 급격히 좁아지고 높아지는 현상을 보이는데, 이 역시 거품이 폭발을 한다는 예측을 해주고 있다. 이 그래프는 실제로 제가 연구하고 파이썬으로 코딩을 해서 그린 그래프인데, 이런 내용을 금융시장에서의 가격예측이라고 합니다.
다음은 또 다른 모델을 이용해서 삼성전자의 주가를 예측을 한 내용인데, 파동의 폭이 넓었다가 2025년에 들어서서 그 간격이 좁아지고 있음, 주가는 바닥을 향하고 있다는 신호를 주고 있습니다. 이때는 매입신호라고 인식합니다.
이런 식으로 아무 생각 없이 주식투자를 하는 것이 아니라 근거를 가지고 시장을 거시적으로 판단할 근거를 가져야 한다는 것입니다. 자세한 내용이 궁금하시면 제가 이 모델 관련해서 많은 글을 기고한 아고라타임스를 방문하시기 바랍니다. 제가 박사로, 코딩도 20년 경력인데도 6개월이 넘게 걸린 연구인데, 여기에는 물리학이론, 수학, 통계학, 인공지능 등 고급 수준의 이론 등이 많이 들어가 있어서 전체를 이해하는데 많은 시간이 들었던 것 같습니다. Percolation, Izing 등 개별 투자가들이 시장이 붕괴하는 시점에 어떤 행동을 하는 지를 물리학 이론을 가지고 설명한 부분이 압권입니다. 그리고 PINN이라는 물리학이론의 도움으로 완성된 인공지능 기술도 탁월하고요.
그런데 제가 오늘 소개할 모델은 그나마 단순한 장단기기억 모델(LSTM, Long Short-Term Memory)입니다. 오늘은 자세한 내용을 이해한다기보다, 아 "전문가들은 시장에서 이런 걸, 이렇게 사용하는구나"하고 이해하면 저의 학습목표와 일치합니다.
자동차를 운전을 하는 사람과 자동차를 설계/조립/정비하는 사람의 역할이 다르듯이, 여러분은 개발자가 아니고 이용자(운전자)라는 사실을 망각하시면 안 됩니다. 내연기관에서 기름에 압력을 가해서 팽창하고, 폭발하고 그리고 차가 굴러가고 가 아니라, "액셀을 밟고", 깜빡이 넣고, 후진기어 넣고 주차하고, 과속주의 하고 가 본분이라는 거죠. 둘다하다가는 결국 이것도 저것도 할 수 없습니다. 저는 직업이 개발자들이 만든 인공지능모델을 찾아서, 금융이론에 적용하고, 성능도 개선하고 하는 개발자+이용자의 역할을 하는 거고요.
다시 본론으로 가서, LSTM은 시계열(주가 등 Time Series) 데이터 처리에 특화된 딥러닝 모델입니다. 초보자 관점에서 설명하자면, LSTM은 '기억의 문'을 가진 네트워크입니다. 과거 정보를 선택적으로 저장하고, 불필요한 것은 잊어버리는 메커니즘으로, 오랜 기간의 데이터에서 중요한 패턴을 찾습니다.
이번 회차에는 주가를 전망하는 코딩을 하는 것이 아니라, 특히, 숫자들의 패턴 파악, 특정 규칙(등차수열, 피보나치 등) 학습, 그리고 복잡한 패턴(주기성, 비선형성 등) 이해 과정을 중점적으로 다루며, 초보자가 따라갈 수 있도록, LSTM의 학습 메커니즘을 통해 주가의 특정 패턴을 인식의 본질을 밝히는 데 초점을 맞춥니다.
먼저, LSTM은 입력 게이트, 망각 게이트, 출력 게이트로 구성됩니다. 입력 게이트는 새로운 정보를 셀 상태에 추가하고, 망각 게이트는 과거 정보를 얼마나 잊을지 결정하며, 출력 게이트는 최종 결과를 내보냅니다.
소위말하는 Double-top 등 숫자 예측에서 이는 '이전 숫자들의 패턴'을 기억하는 데 핵심적입니다. 예를 들어, 시퀀스 [1,2,3,4,5]를 입력받으면 LSTM은 각 숫자가 이전과 어떻게 연결되는지 분석합니다. 그 결과 다음 숫자는 6이라는 결론에 점차 도달하게 됩니다.
등차수열 [1,2,3,4,5 → 6]에서 모델은 초기 학습에서 무작위 숫자를 하나 선택합니다. 예를 들어 첫 예측이 10을 선택할 수 있지만, 1,2의 차이는 1인데 5와 10은 차이 너무 크다라고 오차를 계산합니다. 이후 50~100번의 학습 후, 모델은 '각 숫자가 이전보다 1 증가'라는 패턴을 학습합니다. 이는 망각 게이트가 불필요한 노이즈를 버리고(가령 오차가 큰 10은 버리고) , 입력 게이트가 +1 규칙에 맞는 숫자만 저장하기 때문입니다 (즉, 1 다음은 2. 2 다음은 3... 5 다음은 6 뭐 이런 식으로요). 결과적으로, [1,2,3,4,5] 입력 시 6을 정확히 예측합니다.
이 과정은 초보자에게 '기억의 연속성'을 보여줍니다 – LSTM은 단순한 계산기가 아니라, 과거를 바탕으로 미래를 추론하는 시스템입니다.
다음으로, '특정 규칙'을 파악하는 단계로 넘어갑니다. 피보나치수열 [1,1,2,3,5,8 → 13]은 더 복잡합니다. 여기서 규칙은 '이전 두 숫자의 합'입니다. 학습 초기, LSTM은 등차수열처럼 이전숫자와 현재의 숫자의 차이만 파악하려 하지만, 실패합니다. 그러나 반복 학습을 통해 셀 상태가 장기 기억을 형성합니다. 예를 들어, 1+1=2를 학습한 후, 이 정보를 유지하며 1+2=3을 이해합니다. 200~300번 학습 후 모델은 전체 계산 규칙을 찾아냅니다.
논리적으로 설명하면: LSTM의 숨겨진 상태(hidden state)가 이전 두 입력을 합산하는 가중치를 최적화합니다. 만약 데이터가 더 많다면(예: [1,1,2,3,5,8,13,21]), 모델은 규칙을 더 견고히 학습합니다. 이는 등차수열(상수 차이)과 피보나치(재귀 합산) 같은 특정 규칙을 점차적으로 파악하는 과정입니다. 초보자는 여기서 '규칙 발견'의 매력을 느낄 수 있습니다 – 모델이 인간처럼 패턴을 '배우는' 느낌입니다.
이제 더 복잡한 패턴으로 확장합니다. 주기성(예: 사인파처럼 반복되는 숫자)이나 비선형성(예: 지수 성장) 패턴은 LSTM의 강점입니다. 주기성 패턴 [1,2,3,2,1 → 2]에서 모델은 초기 학습에서 혼란을 겪지만, 망각 게이트가 장기 주기를 기억하게 합니다. 100번 학습 후, 반복성을 파악해 다음 2를 예측합니다. 비선형 패턴 [1,4,9,16 → 25](제곱 수열)에서는 입력 게이트가 곡선 가능성을 학습합니다.
다음은 LSTM이라는 모델로 실제로 다음 숫자를 예측하는 과정을 보여드립니다.
#라이브러리 준비
import numpy as np
from tensor flow.keras.models import Sequential
from tensor flow.keras.layers import LSTM, Dense
# 데이터 준비: 입력 시퀀스 [1,2,3,4,5], 타깃 6
sequence = np.array([1,2,3,4,5,6])
X = sequence [:-1]. reshape(1, 5, 1) # 입력: 5개 숫자
y = sequence [-1]. reshape(1,1) # 출력: 6
# 모델 구성
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(5, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# 학습 (200번)
model.fit(X, y, epochs=200, verbose=0)
# 예측: [1,2,3,4,5] 입력으로 6 예측
test_input = np.array([1,2,3,4,5]). reshape(1,5,1)
predicted = model.predict(test_input)
print("예측 결과:", predicted [0][0])
200회 학습에 8초 정도가 소요되었고, 우리는 정수만 원하므로 5.999==> 6이 된다.
피보나치의 경우
# 예측: [1,1,2,3,5,8] 입력으로 13 예측
test_input = np.array([1,1,2,3,5,8]). reshape(1,6,1)
predicted = model.predict(test_input)
print("예측 결과:", predicted [0][0]) # 결과: 약 13.0
우리는 정수만 원하므로 12.999995 ==> 13이 된다
결론은 정확하다입니다.
그럼 왜 주가(코인)는 예측이 쉬울까? 어려울까?
주가나 암호화폐 가격 예측은 매력적이지만, 왜 항상 어렵게 느껴질까요? 다음 편은 실제로 LSTM을 사용한 BTC-USD(비트코인-미국달러) 예측 사례를 통해 그 이유를 탐구하겠습니다.