1. 시퀀스 데이터의 이해

* 시퀀스(Sequence) = 순서가 있는 데이터 즉, 데이터의 ‘순서’나 ‘시간 흐름’이 의미를 가지는 데이터
- 순서를 바꾸면 의미가 달라짐
- 앞뒤 관계(Context)가 중요함
(예시)
- 주가 데이터: 오늘, 내일 순서가 바뀌면 의미가 완전히 달라짐
- 문장: “나는 밥을 먹었다.” vs “밥을 나는 먹었다.” (순서 바뀌면 어색!)
2. 인공지능(NLP, 즉 언어 처리)의 핵심 모델 (각 모델 특징이 뭐고 왜 이렇게 진화했는지 정도 파악 필요)
RNN - LSTM - Gru - seq3seq - Attention - Transformer (BERT/GPT)

* Transformer (BERT/GPT) 중요! 왜?
- 병렬 학습 가능 → RNN처럼 순서대로 안 읽고 동시에 학습 가능
- 문맥 이해력 우수 → Attention으로 단어 간 관계를 정교하게 반영
- 대규모 사전학습(Pre-training) → 거대한 언어 지식 축적
- 확장성 → BERT, GPT, T5, LLaMA, Claude 등으로 발전
- 현대 AI의 기반 → ChatGPT, Google Gemini, Claude, LLaMA 등 모두 Transformer 기반
* Transformer 핵심 구조

이 구조가 나중에 BERT와 GPT로 각각 발전
* BERT(독해력, 전체문맥 파악 우수) vs GPT 차이 (작문 우수)


지금 나오는 모델들은 거의 Transfomer 기반의 모델들이다.
허깅페이스에 Transfomer 기반의 모델들이 있으니 사용 가능!
3. 시계열 데이터



* 다양한 언어모델



1. RNN : 짧은 문장, 짧은 글은 기억 잘 하는데 문장 길이가 길어지면 이전의 정보를 기억 못함.(장기 의존성 문제)
2. LSTM : 장기 의존성 문제 해결하기 위해 등장, 모델이 복잡해서 학습하는 시간이 증가됨
3. Gru : LSTM의 구조를 조금 더 간편하게 개선한 모델
----- 1~3 모델은 순차적으로 단어 처리, 모든 문장을 다 학습해야 됐었음(불필요한 정보도 전부) -----
4. Attention : 필요한 부분만 더 많은 가중치를 주어서 중요한 정보를 효과적으로 추출할 수 있음
5. Transformer : 병렬로 처리해서 중요한 단어만 캐치함으로써 속도가 엄청 빨라짐
- 인코더, 디코더 구조
6. 대규모 언어모델(Large Language Model) - gpt
- 뭐가 Large? 파라미터 수가 굉장히 많음! - 많고 다양한 데이터를 학습
3-1. RNN




3-2. LSTM






* 단계별 LSTM
| Forget Gate (망각 게이트) | 과거 정보를 잊을지 말지 결정 | “이건 이제 필요 없으니 지워야지.” |
| Input Gate (입력 게이트) | 새 정보를 얼마나 기억할지 결정 | “이건 중요한 정보니까 저장해둬야지.” |
| Cell State (셀 상태) | 기억이 실제로 저장되는 공간 | “기억 창고” |
| Output Gate (출력 게이트) | 현재 시점에서 어떤 정보를 다음으로 보낼지 결정 | “지금은 이걸 말해야겠다.” |
1. Forget Gate (망각 단계)
- 수식:ft=σ(Wf[ht−1,xt]+bf)f_t = \sigma(W_f[h_{t-1}, x_t] + b_f)
- 역할:
이전 기억 중 얼마나 잊을지 결정함. - Sigmoid(σ) 결과가 0~1 사이의 값 →
- 0 → 완전히 잊음
- 1 → 완전히 유지
- 즉, 과거 정보 중 불필요한 것은 지움.
🧠 예: “지난 문장 내용은 이제 중요하지 않으니 잊자!”
2. Input Gate (입력 단계)
- 수식:it=σ(Wi[ht−1,xt]+bi)i_t = \sigma(W_i[h_{t-1}, x_t] + b_i) C~t=tanh(WC[ht−1,xt]+bC)\tilde{C}_t = \tanh(W_C[h_{t-1}, x_t] + b_C)
- 역할:
새로 들어온 정보 중 얼마나 기억할지 결정함. - Sigmoid로 “기억할 양” 결정, tanh로 “정보 내용” 생성.
- 두 값을 합쳐서 Cell state에 추가할 준비를 함.
🧠 예: “이 문장에 나오는 단어는 중요하니까 기억창고에 저장해야지.”
3. Cell State 업데이트 (기억 저장 단계)
- 수식:Ct=ft∗Ct−1+it∗C~tC_t = f_t * C_{t-1} + i_t * \tilde{C}_t
- 역할:
이전 기억(C_{t-1}) 중 유지할 부분 + 새로 추가할 기억(\tilde{C}_t)을 합침. - 즉, 오래된 기억 중 필요한 것만 남기고 새 정보 추가.
🧠 예: “어제 배운 건 남기고, 오늘 새로 들은 건 덧붙이자.”
4. Output Gate (출력 단계)
- 수식:ot=σ(Wo[ht−1,xt]+bo)o_t = \sigma(W_o[h_{t-1}, x_t] + b_o) ht=ot∗tanh(Ct)h_t = o_t * \tanh(C_t)
- 역할:
최종적으로 어떤 정보를 밖으로 내보낼지(출력) 결정. - tanh로 현재 기억(C_t)을 정리하고, Sigmoid(o_t)가 “얼마나 보여줄지” 정함.🧠 예: “이 기억은 지금 대화에 필요하니까 말하자!”
5. 정리: LSTM의 정보 흐름
| 입력 (x_t) ↓ Forget Gate → 과거 중 버릴 정보 선택 ↓ Input Gate → 새로운 정보 중 기억할 것 선택 ↓ Cell State → 기억창고 업데이트 ↓ Output Gate → 지금 꺼낼 정보 결정 ↓ 출력 (h_t) |
3-3. GRU

----- 여기까지 RNN 기반 모델 -----
3-4. Attention



1. Attention이란?
문장을 처리할 때, 모든 단어를 똑같이 보는 게 아니라, 지금 중요한 단어에 ‘집중(Attention)’하는 메커니즘
(예시) “나는 파리에 여행을 갔다.”
- → “파리”라는 단어를 볼 때는 앞의 “여행”이나 “갔다”와의 관계가 중요
→ 모델이 이 중요한 단어들에 집중하게 해주는 게 바로 Attention
2. 왜 필요할까?
RNN이나 LSTM은 문장을 순서대로 읽기 때문에 문장이 길어질수록 앞쪽 단어의 의미를 잊어버림.
그래서 긴 문장에서는 문맥을 잘 이해하지 못함.
하지만 Attention은 “필요할 때마다 전체 문장을 다시 바라보고, 중요한 부분에 집중” 할 수 있기 때문에 긴 문장도 잘 처리함
3. 단계별 작동 원리
| ① Query, Key, Value 생성 | 각 단어를 세 가지 벡터로 변환 | “질문(Q)”, “단서(K)”, “정보(V)” |
| ② 가중치 계산 (중요도 판단) | 현재 단어(Query)가 다른 단어(Key)와 얼마나 관련 있는지 계산 | “지금 단어가 누구한테 집중해야 할까?” |
| ③ 가중 평균 (합치기) | 중요한 단어의 Value(정보)를 더 많이 반영 | “중요한 단어일수록 더 크게 반영해 기억” |
| ④ Context Vector 생성 | 문맥이 반영된 최종 요약 벡터 | “필요한 단어 정보만 모은 문맥 요약” |
| ⑤ 최종 출력 (Decoder) | 이 문맥(context)을 이용해 다음 단어 예측 | “이 문맥이라면 다음엔 이런 단어가 오겠네!” |
4. 수학적으로 보면
(복잡해 보이지만 실제로는 ‘중요도 계산 → 가중합’)
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
- QKTQK^T: Query와 Key의 유사도 계산 (얼마나 연관 있는가)
- softmax: 유사도를 0~1 사이로 변환해 중요도 확률로 만듦
- VV: 중요한 단어일수록 더 큰 비중으로 정보(Value)를 반영
5. 그림 이해
입력 문장 (인코더) → 각 단어마다 Q, K, V 생성 → “지금 단어가 어떤 단어에 집중할지” 계산 (가중치) → 중요한 단어들의 정보를 모아 context vector 생성 → 디코더가 이 context vector를 참고해서 번역·생성
즉, “Attention”은 문장을 처리할 때 모든 단어의 관계를 동시에 계산해서 중요한 단어 중심으로 문맥(context)을 이해하는 구조
6. 핵심 정리
| Attention 핵심 | 모든 단어 중에서 “중요한 단어”에 집중 |
| 기술적 포인트 | Q, K, V 벡터로 단어 간 관련성 계산 |
| 결과 | 문맥(context vector)을 만들어 다음 단어 예측 |
| 효과 | RNN보다 훨씬 빠르고, 긴 문장에서도 문맥 유지 가능 |
| 응용 | Transformer, BERT, GPT 등 모든 최신 언어모델의 핵심 |
Attention은 문장 전체를 다시 바라보면서“지금 단어와 관련이 깊은 단어”에 집중(가중치 부여) 하는 기술
→ 이 원리가 BERT, GPT, Transformer의 핵심 엔진
(실습 01_시계열 데이터 다루기)

- 국내 주식은? https://finance.naver.com/ 참고


* Pytoch 설치 방법 Get Started
Get Started
Set up PyTorch easily with local installation or supported cloud platforms.
pytorch.org


(실습 02_LSTM 주가예측)
* 목표: 삼성전자(티커 005930.KS)의 종가(Close) 시계열로 다음 날 주가를 예측하고, 이어서 미래 30일을 순차적으로 예측하는 LSTM 모델을 학습·평가·시각화.
* 흐름:
- 데이터 수집: yfinance로 최근 5년 주가 다운로드 (셀 4)
- 특징 선택 & 스케일링: 종가만 추출 → MinMaxScaler로 [0,1] 정규화 (셀 8–9)
- 시퀀스 만들기: 최근 30일을 입력(X)으로, 그 다음 날을 정답(y)으로 생성 (셀 10)
- 데이터 분할 & 텐서 변환 & 로더: 8:2 분할 → torch.tensor → DataLoader (셀 11–13)
- 모델 정의: nn.LSTM + nn.Linear 한 층 구조 (셀 15–17)
- 학습: MSELoss, Adam, epochs=30으로 학습하고 loss 기록/그래프 (셀 19–20)
- 예측/복원/시각화: 테스트셋 예측 → 역스케일링 → 실제값 vs 예측값 플롯 (셀 22–25)
- 미래예측: 마지막 시퀀스부터 하나 예측→뒤에 붙이기를 30번 반복 → 그래프 (셀 27–29)
- 데이터 흐름으로 읽기
- 입력: 30일치 종가 데이터
- 처리: LSTM이 과거 30일의 패턴을 학습
- 출력: 31일째의 예측 종가
- 평가: 실제 종가와 비교해 MSE 계산
- 시각화: 예측 곡선이 실제 곡선과 얼마나 비슷한가
- 기획자가 봐야 할 질문
- 왜 종가만 썼을까? → 다른 변수 추가 가능성?
- 예측 결과는 얼마나 신뢰할 수 있을까? → 데이터 기간, 오차 범위 확인
- 이 모델로 어떤 비즈니스 인사이트를 낼 수 있을까?
- 왜 필요한가?

- 이걸 서비스로 만든다면?
ex) AI 주가 알림 서비스라면 어떤 기능을 추가할까?
- 예측 오차 10% 이하 구간만 사용자에게 신뢰도 표시
- 외부 뉴스 감성 점수와 LSTM 예측을 결합
- 30일 이상 추세 변동률 기반 위험 알림
++ (참고) https://smithery.ai/server/@KISOpenAPI/kis-code-assistant-mcp
한국투자 코딩도우미 MCP | Smithery
한국투자 코딩도우미 MCP (KIS Code Assistant MCP) 한국투자 코딩도우미 MCP는 한국투자증권의 수많은 Open API 중에서 자연어 검색으로 관련 API를 찾고, 호출 예제(파라미터 포함)까지 자동 구성해주는 MC
smithery.ai
(실습 03_prophet)
- 목표:
LSTM보다 더 단순하고 직관적인 Facebook Prophet 모델로 삼성전자 주가의 미래 예측 그래프를 생성 - 전체 흐름:
1. yfinance로 삼성전자 주가 데이터 다운로드
2. Prophet이 이해할 수 있는 형태로 컬럼명 변경 (Date → ds, Close → y)
3. Prophet 모델 정의 및 학습 (m.fit())
4. 미래 날짜 프레임 생성 (make_future_dataframe)
5. 예측 결과 도출 (predict())
6. 시각화 (trend + forecast plot)
LSTM은 “복잡하지만 패턴을 깊게 학습”하는 모델, Prophet은 “간단하지만 해석 가능한 트렌드 분석용” 모델
Prophet 모델은 LSTM보다 단순하지만, 해석력이 훨씬 뛰어남
즉, “왜 예측이 이렇게 나왔는가”를 설명하기 좋기 때문에 데이터 기반 의사결정이나 리포트형 서비스에서 특히 유용
- 장점(기획적 관점)
| 해석 용이성 | 그래프가 “추세 / 주기 / 불확실성”을 분리해 보여줌 |
| 빠른 학습 | 코드 몇 줄로 완성 가능, 실험용 프로토타입에 최적 |
| 비기술자 친화적 | 통계적 직관 기반이라 데이터 기획자가 이해하기 쉬움 |
| 외부 요인 반영 가능 | 예: add_regressor('거래량'), add_country_holidays('KR') 추가로 현실 요인 반영 가능 |
- 한계
| 비선형성 약함 | 급격한 폭등·폭락 같은 예외적 이벤트 예측은 어려움 |
| 입력 피처 제한 | 기본은 날짜(ds)와 값(y)만 처리 — 멀티피처 학습 불가 |
| 딥러닝 대비 단기 예측 | 패턴을 일반화하기엔 LSTM보다 단순함 |
- 서비스 기획 아이디어로 확장하면?
| Prophet 기능 | 서비스 기능으로 전환 |
| 미래 예측 | “다음 달 주가 트렌드 리포트” 자동 발행 |
| 주기 분석 | “주 단위 변동 리듬” 시각화 → 투자 타이밍 제안 |
| 휴일 영향 | “공휴일 전후 주가 변동 경향 분석” 기능 |
| 불확실성 구간 | “신뢰도 시각화(예측 불확실성 표시)”로 사용자 신뢰 확보 |
'KPMG Future Academy 6기' 카테고리의 다른 글
| (삼정 KPMG future academy 6기 수업) - 16. 추천 시스템 (0) | 2025.10.14 |
|---|---|
| (삼정 KPMG future academy 6기 수업) - 15_2. 시퀀스 모델(언어 모델) (0) | 2025.10.14 |
| (삼정 KPMG future academy 6기 수업) - Mediapipe (0) | 2025.09.26 |
| (삼정 KPMG future academy 6기 수업) - OCR (0) | 2025.09.25 |
| (삼정 KPMG future academy 6기 수업) - OpenCV (0) | 2025.09.25 |